@storyblok/svelte 6.1.10 → 7.0.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 (30) hide show
  1. package/dist/StoryblokComponent.svelte +11 -9
  2. package/dist/StoryblokComponent.svelte.d.ts +26 -10
  3. package/dist/StoryblokRichText.svelte +14 -0
  4. package/dist/StoryblokRichText.svelte.d.ts +8 -0
  5. package/dist/index.d.ts +5 -1
  6. package/dist/index.js +4 -1
  7. package/dist/richtext/ElementTag.svelte +27 -0
  8. package/dist/richtext/ElementTag.svelte.d.ts +9 -0
  9. package/dist/richtext/RenderChildren.svelte +23 -0
  10. package/dist/richtext/RenderChildren.svelte.d.ts +9 -0
  11. package/dist/richtext/RenderImage.svelte +27 -0
  12. package/dist/richtext/RenderImage.svelte.d.ts +12 -0
  13. package/dist/richtext/RenderLinkGroup.svelte +26 -0
  14. package/dist/richtext/RenderLinkGroup.svelte.d.ts +12 -0
  15. package/dist/richtext/RenderLinkInner.svelte +19 -0
  16. package/dist/richtext/RenderLinkInner.svelte.d.ts +9 -0
  17. package/dist/richtext/RenderNode.svelte +49 -0
  18. package/dist/richtext/RenderNode.svelte.d.ts +9 -0
  19. package/dist/richtext/RenderStaticChildren.svelte +25 -0
  20. package/dist/richtext/RenderStaticChildren.svelte.d.ts +11 -0
  21. package/dist/richtext/RenderStaticStructure.svelte +37 -0
  22. package/dist/richtext/RenderStaticStructure.svelte.d.ts +12 -0
  23. package/dist/richtext/RenderTable.svelte +26 -0
  24. package/dist/richtext/RenderTable.svelte.d.ts +11 -0
  25. package/dist/richtext/RenderTextNodeWithMarks.svelte +34 -0
  26. package/dist/richtext/RenderTextNodeWithMarks.svelte.d.ts +11 -0
  27. package/dist/richtext-helpers.d.ts +15 -0
  28. package/dist/richtext-helpers.js +13 -0
  29. package/dist/types.d.ts +6 -3
  30. package/package.json +4 -3
@@ -1,16 +1,18 @@
1
- <script>
2
- import { getComponent } from './index';
1
+ <script lang="ts" generics="T extends SbBlokData">
2
+ import { getComponent, type SbBlokData } from './index';
3
+ import type { Component } from 'svelte';
3
4
 
4
- const { blok = null, ...rest } = $props();
5
+ type Props = {
6
+ blok: T;
7
+ } & Record<string, unknown>;
5
8
 
6
- if (!blok) {
7
- console.error('Please provide a \'blok\' property to the StoryblokComponent');
8
- }
9
+ const props: Props = $props();
9
10
 
10
- const component = $state(blok ? getComponent(blok.component) : null);
11
- const SvelteComponent = $derived(component);
11
+ const SvelteComponent = $derived(
12
+ props.blok.component ? (getComponent(props.blok.component) as Component<Props>) : null,
13
+ );
12
14
  </script>
13
15
 
