@prismicio/vue 2.0.8 → 2.1.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.
@@ -0,0 +1,468 @@
1
+ import PrismicDom, { RichText as RichText$1 } from 'prismic-dom';
2
+
3
+ function ownKeys(object, enumerableOnly) {
4
+ var keys = Object.keys(object);
5
+
6
+ if (Object.getOwnPropertySymbols) {
7
+ var symbols = Object.getOwnPropertySymbols(object);
8
+
9
+ if (enumerableOnly) {
10
+ symbols = symbols.filter(function (sym) {
11
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
12
+ });
13
+ }
14
+
15
+ keys.push.apply(keys, symbols);
16
+ }
17
+
18
+ return keys;
19
+ }
20
+
21
+ function _objectSpread2(target) {
22
+ for (var i = 1; i < arguments.length; i++) {
23
+ var source = arguments[i] != null ? arguments[i] : {};
24
+
25
+ if (i % 2) {
26
+ ownKeys(Object(source), true).forEach(function (key) {
27
+ _defineProperty(target, key, source[key]);
28
+ });
29
+ } else if (Object.getOwnPropertyDescriptors) {
30
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
31
+ } else {
32
+ ownKeys(Object(source)).forEach(function (key) {
33
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
34
+ });
35
+ }
36
+ }
37
+
38
+ return target;
39
+ }
40
+
41
+ function _defineProperty(obj, key, value) {
42
+ if (key in obj) {
43
+ Object.defineProperty(obj, key, {
44
+ value: value,
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true
48
+ });
49
+ } else {
50
+ obj[key] = value;
51
+ }
52
+
53
+ return obj;
54
+ }
55
+
56
+ var Embed = {
57
+ name: 'PrismicEmbed',
58
+ functional: true,
59
+ props: {
60
+ field: {
61
+ type: Object,
62
+ required: true
63
+ },
64
+ wrapper: {
65
+ type: String,
66
+ required: false,
67
+ "default": 'div'
68
+ }
69
+ },
70
+ render: function render(h, _ref) {
71
+ var props = _ref.props,
72
+ data = _ref.data;
73
+ var field = props.field,
74
+ wrapper = props.wrapper;
75
+
76
+ if (!field || !field.html) {
77
+ return null;
78
+ }
79
+
80
+ var embedUrl = field.embed_url,
81
+ type = field.type,
82
+ providerName = field.provider_name;
83
+
84
+ var attrs = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, data.attrs), embedUrl && {
85
+ 'data-oembed': embedUrl
86
+ }), type && {
87
+ 'data-oembed-type': type
88
+ }), providerName && {
89
+ 'data-oembed-provider': providerName
90
+ });
91
+
92
+ return h(wrapper, _objectSpread2(_objectSpread2({}, Object.assign(data, {
93
+ attrs: attrs
94
+ })), {}, {
95
+ domProps: {
96
+ innerHTML: field.html
97
+ }
98
+ }));
99
+ }
100
+ };
101
+
102
+ var Image = {
103
+ name: 'PrismicImage',
104
+ functional: true,
105
+ props: {
106
+ field: {
107
+ type: Object,
108
+ required: true
109
+ }
110
+ },
111
+ render: function render(h, _ref) {
112
+ var props = _ref.props,
113
+ data = _ref.data;
114
+ var _props$field = props.field,
115
+ url = _props$field.url,
116
+ alt = _props$field.alt,
117
+ copyright = _props$field.copyright;
118
+ return h('img', Object.assign(data, {
119
+ attrs: _objectSpread2(_objectSpread2({}, data.attrs), {}, {
120
+ src: url,
121
+ alt: alt,
122
+ copyright: copyright
123
+ })
124
+ }));
125
+ }
126
+ };
127
+
128
+ var isInternalURL = function isInternalURL(url) {
129
+ /**
130
+ * @see Regex101 expression: {@link https://regex101.com/r/1y7iod/1}
131
+ */
132
+ var isInternal = /^\/(?!\/)/.test(url);
133
+ /**
134
+ * @see Regex101 expression: {@link https://regex101.com/r/RnUseS/1}
135
+ */
136
+
137
+ var isSpecialLink = !isInternal && !/^https?:\/\//i.test(url);
138
+ return isInternal && !isSpecialLink;
139
+ };
140
+
141
+ var Link = (function (_ref) {
142
+ var _ref$component = _ref.component,
143
+ component = _ref$component === void 0 ? "a" : _ref$component;
144
+ return {
145
+ name: "PrismicLink",
146
+ functional: true,
147
+ props: {
148
+ field: {
149
+ type: Object,
150
+ required: true
151
+ },
152
+ linkResolver: {
153
+ type: Function,
154
+ required: false
155
+ },
156
+ target: {
157
+ type: String,
158
+ "default": undefined,
159
+ required: false
160
+ },
161
+ rel: {
162
+ type: String,
163
+ "default": undefined,
164
+ required: false
165
+ },
166
+ blankTargetRelAttribute: {
167
+ type: String,
168
+ "default": "noopener",
169
+ required: false
170
+ }
171
+ },
172
+ render: function render(h, _ref2) {
173
+ var props = _ref2.props,
174
+ data = _ref2.data,
175
+ children = _ref2.children,
176
+ parent = _ref2.parent;
177
+ var field = props.field,
178
+ linkResolver = props.linkResolver;
179
+
180
+ if (!field) {
181
+ return null;
182
+ }
183
+
184
+ var url = parent.$prismic ? parent.$prismic.asLink(field, linkResolver) : PrismicDom.Link.url(field, linkResolver || function () {
185
+ return null;
186
+ });
187
+
188
+ if (isInternalURL(url) && !props.target) {
189
+ data.props = data.props || {};
190
+ data.props.to = url;
191
+ return h(component, data, children);
192
+ }
193
+
194
+ data.attrs = _objectSpread2(_objectSpread2({}, data.attrs), {}, {
195
+ href: url
196
+ });
197
+
198
+ if (typeof props.target !== "undefined" || field.target) {
199
+ data.attrs.target = typeof props.target !== "undefined" ? props.target : field.target;
200
+
201
+ if (data.attrs.target === "_blank") {
202
+ data.attrs.rel = typeof props.rel !== "undefined" ? props.rel : props.blankTargetRelAttribute;
203
+ }
204
+ }
205
+
206
+ return h("a", data, children);
207
+ }
208
+ };
209
+ });
210
+
211
+ var RichText = {
212
+ name: "PrismicRichText",
213
+ functional: true,
214
+ props: {
215
+ field: {
216
+ type: Array,
217
+ required: true
218
+ },
219
+ linkResolver: {
220
+ type: Function,
221
+ required: false
222
+ },
223
+ htmlSerializer: {
224
+ type: Function,
225
+ required: false
226
+ },
227
+ wrapper: {
228
+ type: String,
229
+ required: false,
230
+ "default": "div"
231
+ }
232
+ },
233
+ render: function render(h, _ref) {
234
+ var props = _ref.props,
235
+ data = _ref.data,
236
+ parent = _ref.parent;
237
+ var field = props.field,
238
+ linkResolver = props.linkResolver,
239
+ htmlSerializer = props.htmlSerializer,
240
+ wrapper = props.wrapper;
241
+
242
+ if (!field) {
243
+ return null;
244
+ }
245
+
246
+ var innerHTML = RichText$1.asHtml(field, linkResolver || parent.$prismic.linkResolver, htmlSerializer || parent.$prismic.htmlSerializer);
247
+ return h(wrapper, _objectSpread2(_objectSpread2({}, data), {}, {
248
+ domProps: {
249
+ innerHTML: innerHTML
250
+ }
251
+ }));
252
+ }
253
+ };
254
+
255
+ var Text = {
256
+ name: "PrismicText",
257
+ functional: true,
258
+ props: {
259
+ field: {
260
+ type: Array,
261
+ required: true
262
+ },
263
+ separator: {
264
+ type: String,
265
+ "default": undefined,
266
+ required: false
267
+ },
268
+ wrapper: {
269
+ type: String,
270
+ required: false,
271
+ "default": "div"
272
+ }
273
+ },
274
+ render: function render(h, _ref) {
275
+ var props = _ref.props,
276
+ data = _ref.data;
277
+ _ref.children;
278
+ _ref.parent;
279
+ var field = props.field,
280
+ separator = props.separator,
281
+ wrapper = props.wrapper;
282
+
283
+ if (!field) {
284
+ return null;
285
+ }
286
+
287
+ var innerHTML = RichText$1.asText(field, separator);
288
+ return h(wrapper, _objectSpread2(_objectSpread2({}, data), {}, {
289
+ domProps: {
290
+ innerHTML: innerHTML
291
+ }
292
+ }));
293
+ }
294
+ };
295
+
296
+ // We need to polyfill process if it doesn't exist, such as in the browser.
297
+ if (typeof process === "undefined") {
298
+ globalThis.process = {
299
+ env: {}
300
+ };
301
+ }
302
+ /**
303
+ * `true` if in the production environment, `false` otherwise.
304
+ *
305
+ * This boolean can be used to perform actions only in development environments,
306
+ * such as logging.
307
+ */
308
+
309
+
310
+ var __PRODUCTION__ = process.env.NODE_ENV === "production";
311
+
312
+ var getSliceComponentProps = function getSliceComponentProps(propsHint) {
313
+ return {
314
+ slice: {
315
+ type: Object,
316
+ required: true
317
+ },
318
+ index: {
319
+ type: Number,
320
+ required: true
321
+ },
322
+ slices: {
323
+ type: Array,
324
+ required: true
325
+ },
326
+ context: {
327
+ type: null,
328
+ required: true
329
+ }
330
+ };
331
+ };
332
+ var TODOSliceComponent = __PRODUCTION__ ? function () {
333
+ return null;
334
+ } : {
335
+ name: "TODOSliceCOmponent",
336
+ functional: true,
337
+ props: getSliceComponentProps(),
338
+ renfer: function renfer(h, _ref) {
339
+ var props = _ref.props,
340
+ data = _ref.data;
341
+ console.warn("[SliceZone] Could not find a component for Slice type \"".concat(props.slice.slice_type, "\""), props.slice);
342
+ return function () {
343
+ return h("section", _objectSpread2(_objectSpread2({}, data), {}, {
344
+ "data-slice-zone-todo-component": "",
345
+ "data-slice-type": props.slice.slice_type
346
+ }), ["Could not find a component for Slice type \"".concat(props.slice.slice_type, "\"")]);
347
+ };
348
+ }
349
+ }; // Just mimiced to prevent confusion but doesn't provide any value with version 2 of this kit
350
+
351
+ var defineSliceZoneComponents = function defineSliceZoneComponents(components) {
352
+ return components;
353
+ };
354
+ var SliceZone = {
355
+ name: "SliceZone",
356
+ functional: true,
357
+ props: {
358
+ slices: {
359
+ type: Array,
360
+ required: true
361
+ },
362
+ components: {
363
+ type: Object,
364
+ "default": undefined,
365
+ required: false
366
+ },
367
+ resolver: {
368
+ type: Function,
369
+ "default": undefined,
370
+ required: false
371
+ },
372
+ context: {
373
+ type: null,
374
+ "default": undefined,
375
+ required: false
376
+ },
377
+ defaultComponent: {
378
+ type: Object,
379
+ "default": undefined,
380
+ required: false
381
+ },
382
+ wrapper: {
383
+ type: [String, Object, Function],
384
+ "default": "div",
385
+ required: false
386
+ }
387
+ },
388
+ render: function render(h, _ref2) {
389
+ var props = _ref2.props,
390
+ data = _ref2.data;
391
+
392
+ // Prevent fatal if user didn't check for field, throws `Invalid prop` warn
393
+ if (!props.slices) {
394
+ return function () {
395
+ return null;
396
+ };
397
+ }
398
+
399
+ var renderedSlices = computed(function () {
400
+ return props.slices.map(function (slice, index) {
401
+ var component = props.components && slice.slice_type in props.components ? props.components[slice.slice_type] : props.defaultComponent || TODOSliceComponent; // TODO: Remove `resolver` in v3 in favor of `components`.
402
+
403
+ if (props.resolver) {
404
+ var resolvedComponent = props.resolver({
405
+ slice: slice,
406
+ sliceName: slice.slice_type,
407
+ i: index
408
+ });
409
+
410
+ if (resolvedComponent) {
411
+ component = resolvedComponent;
412
+ }
413
+ }
414
+
415
+ var p = {
416
+ key: "".concat(slice.slice_type, "-").concat(index),
417
+ slice: slice,
418
+ index: index,
419
+ context: props.context,
420
+ slices: props.slices
421
+ };
422
+ return h(component, p);
423
+ });
424
+ });
425
+ var parent = props.wrapper;
426
+
427
+ if (typeof parent === "string") {
428
+ return h(parent, data, renderedSlices.value);
429
+ } else {
430
+ return h(parent, data, {
431
+ "default": function _default() {
432
+ return renderedSlices.value;
433
+ }
434
+ });
435
+ }
436
+ }
437
+ };
438
+
439
+ var NuxtLink = Link({
440
+ component: "nuxt-link"
441
+ });
442
+ var VueRouterLink = Link({
443
+ component: "router-link"
444
+ });
445
+ var exp = {
446
+ common: {
447
+ Embed: Embed,
448
+ Image: Image,
449
+ RichText: RichText,
450
+ Text: Text,
451
+ SliceZone: SliceZone
452
+ },
453
+ nuxt: {
454
+ Link: NuxtLink
455
+ },
456
+ vueRouter: {
457
+ Link: VueRouterLink
458
+ }
459
+ };
460
+ exp.common;
461
+ exp.nuxt;
462
+ exp.vueRouter;
463
+
464
+ var common = exp.common;
465
+ var nuxt = exp.nuxt;
466
+ var vueRouter = exp.vueRouter;
467
+
468
+ export { common, exp as default, defineSliceZoneComponents, getSliceComponentProps, nuxt, vueRouter };