@prismicio/vue 2.0.11 → 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.
@@ -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,
@@ -121,11 +125,24 @@ var Image = {
121
125
  }
122
126
  };
123
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
+
124
141
  var Link = (function (_ref) {
125
142
  var _ref$component = _ref.component,
126
- component = _ref$component === void 0 ? 'a' : _ref$component;
143
+ component = _ref$component === void 0 ? "a" : _ref$component;
127
144
  return {
128
- name: 'PrismicLink',
145
+ name: "PrismicLink",
129
146
  functional: true,
130
147
  props: {
131
148
  field: {
@@ -135,6 +152,21 @@ var Link = (function (_ref) {
135
152
  linkResolver: {
136
153
  type: Function,
137
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
138
170
  }
139
171
  },
140
172
  render: function render(h, _ref2) {
@@ -153,7 +185,7 @@ var Link = (function (_ref) {
153
185
  return null;
154
186
  });
155
187
 
156
- if (url.indexOf('/') === 0) {
188
+ if (isInternalURL(url) && !props.target) {
157
189
  data.props = data.props || {};
158
190
  data.props.to = url;
159
191
  return h(component, data, children);
@@ -161,23 +193,33 @@ var Link = (function (_ref) {
161
193
 
162
194
  data.attrs = _objectSpread2(_objectSpread2({}, data.attrs), {}, {
163
195
  href: url
164
- }, field.target && {
165
- target: field.target,
166
- rel: 'noopener'
167
196
  });
168
- return h('a', data, children);
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);
169
207
  }
170
208
  };
171
209
  });
172
210
 
173
- var RichText$1 = {
174
- name: 'PrismicRichText',
211
+ var RichText = {
212
+ name: "PrismicRichText",
175
213
  functional: true,
176
214
  props: {
177
215
  field: {
178
216
  type: Array,
179
217
  required: true
180
218
  },
219
+ linkResolver: {
220
+ type: Function,
221
+ required: false
222
+ },
181
223
  htmlSerializer: {
182
224
  type: Function,
183
225
  required: false
@@ -185,15 +227,15 @@ var RichText$1 = {
185
227
  wrapper: {
186
228
  type: String,
187
229
  required: false,
188
- "default": 'div'
230
+ "default": "div"
189
231
  }
190
232
  },
191
233
  render: function render(h, _ref) {
192
234
  var props = _ref.props,
193
235
  data = _ref.data,
194
- children = _ref.children,
195
236
  parent = _ref.parent;
196
237
  var field = props.field,
238
+ linkResolver = props.linkResolver,
197
239
  htmlSerializer = props.htmlSerializer,
198
240
  wrapper = props.wrapper;
199
241
 
@@ -201,7 +243,48 @@ var RichText$1 = {
201
243
  return null;
202
244
  }
203
245
 
204
- var innerHTML = RichText.asHtml(field, parent.$prismic.linkResolver, htmlSerializer || parent.$prismic.htmlSerializer);
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);
205
288
  return h(wrapper, _objectSpread2(_objectSpread2({}, data), {}, {
206
289
  domProps: {
207
290
  innerHTML: innerHTML
@@ -210,17 +293,162 @@ var RichText$1 = {
210
293
  }
211
294
  };
212
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
+
213
439
  var NuxtLink = Link({
214
- component: 'nuxt-link'
440
+ component: "nuxt-link"
215
441
  });
216
442
  var VueRouterLink = Link({
217
- component: 'router-link'
443
+ component: "router-link"
218
444
  });
219
445
  var exp = {
220
446
  common: {
221
447
  Embed: Embed,
222
448
  Image: Image,
223
- RichText: RichText$1
449
+ RichText: RichText,
450
+ Text: Text,
451
+ SliceZone: SliceZone
224
452
  },
225
453
  nuxt: {
226
454
  Link: NuxtLink
@@ -229,10 +457,12 @@ var exp = {
229
457
  Link: VueRouterLink
230
458
  }
231
459
  };
460
+ exp.common;
461
+ exp.nuxt;
462
+ exp.vueRouter;
232
463
 
233
- var common$1 = exp.common;
234
- var nuxt$1 = exp.nuxt;
235
- var vueRouter$1 = exp.vueRouter;
464
+ var common = exp.common;
465
+ var nuxt = exp.nuxt;
466
+ var vueRouter = exp.vueRouter;
236
467
 
237
- export default exp;
238
- export { common$1 as common, nuxt$1 as nuxt, vueRouter$1 as vueRouter };
468
+ export { common, exp as default, defineSliceZoneComponents, getSliceComponentProps, nuxt, vueRouter };