@prismicio/vue 4.2.3 → 5.0.0-alpha.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.
Files changed (245) hide show
  1. package/README.md +4 -4
  2. package/dist/PrismicEmbed.vue.cjs +25 -0
  3. package/dist/PrismicEmbed.vue.cjs.map +1 -0
  4. package/dist/PrismicEmbed.vue.d.ts +19 -0
  5. package/dist/PrismicEmbed.vue.js +26 -0
  6. package/dist/PrismicEmbed.vue.js.map +1 -0
  7. package/dist/PrismicEmbed.vue2.cjs +4 -0
  8. package/dist/PrismicEmbed.vue2.cjs.map +1 -0
  9. package/dist/PrismicEmbed.vue2.js +5 -0
  10. package/dist/PrismicEmbed.vue2.js.map +1 -0
  11. package/dist/PrismicImage.vue.cjs +84 -0
  12. package/dist/PrismicImage.vue.cjs.map +1 -0
  13. package/dist/PrismicImage.vue.d.ts +224 -0
  14. package/dist/PrismicImage.vue.js +85 -0
  15. package/dist/PrismicImage.vue.js.map +1 -0
  16. package/dist/PrismicImage.vue2.cjs +4 -0
  17. package/dist/PrismicImage.vue2.cjs.map +1 -0
  18. package/dist/PrismicImage.vue2.js +5 -0
  19. package/dist/PrismicImage.vue2.js.map +1 -0
  20. package/dist/PrismicLink.vue.cjs +100 -0
  21. package/dist/PrismicLink.vue.cjs.map +1 -0
  22. package/dist/PrismicLink.vue.d.ts +278 -0
  23. package/dist/PrismicLink.vue.js +101 -0
  24. package/dist/PrismicLink.vue.js.map +1 -0
  25. package/dist/PrismicLink.vue2.cjs +4 -0
  26. package/dist/PrismicLink.vue2.cjs.map +1 -0
  27. package/dist/PrismicLink.vue2.js +5 -0
  28. package/dist/PrismicLink.vue2.js.map +1 -0
  29. package/dist/PrismicRichText/DeprecatedPrismicRichText.vue.cjs +90 -0
  30. package/dist/PrismicRichText/DeprecatedPrismicRichText.vue.cjs.map +1 -0
  31. package/dist/PrismicRichText/DeprecatedPrismicRichText.vue.d.ts +7 -0
  32. package/dist/PrismicRichText/DeprecatedPrismicRichText.vue.js +91 -0
  33. package/dist/PrismicRichText/DeprecatedPrismicRichText.vue.js.map +1 -0
  34. package/dist/PrismicRichText/DeprecatedPrismicRichText.vue2.cjs +4 -0
  35. package/dist/PrismicRichText/DeprecatedPrismicRichText.vue2.cjs.map +1 -0
  36. package/dist/PrismicRichText/DeprecatedPrismicRichText.vue2.js +5 -0
  37. package/dist/PrismicRichText/DeprecatedPrismicRichText.vue2.js.map +1 -0
  38. package/dist/PrismicRichText/PrismicRichText.vue.cjs +85 -0
  39. package/dist/PrismicRichText/PrismicRichText.vue.cjs.map +1 -0
  40. package/dist/PrismicRichText/PrismicRichText.vue.d.ts +57 -0
  41. package/dist/PrismicRichText/PrismicRichText.vue.js +86 -0
  42. package/dist/PrismicRichText/PrismicRichText.vue.js.map +1 -0
  43. package/dist/PrismicRichText/PrismicRichText.vue2.cjs +4 -0
  44. package/dist/PrismicRichText/PrismicRichText.vue2.cjs.map +1 -0
  45. package/dist/PrismicRichText/PrismicRichText.vue2.js +5 -0
  46. package/dist/PrismicRichText/PrismicRichText.vue2.js.map +1 -0
  47. package/dist/PrismicRichText/PrismicRichTextDefaultComponent.vue.cjs +133 -0
  48. package/dist/PrismicRichText/PrismicRichTextDefaultComponent.vue.cjs.map +1 -0
  49. package/dist/PrismicRichText/PrismicRichTextDefaultComponent.vue.d.ts +37 -0
  50. package/dist/PrismicRichText/PrismicRichTextDefaultComponent.vue.js +134 -0
  51. package/dist/PrismicRichText/PrismicRichTextDefaultComponent.vue.js.map +1 -0
  52. package/dist/PrismicRichText/PrismicRichTextDefaultComponent.vue2.cjs +4 -0
  53. package/dist/PrismicRichText/PrismicRichTextDefaultComponent.vue2.cjs.map +1 -0
  54. package/dist/PrismicRichText/PrismicRichTextDefaultComponent.vue2.js +5 -0
  55. package/dist/PrismicRichText/PrismicRichTextDefaultComponent.vue2.js.map +1 -0
  56. package/dist/PrismicRichText/PrismicRichTextSerialize.vue.cjs +47 -0
  57. package/dist/PrismicRichText/PrismicRichTextSerialize.vue.cjs.map +1 -0
  58. package/dist/PrismicRichText/PrismicRichTextSerialize.vue.d.ts +10 -0
  59. package/dist/PrismicRichText/PrismicRichTextSerialize.vue.js +48 -0
  60. package/dist/PrismicRichText/PrismicRichTextSerialize.vue.js.map +1 -0
  61. package/dist/PrismicRichText/PrismicRichTextSerialize.vue2.cjs +4 -0
  62. package/dist/PrismicRichText/PrismicRichTextSerialize.vue2.cjs.map +1 -0
  63. package/dist/PrismicRichText/PrismicRichTextSerialize.vue2.js +5 -0
  64. package/dist/PrismicRichText/PrismicRichTextSerialize.vue2.js.map +1 -0
  65. package/dist/PrismicRichText/getRichTextComponentProps.cjs +10 -0
  66. package/dist/PrismicRichText/getRichTextComponentProps.cjs.map +1 -0
  67. package/dist/PrismicRichText/getRichTextComponentProps.d.ts +49 -0
  68. package/dist/PrismicRichText/getRichTextComponentProps.js +10 -0
  69. package/dist/PrismicRichText/getRichTextComponentProps.js.map +1 -0
  70. package/dist/PrismicRichText/index.d.ts +2 -0
  71. package/dist/PrismicRichText/types.d.ts +22 -0
  72. package/dist/PrismicText.vue.cjs +43 -0
  73. package/dist/PrismicText.vue.cjs.map +1 -0
  74. package/dist/PrismicText.vue.d.ts +31 -0
  75. package/dist/PrismicText.vue.js +44 -0
  76. package/dist/PrismicText.vue.js.map +1 -0
  77. package/dist/PrismicText.vue2.cjs +4 -0
  78. package/dist/PrismicText.vue2.cjs.map +1 -0
  79. package/dist/PrismicText.vue2.js +5 -0
  80. package/dist/PrismicText.vue2.js.map +1 -0
  81. package/dist/SliceZone/SliceZone.vue.cjs +63 -0
  82. package/dist/SliceZone/SliceZone.vue.cjs.map +1 -0
  83. package/dist/SliceZone/SliceZone.vue.d.ts +40 -0
  84. package/dist/SliceZone/SliceZone.vue.js +64 -0
  85. package/dist/SliceZone/SliceZone.vue.js.map +1 -0
  86. package/dist/SliceZone/SliceZone.vue2.cjs +4 -0
  87. package/dist/SliceZone/SliceZone.vue2.cjs.map +1 -0
  88. package/dist/SliceZone/SliceZone.vue2.js +5 -0
  89. package/dist/SliceZone/SliceZone.vue2.js.map +1 -0
  90. package/dist/SliceZone/TODOSliceComponent.cjs +29 -0
  91. package/dist/SliceZone/TODOSliceComponent.cjs.map +1 -0
  92. package/dist/SliceZone/TODOSliceComponent.d.ts +9 -0
  93. package/dist/SliceZone/TODOSliceComponent.js +29 -0
  94. package/dist/SliceZone/TODOSliceComponent.js.map +1 -0
  95. package/dist/SliceZone/defineSliceZoneComponents.cjs +14 -0
  96. package/dist/SliceZone/defineSliceZoneComponents.cjs.map +1 -0
  97. package/dist/SliceZone/defineSliceZoneComponents.d.ts +36 -0
  98. package/dist/SliceZone/defineSliceZoneComponents.js +14 -0
  99. package/dist/SliceZone/defineSliceZoneComponents.js.map +1 -0
  100. package/dist/SliceZone/getSliceComponentProps.cjs +22 -0
  101. package/dist/SliceZone/getSliceComponentProps.cjs.map +1 -0
  102. package/dist/SliceZone/getSliceComponentProps.d.ts +66 -0
  103. package/dist/SliceZone/getSliceComponentProps.js +22 -0
  104. package/dist/SliceZone/getSliceComponentProps.js.map +1 -0
  105. package/dist/SliceZone/index.d.ts +4 -0
  106. package/dist/SliceZone/types.d.ts +97 -0
  107. package/dist/createPrismic.cjs +17 -50
  108. package/dist/createPrismic.cjs.map +1 -1
  109. package/dist/createPrismic.d.ts +10 -0
  110. package/dist/createPrismic.js +16 -27
  111. package/dist/createPrismic.js.map +1 -1
  112. package/dist/index.cjs +21 -40
  113. package/dist/index.cjs.map +1 -1
  114. package/dist/index.d.ts +19 -9
  115. package/dist/index.js +19 -38
  116. package/dist/index.js.map +1 -1
  117. package/dist/lib/Wrapper.vue.cjs +20 -0
  118. package/dist/lib/Wrapper.vue.cjs.map +1 -0
  119. package/dist/lib/Wrapper.vue.d.ts +34 -0
  120. package/dist/lib/Wrapper.vue.js +21 -0
  121. package/dist/lib/Wrapper.vue.js.map +1 -0
  122. package/dist/lib/Wrapper.vue2.cjs +4 -0
  123. package/dist/lib/Wrapper.vue2.cjs.map +1 -0
  124. package/dist/lib/Wrapper.vue2.js +5 -0
  125. package/dist/lib/Wrapper.vue2.js.map +1 -0
  126. package/dist/lib/devMsg.cjs +8 -0
  127. package/dist/lib/devMsg.cjs.map +1 -0
  128. package/dist/lib/devMsg.d.ts +16 -0
  129. package/dist/lib/devMsg.js +8 -0
  130. package/dist/lib/devMsg.js.map +1 -0
  131. package/dist/lib/isInternalURL.cjs.map +1 -1
  132. package/dist/lib/isInternalURL.js.map +1 -1
  133. package/dist/package.json.cjs +5 -0
  134. package/dist/package.json.cjs.map +1 -0
  135. package/dist/package.json.js +5 -0
  136. package/dist/package.json.js.map +1 -0
  137. package/dist/types.d.ts +42 -58
  138. package/dist/usePrismic.cjs +3 -2
  139. package/dist/usePrismic.cjs.map +1 -1
  140. package/dist/usePrismic.d.ts +13 -5
  141. package/dist/usePrismic.js +2 -1
  142. package/dist/usePrismic.js.map +1 -1
  143. package/package.json +33 -36
  144. package/src/PrismicEmbed.vue +42 -0
  145. package/src/PrismicImage.vue +160 -0
  146. package/src/PrismicLink.vue +191 -0
  147. package/src/PrismicRichText/DeprecatedPrismicRichText.vue +130 -0
  148. package/src/PrismicRichText/PrismicRichText.vue +157 -0
  149. package/src/PrismicRichText/PrismicRichTextDefaultComponent.vue +63 -0
  150. package/src/PrismicRichText/PrismicRichTextSerialize.vue +52 -0
  151. package/src/PrismicRichText/getRichTextComponentProps.ts +63 -0
  152. package/src/PrismicRichText/index.ts +3 -0
  153. package/src/PrismicRichText/types.ts +37 -0
  154. package/src/PrismicText.vue +63 -0
  155. package/src/SliceZone/SliceZone.vue +113 -0
  156. package/src/SliceZone/TODOSliceComponent.ts +49 -0
  157. package/src/SliceZone/defineSliceZoneComponents.ts +67 -0
  158. package/src/SliceZone/getSliceComponentProps.ts +98 -0
  159. package/src/SliceZone/index.ts +13 -0
  160. package/src/SliceZone/types.ts +163 -0
  161. package/src/createPrismic.ts +54 -53
  162. package/src/index.ts +33 -58
  163. package/src/lib/Wrapper.vue +22 -0
  164. package/src/lib/devMsg.ts +20 -0
  165. package/src/lib/isInternalURL.ts +4 -4
  166. package/src/types.ts +91 -109
  167. package/src/usePrismic.ts +16 -9
  168. package/dist/components/PrismicEmbed.cjs +0 -36
  169. package/dist/components/PrismicEmbed.cjs.map +0 -1
  170. package/dist/components/PrismicEmbed.d.ts +0 -59
  171. package/dist/components/PrismicEmbed.js +0 -36
  172. package/dist/components/PrismicEmbed.js.map +0 -1
  173. package/dist/components/PrismicImage.cjs +0 -122
  174. package/dist/components/PrismicImage.cjs.map +0 -1
  175. package/dist/components/PrismicImage.d.ts +0 -163
  176. package/dist/components/PrismicImage.js +0 -122
  177. package/dist/components/PrismicImage.js.map +0 -1
  178. package/dist/components/PrismicLink.cjs +0 -115
  179. package/dist/components/PrismicLink.cjs.map +0 -1
  180. package/dist/components/PrismicLink.d.ts +0 -192
  181. package/dist/components/PrismicLink.js +0 -115
  182. package/dist/components/PrismicLink.js.map +0 -1
  183. package/dist/components/PrismicRichText.cjs +0 -108
  184. package/dist/components/PrismicRichText.cjs.map +0 -1
  185. package/dist/components/PrismicRichText.d.ts +0 -161
  186. package/dist/components/PrismicRichText.js +0 -108
  187. package/dist/components/PrismicRichText.js.map +0 -1
  188. package/dist/components/PrismicText.cjs +0 -57
  189. package/dist/components/PrismicText.cjs.map +0 -1
  190. package/dist/components/PrismicText.d.ts +0 -119
  191. package/dist/components/PrismicText.js +0 -57
  192. package/dist/components/PrismicText.js.map +0 -1
  193. package/dist/components/SliceZone.cjs +0 -156
  194. package/dist/components/SliceZone.cjs.map +0 -1
  195. package/dist/components/SliceZone.d.ts +0 -375
  196. package/dist/components/SliceZone.js +0 -156
  197. package/dist/components/SliceZone.js.map +0 -1
  198. package/dist/components/index.d.ts +0 -12
  199. package/dist/composables.cjs +0 -40
  200. package/dist/composables.cjs.map +0 -1
  201. package/dist/composables.d.ts +0 -384
  202. package/dist/composables.js +0 -40
  203. package/dist/composables.js.map +0 -1
  204. package/dist/globalExtensions.d.ts +0 -11
  205. package/dist/injectionSymbols.cjs +0 -5
  206. package/dist/injectionSymbols.cjs.map +0 -1
  207. package/dist/injectionSymbols.d.ts +0 -9
  208. package/dist/injectionSymbols.js +0 -5
  209. package/dist/injectionSymbols.js.map +0 -1
  210. package/dist/lib/__PRODUCTION__.cjs +0 -8
  211. package/dist/lib/__PRODUCTION__.cjs.map +0 -1
  212. package/dist/lib/__PRODUCTION__.d.ts +0 -7
  213. package/dist/lib/__PRODUCTION__.js +0 -8
  214. package/dist/lib/__PRODUCTION__.js.map +0 -1
  215. package/dist/lib/getSlots.cjs +0 -19
  216. package/dist/lib/getSlots.cjs.map +0 -1
  217. package/dist/lib/getSlots.d.ts +0 -14
  218. package/dist/lib/getSlots.js +0 -19
  219. package/dist/lib/getSlots.js.map +0 -1
  220. package/dist/lib/simplyResolveComponent.cjs +0 -8
  221. package/dist/lib/simplyResolveComponent.cjs.map +0 -1
  222. package/dist/lib/simplyResolveComponent.d.ts +0 -12
  223. package/dist/lib/simplyResolveComponent.js +0 -8
  224. package/dist/lib/simplyResolveComponent.js.map +0 -1
  225. package/dist/useStatefulPrismicClientMethod.cjs +0 -39
  226. package/dist/useStatefulPrismicClientMethod.cjs.map +0 -1
  227. package/dist/useStatefulPrismicClientMethod.d.ts +0 -64
  228. package/dist/useStatefulPrismicClientMethod.js +0 -39
  229. package/dist/useStatefulPrismicClientMethod.js.map +0 -1
  230. package/src/components/PrismicEmbed.ts +0 -91
  231. package/src/components/PrismicImage.ts +0 -309
  232. package/src/components/PrismicLink.ts +0 -313
  233. package/src/components/PrismicRichText.ts +0 -282
  234. package/src/components/PrismicText.ts +0 -167
  235. package/src/components/SliceZone.ts +0 -619
  236. package/src/components/index.ts +0 -46
  237. package/src/composables.ts +0 -474
  238. package/src/globalExtensions.ts +0 -12
  239. package/src/injectionSymbols.ts +0 -17
  240. package/src/lib/__PRODUCTION__.ts +0 -12
  241. package/src/lib/getSlots.ts +0 -34
  242. package/src/lib/simplyResolveComponent.ts +0 -23
  243. package/src/useStatefulPrismicClientMethod.ts +0 -156
  244. package/vetur/attributes.json +0 -113
  245. package/vetur/tags.json +0 -60
