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