@appbaseio/reactivesearch-vue 3.0.0-rc.6.3 → 3.0.0-rc.6.5

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.
@@ -26,7 +26,7 @@ import { I as IconWrapper, C as CancelSvg, a as IconGroup, D as Downshift, b as
26
26
  import { n as noSuggestions, T as TextArea, I as Input, s as suggestionsContainer, a as suggestions } from './Input-11d211d2.js';
27
27
  import { C as Container } from './Container-d00219f7.js';
28
28
  import Highlight from 'vue-highlight-words';
29
- import { fetchAIResponse } from '@appbaseio/reactivecore/lib/actions/query';
29
+ import { fetchAIResponse, createAISession } from '@appbaseio/reactivecore/lib/actions/query';
30
30
  import { replaceDiacritics } from '@appbaseio/reactivecore/lib/utils/suggestions';
31
31
  import { C as Checkbox, R as Radio } from './FormControlList-fe6eaee4.js';
32
32
  import { s as sanitizeObject } from './utils-d7dd4f4e.js';
@@ -823,7 +823,7 @@ var resetCSS = function resetCSS(props) {
823
823
  // eslint-disable-next-line no-nested-ternary
824
824
  props.isSender ? props.themePreset !== 'dark' ? props.theme.colors.primaryColor : props.theme.colors.borderColor : props.theme.colors.borderColor) + ";\n\t}\n\n\tcode {\n\t\tline-height: normal;\n\n\t\tcolor: " + (
825
825
  // eslint-disable-next-line no-nested-ternary
826
- props.isSender ? props.themePreset !== 'dark' ? props.theme.colors.primaryTextColor : props.theme.colors.textColor : props.theme.colors.primaryTextColor) + ";\n\t\tborder-radius: 3px;\n\t\tfont-size: 85%;\n\t\tpadding: 0.2em 0.4em;\n\t\tmargin-top: 5px;\n\t\tdisplay: inline-block;\n\t\toverflow: auto;\n\t\twidth: fit-content;\n\t\tmax-width: 100%;\n\t}\n\tul,\n\tol {\n\t\tlist-style-position: inside;\n\n\t}\n\n\tli{\n\t\tdisplay: unset;\n\t\tcursor: default;\n\t\tpadding: initial;\n\n\t\t&:hover{\n\t\t\tbackground-color: initial;\n\t\t}\n\t}\n";
826
+ props.isSender ? props.themePreset !== 'dark' ? props.theme.colors.primaryTextColor : props.theme.colors.textColor : props.theme.colors.primaryTextColor) + ";\n\t\tborder-radius: 3px;\n\t\tfont-size: 85%;\n\t\tpadding: 0.2em 0.4em;\n\t\tmargin-top: 5px;\n\t\tdisplay: inline-block;\n\t\toverflow: auto;\n\t\twidth: fit-content;\n\t\tmax-width: 100%;\n\t}\n\tul,\n\tol {\n\t\tlist-style-position: inside;\n\t\tpadding-left: 10px;\n\n\t}\n\n\tli{\n\t\tdisplay: list-item;\n\t\tcursor: default;\n\t\tpadding: initial;\n\n\t\t&:hover{\n\t\t\tbackground-color: initial;\n\t\t}\n\t}\n\tp {\n\t\tmargin: inherit;\n\t}\n";
827
827
  };
