@prismicio/vue 2.0.9 → 2.1.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.
@@ -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",
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,35 @@ 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" || field.target) {
212
+ data.attrs.target = typeof props.target !== "undefined" ? props.target : field.target;
213
+ }
214
+
215
+ if (data.attrs.target === "_blank") {
216
+ data.attrs.rel = typeof props.rel !== "undefined" ? props.rel : props.blankTargetRelAttribute;
217
+ } else if (typeof props.rel !== "undefined") {
218
+ data.attrs.rel = props.rel;
219
+ }
220
+
221
+ return h("a", data, children);
177
222
  }
178
223
  };
179
224
  });
180
225
 
181
226
  var RichText = {
182
- name: 'PrismicRichText',
227
+ name: "PrismicRichText",
183
228
  functional: true,
184
229
  props: {
185
230
  field: {
186
231
  type: Array,
187
232
  required: true
188
233
  },
234
+ linkResolver: {
235
+ type: Function,
236
+ required: false
237
+ },
189
238
  htmlSerializer: {
190
239
  type: Function,
191
240
  required: false
@@ -193,15 +242,15 @@ var RichText = {
193
242
  wrapper: {
194
243
  type: String,
195
244
  required: false,
196
- "default": 'div'
245
+ "default": "div"
197
246
  }
198
247
  },
199
248
  render: function render(h, _ref) {
200
249
  var props = _ref.props,
201
250
  data = _ref.data,
202
- children = _ref.children,
203
251
  parent = _ref.parent;
204
252
  var field = props.field,
253
+ linkResolver = props.linkResolver,
205
254
  htmlSerializer = props.htmlSerializer,
206
255
  wrapper = props.wrapper;
207
256
 
@@ -209,7 +258,7 @@ var RichText = {
209
258
  return null;
210
259
  }
211
260
 
212
- var innerHTML = PrismicDom.RichText.asHtml(field, parent.$prismic.linkResolver, htmlSerializer || parent.$prismic.htmlSerializer);
261
+ var innerHTML = PrismicDom.RichText.asHtml(field, linkResolver ? linkResolver : parent.$prismic ? parent.$prismic.linkResolver : undefined, htmlSerializer ? htmlSerializer : parent.$prismic ? parent.$prismic.htmlSerializer : undefined);
213
262
  return h(wrapper, _objectSpread2(_objectSpread2({}, data), {}, {
214
263
  domProps: {
215
264
  innerHTML: innerHTML
@@ -218,17 +267,202 @@ var RichText = {
218
267
  }
219
268
  };
220
269
 
270
+ var Text = {
271
+ name: "PrismicText",
272
+ functional: true,
273
+ props: {
274
+ field: {
275
+ type: Array,
276
+ required: true
277
+ },
278
+ separator: {
279
+ type: String,
280
+ "default": undefined,
281
+ required: false
282
+ },
283
+ wrapper: {
284
+ type: String,
285
+ required: false,
286
+ "default": "div"
287
+ }
288
+ },
289
+ render: function render(h, _ref) {
290
+ var props = _ref.props,
291
+ data = _ref.data;
292
+ _ref.children;
293
+ _ref.parent;
294
+ var field = props.field,
295
+ separator = props.separator,
296
+ wrapper = props.wrapper;
297
+
298
+ if (!field) {
299
+ return null;
300
+ }
301
+
302
+ var innerHTML = PrismicDom.RichText.asText(field, separator);
303
+ return h(wrapper, _objectSpread2(_objectSpread2({}, data), {}, {
304
+ domProps: {
305
+ innerHTML: innerHTML
306
+ }
307
+ }));
308
+ }
309
+ };
310
+
311
+ // We need to polyfill process if it doesn't exist, such as in the browser.
312
+ if (typeof process === "undefined") {
313
+ globalThis.process = {
314
+ env: {}
315
+ };
316
+ }
317
+ /**
318
+ * `true` if in the production environment, `false` otherwise.
319
+ *
320
+ * This boolean can be used to perform actions only in development environments,
321
+ * such as logging.
322
+ */
323
+
324
+
325
+ var __PRODUCTION__ = process.env.NODE_ENV === "production";
326
+
327
+ var getSliceComponentProps = function getSliceComponentProps(propsHint) {
328
+ return {
329
+ slice: {
330
+ type: Object,
331
+ required: true
332
+ },
333
+ index: {
334
+ type: Number,
335
+ required: true
336
+ },
337
+ slices: {
338
+ type: Array,
339
+ required: true
340
+ },
341
+ context: {
342
+ type: null,
343
+ required: true
344
+ }
345
+ };
346
+ };
347
+ var TODOSliceComponent = __PRODUCTION__ ? null : {
348
+ name: "TODOSliceCOmponent",
349
+ functional: true,
350
+ props: getSliceComponentProps(),
351
+ render: function render(h, _ref) {
352
+ var props = _ref.props,
353
+ data = _ref.data;
354
+ console.warn("[SliceZone] Could not find a component for Slice type \"".concat(props.slice.slice_type, "\""), props.slice);
355
+ return h("section", _objectSpread2(_objectSpread2({}, data), {}, {
356
+ attrs: _objectSpread2(_objectSpread2({}, data.attrs), {}, {
357
+ "data-slice-zone-todo-component": "",
358
+ "data-slice-type": props.slice.slice_type
359
+ })
360
+ }), ["Could not find a component for Slice type \"".concat(props.slice.slice_type, "\"")]);
361
+ }
362
+ }; // Just mimiced to prevent confusion but doesn't provide any value with version 2 of this kit
363
+
364
+ var defineSliceZoneComponents = function defineSliceZoneComponents(components) {
365
+ return components;
366
+ };
367
+ var SliceZone = {
368
+ name: "SliceZone",
369
+ props: {
370
+ slices: {
371
+ type: Array,
372
+ required: true
373
+ },
374
+ components: {
375
+ type: Object,
376
+ "default": undefined,
377
+ required: false
378
+ },
379
+ resolver: {
380
+ type: Function,
381
+ "default": undefined,
382
+ required: false
383
+ },
384
+ context: {
385
+ type: null,
386
+ "default": undefined,
387
+ required: false
388
+ },
389
+ defaultComponent: {
390
+ type: Object,
391
+ "default": undefined,
392
+ required: false
393
+ },
394
+ wrapper: {
395
+ type: [String, Object, Function],
396
+ "default": "div",
397
+ required: false
398
+ }
399
+ },
400
+ computed: {
401
+ renderedSlices: function renderedSlices() {
402
+ var _this = this;
403
+
404
+ if (!this.slices) {
405
+ return null;
406
+ }
407
+
408
+ return this.slices.map(function (slice, index) {
409
+ 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`.
410
+
411
+ if (_this.resolver) {
412
+ var resolvedComponent = _this.resolver({
413
+ slice: slice,
414
+ sliceName: slice.slice_type,
415
+ i: index
416
+ });
417
+
418
+ if (resolvedComponent) {
419
+ component = resolvedComponent;
420
+ }
421
+ }
422
+
423
+ var p = {
424
+ key: "".concat(slice.slice_type, "-").concat(index),
425
+ props: {
426
+ slice: slice,
427
+ index: index,
428
+ context: _this.context,
429
+ slices: _this.slices
430
+ }
431
+ };
432
+ return {
433
+ component: component,
434
+ p: p
435
+ };
436
+ });
437
+ }
438
+ },
439
+ render: function render(h) {
440
+ // Prevent fatal if user didn't check for field, throws `Invalid prop` warn
441
+ if (!this.slices) {
442
+ return null;
443
+ }
444
+
445
+ return h(this.wrapper, this.renderedSlices.map(function (_ref2) {
446
+ var component = _ref2.component,
447
+ p = _ref2.p;
448
+ return h(component, p);
449
+ }));
450
+ }
451
+ };
452
+
221
453
  var NuxtLink = Link({
222
- component: 'nuxt-link'
454
+ component: "nuxt-link"
223
455
  });
224
456
  var VueRouterLink = Link({
225
- component: 'router-link'
457
+ component: "router-link"
226
458
  });
227
459
  var exp = {
228
460
  common: {
229
461
  Embed: Embed,
230
462
  Image: Image,
231
- RichText: RichText
463
+ RichText: RichText,
464
+ Text: Text,
465
+ SliceZone: SliceZone
232
466
  },
233
467
  nuxt: {
234
468
  Link: NuxtLink
@@ -237,12 +471,17 @@ var exp = {
237
471
  Link: VueRouterLink
238
472
  }
239
473
  };
474
+ exp.common;
475
+ exp.nuxt;
476
+ exp.vueRouter;
240
477
 
241
- var common$1 = exp.common;
242
- var nuxt$1 = exp.nuxt;
243
- var vueRouter$1 = exp.vueRouter;
478
+ var common = exp.common;
479
+ var nuxt = exp.nuxt;
480
+ var vueRouter = exp.vueRouter;
244
481
 
245
- exports.common = common$1;
246
- exports.nuxt = nuxt$1;
247
- exports.vueRouter = vueRouter$1;
248
- exports.default = exp;
482
+ exports.common = common;
483
+ exports["default"] = exp;
484
+ exports.defineSliceZoneComponents = defineSliceZoneComponents;
485
+ exports.getSliceComponentProps = getSliceComponentProps;
486
+ exports.nuxt = nuxt;
487
+ exports.vueRouter = vueRouter;