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