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