14
16
  {#if SvelteComponent}
15
- <SvelteComponent {blok} {...rest} />
17
+ <SvelteComponent {...props} />
16
18
  {/if}
@@ -1,11 +1,27 @@
1
- export default StoryblokComponent;
2
- type StoryblokComponent = {
3
- $on?(type: string, callback: (e: any) => void): () => void;
4
- $set?(props: Partial<$$ComponentProps>): void;
1
+ import { type SbBlokData } from './index';
2
+ declare function $$render<T extends SbBlokData>(): {
3
+ props: {
4
+ blok: T;
5
+ } & Record<string, unknown>;
6
+ exports: {};
7
+ bindings: "";
8
+ slots: {};
9
+ events: {};
5
10
  };
6
- declare const StoryblokComponent: import("svelte").Component<{
7
- blok?: any;
8
- } & Record<string, any>, {}, "">;
9
- type $$ComponentProps = {
10
- blok?: any;
11
- } & Record<string, any>;
11
+ declare class __sveltets_Render<T extends SbBlokData> {
12
+ props(): ReturnType<typeof $$render<T>>['props'];
13
+ events(): ReturnType<typeof $$render<T>>['events'];
14
+ slots(): ReturnType<typeof $$render<T>>['slots'];
15
+ bindings(): "";
16
+ exports(): {};
17
+ }
18
+ interface $$IsomorphicComponent {
19
+ new <T extends SbBlokData>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
20
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
21
+ } & ReturnType<__sveltets_Render<T>['exports']>;
22
+ <T extends SbBlokData>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
23
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
24
+ }
25
+ declare const StoryblokComponent: $$IsomorphicComponent;
26
+ type StoryblokComponent<T extends SbBlokData> = InstanceType<typeof StoryblokComponent<T>>;
27
+ export default StoryblokComponent;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import { normalizeNodes, type SbRichTextInput } from '@storyblok/richtext';
3
+ import RenderChildren from './richtext/RenderChildren.svelte';
4
+ import type { SbSvelteRichTextRenderContext } from './richtext-helpers';
5
+
6
+ type Props = SbSvelteRichTextRenderContext & {
7
+ document: SbRichTextInput;
8
+ } & Record<string, unknown>;
9
+
10
+ const { document, components = {}, optimizeImage }: Props = $props();
11
+ const nodes = $derived.by(() => normalizeNodes(document, true));
12
+ </script>
13
+
14
+ <RenderChildren {nodes} options={{ components, optimizeImage }} />
@@ -0,0 +1,8 @@
1
+ import { type SbRichTextInput } from '@storyblok/richtext';
2
+ import type { SbSvelteRichTextRenderContext } from './richtext-helpers';
3
+ type Props = SbSvelteRichTextRenderContext & {
4
+ document: SbRichTextInput;
5
+ } & Record<string, unknown>;
6
+ declare const StoryblokRichText: import("svelte").Component<Props, {}, "">;
7
+ type StoryblokRichText = ReturnType<typeof StoryblokRichText>;
8
+ export default StoryblokRichText;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,8 @@
1
+ export { type SbSvelteRichTextComponentMap, type SbSvelteRichTextProps, type SbSvelteRichTextRenderContext } from './richtext-helpers';
1
2
  export * from './storyblok';
2
3
  export { default as StoryblokComponent } from './StoryblokComponent.svelte';
4
+ export { default as StoryblokRichText } from './StoryblokRichText.svelte';
3
5
  export * from './types';
4
- export { apiPlugin, renderRichText, useStoryblokBridge, } from '@storyblok/js';
6
+ export { apiPlugin, useStoryblokBridge, } from '@storyblok/js';
7
+ export { buildStoryblokImage, renderRichText, splitTableRows } from '@storyblok/richtext';
8
+ export type { SbRichTextDoc, SbRichTextImageOptions, SbRichTextMark, SbRichTextNode, SbRichTextProps, SbRichTextRenderContext, } from '@storyblok/richtext';
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
+ export {} from './richtext-helpers';
1
2
  export * from './storyblok';
2
3
  export { default as StoryblokComponent } from './StoryblokComponent.svelte';
4
+ export { default as StoryblokRichText } from './StoryblokRichText.svelte';
3
5
  export * from './types';
4
- export { apiPlugin, renderRichText, useStoryblokBridge, } from '@storyblok/js';
6
+ export { apiPlugin, useStoryblokBridge, } from '@storyblok/js';
7
+ export { buildStoryblokImage, renderRichText, splitTableRows } from '@storyblok/richtext';
@@ -0,0 +1,27 @@
1
+ <script lang="ts">
2
+ import { buildSvelteAttrs } from '../richtext-helpers';
3
+ import { isSelfClosing, resolveTag, type SbRichTextMark, type SbRichTextNode } from '@storyblok/richtext';
4
+ import type { Snippet } from 'svelte';
5
+
6
+ type Props = {
7
+ node: SbRichTextNode | SbRichTextMark;
8
+ children?: Snippet;
9
+ };
10
+
11
+ const { node, children }: Props = $props();
12
+ const Tag = $derived(resolveTag(node));
13
+ const processedAttrs = $derived(node.type !== 'text' ? buildSvelteAttrs(node.type, node?.attrs ?? {}) : {});
14
+ const selfClosing = $derived(Tag && isSelfClosing(Tag));
15
+ </script>
16
+
17
+ {#if Tag}
18
+ {#if selfClosing}
19
+ <svelte:element this={Tag} {...processedAttrs} />
20
+ {:else}
21
+ <svelte:element this={Tag} {...processedAttrs}>
22
+ {@render children?.()}
23
+ </svelte:element>
24
+ {/if}
25
+ {:else}
26
+ {@render children?.()}
27
+ {/if}
@@ -0,0 +1,9 @@
1
+ import { type SbRichTextMark, type SbRichTextNode } from '@storyblok/richtext';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = {
4
+ node: SbRichTextNode | SbRichTextMark;
5
+ children?: Snippet;
6
+ };
7
+ declare const ElementTag: import("svelte").Component<Props, {}, "">;
8
+ type ElementTag = ReturnType<typeof ElementTag>;
9
+ export default ElementTag;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { groupLinkNodes, type SbRichTextNode } from '@storyblok/richtext';
3
+
4
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
5
+ import RenderLinkGroup from './RenderLinkGroup.svelte';
6
+ import RenderNode from './RenderNode.svelte';
7
+
8
+ type Props = {
9
+ nodes: SbRichTextNode[];
10
+ options: SbSvelteRichTextRenderContext;
11
+ };
12
+
13
+ const { nodes, options }: Props = $props();
14
+ const groups = $derived.by(() => groupLinkNodes(nodes));
15
+ </script>
16
+
17
+ {#each groups as group (group._key)}
18
+ {#if group.linkMark}
19
+ <RenderLinkGroup nodes={group.nodes.filter(node => node.type === 'text')} linkMark={group.linkMark} {options} />
20
+ {:else}
21
+ <RenderNode node={group.nodes[0]} {options} />
22
+ {/if}
23
+ {/each}
@@ -0,0 +1,9 @@
1
+ import { type SbRichTextNode } from '@storyblok/richtext';
2
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
3
+ type Props = {
4
+ nodes: SbRichTextNode[];
5
+ options: SbSvelteRichTextRenderContext;
6
+ };
7
+ declare const RenderChildren: import("svelte").Component<Props, {}, "">;
8
+ type RenderChildren = ReturnType<typeof RenderChildren>;
9
+ export default RenderChildren;
@@ -0,0 +1,27 @@
1
+ <script lang="ts">
2
+ import { buildStoryblokImage, type SbRichTextNode } from '@storyblok/richtext';
3
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
4
+ import ElementTag from './ElementTag.svelte';
5
+
6
+ type ImageNode = SbRichTextNode & { type: 'image' };
7
+ type Props = {
8
+ node: ImageNode;
9
+ options: SbSvelteRichTextRenderContext;
10
+ };
11
+
12
+ const { node, options }: Props = $props();
13
+ const optimizedNode: ImageNode = $derived(
14
+ options.optimizeImage && node?.attrs?.src
15
+ ? {
16
+ ...node,
17
+ attrs: {
18
+ ...node.attrs,
19
+ ...buildStoryblokImage(node.attrs.src as string, options.optimizeImage),
20
+ },
21
+ type: 'image',
22
+ }
23
+ : node,
24
+ );
25
+ </script>
26
+
27
+ <ElementTag node={optimizedNode} />
@@ -0,0 +1,12 @@
1
+ import { type SbRichTextNode } from '@storyblok/richtext';
2
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
3
+ type ImageNode = SbRichTextNode & {
4
+ type: 'image';
5
+ };
6
+ type Props = {
7
+ node: ImageNode;
8
+ options: SbSvelteRichTextRenderContext;
9
+ };
10
+ declare const RenderImage: import("svelte").Component<Props, {}, "">;
11
+ type RenderImage = ReturnType<typeof RenderImage>;
12
+ export default RenderImage;
@@ -0,0 +1,26 @@
1
+ <script lang="ts">
2
+ import { type SbRichTextMark, type SbRichTextTextNode } from '@storyblok/richtext';
3
+
4
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
5
+ import ElementTag from './ElementTag.svelte';
6
+ import RenderLinkInner from './RenderLinkInner.svelte';
7
+
8
+ type Props = {
9
+ nodes: SbRichTextTextNode[];
10
+ linkMark: SbRichTextMark & { type: 'link' };
11
+ options: SbSvelteRichTextRenderContext;
12
+ };
13
+
14
+ const { nodes, linkMark, options }: Props = $props();
15
+ const CustomComponent = $derived(options.components ? options.components[linkMark.type] : undefined);
16
+ </script>
17
+
18
+ {#if CustomComponent}
19
+ <CustomComponent {...linkMark}>
20
+ <RenderLinkInner {nodes} {options} />
21
+ </CustomComponent>
22
+ {:else}
23
+ <ElementTag node={linkMark}>
24
+ <RenderLinkInner {nodes} {options} />
25
+ </ElementTag>
26
+ {/if}
@@ -0,0 +1,12 @@
1
+ import { type SbRichTextMark, type SbRichTextTextNode } from '@storyblok/richtext';
2
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
3
+ type Props = {
4
+ nodes: SbRichTextTextNode[];
5
+ linkMark: SbRichTextMark & {
6
+ type: 'link';
7
+ };
8
+ options: SbSvelteRichTextRenderContext;
9
+ };
10
+ declare const RenderLinkGroup: import("svelte").Component<Props, {}, "">;
11
+ type RenderLinkGroup = ReturnType<typeof RenderLinkGroup>;
12
+ export default RenderLinkGroup;
@@ -0,0 +1,19 @@
1
+ <script lang="ts">
2
+ import { getInnerMarks, type SbRichTextNode, type SbRichTextTextNode } from '@storyblok/richtext';
3
+
4
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
5
+ import RenderTextNodeWithMarks from './RenderTextNodeWithMarks.svelte';
6
+
7
+ type Props = {
8
+ nodes: SbRichTextNode[];
9
+ options: SbSvelteRichTextRenderContext;
10
+ };
11
+
12
+ const { nodes, options }: Props = $props();
13
+ </script>
14
+
15
+ {#each nodes as node (node._key)}
16
+ {@const innerMarks = getInnerMarks(node)}
17
+
18
+ <RenderTextNodeWithMarks node={node as SbRichTextTextNode} marks={innerMarks} {options} />
19
+ {/each}
@@ -0,0 +1,9 @@
1
+ import { type SbRichTextNode } from '@storyblok/richtext';
2
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
3
+ type Props = {
4
+ nodes: SbRichTextNode[];
5
+ options: SbSvelteRichTextRenderContext;
6
+ };
7
+ declare const RenderLinkInner: import("svelte").Component<Props, {}, "">;
8
+ type RenderLinkInner = ReturnType<typeof RenderLinkInner>;
9
+ export default RenderLinkInner;
@@ -0,0 +1,49 @@
1
+ <script lang="ts">
2
+ import { getStaticChildren, type SbRichTextNode } from '@storyblok/richtext';
3
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
4
+ import RenderTextNodeWithMarks from './RenderTextNodeWithMarks.svelte';
5
+ import RenderChildren from './RenderChildren.svelte';
6
+ import RenderImage from './RenderImage.svelte';
7
+ import RenderTable from './RenderTable.svelte';
8
+ import RenderStaticChildren from './RenderStaticChildren.svelte';
9
+ import ElementTag from './ElementTag.svelte';
10
+ import StoryblokComponent from '../StoryblokComponent.svelte';
11
+
12
+ type Props = {
13
+ node: SbRichTextNode;
14
+ options: SbSvelteRichTextRenderContext;
15
+ };
16
+
17
+ const { node, options }: Props = $props();
18
+ const CustomComponent = $derived(
19
+ options.components && node.type !== 'text' ? options.components[node.type] : undefined,
20
+ );
21
+ </script>
22
+
23
+ {#if node.type === 'text'}
24
+ <RenderTextNodeWithMarks {node} marks={node.marks} {options} />
25
+ {:else if CustomComponent}
26
+ <CustomComponent {...node} context={options}>
27
+ {#if node.content}
28
+ <RenderChildren nodes={node.content} {options} />
29
+ {/if}
30
+ </CustomComponent>
31
+ {:else if node.type === 'image'}
32
+ <RenderImage {node} {options} />
33
+ {:else if node.type === 'blok'}
34
+ {#if Array.isArray(node.attrs?.body)}
35
+ {#each node.attrs.body as blok (blok._uid)}
36
+ <StoryblokComponent {blok} />
37
+ {/each}
38
+ {/if}
39
+ {:else if node.type === 'table'}
40
+ <RenderTable {node} {options} />
41
+ {:else if getStaticChildren(node)}
42
+ <RenderStaticChildren {node} {options} />
43
+ {:else}
44
+ <ElementTag {node}>
45
+ {#if node.content}
46
+ <RenderChildren nodes={node.content} {options} />
47
+ {/if}
48
+ </ElementTag>
49
+ {/if}
@@ -0,0 +1,9 @@
1
+ import { type SbRichTextNode } from '@storyblok/richtext';
2
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
3
+ type Props = {
4
+ node: SbRichTextNode;
5
+ options: SbSvelteRichTextRenderContext;
6
+ };
7
+ declare const RenderNode: import("svelte").Component<Props, {}, "">;
8
+ type RenderNode = ReturnType<typeof RenderNode>;
9
+ export default RenderNode;
@@ -0,0 +1,25 @@
1
+ <script lang="ts">
2
+ import { getStaticChildren, resolveTag, type SbRichTextNode } from '@storyblok/richtext';
3
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
4
+ import RenderStaticStructure from './RenderStaticStructure.svelte';
5
+ import RenderChildren from './RenderChildren.svelte';
6
+
7
+ type Props = {
8
+ node: Exclude<SbRichTextNode, { type: 'text' }>;
9
+ options: SbSvelteRichTextRenderContext;
10
+ };
11
+
12
+ const { node, options }: Props = $props();
13
+ const staticChildren = $derived(getStaticChildren(node));
14
+ const OuterTag = $derived(resolveTag(node));
15
+ </script>
16
+
17
+ {#if staticChildren && OuterTag}
18
+ <svelte:element this={OuterTag}>
19
+ <RenderStaticStructure type={node.type} specs={staticChildren} parentAttrs={node.attrs}>
20
+ {#if node.content}
21
+ <RenderChildren nodes={node.content} {options} />
22
+ {/if}
23
+ </RenderStaticStructure>
24
+ </svelte:element>
25
+ {/if}
@@ -0,0 +1,11 @@
1
+ import { type SbRichTextNode } from '@storyblok/richtext';
2
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
3
+ type Props = {
4
+ node: Exclude<SbRichTextNode, {
5
+ type: 'text';
6
+ }>;
7
+ options: SbSvelteRichTextRenderContext;
8
+ };
9
+ declare const RenderStaticChildren: import("svelte").Component<Props, {}, "">;
10
+ type RenderStaticChildren = ReturnType<typeof RenderStaticChildren>;
11
+ export default RenderStaticChildren;
@@ -0,0 +1,37 @@
1
+ <script lang="ts">
2
+ import { buildSvelteAttrs } from '../richtext-helpers';
3
+ import { isSelfClosing, type RenderSpec, type SbRichTextElement } from '@storyblok/richtext';
4
+ import type { Snippet } from 'svelte';
5
+ // eslint-disable-next-line import/no-self-import
6
+ import RenderStaticStructure from './RenderStaticStructure.svelte';
7
+
8
+ type Props = {
9
+ type: SbRichTextElement;
10
+ specs: readonly RenderSpec[];
11
+ parentAttrs?: Record<string, unknown>;
12
+ children?: Snippet;
13
+ };
14
+
15
+ const { type, specs, parentAttrs, ...rest }: Props = $props();
16
+ </script>
17
+
18
+ {#each specs as spec, index (index)}
19
+ {@const { tag, children, attrs: specAttrs } = spec}
20
+ {@const Tag = tag}
21
+ {@const mergedAttrs = { ...specAttrs, ...parentAttrs }}
22
+ {@const processedAttrs = buildSvelteAttrs(type, mergedAttrs)}
23
+
24
+ {#if isSelfClosing(Tag)}
25
+ <svelte:element this={Tag} {...processedAttrs} />
26
+ {:else}
27
+ <svelte:element this={Tag} {...processedAttrs}>
28
+ {#if children}
29
+ <RenderStaticStructure {type} specs={children} {parentAttrs}>
30
+ {@render rest.children?.()}
31
+ </RenderStaticStructure>
32
+ {:else}
33
+ {@render rest.children?.()}
34
+ {/if}
35
+ </svelte:element>
36
+ {/if}
37
+ {/each}
@@ -0,0 +1,12 @@
1
+ import { type RenderSpec, type SbRichTextElement } from '@storyblok/richtext';
2
+ import type { Snippet } from 'svelte';
3
+ import RenderStaticStructure from './RenderStaticStructure.svelte';
4
+ type Props = {
5
+ type: SbRichTextElement;
6
+ specs: readonly RenderSpec[];
7
+ parentAttrs?: Record<string, unknown>;
8
+ children?: Snippet;
9
+ };
10
+ declare const RenderStaticStructure: import("svelte").Component<Props, {}, "">;
11
+ type RenderStaticStructure = ReturnType<typeof RenderStaticStructure>;
12
+ export default RenderStaticStructure;
@@ -0,0 +1,26 @@
1
+ <script lang="ts">
2
+ import { type SbRichTextNode, splitTableRows } from '@storyblok/richtext';
3
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
4
+ import ElementTag from './ElementTag.svelte';
5
+ import RenderNode from './RenderNode.svelte';
6
+
7
+ type Props = {
8
+ node: SbRichTextNode & { type: 'table' };
9
+ options: SbSvelteRichTextRenderContext;
10
+ };
11
+
12
+ const { node, options }: Props = $props();
13
+ const { headerRows, bodyRows } = $derived(splitTableRows(node.content));
14
+ </script>
15
+
16
+ <ElementTag {node}
17
+ >{#if headerRows.length > 0}<thead>
18
+ {#each headerRows as row (row._key)}
19
+ <RenderNode node={row} {options} />
20
+ {/each}
21
+ </thead>{/if}{#if bodyRows.length > 0}<tbody>
22
+ {#each bodyRows as row (row._key)}
23
+ <RenderNode node={row} {options} />
24
+ {/each}
25
+ </tbody>{/if}</ElementTag
26
+ >
@@ -0,0 +1,11 @@
1
+ import { type SbRichTextNode } from '@storyblok/richtext';
2
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
3
+ type Props = {
4
+ node: SbRichTextNode & {
5
+ type: 'table';
6
+ };
7
+ options: SbSvelteRichTextRenderContext;
8
+ };
9
+ declare const RenderTable: import("svelte").Component<Props, {}, "">;
10
+ type RenderTable = ReturnType<typeof RenderTable>;
11
+ export default RenderTable;
@@ -0,0 +1,34 @@
1
+ <script lang="ts">
2
+ import { type SbRichTextMark, type SbRichTextTextNode } from '@storyblok/richtext';
3
+ // eslint-disable-next-line import/no-self-import
4
+ import RenderTextNodeWithMarks from './RenderTextNodeWithMarks.svelte';
5
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
6
+ import ElementTag from './ElementTag.svelte';
7
+
8
+ type Props = {
9
+ node: SbRichTextTextNode;
10
+ marks?: SbRichTextMark[];
11
+ options: SbSvelteRichTextRenderContext;
12
+ };
13
+
14
+ const { node, marks = [], options }: Props = $props();
15
+ const reversedMarks = $derived([...marks].reverse());
16
+
17
+ const mark = $derived(reversedMarks[0]);
18
+
19
+ const rest = $derived(reversedMarks.slice(1));
20
+
21
+ const MarkComponent = $derived(mark && options.components ? options.components[mark.type] : undefined);
22
+ </script>
23
+
24
+ {#if reversedMarks.length === 0}
25
+ {node.text}
26
+ {:else if MarkComponent}
27
+ <MarkComponent {...mark}>
28
+ <RenderTextNodeWithMarks {node} marks={rest} {options} />
29
+ </MarkComponent>
30
+ {:else}
31
+ <ElementTag node={mark}>
32
+ <RenderTextNodeWithMarks {node} marks={rest} {options} />
33
+ </ElementTag>
34
+ {/if}
@@ -0,0 +1,11 @@
1
+ import { type SbRichTextMark, type SbRichTextTextNode } from '@storyblok/richtext';
2
+ import RenderTextNodeWithMarks from './RenderTextNodeWithMarks.svelte';
3
+ import type { SbSvelteRichTextRenderContext } from '../richtext-helpers';
4
+ type Props = {
5
+ node: SbRichTextTextNode;
6
+ marks?: SbRichTextMark[];
7
+ options: SbSvelteRichTextRenderContext;
8
+ };
9
+ declare const RenderTextNodeWithMarks: import("svelte").Component<Props, {}, "">;
10
+ type RenderTextNodeWithMarks = ReturnType<typeof RenderTextNodeWithMarks>;
11
+ export default RenderTextNodeWithMarks;
@@ -0,0 +1,15 @@
1
+ import { type SbRichTextElement, type SbRichTextElementByType, type SbRichTextImageOptions } from '@storyblok/richtext';
2
+ import type { Component, Snippet } from 'svelte';
3
+ export interface SbSvelteRichTextRenderContext {
4
+ optimizeImage?: boolean | SbRichTextImageOptions;
5
+ components?: SbSvelteRichTextComponentMap;
6
+ }
7
+ type AnyComponent = Component<any>;
8
+ export type SbSvelteRichTextComponentMap = {
9
+ [k in SbRichTextElement]?: AnyComponent;
10
+ };
11
+ export type SbSvelteRichTextProps<T extends SbRichTextElement> = SbRichTextElementByType<SbSvelteRichTextRenderContext>[T] & {
12
+ children?: Snippet;
13
+ };
14
+ export declare function buildSvelteAttrs(type: SbRichTextElement, attrs: Record<string, unknown>): Record<string, unknown>;
15
+ export {};
@@ -0,0 +1,13 @@
1
+ import { processAttrs, styleToString } from '@storyblok/richtext';
2
+ export function buildSvelteAttrs(type, attrs) {
3
+ const processedAttrs = processAttrs(type, attrs, {
4
+ colspan: 'colspan',
5
+ rowspan: 'rowspan',
6
+ });
7
+ const styleObj = processedAttrs?.style;
8
+ const finalAttrs = { ...processedAttrs };
9
+ if (styleObj) {
10
+ finalAttrs.style = styleToString(styleObj);
11
+ }
12
+ return finalAttrs;
13
+ }
package/dist/types.d.ts CHANGED
@@ -1,9 +1,12 @@
1
- import type { SbSDKOptions } from '@storyblok/js';
1
+ import type { SbBlokData, SbSDKOptions } from '@storyblok/js';
2
2
  import type { Component } from 'svelte';
3
+ export type StoryblokComponentProps<T> = {
4
+ blok: T;
5
+ } & Record<string, unknown>;
3
6
  export interface SbSvelteComponentsMap {
4
- [name: string]: Component;
7
+ [name: string]: Component<StoryblokComponentProps<SbBlokData>>;
5
8
  }
6
9
  export interface SbSvelteSDKOptions extends SbSDKOptions {
7
10
  components?: SbSvelteComponentsMap | CallableFunction;
8
11
  }
9
- export type { BlockTypes, ISbAlternateObject, ISbCache, ISbConfig, ISbManagmentApiResult, ISbResult, ISbStories, ISbStoriesParams, ISbStory, ISbStoryData, ISbStoryParams, MarkTypes, SbBlokData, SbBlokKeyDataTypes, SbSDKOptions, StoryblokBridgeConfigV2, StoryblokBridgeV2, StoryblokClient, StoryblokComponentType, StoryblokRichTextDocumentNode, StoryblokRichTextImageOptimizationOptions, StoryblokRichTextNode, StoryblokRichTextNodeTypes, StoryblokRichTextOptions, TextTypes, useStoryblokBridge, } from '@storyblok/js';
12
+ export type { ISbAlternateObject, ISbCache, ISbConfig, ISbManagmentApiResult, ISbResult, ISbStories, ISbStoriesParams, ISbStory, ISbStoryData, ISbStoryParams, SbBlokData, SbBlokKeyDataTypes, SbSDKOptions, StoryblokBridgeConfigV2, StoryblokBridgeV2, StoryblokClient, StoryblokComponentType, useStoryblokBridge, } from '@storyblok/js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@storyblok/svelte",
3
3
  "type": "module",
4
- "version": "6.1.10",
4
+ "version": "7.0.1",
5
5
  "private": false,
6
6
  "description": "SDK to integrate Storyblok into your project using Svelte.",
7
7
  "author": "Storyblok",
@@ -9,7 +9,7 @@
9
9
  "homepage": "https://github.com/storyblok/monoblok/tree/main/packages/svelte#readme",
10
10
  "repository": {
11
11
  "type": "git",
12
- "url": "https://github.com/storyblok/monoblok.git",
12
+ "url": "git+https://github.com/storyblok/monoblok.git",
13
13
  "directory": "packages/svelte"
14
14
  },
15
15
  "bugs": {
@@ -39,7 +39,8 @@
39
39
  "svelte": "^5.0.0"
40
40
  },
41
41
  "dependencies": {
42
- "@storyblok/js": "5.1.10"
42
+ "@storyblok/js": "6.0.1",
43
+ "@storyblok/richtext": "5.0.1"
43
44
  },
44
45
  "devDependencies": {
45
46
  "@cypress/svelte": "^3.0.0",