@@ -1,313 +0,0 @@
1
- import {
2
- LinkField,
3
- LinkResolverFunction,
4
- PrismicDocument,
5
- asLink,
6
- } from "@prismicio/client";
7
- import {
8
- AllowedComponentProps,
9
- ComponentCustomProps,
10
- ComputedRef,
11
- ConcreteComponent,
12
- DefineComponent,
13
- PropType,
14
- Raw,
15
- VNodeProps,
16
- computed,
17
- defineComponent,
18
- h,
19
- reactive,
20
- unref,
21
- } from "vue";
22
-
23
- import { getSlots } from "../lib/getSlots";
24
- import { isInternalURL } from "../lib/isInternalURL";
25
- import { simplyResolveComponent } from "../lib/simplyResolveComponent";
26
-
27
- import { VueUseOptions } from "../types";
28
-
29
- import { usePrismic } from "../usePrismic";
30
-
31
- /**
32
- * The default component rendered for internal URLs.
33
- */
34
- const defaultInternalComponent = "router-link";
35
-
36
- /**
37
- * The default component rendered for external URLs.
38
- */
39
- const defaultExternalComponent = "a";
40
-
41
- /**
42
- * The default rel attribute rendered for blank target URLs.
43
- */
44
- const defaultBlankTargetRelAttribute = "noopener noreferrer";
45
-
46
- /**
47
- * Props for `<PrismicLink />`.
48
- */
49
- export type PrismicLinkProps = {
50
- /**
51
- * The Prismic link field or document to render.
52
- */
53
- field: LinkField | PrismicDocument;
54
-
55
- /**
56
- * A link resolver function used to resolve links when not using the route
57
- * resolver parameter with `@prismicio/client`.
58
- *
59
- * @defaultValue The link resolver provided to `@prismicio/vue` plugin if configured.
60
- *
61
- * @see Link resolver documentation {@link https://prismic.io/docs/core-concepts/link-resolver-route-resolver#link-resolver}
62
- */
63
- linkResolver?: LinkResolverFunction;
64
-
65
- /**
66
- * An explicit `target` attribute to apply to the rendered link.
67
- */
68
- target?: string | null;
69
-
70
- /**
71
- * An explicit `rel` attribute to apply to the rendered link.
72
- */
73
- rel?: string | null;
74
-
75
- /**
76
- * Value of the `rel` attribute to use on links rendered with
77
- * `target="_blank"`.
78
- *
79
- * @defaultValue The one provided to `@prismicio/vue` plugin if configured, `"noopener noreferrer"` otherwise.
80
- */
81
- blankTargetRelAttribute?: string | null;
82
-
83
- /**
84
- * An HTML tag name, a component, or a functional component used to render
85
- * internal links.
86
- *
87
- * @remarks
88
- * HTML tag names will be rendered using the anchor tag interface (`href`,
89
- * `target`, and `rel` attributes).
90
- * @remarks
91
- * Components will be rendered using Vue Router {@link RouterLink} interface
92
- * (`to` props).
93
- * @defaultValue The one provided to `@prismicio/vue` plugin if configured, {@link RouterLink} otherwise.
94
- */
95
- internalComponent?: string | ConcreteComponent | Raw<DefineComponent>;
96
-
97
- /**
98
- * An HTML tag name, a component, or a functional component used to render
99
- * external links.
100
- *
101
- * @remarks
102
- * HTML tag names will be rendered using the anchor tag interface (`href`,
103
- * `target`, and `rel` attributes).
104
- * @remarks
105
- * Components will be rendered using Vue Router {@link RouterLink} interface
106
- * (`to` props).
107
- * @defaultValue The one provided to `@prismicio/vue` plugin if configured, `"a"` otherwise.
108
- */
109
- externalComponent?: string | ConcreteComponent | Raw<DefineComponent>;
110
- };
111
-
112
- /**
113
- * Options for {@link usePrismicLink}.
114
- */
115
- export type UsePrismicLinkOptions = VueUseOptions<PrismicLinkProps>;
116
-
117
- /**
118
- * Return type of {@link usePrismicLink}.
119
- */
120
- export type UsePrismicLinkReturnType = {
121
- /**
122
- * Suggested component to render for provided link field.
123
- */
124
- type: ComputedRef<string | ConcreteComponent | Raw<DefineComponent>>;
125
-
126
- /**
127
- * Resolved anchor `href` value.
128
- */
129
- href: ComputedRef<string>;
130
-
131
- /**
132
- * Resolved anchor `target` value.
133
- */
134
- target: ComputedRef<string | null>;
135
-
136
- /**
137
- * Resolved anchor `rel` value.
138
- */
139
- rel: ComputedRef<string | null>;
140
- };
141
-
142
- /**
143
- * A low level composable that returns resolved information about a Prismic link
144
- * field.
145
- *
146
- * @param props - {@link UsePrismicLinkOptions}
147
- *
148
- * @returns - Resolved link information {@link UsePrismicLinkReturnType}
149
- */
150
- export const usePrismicLink = (
151
- props: UsePrismicLinkOptions,
152
- ): UsePrismicLinkReturnType => {
153
- const { options } = usePrismic();
154
-
155
- const type = computed(() => {
156
- const internalComponent =
157
- unref(props.internalComponent) ||
158
- options.components?.linkInternalComponent ||
159
- defaultInternalComponent;
160
-
161
- const externalComponent =
162
- unref(props.externalComponent) ||
163
- options.components?.linkExternalComponent ||
164
- defaultExternalComponent;
165
-
166
- return href.value && isInternalURL(href.value) && !target.value
167
- ? internalComponent
168
- : externalComponent;
169
- });
170
- const href = computed(() => {
171
- const field = unref(props.field);
172
- const linkResolver = unref(props.linkResolver) ?? options.linkResolver;
173
-
174
- return asLink(field, linkResolver) ?? "";
175
- });
176
- const target = computed(() => {
177
- const field = unref(props.field);
178
- const target = unref(props.target);
179
-
180
- if (typeof target !== "undefined") {
181
- return target;
182
- } else {
183
- return field && "target" in field && field.target ? field.target : null;
184
- }
185
- });
186
- const rel = computed(() => {
187
- const rel = unref(props.rel);
188
-
189
- if (typeof rel !== "undefined") {
190
- return rel;
191
- } else if (target.value === "_blank") {
192
- const blankTargetRelAttribute = unref(props.blankTargetRelAttribute);
193
-
194
- if (typeof blankTargetRelAttribute !== "undefined") {
195
- return blankTargetRelAttribute;
196
- } else {
197
- return typeof options.components?.linkBlankTargetRelAttribute !==
198
- "undefined"
199
- ? options.components.linkBlankTargetRelAttribute
200
- : defaultBlankTargetRelAttribute;
201
- }
202
- } else {
203
- return null;
204
- }
205
- });
206
-
207
- return {
208
- type,
209
- href,
210
- target,
211
- rel,
212
- };
213
- };
214
-
215
- /**
216
- * `<PrismicLink />` implementation.
217
- *
218
- * @internal
219
- */
220
- export const PrismicLinkImpl = /*#__PURE__*/ defineComponent({
221
- name: "PrismicLink",
222
- props: {
223
- field: {
224
- type: Object as PropType<LinkField | PrismicDocument>,
225
- required: true,
226
- },
227
- linkResolver: {
228
- type: Function as PropType<LinkResolverFunction>,
229
- default: undefined,
230
- required: false,
231
- },
232
- target: {
233
- type: String as PropType<string | null>,
234
- default: undefined,
235
- required: false,
236
- },
237
- rel: {
238
- type: String as PropType<string | null>,
239
- default: undefined,
240
- required: false,
241
- },
242
- blankTargetRelAttribute: {
243
- type: String as PropType<string | null>,
244
- default: undefined,
245
- required: false,
246
- },
247
- internalComponent: {
248
- type: [String, Object, Function] as PropType<
249
- string | ConcreteComponent | Raw<DefineComponent>
250
- >,
251
- default: undefined,
252
- required: false,
253
- },
254
- externalComponent: {
255
- type: [String, Object, Function] as PropType<
256
- string | ConcreteComponent | Raw<DefineComponent>
257
- >,
258
- default: undefined,
259
- required: false,
260
- },
261
- },
262
- setup(props, { slots }) {
263
- // Prevent fatal if user didn't check for field, throws `Invalid prop` warn
264
- if (!props.field) {
265
- return () => null;
266
- }
267
-
268
- const { type, href, target, rel } = usePrismicLink(props);
269
-
270
- return () => {
271
- const parent =
272
- type.value === "a" ? "a" : simplyResolveComponent(type.value);
273
- const computedSlots = getSlots(
274
- parent,
275
- slots,
276
- reactive({ href: href.value }),
277
- );
278
-
279
- if (typeof parent === "string") {
280
- // Fitting anchor tag interface
281
- return h(
282
- parent,
283
- { href: href.value, target: target.value, rel: rel.value },
284
- computedSlots,
285
- );
286
- } else {
287
- // Fitting Vue Router Link interface
288
- return h(
289
- parent,
290
- { to: href.value, target: target.value, rel: rel.value },
291
- computedSlots,
292
- );
293
- }
294
- };
295
- },
296
- });
297
-
298
- // export the public type for h/tsx inference
299
- // also to avoid inline import() in generated d.ts files
300
- /**
301
- * Component to render a Prismic link field.
302
- *
303
- * @see Component props {@link PrismicLinkProps}
304
- * @see Templating link fields {@link https://prismic.io/docs/technologies/vue-template-content#links-and-content-relationships}
305
- */
306
- export const PrismicLink = PrismicLinkImpl as unknown as {
307
- new (): {
308
- $props: AllowedComponentProps &
309
- ComponentCustomProps &
310
- VNodeProps &
311
- PrismicLinkProps;
312
- };
313
- };
@@ -1,282 +0,0 @@
1
- import {
2
- HTMLFunctionSerializer,
3
- HTMLMapSerializer,
4
- LinkResolverFunction,
5
- RichTextField,
6
- asHTML,
7
- isFilled,
8
- } from "@prismicio/client";
9
- import {
10
- AllowedComponentProps,
11
- Component,
12
- ComponentCustomProps,
13
- ComputedRef,
14
- ConcreteComponent,
15
- DefineComponent,
16
- PropType,
17
- Raw,
18
- VNodeProps,
19
- computed,
20
- defineComponent,
21
- h,
22
- inject,
23
- nextTick,
24
- onBeforeUnmount,
25
- ref,
26
- unref,
27
- watch,
28
- } from "vue";
29
- import { routerKey } from "vue-router";
30
-
31
- import { isInternalURL } from "../lib/isInternalURL";
32
- import { simplyResolveComponent } from "../lib/simplyResolveComponent";
33
-
34
- import { VueUseOptions } from "../types";
35
-
36
- import { usePrismic } from "../usePrismic";
37
-
38
- /**
39
- * The default component rendered to wrap the HTML output.
40
- */
41
- const defaultWrapper = "div";
42
-
43
- /**
44
- * Props for `<PrismicRichText />`.
45
- */
46
- export type PrismicRichTextProps = {
47
- /**
48
- * The Prismic rich text or title field to render.
49
- */
50
- field: RichTextField | null | undefined;
51
-
52
- /**
53
- * A link resolver function used to resolve link when not using the route
54
- * resolver parameter with `@prismicio/client`.
55
- *
56
- * @defaultValue The link resolver provided to `@prismicio/vue` plugin if configured.
57
- *
58
- * @see Link resolver documentation {@link https://prismic.io/docs/core-concepts/link-resolver-route-resolver#link-resolver}
59
- */
60
- linkResolver?: LinkResolverFunction;
61
-
62
- /**
63
- * An HTML serializer to customize the way rich text fields are rendered.
64
- *
65
- * @defaultValue The HTML serializer provided to `@prismicio/vue` plugin if configured.
66
- *
67
- * @see HTML serializer documentation {@link https://prismic.io/docs/core-concepts/html-serializer}
68
- */
69
- serializer?: HTMLFunctionSerializer | HTMLMapSerializer;
70
-
71
- /**
72
- * An HTML serializer to customize the way rich text fields are rendered.
73
- *
74
- * @deprecated Use `serializer` instead.
75
- *
76
- * @defaultValue The HTML serializer provided to `@prismicio/vue` plugin if configured.
77
- *
78
- * @see HTML serializer documentation {@link https://prismic.io/docs/core-concepts/html-serializer}
79
- */
80
- htmlSerializer?: HTMLFunctionSerializer | HTMLMapSerializer;
81
-
82
- /**
83
- * An HTML tag name, a component, or a functional component used to wrap the
84
- * output.
85
- *
86
- * @defaultValue `"div"`
87
- */
88
- wrapper?: string | ConcreteComponent | Raw<DefineComponent>;
89
-
90
- /**
91
- * The HTML value to be rendered when the field is empty. If a fallback is not
92
- * given, `""` (nothing) will be rendered.
93
- */
94
- fallback?: string;
95
- };
96
-
97
- /**
98
- * Options for {@link usePrismicRichText}.
99
- */
100
- export type UsePrismicRichTextOptions = VueUseOptions<
101
- Omit<PrismicRichTextProps, "wrapper">
102
- >;
103
-
104
- /**
105
- * Return type of {@link usePrismicRichText}.
106
- */
107
- export type UsePrismicRichTextReturnType = {
108
- /**
109
- * Serialized rich text field as HTML.
110
- */
111
- html: ComputedRef<string>;
112
- };
113
-
114
- /**
115
- * A low level composable that returns a serialized rich text field as HTML.
116
- *
117
- * @param props - {@link UsePrismicRichTextOptions}
118
- *
119
- * @returns - Serialized rich text field as HTML
120
- * {@link UsePrismicRichTextReturnType}
121
- */
122
- export const usePrismicRichText = (
123
- props: UsePrismicRichTextOptions,
124
- ): UsePrismicRichTextReturnType => {
125
- const { options } = usePrismic();
126
-
127
- const html = computed(() => {
128
- const field = unref(props.field);
129
-
130
- if (!isFilled.richText(field)) {
131
- return unref(props.fallback) ?? "";
132
- }
133
-
134
- const linkResolver = unref(props.linkResolver) ?? options.linkResolver;
135
- const serializer =
136
- unref(props.serializer) ??
137
- unref(props.htmlSerializer) ??
138
- options.richTextSerializer ??
139
- options.htmlSerializer;
140
-
141
- return asHTML(unref(field), linkResolver, serializer);
142
- });
143
-
144
- return {
145
- html,
146
- };
147
- };
148
-
149
- /**
150
- * `<PrismicRichText />` implementation.
151
- *
152
- * @internal
153
- */
154
- export const PrismicRichTextImpl = /*#__PURE__*/ defineComponent({
155
- name: "PrismicRichText",
156
- props: {
157
- field: {
158
- type: Array as unknown as PropType<RichTextField | null | undefined>,
159
- default: undefined,
160
- required: false,
161
- },
162
- linkResolver: {
163
- type: Function as PropType<LinkResolverFunction>,
164
- default: undefined,
165
- required: false,
166
- },
167
- serializer: {
168
- type: [Function, Object] as PropType<
169
- HTMLFunctionSerializer | HTMLMapSerializer
170
- >,
171
- default: undefined,
172
- required: false,
173
- },
174
- htmlSerializer: {
175
- type: [Function, Object] as PropType<
176
- HTMLFunctionSerializer | HTMLMapSerializer
177
- >,
178
- default: undefined,
179
- required: false,
180
- },
181
- wrapper: {
182
- type: [String, Object, Function] as PropType<
183
- string | ConcreteComponent | Raw<DefineComponent>
184
- >,
185
- default: undefined,
186
- required: false,
187
- },
188
- fallback: {
189
- type: String as PropType<string>,
190
- default: undefined,
191
- required: false,
192
- },
193
- },
194
- setup(props) {
195
- const { html } = usePrismicRichText(props);
196
-
197
- const root = ref<HTMLElement | Comment | Component | null>(null);
198
-
199
- const maybeRouter = inject(routerKey, null);
200
- if (maybeRouter) {
201
- type InternalLink = {
202
- element: HTMLAnchorElement;
203
- listener: EventListener;
204
- };
205
- let links: InternalLink[] = [];
206
-
207
- const navigate: EventListener = function (
208
- this: { href: string },
209
- event: Event,
210
- ) {
211
- event.preventDefault();
212
- maybeRouter.push(this.href);
213
- };
214
-
215
- const addListeners = () => {
216
- const node: HTMLElement | Comment | null =
217
- root.value && "$el" in root.value ? root.value.$el : root.value;
218
- if (node && "querySelectorAll" in node) {
219
- // Get all internal link tags and add listeners on them
220
- links = Array.from(node.querySelectorAll("a"))
221
- .map((element) => {
222
- const href = element.getAttribute("href");
223
-
224
- if (href && isInternalURL(href)) {
225
- const listener = navigate.bind({ href });
226
- element.addEventListener("click", listener);
227
-
228
- return { element, listener };
229
- } else {
230
- return false;
231
- }
232
- })
233
- .filter((link): link is InternalLink => link as boolean);
234
- }
235
- };
236
-
237
- const removeListeners = () => {
238
- links.forEach(({ element, listener }) =>
239
- element.removeEventListener("click", listener),
240
- );
241
- links = [];
242
- };
243
-
244
- watch(
245
- html,
246
- () => {
247
- removeListeners();
248
- nextTick(addListeners);
249
- },
250
- { immediate: true },
251
- );
252
-
253
- onBeforeUnmount(() => {
254
- removeListeners();
255
- });
256
- }
257
-
258
- return () => {
259
- return h(simplyResolveComponent(props.wrapper || defaultWrapper), {
260
- innerHTML: html.value,
261
- ref: root,
262
- });
263
- };
264
- },
265
- });
266
-
267
- // export the public type for h/tsx inference
268
- // also to avoid inline import() in generated d.ts files
269
- /**
270
- * Component to render a Prismic rich text field as HTML.
271
- *
272
- * @see Component props {@link PrismicRichTextProps}
273
- * @see Templating rich text and title fields {@link https://prismic.io/docs/technologies/vue-template-content#rich-text-and-titles}
274
- */
275
- export const PrismicRichText = PrismicRichTextImpl as unknown as {
276
- new (): {
277
- $props: AllowedComponentProps &
278
- ComponentCustomProps &
279
- VNodeProps &
280
- PrismicRichTextProps;
281
- };
282
- };