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