828
828
  var messageBGColor = function messageBGColor(props) {
829
829
  var finalBGColor;
@@ -2542,6 +2542,7 @@ var AIAnswer = defineComponent({
2542
2542
  isLoading: types.boolRequired,
2543
2543
  sessionIdFromStore: VueTypes.string,
2544
2544
  showComponent: types.boolRequired,
2545
+ componentError: types.componentObject,
2545
2546
  style: types.style
2546
2547
  },
2547
2548
  mounted: function mounted() {},
@@ -2568,7 +2569,7 @@ var AIAnswer = defineComponent({
2568
2569
  role: AI_ROLES.ASSISTANT,
2569
2570
  content: response.answer.text
2570
2571
  });
2571
- this.error = {
2572
+ if (!this.AISessionId) this.error = {
2572
2573
  message: this.errorMessageForMissingSessionId
2573
2574
  };
2574
2575
  }
@@ -2586,7 +2587,6 @@ var AIAnswer = defineComponent({
2586
2587
  });
2587
2588
  },
2588
2589
  isAIResponseLoading: function isAIResponseLoading(newVal) {
2589
- this.isLoadingState = newVal;
2590
2590
  this.$emit('on-data', {
2591
2591
  data: this.messages,
2592
2592
  rawData: this.$props.rawData,
@@ -2595,7 +2595,6 @@ var AIAnswer = defineComponent({
2595
2595
  });
2596
2596
  },
2597
2597
  isLoading: function isLoading(newVal) {
2598
- this.isLoadingState = newVal;
2599
2598
  this.$emit('on-data', {
2600
2599
  data: this.messages,
2601
2600
  rawData: this.$props.rawData,
@@ -2627,14 +2626,50 @@ var AIAnswer = defineComponent({
2627
2626
  },
2628
2627
  messages: function messages() {
2629
2628
  this.scrollToBottom();
2629
+ },
2630
+ componentError: function componentError(newVal) {
2631
+ var _this = this;
2632
+ if (newVal && newVal._bodyBlob) {
2633
+ this.AISessionId = ((getObjectFromLocalStorage(AI_LOCAL_CACHE_KEY) || {})[this.$props.componentId] || {}).sessionId || null;
2634
+ if (!this.AISessionId) {
2635
+ this.generateNewSessionId();
2636
+ }
2637
+ newVal._bodyBlob.text().then(function (textData) {
2638
+ try {
2639
+ var parsedErrorRes = JSON.parse(textData);
2640
+ if (parsedErrorRes.error) {
2641
+ _this.error = parsedErrorRes.error;
2642
+ _this.$emit('on-data', {
2643
+ data: _this.messages,
2644
+ rawData: _this.$props.rawData,
2645
+ loading: _this.$props.isAIResponseLoading || _this.$props.isLoading,
2646
+ error: parsedErrorRes.error
2647
+ });
2648
+ }
2649
+ } catch (error) {
2650
+ console.error('Error parsing component error JSON:', error);
2651
+ }
2652
+ })["catch"](function (error) {
2653
+ console.error('Error reading component error text data:', error);
2654
+ });
2655
+ }
2630
2656
  }
2631
2657
  },
2632
2658
  methods: {
2659
+ generateNewSessionId: function generateNewSessionId() {
2660
+ var _this2 = this;
2661
+ var newSessionPromise = this.createAISession();
2662
+ newSessionPromise.then(function (res) {
2663
+ _this2.AISessionId = res.AIsessionId;
2664
+ })["catch"](function (e) {
2665
+ console.error(e);
2666
+ });
2667
+ },
2633
2668
  scrollToBottom: function scrollToBottom() {
2634
- var _this = this;
2669
+ var _this3 = this;
2635
2670
  this.$nextTick(function () {
2636
- var _this$$refs;
2637
- var messageContainer = (_this$$refs = _this.$refs) == null ? void 0 : _this$$refs[_this.$props.innerRef];
2671
+ var _this3$$refs;
2672
+ var messageContainer = (_this3$$refs = _this3.$refs) == null ? void 0 : _this3$$refs[_this3.$props.innerRef];
2638
2673
  if (messageContainer && messageContainer.$el) {
2639
2674
  messageContainer.$el.scrollTo({
2640
2675
  top: messageContainer.$el.scrollHeight,
@@ -2701,7 +2736,7 @@ var AIAnswer = defineComponent({
2701
2736
  "class": "--ai-answer-error-container " + (getClassName$2(this.$props.innerClass, 'ai-error') || '')
2702
2737
  }, [createVNode("div", {
2703
2738
  "class": "--default-error-element"
2704
- }, [createVNode("span", null, [(_this$error = this.error) != null && _this$error.message ? this.error.message : 'There was an error in generating the response.', ' ', (_this$error2 = this.error) != null && _this$error2.code ? "Code:\n\t\t\t\t\t\t\t" + this.error.code : '']), this.AISessionId && createVNode(Button, {
2739
+ }, [createVNode("span", null, [(_this$error = this.error) != null && _this$error.message ? this.error.message : 'There was an error in generating the response.', ' ', (_this$error2 = this.error) != null && _this$error2.code ? ", Code:\n\t\t\t\t\t\t\t" + this.error.code : '']), this.AISessionId && createVNode(Button, {
2705
2740
  "primary": true,
2706
2741
  "onClick": this.handleRetryRequest
2707
2742
  }, {
@@ -2713,6 +2748,7 @@ var AIAnswer = defineComponent({
2713
2748
  return null;
2714
2749
  },
2715
2750
  handleKeyPress: function handleKeyPress(e) {
2751
+ window.console.log('e', e);
2716
2752
  if (e.key === 'Enter') {
2717
2753
  this.handleSendMessage(e);
2718
2754
  this.inputMessage = '';
@@ -2751,7 +2787,7 @@ var AIAnswer = defineComponent({
2751
2787
  }
2752
2788
  },
2753
2789
  renderIcons: function renderIcons() {
2754
- var _this2 = this;
2790
+ var _this4 = this;
2755
2791
  var _slot, _slot2;
2756
2792
  var _this$$props = this.$props,
2757
2793
  getMicInstance = _this$$props.getMicInstance,
@@ -2765,12 +2801,12 @@ var AIAnswer = defineComponent({
2765
2801
  "positionType": "absolute"
2766
2802
  }, {
2767
2803
  "default": function _default() {
2768
- return [!_this2.isLoadingState && _this2.AISessionId && _this2.shouldMicRender(showVoiceInput) && createVNode(Mic, {
2804
+ return [!_this4.isLoadingState && _this4.AISessionId && _this4.shouldMicRender(showVoiceInput) && createVNode(Mic, {
2769
2805
  "getInstance": getMicInstance,
2770
2806
  "render": renderMic,
2771
- "handleResult": _this2.handleVoiceResults,
2807
+ "handleResult": _this4.handleVoiceResults,
2772
2808
  "class": getClassName$2(innerClass, 'ai-search-mic') || null
2773
- }, null), iconPosition === 'right' && createVNode(IconWrapper, null, _isSlot$1(_slot = _this2.renderIcon()) ? _slot : {
2809
+ }, null), iconPosition === 'right' && createVNode(IconWrapper, null, _isSlot$1(_slot = _this4.renderIcon()) ? _slot : {
2774
2810
  "default": function _default() {
2775
2811
  return [_slot];
2776
2812
  }
@@ -2782,7 +2818,7 @@ var AIAnswer = defineComponent({
2782
2818
  "positionType": "absolute"
2783
2819
  }, {
2784
2820
  "default": function _default() {
2785
- return [iconPosition === 'left' && createVNode(IconWrapper, null, _isSlot$1(_slot2 = _this2.renderIcon()) ? _slot2 : {
2821
+ return [iconPosition === 'left' && createVNode(IconWrapper, null, _isSlot$1(_slot2 = _this4.renderIcon()) ? _slot2 : {
2786
2822
  "default": function _default() {
2787
2823
  return [_slot2];
2788
2824
  }
@@ -2794,7 +2830,7 @@ var AIAnswer = defineComponent({
2794
2830
  this.handleSendMessage(e);
2795
2831
  },
2796
2832
  renderEnterButtonElement: function renderEnterButtonElement() {
2797
- var _this3 = this;
2833
+ var _this5 = this;
2798
2834
  var _this$$props2 = this.$props,
2799
2835
  enterButton = _this$$props2.enterButton,
2800
2836
  innerClass = _this$$props2.innerClass;
@@ -2802,16 +2838,16 @@ var AIAnswer = defineComponent({
2802
2838
  if (enterButton) {
2803
2839
  var getEnterButtonMarkup = function getEnterButtonMarkup() {
2804
2840
  if (renderEnterButton) {
2805
- return renderEnterButton(_this3.enterButtonOnClick);
2841
+ return renderEnterButton(_this5.enterButtonOnClick);
2806
2842
  }
2807
2843
  return createVNode(SendButton, {
2808
2844
  "primary": true,
2809
2845
  "type": "submit",
2810
2846
  "tabIndex": 0,
2811
- "onClick": _this3.handleSendMessage,
2812
- "onKeyPress": _this3.handleKeyPress,
2847
+ "onClick": _this5.handleSendMessage,
2848
+ "onKeyPress": _this5.handleKeyPress,
2813
2849
  "class": "ask-btn " + getClassName$2(innerClass, 'ai-enter-button'),
2814
- "disabled": _this3.isLoadingState || !_this3.AISessionId
2850
+ "disabled": _this5.isLoadingState || !_this5.AISessionId
2815
2851
  }, {
2816
2852
  "default": function _default() {
2817
2853
  return [createTextVNode("Send")];
@@ -2834,10 +2870,10 @@ var AIAnswer = defineComponent({
2834
2870
  return getComponent(data, this);
2835
2871
  },
2836
2872
  handleTextAreaHeightChange: function handleTextAreaHeightChange() {
2837
- var _this$$refs2, _this$$refs2$_inputRe, _this$$refs3, _this$$refs3$_inputWr, _this$$refs4;
2838
- var textArea = (_this$$refs2 = this.$refs) == null ? void 0 : (_this$$refs2$_inputRe = _this$$refs2[_inputRef]) == null ? void 0 : _this$$refs2$_inputRe.$el;
2839
- var inputWrapper = (_this$$refs3 = this.$refs) == null ? void 0 : (_this$$refs3$_inputWr = _this$$refs3[_inputWrapperRef]) == null ? void 0 : _this$$refs3$_inputWr.$el;
2840
- var errorContainer = (_this$$refs4 = this.$refs) == null ? void 0 : _this$$refs4[_errorContainerRef];
2873
+ var _this$$refs, _this$$refs$_inputRef, _this$$refs2, _this$$refs2$_inputWr, _this$$refs3;
2874
+ var textArea = (_this$$refs = this.$refs) == null ? void 0 : (_this$$refs$_inputRef = _this$$refs[_inputRef]) == null ? void 0 : _this$$refs$_inputRef.$el;
2875
+ var inputWrapper = (_this$$refs2 = this.$refs) == null ? void 0 : (_this$$refs2$_inputWr = _this$$refs2[_inputWrapperRef]) == null ? void 0 : _this$$refs2$_inputWr.$el;
2876
+ var errorContainer = (_this$$refs3 = this.$refs) == null ? void 0 : _this$$refs3[_errorContainerRef];
2841
2877
  if (textArea) {
2842
2878
  textArea.style.height = '42px';
2843
2879
  var lineHeight = parseInt(getComputedStyle(textArea).lineHeight, 10);
@@ -2869,21 +2905,20 @@ var AIAnswer = defineComponent({
2869
2905
  },
2870
2906
  render: function render() {
2871
2907
  var _slot3;
2872
- var _this4 = this;
2908
+ var _this6 = this;
2873
2909
  var props = this.$props;
2874
2910
  if (!this.shouldShowComponent) {
2875
2911
  return null;
2876
2912
  }
2877
2913
  return createVNode(Chatbox, {
2878
- "style": props.style,
2879
- "class": "--ai-chat-box-wrapper"
2914
+ "style": props.style || {}
2880
2915
  }, {
2881
2916
  "default": function _default() {
2882
- return [_this4.$props.title && createVNode(Title, {
2883
- "class": getClassName$2(_this4.$props.innerClass, 'title') || ''
2917
+ return [_this6.$props.title && createVNode(Title, {
2918
+ "class": getClassName$2(_this6.$props.innerClass, 'title') || ''
2884
2919
  }, {
2885
2920
  "default": function _default() {
2886
- return [_this4.$props.title];
2921
+ return [_this6.$props.title];
2887
2922
  }
2888
2923
  }), createVNode(ChatContainer, {
2889
2924
  "class": "--ai-chat-container",
@@ -2891,33 +2926,33 @@ var AIAnswer = defineComponent({
2891
2926
  "showInput": props.showInput
2892
2927
  }, {
2893
2928
  "default": function _default() {
2894
- return [_this4.hasCustomRenderer && createVNode(MessagesContainer, {
2895
- "themePreset": _this4.themePreset,
2929
+ return [_this6.hasCustomRenderer && createVNode(MessagesContainer, {
2930
+ "themePreset": _this6.themePreset,
2896
2931
  "theme": props.theme,
2897
- "ref": _this4.$props.innerRef,
2932
+ "ref": _this6.$props.innerRef,
2898
2933
  "class": "--ai-message-container " + (getClassName$2(props.innerClass, 'ai-message-container') || '')
2899
- }, _isSlot$1(_slot3 = _this4.getComponent()) ? _slot3 : {
2934
+ }, _isSlot$1(_slot3 = _this6.getComponent()) ? _slot3 : {
2900
2935
  "default": function _default() {
2901
2936
  return [_slot3];
2902
2937
  }
2903
- }), !_this4.hasCustomRenderer && createVNode(MessagesContainer, {
2904
- "themePreset": _this4.themePreset,
2938
+ }), !_this6.hasCustomRenderer && createVNode(MessagesContainer, {
2939
+ "themePreset": _this6.themePreset,
2905
2940
  "theme": props.theme,
2906
- "ref": _this4.$props.innerRef,
2941
+ "ref": _this6.$props.innerRef,
2907
2942
  "class": "--ai-message-container " + (getClassName$2(props.innerClass, 'ai-message-container') || '')
2908
2943
  }, {
2909
2944
  "default": function _default() {
2910
- return [_this4.messages.map(function (message, index) {
2945
+ return [_this6.messages.map(function (message, index) {
2911
2946
  return createVNode(Message, {
2912
2947
  "key": index,
2913
2948
  "isSender": message.role === AI_ROLES.USER,
2914
2949
  "innerHTML": md$1.render(message.content),
2915
- "themePreset": _this4.themePreset,
2950
+ "themePreset": _this6.themePreset,
2916
2951
  "theme": props.theme,
2917
2952
  "class": "--ai-answer-message " + (getClassName$2(props.innerClass, 'ai-message') || '')
2918
2953
  }, null);
2919
- }), _this4.isLoadingState && createVNode(Message, {
2920
- "themePreset": _this4.themePreset,
2954
+ }), _this6.isLoadingState && createVNode(Message, {
2955
+ "themePreset": _this6.themePreset,
2921
2956
  "theme": props.theme,
2922
2957
  "isSender": false,
2923
2958
  "class": "--ai-answer-message " + (getClassName$2(props.innerClass, 'ai-message') || null)
@@ -2926,31 +2961,31 @@ var AIAnswer = defineComponent({
2926
2961
  return [createVNode(TypingIndicator, null, {
2927
2962
  "default": function _default() {
2928
2963
  return [createVNode(TypingDot, {
2929
- "themePreset": _this4.themePreset
2964
+ "themePreset": _this6.themePreset
2930
2965
  }, null), createVNode(TypingDot, {
2931
- "themePreset": _this4.themePreset
2966
+ "themePreset": _this6.themePreset
2932
2967
  }, null), createVNode(TypingDot, {
2933
- "themePreset": _this4.themePreset
2968
+ "themePreset": _this6.themePreset
2934
2969
  }, null)];
2935
2970
  }
2936
2971
  })];
2937
2972
  }
2938
2973
  })];
2939
2974
  }
2940
- }), _this4.renderErrorComponent(), ' ', props.showFeedback && createVNode("div", {
2975
+ }), _this6.renderErrorComponent(), ' ', props.showFeedback && createVNode("div", {
2941
2976
  "class": "--ai-answer-feedback-container " + (getClassName$2(props.innerClass, 'ai-feedback') || '')
2942
2977
  }, [createVNode(AIFeedback, {
2943
- "hideUI": _this4.isLoadingState || !_this4.sessionId,
2944
- "key": _this4.sessionId,
2978
+ "hideUI": _this6.isLoadingState || !_this6.sessionId,
2979
+ "key": _this6.sessionId,
2945
2980
  "onFeedbackSubmit": function onFeedbackSubmit(useful, reason) {
2946
- _this4.trackUsefullness(_this4.sessionId, {
2981
+ _this6.trackUsefullness(_this6.sessionId, {
2947
2982
  useful: useful,
2948
2983
  reason: reason
2949
2984
  });
2950
2985
  }
2951
2986
  }, null)]), props.showInput && createVNode(MessageInputContainer, {
2952
2987
  "class": "--ai-input-container",
2953
- "onSubmit": _this4.handleSendMessage
2988
+ "onSubmit": _this6.handleSendMessage
2954
2989
  }, {
2955
2990
  "default": function _default() {
2956
2991
  return [createVNode(InputGroup, {
@@ -2964,23 +2999,21 @@ var AIAnswer = defineComponent({
2964
2999
  "default": function _default() {
2965
3000
  return [createVNode(MessageInput, {
2966
3001
  "ref": _inputRef,
2967
- "type": "text",
2968
3002
  "placeholder": props.placeholder,
2969
3003
  "enterButton": props.enterButton,
2970
- "value": _this4.inputMessage,
2971
- "onInput": _this4.handleMessageInputChange,
2972
- "onKeyPress": _this4.handleKeyPress,
3004
+ "value": _this6.inputMessage,
3005
+ "onInput": _this6.handleMessageInputChange,
2973
3006
  "id": props.componentId + "-ai-input",
2974
3007
  "showIcon": props.showIcon,
2975
3008
  "iconPosition": props.iconPosition,
2976
- "themePreset": _this4.themePreset,
2977
- "disabled": _this4.isLoadingState || !_this4.AISessionId,
3009
+ "themePreset": _this6.themePreset,
3010
+ "disabled": _this6.isLoadingState || !_this6.AISessionId,
2978
3011
  "class": getClassName$2(props.innerClass, 'ai-input') || null
2979
- }, null), ' ', _this4.renderIcons()];
3012
+ }, null), ' ', _this6.renderIcons()];
2980
3013
  }
2981
3014
  })];
2982
3015
  }
2983
- }), _this4.renderEnterButtonElement()];
3016
+ }), _this6.renderEnterButtonElement()];
2984
3017
  }
2985
3018
  }), ' '];
2986
3019
  }
@@ -3007,12 +3040,14 @@ var mapStateToProps$1 = function mapStateToProps(state, props) {
3007
3040
  rawData: state.rawData[props.componentId],
3008
3041
  themePreset: state.config.themePreset,
3009
3042
  isLoading: state.isLoading[props.componentId] || false,
3010
- sessionIdFromStore: state.AIResponses[props.componentId] && state.AIResponses[props.componentId].response && state.AIResponses[props.componentId].response.sessionId || ''
3043
+ sessionIdFromStore: state.AIResponses[props.componentId] && state.AIResponses[props.componentId].response && state.AIResponses[props.componentId].response.sessionId || '',
3044
+ componentError: state.error[props.componentId]
3011
3045
  };
3012
3046
  };
3013
3047
  var mapDispatchToProps$1 = {
3014
3048
  getAIResponse: fetchAIResponse,
3015
- trackUsefullness: recordAISessionUsefulness
3049
+ trackUsefullness: recordAISessionUsefulness,
3050
+ createAISession: createAISession
3016
3051
  };
3017
3052
  var AIConnected = PreferencesConsumer(ComponentWrapper(connect(mapStateToProps$1, mapDispatchToProps$1)(AIAnswer), {
3018
3053
  componentType: componentTypes.AIAnswer,
@@ -29,7 +29,7 @@ import 'url-search-params-polyfill';
29
29
  import './ReactiveBase.js';
30
30
  import 'hotkeys-js';
31
31
  import 'remarkable';
32
- export { i as default } from './install-b0a1fd33.js';
32
+ export { i as default } from './install-b785dd55.js';
33
33
  import './DropDown-39fedff8.js';
34
34
  import './Input-11d211d2.js';
35
35
  import 'compute-scroll-into-view';
@@ -1,3 +1,3 @@
1
- var version = "3.0.0-rc.6.3";
1
+ var version = "3.0.0-rc.6.5";
2
2
 
3
3
  export default version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appbaseio/reactivesearch-vue",
3
- "version": "3.0.0-rc.6.3",
3
+ "version": "3.0.0-rc.6.5",
4
4
  "private": false,
5
5
  "main": "dist/cjs/index.js",
6
6
  "jsnext:main": "dist/es/index.js",
@@ -35,7 +35,7 @@
35
35
  "sideEffects": false,
36
36
  "dependencies": {
37
37
  "@appbaseio/analytics": "^1.2.0-alpha.1",
38
- "@appbaseio/reactivecore": "10.0.0-alpha.24",
38
+ "@appbaseio/reactivecore": "10.0.0-alpha.26",
39
39
  "@appbaseio/vue-emotion": "0.6.0-alpha.6",
40
40
  "@emotion/css": "^11.10.5",
41
41
  "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",