diff --git a/.changeset/tricky-feet-doubt.md b/.changeset/tricky-feet-doubt.md new file mode 100644 index 0000000..60ceea3 --- /dev/null +++ b/.changeset/tricky-feet-doubt.md @@ -0,0 +1,5 @@ +--- +'@nextlint/svelte': patch +--- + +Fix didnt respect image plugin options diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 6afadc3..747a2b3 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -30,8 +30,8 @@ "!dist/**/*.spec.*" ], "peerDependencies": { - "svelte": "*", - "shikiji": "0.9.19" + "shikiji": "0.9.19", + "svelte": "*" }, "dependencies": { "@floating-ui/dom": "^1.5.3", diff --git a/packages/svelte/src/lib/Editor.svelte b/packages/svelte/src/lib/Editor.svelte index 274472b..6f59d38 100644 --- a/packages/svelte/src/lib/Editor.svelte +++ b/packages/svelte/src/lib/Editor.svelte @@ -1,6 +1,6 @@
- - - - - - diff --git a/packages/svelte/src/lib/components/BubbleMenu/BubbleMenu.svelte b/packages/svelte/src/lib/components/BubbleMenu/BubbleMenu.svelte index 4bb77ee..9ef9c96 100644 --- a/packages/svelte/src/lib/components/BubbleMenu/BubbleMenu.svelte +++ b/packages/svelte/src/lib/components/BubbleMenu/BubbleMenu.svelte @@ -32,7 +32,12 @@ const locked = createLockScrollStore(); - const IGNORE_BLOCK_MENU = ['figure', 'NextlintCodeBlock']; + const IGNORE_BLOCK_MENU = [ + 'figure', + 'NextlintCodeBlock', + 'selectImage', + 'doc' + ]; $: visibleNode = (() => { const resolver = $editor.state.selection.$from; @@ -53,7 +58,6 @@ } return node; })(); - console.log('visiblEnode', visibleNode); $: { locked.set(!!visibleNode); } @@ -96,6 +100,8 @@ $editor!.off('selectionUpdate', updateBubbleState); locked.set(false); }); + $: { + } diff --git a/packages/svelte/src/lib/node-view/SvelteNodeViewRenderer.ts b/packages/svelte/src/lib/node-view/SvelteNodeViewRenderer.ts index 258d3f8..f42973d 100644 --- a/packages/svelte/src/lib/node-view/SvelteNodeViewRenderer.ts +++ b/packages/svelte/src/lib/node-view/SvelteNodeViewRenderer.ts @@ -6,14 +6,15 @@ import { NodeView, type Editor, type NodeViewProps, - type NodeViewRendererProps + type NodeViewRendererProps, + type NodeViewRendererOptions as TNodeViewRendererOptions } from '@tiptap/core'; -import {writable, type Writable} from 'svelte/store'; +import {get, writable, type Writable} from 'svelte/store'; import {SvelteRenderer} from './SvelteRenderer'; -class SvelteNodeView +export class SvelteNodeView extends NodeView implements ProseMirrorNodeView { @@ -21,10 +22,13 @@ class SvelteNodeView store!: Writable; constructor( - nodeViewOptions: NodeViewRendererOptions, + readonly options: NodeViewRendererOptions, props: NodeViewRendererProps ) { - super(nodeViewOptions.component, props); + super(options.component, props, { + stopEvent: options.stopEvent || null, + ignoreMutation: options.ignoreMutation || null + }); this.store = writable({ editor: this.editor, node: this.node, @@ -36,7 +40,14 @@ class SvelteNodeView deleteNode: () => this.deleteNode() }); - this.renderer = new SvelteRenderer(nodeViewOptions, this.store); + this.renderer = new SvelteRenderer( + { + component: options.component, + contentAs: options.contentAs, + domAs: options.domAs + }, + this.store + ); } override get dom() { @@ -61,27 +72,35 @@ class SvelteNodeView return true; } - selectNode() { + selectNode = () => { this.store.update(store => { store.selected = true; return store; }); - } + }; - deselectNode() { + deselectNode = () => { this.store.update(store => { store.selected = false; return store; }); - } + }; + + toggleNodeSelection = () => { + if (get(this.store).selected) { + this.deselectNode(); + return; + } + return this.selectNode(); + }; destroy() { - console.log('destroy'); this.renderer.destroy(); } } -export interface NodeViewRendererOptions { +export interface NodeViewRendererOptions + extends Partial { component: ComponentType; contentAs?: string; domAs?: string; diff --git a/packages/svelte/src/lib/node-view/SvelteRenderer.ts b/packages/svelte/src/lib/node-view/SvelteRenderer.ts index c6f9447..c983ea8 100644 --- a/packages/svelte/src/lib/node-view/SvelteRenderer.ts +++ b/packages/svelte/src/lib/node-view/SvelteRenderer.ts @@ -26,14 +26,15 @@ export class SvelteRenderer { this.context = { props, contentRef: (element: HTMLElement) => { - element.setAttribute('data-node-view-content', ''); + element.setAttribute('data-node-view-content', 'true'); + element.style.whiteSpace = 'inherit'; this.contentElement = element; } }; // Create dom node this.element = document.createElement(domAs || 'div'); - this.element.setAttribute('data-node-view-wrapper', ''); + this.element.setAttribute('data-node-view-root', 'true'); this.component = new Component({ target: this.element, diff --git a/packages/svelte/src/lib/plugins/figure/Figure.svelte b/packages/svelte/src/lib/plugins/figure/Figure.svelte index dee83eb..27d5104 100644 --- a/packages/svelte/src/lib/plugins/figure/Figure.svelte +++ b/packages/svelte/src/lib/plugins/figure/Figure.svelte @@ -1,17 +1,20 @@ @@ -20,18 +23,57 @@ data-node-type="figure" data-align={attrs.direction} style="position:relative;" - class="figure" - class:selected + class="relative" > + {#if selected} +
+
+ + +
+ +
+
+ {/if} {attrs.alt} - {node.textContent} +
+ {node.textContent || 'description...'} +