@prismicio/svelte 0.0.7 → 0.0.8-dev.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.
- package/dist/components/PrismicEmbed.svelte +26 -0
- package/{lib → dist}/components/PrismicEmbed.svelte.d.ts +11 -1
- package/{components → dist/components}/PrismicImage.svelte +1 -2
- package/dist/components/PrismicRichText/DefaultComponent.svelte +51 -0
- package/dist/components/PrismicRichText/DefaultComponent.svelte.d.ts +21 -0
- package/dist/components/PrismicRichText/PrismicRichText.svelte +49 -0
- package/dist/components/PrismicRichText/PrismicRichText.svelte.d.ts +53 -0
- package/dist/components/PrismicRichText/Serialize.svelte +19 -0
- package/dist/components/PrismicRichText/Serialize.svelte.d.ts +21 -0
- package/dist/components/PrismicText.svelte +22 -0
- package/{lib → dist}/components/PrismicText.svelte.d.ts +14 -2
- package/dist/components/SliceZone.svelte +59 -0
- package/dist/components/SliceZone.svelte.d.ts +60 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/components/index.js +6 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/src/lib/components/PrismicEmbed.svelte +29 -0
- package/{src → dist/src}/lib/components/PrismicImage.svelte +1 -2
- package/dist/src/lib/components/PrismicRichText/DefaultComponent.svelte +56 -0
- package/dist/src/lib/components/PrismicRichText/PrismicRichText.svelte +69 -0
- package/dist/src/lib/components/PrismicRichText/Serialize.svelte +30 -0
- package/dist/src/lib/components/PrismicText.svelte +29 -0
- package/{src → dist/src}/lib/components/SliceZone.svelte +47 -1
- package/dist/src/lib/components/index.ts +11 -0
- package/dist/src/lib/index.ts +9 -0
- package/{src → dist/src}/routes/+page.server.ts +1 -1
- package/{src → dist/src}/routes/+page.svelte +19 -5
- package/dist/src/routes/components/Emphasis.svelte +3 -0
- package/dist/src/routes/components/index.js +1 -0
- package/dist/src/routes/slices/RichText/index.svelte +9 -0
- package/{src → dist/src}/types/ExampleDocument.type.ts +1 -0
- package/{src → dist/src}/types/index.ts +0 -2
- package/package.json +146 -77
- package/CHANGELOG.md +0 -84
- package/PrismicProvider.svelte +0 -21
- package/components/PrismicEmbed.svelte +0 -10
- package/components/PrismicPreview.svelte +0 -26
- package/components/PrismicRichText.svelte +0 -8
- package/components/PrismicText.svelte +0 -7
- package/components/SliceZone.svelte +0 -17
- package/components/index.js +0 -7
- package/configurePrismic.js +0 -17
- package/index.js +0 -12
- package/injectionSymbols.js +0 -1
- package/lib/PrismicProvider.svelte.d.ts +0 -24
- package/lib/components/PrismicPreview.svelte.d.ts +0 -20
- package/lib/components/PrismicRichText.svelte.d.ts +0 -20
- package/lib/components/SliceZone.svelte.d.ts +0 -25
- package/lib/components/index.d.ts +0 -3
- package/lib/configurePrismic.d.ts +0 -9
- package/lib/index.d.ts +0 -1
- package/lib/injectionSymbols.d.ts +0 -1
- package/lib/usePrismic.d.ts +0 -2
- package/src/lib/PrismicProvider.svelte +0 -26
- package/src/lib/components/PrismicEmbed.svelte +0 -14
- package/src/lib/components/PrismicPreview.svelte +0 -29
- package/src/lib/components/PrismicRichText.svelte +0 -14
- package/src/lib/components/PrismicText.svelte +0 -12
- package/src/lib/components/index.ts +0 -13
- package/src/lib/configurePrismic.ts +0 -30
- package/src/lib/index.ts +0 -18
- package/src/lib/injectionSymbols.ts +0 -1
- package/src/lib/usePrismic.ts +0 -12
- package/src/routes/slices/RichText/index.svelte +0 -8
- package/src/types/PrismicConfig.type.ts +0 -8
- package/src/types/PrismicContext.type.ts +0 -13
- package/types/PrismicContext.type.d.ts +0 -7
- package/usePrismic.js +0 -10
- /package/{lib → dist}/__PRODUCTION__.d.ts +0 -0
- /package/{__PRODUCTION__.js → dist/__PRODUCTION__.js} +0 -0
- /package/{lib → dist}/components/PrismicImage.svelte.d.ts +0 -0
- /package/{components → dist/components}/PrismicLink.svelte +0 -0
- /package/{lib → dist}/components/PrismicLink.svelte.d.ts +0 -0
- /package/{components → dist/components}/TodoSliceComponent.svelte +0 -0
- /package/{lib → dist}/components/TodoSliceComponent.svelte.d.ts +0 -0
- /package/{src → dist/src}/app.html +0 -0
- /package/{src → dist/src}/global.d.ts +0 -0
- /package/{src → dist/src}/lib/__PRODUCTION__.ts +0 -0
- /package/{src → dist/src}/lib/components/PrismicLink.svelte +0 -0
- /package/{src → dist/src}/lib/components/TodoSliceComponent.svelte +0 -0
- /package/{src → dist/src}/routes/slices/CodeSnippet/index.svelte +0 -0
- /package/{src → dist/src}/routes/slices/index.ts +0 -0
- /package/{src → dist/src}/types/CodeSnippetSlice.type.ts +0 -0
- /package/{src → dist/src}/types/PageDocument.type.ts +0 -0
- /package/{src → dist/src}/types/RichTextSlice.type.ts +0 -0
- /package/{src → dist/src}/types/Route.type.ts +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script>import * as prismicH from "@prismicio/helpers";
|
|
2
|
+
/**
|
|
3
|
+
* An Embed field from Prismic.
|
|
4
|
+
*/
|
|
5
|
+
export let field;
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<!--
|
|
9
|
+
@component
|
|
10
|
+
Component to render a Prismic Embed field.
|
|
11
|
+
|
|
12
|
+
@example Rendering an Embed field:
|
|
13
|
+
```svelte
|
|
14
|
+
<PrismicEmbed field={document.data.example_embed} />
|
|
15
|
+
```
|
|
16
|
+
-->
|
|
17
|
+
|
|
18
|
+
{#if prismicH.isFilled.embed(field)}
|
|
19
|
+
<div
|
|
20
|
+
data-oembed={field.embed_url}
|
|
21
|
+
data-oembed-type={field.type}
|
|
22
|
+
data-oembed-provider={field.provider_name}
|
|
23
|
+
>
|
|
24
|
+
{@html field.html}
|
|
25
|
+
</div>
|
|
26
|
+
{/if}
|
|
@@ -2,7 +2,9 @@ import { SvelteComponentTyped } from "svelte";
|
|
|
2
2
|
import type * as prismicT from "@prismicio/types";
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* An Embed field from Prismic.
|
|
7
|
+
*/ field: prismicT.EmbedField;
|
|
6
8
|
};
|
|
7
9
|
events: {
|
|
8
10
|
[evt: string]: CustomEvent<any>;
|
|
@@ -12,6 +14,14 @@ declare const __propDef: {
|
|
|
12
14
|
export type PrismicEmbedProps = typeof __propDef.props;
|
|
13
15
|
export type PrismicEmbedEvents = typeof __propDef.events;
|
|
14
16
|
export type PrismicEmbedSlots = typeof __propDef.slots;
|
|
17
|
+
/**
|
|
18
|
+
* Component to render a Prismic Embed field.
|
|
19
|
+
*
|
|
20
|
+
* @example Rendering an Embed field:
|
|
21
|
+
* ```svelte
|
|
22
|
+
* <PrismicEmbed field={document.data.example_embed} />
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
15
25
|
export default class PrismicEmbed extends SvelteComponentTyped<PrismicEmbedProps, PrismicEmbedEvents, PrismicEmbedSlots> {
|
|
16
26
|
}
|
|
17
27
|
export {};
|
|
@@ -77,13 +77,12 @@ if (!__PRODUCTION__) {
|
|
|
77
77
|
widths: widths === "defaults" ? undefined : widths,
|
|
78
78
|
...imgixParams,
|
|
79
79
|
})}
|
|
80
|
-
|
|
81
80
|
<img
|
|
82
81
|
{src}
|
|
83
82
|
{srcset}
|
|
84
83
|
alt={alt ?? field.alt ?? fallbackAlt}
|
|
85
84
|
width={width || height ? resolvedWidth : field.dimensions.width}
|
|
86
|
-
height={height || width ? resolvedHeight : field.dimensions.height}
|
|
85
|
+
height={height || (width ? resolvedHeight : field.dimensions.height)}
|
|
87
86
|
{...$$restProps}
|
|
88
87
|
/>
|
|
89
88
|
{:else}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<script>import { PrismicImage, PrismicEmbed, PrismicLink } from "..";
|
|
2
|
+
export let node;
|
|
3
|
+
export let linkResolver = undefined;
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
{#if node.type === "heading1"}
|
|
7
|
+
<h1><slot /></h1>
|
|
8
|
+
{:else if node.type === "heading2"}
|
|
9
|
+
<h2><slot /></h2>
|
|
10
|
+
{:else if node.type === "heading3"}
|
|
11
|
+
<h3><slot /></h3>
|
|
12
|
+
{:else if node.type === "heading4"}
|
|
13
|
+
<h4><slot /></h4>
|
|
14
|
+
{:else if node.type === "heading5"}
|
|
15
|
+
<h5><slot /></h5>
|
|
16
|
+
{:else if node.type === "heading6"}
|
|
17
|
+
<h6><slot /></h6>
|
|
18
|
+
{:else if node.type === "paragraph"}
|
|
19
|
+
<p><slot /></p>
|
|
20
|
+
{:else if node.type === "preformatted"}
|
|
21
|
+
<pre><slot /></pre>
|
|
22
|
+
{:else if node.type === "strong"}
|
|
23
|
+
<strong><slot /></strong>
|
|
24
|
+
{:else if node.type === "em"}
|
|
25
|
+
<em><slot /></em>
|
|
26
|
+
{:else if node.type === "list-item"}
|
|
27
|
+
<li><slot /></li>
|
|
28
|
+
{:else if node.type === "o-list-item"}
|
|
29
|
+
<li><slot /></li>
|
|
30
|
+
{:else if node.type === "group-list-item"}
|
|
31
|
+
<ul><slot /></ul>
|
|
32
|
+
{:else if node.type === "group-o-list-item"}
|
|
33
|
+
<ol><slot /></ol>
|
|
34
|
+
{:else if node.type === "image"}
|
|
35
|
+
<p class="block-img">
|
|
36
|
+
<PrismicImage field={node} />
|
|
37
|
+
</p>
|
|
38
|
+
{:else if node.type === "embed"}
|
|
39
|
+
<PrismicEmbed field={node.oembed} />
|
|
40
|
+
{:else if node.type === "hyperlink"}
|
|
41
|
+
<PrismicLink {linkResolver} field={node.data}><slot /></PrismicLink>
|
|
42
|
+
{:else if node.type === "label"}
|
|
43
|
+
<span class={node.data.label}><slot /></span>
|
|
44
|
+
{:else}
|
|
45
|
+
{#each node.text.split("\n") as line, index}
|
|
46
|
+
{#if index > 0}
|
|
47
|
+
<br />
|
|
48
|
+
{/if}
|
|
49
|
+
{line}
|
|
50
|
+
{/each}
|
|
51
|
+
{/if}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { LinkResolverFunction } from "@prismicio/helpers";
|
|
3
|
+
import type { RTAnyNode } from "@prismicio/types";
|
|
4
|
+
declare const __propDef: {
|
|
5
|
+
props: {
|
|
6
|
+
node: RTAnyNode;
|
|
7
|
+
linkResolver?: LinkResolverFunction | undefined;
|
|
8
|
+
};
|
|
9
|
+
events: {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
};
|
|
12
|
+
slots: {
|
|
13
|
+
default: {};
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export type DefaultComponentProps = typeof __propDef.props;
|
|
17
|
+
export type DefaultComponentEvents = typeof __propDef.events;
|
|
18
|
+
export type DefaultComponentSlots = typeof __propDef.slots;
|
|
19
|
+
export default class DefaultComponent extends SvelteComponentTyped<DefaultComponentProps, DefaultComponentEvents, DefaultComponentSlots> {
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<script>import { asTree, wrapMapSerializer, } from "@prismicio/richtext";
|
|
2
|
+
import Serialize from "./Serialize.svelte";
|
|
3
|
+
/**
|
|
4
|
+
* The Prismic Rich Text field to render.
|
|
5
|
+
*/
|
|
6
|
+
export let field = [];
|
|
7
|
+
/**
|
|
8
|
+
* The Link Resolver used to resolve links.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* If your app uses Route Resolvers when querying for your Prismic
|
|
12
|
+
* repository's content, a Link Resolver does not need to be provided.
|
|
13
|
+
* @see Learn about Link Resolvers and Route Resolvers {@link https://prismic.io/docs/route-resolver}
|
|
14
|
+
*/
|
|
15
|
+
export let linkResolver = undefined;
|
|
16
|
+
/**
|
|
17
|
+
* An object that maps Rich Text blocks to functions.
|
|
18
|
+
*
|
|
19
|
+
* @example A serializer that modififes `h1` and `em` elements:
|
|
20
|
+
*
|
|
21
|
+
* ```js
|
|
22
|
+
* import Title from "./Title.svelte";
|
|
23
|
+
*
|
|
24
|
+
* const field = exampleRichText;
|
|
25
|
+
*
|
|
26
|
+
* const richTextSerializer = {
|
|
27
|
+
* h1: () => Title,
|
|
28
|
+
* em: ({ children }) => `<mark>${children}</mark>`,
|
|
29
|
+
* };
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export let richTextSerializer = undefined;
|
|
33
|
+
const resolvedSerializer = typeof richTextSerializer === "object"
|
|
34
|
+
? wrapMapSerializer(richTextSerializer)
|
|
35
|
+
: richTextSerializer;
|
|
36
|
+
const nodes = asTree(field).children;
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<!--
|
|
40
|
+
@component
|
|
41
|
+
Component to render a Prismic Rich Text or Title field as HTML.
|
|
42
|
+
|
|
43
|
+
@example Rendering a Link field:
|
|
44
|
+
```svelte
|
|
45
|
+
<PrismicRichText field={document.data.example_rich_text} />
|
|
46
|
+
```
|
|
47
|
+
-->
|
|
48
|
+
|
|
49
|
+
<Serialize {nodes} serializer={resolvedSerializer} {linkResolver} />
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { SvelteComponent } from "svelte";
|
|
3
|
+
import { type RichTextFunctionSerializer, type RichTextMapSerializer, type TreeNode } from "@prismicio/richtext";
|
|
4
|
+
import type { LinkResolverFunction } from "@prismicio/helpers";
|
|
5
|
+
declare const __propDef: {
|
|
6
|
+
props: {
|
|
7
|
+
/**
|
|
8
|
+
* The Prismic Rich Text field to render.
|
|
9
|
+
*/ field?: [] | [import("@prismicio/types").RTNode, ...import("@prismicio/types").RTNode[]] | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* The Link Resolver used to resolve links.
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* If your app uses Route Resolvers when querying for your Prismic
|
|
15
|
+
* repository's content, a Link Resolver does not need to be provided.
|
|
16
|
+
* @see Learn about Link Resolvers and Route Resolvers {@link https://prismic.io/docs/route-resolver}
|
|
17
|
+
*/ linkResolver?: LinkResolverFunction | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* An object that maps Rich Text blocks to functions.
|
|
20
|
+
*
|
|
21
|
+
* @example A serializer that modififes `h1` and `em` elements:
|
|
22
|
+
*
|
|
23
|
+
* ```js
|
|
24
|
+
* import Title from "./Title.svelte";
|
|
25
|
+
*
|
|
26
|
+
* const field = exampleRichText;
|
|
27
|
+
*
|
|
28
|
+
* const richTextSerializer = {
|
|
29
|
+
* h1: () => Title,
|
|
30
|
+
* em: ({ children }) => `<mark>${children}</mark>`,
|
|
31
|
+
* };
|
|
32
|
+
* ```
|
|
33
|
+
*/ richTextSerializer?: RichTextMapSerializer<typeof SvelteComponent, TreeNode> | RichTextFunctionSerializer<typeof SvelteComponent, TreeNode> | undefined;
|
|
34
|
+
};
|
|
35
|
+
events: {
|
|
36
|
+
[evt: string]: CustomEvent<any>;
|
|
37
|
+
};
|
|
38
|
+
slots: {};
|
|
39
|
+
};
|
|
40
|
+
export type PrismicRichTextProps = typeof __propDef.props;
|
|
41
|
+
export type PrismicRichTextEvents = typeof __propDef.events;
|
|
42
|
+
export type PrismicRichTextSlots = typeof __propDef.slots;
|
|
43
|
+
/**
|
|
44
|
+
* Component to render a Prismic Rich Text or Title field as HTML.
|
|
45
|
+
*
|
|
46
|
+
* @example Rendering a Link field:
|
|
47
|
+
* ```svelte
|
|
48
|
+
* <PrismicRichText field={document.data.example_rich_text} />
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export default class PrismicRichText extends SvelteComponentTyped<PrismicRichTextProps, PrismicRichTextEvents, PrismicRichTextSlots> {
|
|
52
|
+
}
|
|
53
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script>import Default from "./DefaultComponent.svelte";
|
|
2
|
+
export let serializer;
|
|
3
|
+
export let nodes = [];
|
|
4
|
+
export let linkResolver = undefined;
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
{#each nodes as node}
|
|
8
|
+
<svelte:component
|
|
9
|
+
this={(serializer &&
|
|
10
|
+
serializer(node.type, node.node, node.text, node.children, node.key)) ||
|
|
11
|
+
Default}
|
|
12
|
+
{...node}
|
|
13
|
+
{linkResolver}
|
|
14
|
+
>
|
|
15
|
+
{#if node.children.length > 0}
|
|
16
|
+
<svelte:self nodes={node.children} {serializer} />
|
|
17
|
+
{/if}
|
|
18
|
+
</svelte:component>
|
|
19
|
+
{/each}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { SvelteComponent } from "svelte";
|
|
3
|
+
import type { RichTextFunctionSerializer, TreeNode } from "@prismicio/richtext";
|
|
4
|
+
import type { LinkResolverFunction } from "@prismicio/helpers";
|
|
5
|
+
declare const __propDef: {
|
|
6
|
+
props: {
|
|
7
|
+
serializer: RichTextFunctionSerializer<typeof SvelteComponent, TreeNode> | undefined;
|
|
8
|
+
nodes?: TreeNode[] | undefined;
|
|
9
|
+
linkResolver?: LinkResolverFunction | undefined;
|
|
10
|
+
};
|
|
11
|
+
events: {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
};
|
|
14
|
+
slots: {};
|
|
15
|
+
};
|
|
16
|
+
export type SerializeProps = typeof __propDef.props;
|
|
17
|
+
export type SerializeEvents = typeof __propDef.events;
|
|
18
|
+
export type SerializeSlots = typeof __propDef.slots;
|
|
19
|
+
export default class Serialize extends SvelteComponentTyped<SerializeProps, SerializeEvents, SerializeSlots> {
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script>import * as prismicH from "@prismicio/helpers";
|
|
2
|
+
/**
|
|
3
|
+
* A Rich Text or Title field from Prismic.
|
|
4
|
+
*/
|
|
5
|
+
export let field;
|
|
6
|
+
/**
|
|
7
|
+
* The separator used between blocks. Defaults to `\n`.
|
|
8
|
+
*/
|
|
9
|
+
export let separator = undefined;
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<!--
|
|
13
|
+
@component
|
|
14
|
+
Component to render a Prismic Rich Text or Title field as plain text.
|
|
15
|
+
|
|
16
|
+
@example Rendering a Rich Text field:
|
|
17
|
+
```svelte
|
|
18
|
+
<PrismicText field={document.data.example_rich_text} />
|
|
19
|
+
```
|
|
20
|
+
-->
|
|
21
|
+
|
|
22
|
+
{@html prismicH.asText(field, separator)}
|
|
@@ -3,8 +3,12 @@ import type { RichTextField as RichTextFieldType } from "@prismicio/types";
|
|
|
3
3
|
import type { TitleField as TitleFieldType } from "@prismicio/types";
|
|
4
4
|
declare const __propDef: {
|
|
5
5
|
props: {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* A Rich Text or Title field from Prismic.
|
|
8
|
+
*/ field: TitleFieldType | RichTextFieldType;
|
|
9
|
+
/**
|
|
10
|
+
* The separator used between blocks. Defaults to `\n`.
|
|
11
|
+
*/ separator?: string | undefined;
|
|
8
12
|
};
|
|
9
13
|
events: {
|
|
10
14
|
[evt: string]: CustomEvent<any>;
|
|
@@ -14,6 +18,14 @@ declare const __propDef: {
|
|
|
14
18
|
export type PrismicTextProps = typeof __propDef.props;
|
|
15
19
|
export type PrismicTextEvents = typeof __propDef.events;
|
|
16
20
|
export type PrismicTextSlots = typeof __propDef.slots;
|
|
21
|
+
/**
|
|
22
|
+
* Component to render a Prismic Rich Text or Title field as plain text.
|
|
23
|
+
*
|
|
24
|
+
* @example Rendering a Rich Text field:
|
|
25
|
+
* ```svelte
|
|
26
|
+
* <PrismicText field={document.data.example_rich_text} />
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
17
29
|
export default class PrismicText extends SvelteComponentTyped<PrismicTextProps, PrismicTextEvents, PrismicTextSlots> {
|
|
18
30
|
}
|
|
19
31
|
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script>import TodoSliceComponent from "./TodoSliceComponent.svelte";
|
|
2
|
+
/**
|
|
3
|
+
* An array of Prismic Slices, such as the `slices` property from a Prismic document.
|
|
4
|
+
*/
|
|
5
|
+
export let slices = [];
|
|
6
|
+
/**
|
|
7
|
+
* An object that maps Slice components to their corresponding API IDs
|
|
8
|
+
*
|
|
9
|
+
* @example An example map:
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* import BlockQuote from "./BlockQuote.svelte";
|
|
13
|
+
* import HeroImage from "./HeroImage.svelte";
|
|
14
|
+
*
|
|
15
|
+
* const components = {
|
|
16
|
+
* block_quote: BlockQuote,
|
|
17
|
+
* hero_image: HeroImage,
|
|
18
|
+
* };
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export let components = {};
|
|
22
|
+
/**
|
|
23
|
+
* Arbitrary data passed to all Slice components as a `context` prop.
|
|
24
|
+
*/
|
|
25
|
+
export let context = {};
|
|
26
|
+
/**
|
|
27
|
+
* The Svelte component rendered if a component mapping from the `components`
|
|
28
|
+
* prop cannot be found.
|
|
29
|
+
*/
|
|
30
|
+
export let defaultComponent = undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Whether the app is in development mode. When true, the SliceZone may
|
|
33
|
+
* display error messages in the UI.
|
|
34
|
+
*/
|
|
35
|
+
export let dev = false;
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<!--
|
|
39
|
+
@component
|
|
40
|
+
Component to render an array of Prismic Slices.
|
|
41
|
+
|
|
42
|
+
@example Rendering a Rich Text field:
|
|
43
|
+
```svelte
|
|
44
|
+
<SliceZone slices={document.data.slices} components={{
|
|
45
|
+
block_quote: BlockQuote,
|
|
46
|
+
hero_image: HeroImage
|
|
47
|
+
}} />
|
|
48
|
+
```
|
|
49
|
+
-->
|
|
50
|
+
|
|
51
|
+
{#each slices as slice, index}
|
|
52
|
+
{@const type = "slice_type" in slice ? slice.slice_type : slice.type}
|
|
53
|
+
{@const Component = components[type] || defaultComponent}
|
|
54
|
+
{#if Component}
|
|
55
|
+
<svelte:component this={Component} {slice} {slices} {context} {index} />
|
|
56
|
+
{:else}
|
|
57
|
+
<TodoSliceComponent {slice} {dev} />
|
|
58
|
+
{/if}
|
|
59
|
+
{/each}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { SvelteComponent } from "svelte";
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
/**
|
|
6
|
+
* An array of Prismic Slices, such as the `slices` property from a Prismic document.
|
|
7
|
+
*/ slices?: ({
|
|
8
|
+
slice_type: string;
|
|
9
|
+
} | {
|
|
10
|
+
type: string;
|
|
11
|
+
})[] | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* An object that maps Slice components to their corresponding API IDs
|
|
14
|
+
*
|
|
15
|
+
* @example An example map:
|
|
16
|
+
*
|
|
17
|
+
* ```js
|
|
18
|
+
* import BlockQuote from "./BlockQuote.svelte";
|
|
19
|
+
* import HeroImage from "./HeroImage.svelte";
|
|
20
|
+
*
|
|
21
|
+
* const components = {
|
|
22
|
+
* block_quote: BlockQuote,
|
|
23
|
+
* hero_image: HeroImage,
|
|
24
|
+
* };
|
|
25
|
+
* ```
|
|
26
|
+
*/ components?: Record<string, new (...args: any[]) => SvelteComponent> | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Arbitrary data passed to all Slice components as a `context` prop.
|
|
29
|
+
*/ context?: any;
|
|
30
|
+
/**
|
|
31
|
+
* The Svelte component rendered if a component mapping from the `components`
|
|
32
|
+
* prop cannot be found.
|
|
33
|
+
*/ defaultComponent?: SvelteComponent | (new (...args: any[]) => SvelteComponent) | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Whether the app is in development mode. When true, the SliceZone may
|
|
36
|
+
* display error messages in the UI.
|
|
37
|
+
*/ dev?: boolean | undefined;
|
|
38
|
+
};
|
|
39
|
+
events: {
|
|
40
|
+
[evt: string]: CustomEvent<any>;
|
|
41
|
+
};
|
|
42
|
+
slots: {};
|
|
43
|
+
};
|
|
44
|
+
export type SliceZoneProps = typeof __propDef.props;
|
|
45
|
+
export type SliceZoneEvents = typeof __propDef.events;
|
|
46
|
+
export type SliceZoneSlots = typeof __propDef.slots;
|
|
47
|
+
/**
|
|
48
|
+
* Component to render an array of Prismic Slices.
|
|
49
|
+
*
|
|
50
|
+
* @example Rendering a Rich Text field:
|
|
51
|
+
* ```svelte
|
|
52
|
+
* <SliceZone slices={document.data.slices} components={{
|
|
53
|
+
* block_quote: BlockQuote,
|
|
54
|
+
* hero_image: HeroImage
|
|
55
|
+
* }} />
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export default class SliceZone extends SvelteComponentTyped<SliceZoneProps, SliceZoneEvents, SliceZoneSlots> {
|
|
59
|
+
}
|
|
60
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as PrismicEmbed } from "./PrismicEmbed.svelte";
|
|
2
|
+
export { default as PrismicImage } from "./PrismicImage.svelte";
|
|
3
|
+
export { default as PrismicLink } from "./PrismicLink.svelte";
|
|
4
|
+
export { default as PrismicText } from "./PrismicText.svelte";
|
|
5
|
+
export { default as PrismicRichText } from "./PrismicRichText/PrismicRichText.svelte";
|
|
6
|
+
export { default as SliceZone } from "./SliceZone.svelte";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as PrismicEmbed } from "./PrismicEmbed.svelte";
|
|
2
|
+
export { default as PrismicImage } from "./PrismicImage.svelte";
|
|
3
|
+
export { default as PrismicLink } from "./PrismicLink.svelte";
|
|
4
|
+
export { default as PrismicText } from "./PrismicText.svelte";
|
|
5
|
+
export { default as PrismicRichText } from "./PrismicRichText/PrismicRichText.svelte";
|
|
6
|
+
export { default as SliceZone } from "./SliceZone.svelte";
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PrismicEmbed, PrismicImage, PrismicLink, PrismicText, PrismicRichText, SliceZone, } from "./components";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import * as prismicH from "@prismicio/helpers";
|
|
3
|
+
import type * as prismicT from "@prismicio/types";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* An Embed field from Prismic.
|
|
7
|
+
*/
|
|
8
|
+
export let field: prismicT.EmbedField;
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<!--
|
|
12
|
+
@component
|
|
13
|
+
Component to render a Prismic Embed field.
|
|
14
|
+
|
|
15
|
+
@example Rendering an Embed field:
|
|
16
|
+
```svelte
|
|
17
|
+
<PrismicEmbed field={document.data.example_embed} />
|
|
18
|
+
```
|
|
19
|
+
-->
|
|
20
|
+
|
|
21
|
+
{#if prismicH.isFilled.embed(field)}
|
|
22
|
+
<div
|
|
23
|
+
data-oembed={field.embed_url}
|
|
24
|
+
data-oembed-type={field.type}
|
|
25
|
+
data-oembed-provider={field.provider_name}
|
|
26
|
+
>
|
|
27
|
+
{@html field.html}
|
|
28
|
+
</div>
|
|
29
|
+
{/if}
|
|
@@ -165,13 +165,12 @@
|
|
|
165
165
|
widths: widths === "defaults" ? undefined : widths,
|
|
166
166
|
...imgixParams,
|
|
167
167
|
})}
|
|
168
|
-
|
|
169
168
|
<img
|
|
170
169
|
{src}
|
|
171
170
|
{srcset}
|
|
172
171
|
alt={alt ?? field.alt ?? fallbackAlt}
|
|
173
172
|
width={width || height ? resolvedWidth : field.dimensions.width}
|
|
174
|
-
height={height || width ? resolvedHeight : field.dimensions.height}
|
|
173
|
+
height={height || (width ? resolvedHeight : field.dimensions.height)}
|
|
175
174
|
{...$$restProps}
|
|
176
175
|
/>
|
|
177
176
|
{:else}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { PrismicImage, PrismicEmbed, PrismicLink } from "$lib/components";
|
|
3
|
+
import type { LinkResolverFunction } from "@prismicio/helpers";
|
|
4
|
+
import type { RTAnyNode } from "@prismicio/types";
|
|
5
|
+
|
|
6
|
+
export let node: RTAnyNode;
|
|
7
|
+
|
|
8
|
+
export let linkResolver: LinkResolverFunction | undefined = undefined;
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
{#if node.type === "heading1"}
|
|
12
|
+
<h1><slot /></h1>
|
|
13
|
+
{:else if node.type === "heading2"}
|
|
14
|
+
<h2><slot /></h2>
|
|
15
|
+
{:else if node.type === "heading3"}
|
|
16
|
+
<h3><slot /></h3>
|
|
17
|
+
{:else if node.type === "heading4"}
|
|
18
|
+
<h4><slot /></h4>
|
|
19
|
+
{:else if node.type === "heading5"}
|
|
20
|
+
<h5><slot /></h5>
|
|
21
|
+
{:else if node.type === "heading6"}
|
|
22
|
+
<h6><slot /></h6>
|
|
23
|
+
{:else if node.type === "paragraph"}
|
|
24
|
+
<p><slot /></p>
|
|
25
|
+
{:else if node.type === "preformatted"}
|
|
26
|
+
<pre><slot /></pre>
|
|
27
|
+
{:else if node.type === "strong"}
|
|
28
|
+
<strong><slot /></strong>
|
|
29
|
+
{:else if node.type === "em"}
|
|
30
|
+
<em><slot /></em>
|
|
31
|
+
{:else if node.type === "list-item"}
|
|
32
|
+
<li><slot /></li>
|
|
33
|
+
{:else if node.type === "o-list-item"}
|
|
34
|
+
<li><slot /></li>
|
|
35
|
+
{:else if node.type === "group-list-item"}
|
|
36
|
+
<ul><slot /></ul>
|
|
37
|
+
{:else if node.type === "group-o-list-item"}
|
|
38
|
+
<ol><slot /></ol>
|
|
39
|
+
{:else if node.type === "image"}
|
|
40
|
+
<p class="block-img">
|
|
41
|
+
<PrismicImage field={node} />
|
|
42
|
+
</p>
|
|
43
|
+
{:else if node.type === "embed"}
|
|
44
|
+
<PrismicEmbed field={node.oembed} />
|
|
45
|
+
{:else if node.type === "hyperlink"}
|
|
46
|
+
<PrismicLink {linkResolver} field={node.data}><slot /></PrismicLink>
|
|
47
|
+
{:else if node.type === "label"}
|
|
48
|
+
<span class={node.data.label}><slot /></span>
|
|
49
|
+
{:else}
|
|
50
|
+
{#each node.text.split("\n") as line, index}
|
|
51
|
+
{#if index > 0}
|
|
52
|
+
<br />
|
|
53
|
+
{/if}
|
|
54
|
+
{line}
|
|
55
|
+
{/each}
|
|
56
|
+
{/if}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { SvelteComponent } from "svelte";
|
|
3
|
+
import type { RichTextField } from "@prismicio/types";
|
|
4
|
+
import {
|
|
5
|
+
asTree,
|
|
6
|
+
wrapMapSerializer,
|
|
7
|
+
type RichTextFunctionSerializer,
|
|
8
|
+
type RichTextMapSerializer,
|
|
9
|
+
type TreeNode,
|
|
10
|
+
} from "@prismicio/richtext";
|
|
11
|
+
|
|
12
|
+
import Serialize from "./Serialize.svelte";
|
|
13
|
+
import type { LinkResolverFunction } from "@prismicio/helpers";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The Prismic Rich Text field to render.
|
|
17
|
+
*/
|
|
18
|
+
export let field: RichTextField = [];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The Link Resolver used to resolve links.
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* If your app uses Route Resolvers when querying for your Prismic
|
|
25
|
+
* repository's content, a Link Resolver does not need to be provided.
|
|
26
|
+
* @see Learn about Link Resolvers and Route Resolvers {@link https://prismic.io/docs/route-resolver}
|
|
27
|
+
*/
|
|
28
|
+
export let linkResolver: LinkResolverFunction | undefined = undefined;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* An object that maps Rich Text blocks to functions.
|
|
32
|
+
*
|
|
33
|
+
* @example A serializer that modififes `h1` and `em` elements:
|
|
34
|
+
*
|
|
35
|
+
* ```js
|
|
36
|
+
* import Title from "./Title.svelte";
|
|
37
|
+
*
|
|
38
|
+
* const field = exampleRichText;
|
|
39
|
+
*
|
|
40
|
+
* const richTextSerializer = {
|
|
41
|
+
* h1: () => Title,
|
|
42
|
+
* em: ({ children }) => `<mark>${children}</mark>`,
|
|
43
|
+
* };
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export let richTextSerializer:
|
|
47
|
+
| RichTextMapSerializer<typeof SvelteComponent, TreeNode>
|
|
48
|
+
| RichTextFunctionSerializer<typeof SvelteComponent, TreeNode>
|
|
49
|
+
| undefined = undefined;
|
|
50
|
+
|
|
51
|
+
const resolvedSerializer =
|
|
52
|
+
typeof richTextSerializer === "object"
|
|
53
|
+
? wrapMapSerializer(richTextSerializer)
|
|
54
|
+
: richTextSerializer;
|
|
55
|
+
|
|
56
|
+
const nodes = asTree(field).children;
|
|
57
|
+
</script>
|
|
58
|
+
|
|
59
|
+
<!--
|
|
60
|
+
@component
|
|
61
|
+
Component to render a Prismic Rich Text or Title field as HTML.
|
|
62
|
+
|
|
63
|
+
@example Rendering a Link field:
|
|
64
|
+
```svelte
|
|
65
|
+
<PrismicRichText field={document.data.example_rich_text} />
|
|
66
|
+
```
|
|
67
|
+
-->
|
|
68
|
+
|
|
69
|
+
<Serialize {nodes} serializer={resolvedSerializer} {linkResolver} />
|