@hulkapps/app-manager-vue 3.0.11 → 3.0.14

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hulkapps/app-manager-vue",
3
- "version": "3.0.11",
3
+ "version": "3.0.14",
4
4
  "description": "Vue SDK to render app manager contents",
5
5
  "main": "dist/app-manager-vue.ssr.js",
6
6
  "browser": "dist/app-manager-vue.esm.js",
@@ -28,7 +28,7 @@
28
28
  <path d="M1 7L7 1L1 7Z" fill="#006FBB"/>
29
29
  <path d="M1 7L7 1" stroke="#006FBB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
30
30
  </svg>
31
- {{ translateMe('Back to App pricing') }}
31
+ {{ translateMe('Back to app pricing') }}
32
32
  </a>
33
33
  <div class="bill-cycle-select-group__inner-left">
34
34
  <SelectButton
@@ -36,7 +36,7 @@
36
36
  :variant="selectedPlan === 'monthly' ? 'primary' : 'secondary'"
37
37
  @click="selectPlan('monthly')"
38
38
  >
39
- {{ translateMe('Billed Monthly') }}
39
+ {{ translateMe('Billed monthly') }}
40
40
  </SelectButton>
41
41
  <SelectButton
42
42
  id="pricing-tab"
@@ -44,7 +44,7 @@
44
44
  :variant="selectedPlan === 'annually' ? 'primary' : 'secondary'"
45
45
  @click="selectPlan('annually')"
46
46
  >
47
- {{ translateMe('Billed Yearly') }}
47
+ {{ translateMe('Billed yearly') }}
48
48
  <strong style="white-space: pre;">{{ translateMe(' 17% Off') }}</strong>
49
49
  </SelectButton>
50
50
  </div>
@@ -83,6 +83,7 @@
83
83
  :plans="plans"
84
84
  :features="features"
85
85
  :currentPlan="plan"
86
+ :shopifyPlan="shopify_plan"
86
87
  :promotionalDiscount="promotional_discount"
87
88
  :selectedInterval="selectedPlan"
88
89
  @plan-clicked="handlePlanClicked"
@@ -94,6 +95,7 @@
94
95
  <PlanTable
95
96
  :plans="plans"
96
97
  :currentPlan="plan"
98
+ :shopifyPlan="shopify_plan"
97
99
  :promotionalDiscount="promotional_discount"
98
100
  :selectedInterval="selectedPlan"
99
101
  :features="features"
@@ -119,6 +121,7 @@
119
121
  style="flex-basis: 30%; flex-grow: 1;"
120
122
  /> -->
121
123
  <BundlePlanCard
124
+ v-if="bundle_plan"
122
125
  :plan="bundle_plan"
123
126
  :plan_details="bundle_details"
124
127
  @plan-clicked="selectPlan"
@@ -220,7 +223,7 @@ export default {
220
223
  showPlansFeatures: false,
221
224
  showCustomizationModal: false,
222
225
  additionalBenefitsHeading:{
223
- category_name: "Unlock Additional Benefits"
226
+ category_name: "Unlock additional benefits"
224
227
  },
225
228
  }
226
229
  },
@@ -455,7 +458,7 @@ export default {
455
458
  }
456
459
 
457
460
  .app-manager .Polaris-Page--fullWidth {
458
- max-width: calc(100% - 200px) !important;
461
+ max-width: calc(100% - 64px) !important;
459
462
  }
460
463
 
461
464
  .app-manager .app-manager-plan-page-slider .Polaris-ResourceList__ResourceListWrapper.features li,
@@ -554,14 +557,14 @@ export default {
554
557
  align-items: center;
555
558
  justify-content: space-between;
556
559
  gap: 4px;
557
- max-width: 998px;
560
+ max-width: 1200px;
558
561
  margin-left: auto;
559
562
  margin-right: auto;
560
- padding: 0px 32px;
563
+ padding: 0 96px;
561
564
  }
562
565
 
563
566
  .bill-cycle-select-group.full-width {
564
- max-width: calc(100% - 200px);
567
+ max-width: calc(100% - 64px);
565
568
  }
566
569
 
567
570
  .bill-cycle-select-group__inner-left {
@@ -662,5 +665,8 @@ export default {
662
665
  .app-manager .Polaris-Button {
663
666
  padding: 7px 8px !important;
664
667
  }
668
+ .bill-cycle-select-group {
669
+ padding: 0 8px;
670
+ }
665
671
  }
666
672
  </style>
@@ -152,7 +152,7 @@ export default {
152
152
  </div>
153
153
  <div class="install-app-div">
154
154
  <a :href="appData.app_shopify_store_link" class="button-link install-app-button" target="_blank">
155
- {{ translateMe('Install App') }}
155
+ {{ translateMe('Install') }}
156
156
  </a>
157
157
  </div>
158
158
  </div>
@@ -46,10 +46,14 @@ export default {
46
46
  <div class="block">
47
47
  <div class="bundle-header">
48
48
  <h3>{{ translateMe("Bundle") }}</h3>
49
- <h2>${{ plan.price - plan.discount }}</h2>
50
- <span class="mo-label">{{ translateMe("/mo") }}</span>
51
- <h4>${{ plan.price }}</h4>
52
- <span class="apps-count">{{ allApps.length }} {{ translateMe("Apps") }}</span>
49
+ <div class="bundle-price-wrapper">
50
+ <div style="display: flex; align-items: center; gap: 4px">
51
+ <h2>${{ plan.price - plan.discount }}</h2>
52
+ <span class="mo-label">{{ translateMe("/mo") }}</span>
53
+ <h4>${{ plan.price }}</h4>
54
+ </div>
55
+ <span class="apps-count">{{ allApps.length }} {{ translateMe("Apps") }}</span>
56
+ </div>
53
57
  </div>
54
58
  <div class="apps-list">
55
59
  <div v-for="(app, index) in allApps" :key="app.id + '_' + index" class="app">
@@ -68,7 +72,7 @@ export default {
68
72
  </div>
69
73
  </div>
70
74
  <VariantButton @click="handlePlanClick('bundle')" variant="primary" class="button">{{
71
- translateMe("Start Saving Now")
75
+ translateMe("Start saving now")
72
76
  }}</VariantButton>
73
77
  </div>
74
78
  </template>
@@ -98,6 +102,13 @@ export default {
98
102
  gap: 8px;
99
103
  border-bottom: 1px solid #e3e3e3;
100
104
  padding-bottom: 12px;
105
+ align-items: center;
106
+ }
107
+ .bundle-price-wrapper {
108
+ display: flex;
109
+ gap: 8px;
110
+ align-items: center;
111
+ width: 100%;
101
112
  }
102
113
  .bundle-header h3 {
103
114
  font-size: 18px;
@@ -154,5 +165,11 @@ export default {
154
165
  .apps-list .app {
155
166
  flex-basis: 100%;
156
167
  }
168
+
169
+ .bundle-header {
170
+ flex-direction: column;
171
+ align-items: flex-start;
172
+ gap: 16px;
173
+ }
157
174
  }
158
175
  </style>
@@ -1,7 +1,7 @@
1
1
  <script>
2
2
  import VariantButton from "./VariantButton";
3
3
  import Swiper, {Navigation, Pagination} from "swiper";
4
- import {calculatePlanPriceWithDiscounts, formatFeature} from "@/helpers";
4
+ import {calculatePlanPriceWithDiscounts, isPlanButtonDisabled, formatFeature, getPlanButtonText} from "@/helpers";
5
5
 
6
6
  export default {
7
7
  name: "PlanCardsHighlights",
@@ -17,6 +17,10 @@ export default {
17
17
  type: Object,
18
18
  required: false,
19
19
  },
20
+ shopifyPlan: {
21
+ type: String,
22
+ required: false,
23
+ },
20
24
  promotionalDiscount: {
21
25
  type: Object,
22
26
  required: false,
@@ -102,6 +106,8 @@ export default {
102
106
  }
103
107
  },
104
108
  methods: {
109
+ getPlanButtonText,
110
+ isPlanButtonDisabled,
105
111
  formatFeature,
106
112
  async handlePlanClick(plan) {
107
113
  this.loadingPlanId = plan.id;
@@ -200,7 +206,7 @@ export default {
200
206
  slidesPerView: 1,
201
207
  speed: 500,
202
208
  pagination: {
203
- el: ".swiper-pagination",
209
+ el: ".swiper-pagination-h-monthly",
204
210
  clickable: true,
205
211
  },
206
212
  navigation: {
@@ -209,15 +215,15 @@ export default {
209
215
  },
210
216
  breakpoints: {
211
217
  375: {
212
- slidesPerView: 1.5,
218
+ slidesPerView: 1,
213
219
  },
214
220
  640: {
215
221
  slidesPerView: 2,
216
222
  },
217
- 768: {
223
+ 840: {
218
224
  slidesPerView: Math.min(this.monthlyPlans.length, 3),
219
225
  },
220
- 1024: {
226
+ 1152: {
221
227
  slidesPerView: Math.min(this.monthlyPlans.length, 4),
222
228
  },
223
229
  },
@@ -236,7 +242,7 @@ export default {
236
242
  slidesPerView: 1,
237
243
  speed: 500,
238
244
  pagination: {
239
- el: ".swiper-pagination",
245
+ el: ".swiper-pagination-h-annually",
240
246
  clickable: true,
241
247
  },
242
248
  navigation: {
@@ -245,15 +251,15 @@ export default {
245
251
  },
246
252
  breakpoints: {
247
253
  375: {
248
- slidesPerView: 1.5,
254
+ slidesPerView: 1,
249
255
  },
250
256
  640: {
251
257
  slidesPerView: 2,
252
258
  },
253
- 768: {
259
+ 840: {
254
260
  slidesPerView: Math.min(this.annualPlans.length, 3),
255
261
  },
256
- 1024: {
262
+ 1152: {
257
263
  slidesPerView: Math.min(this.annualPlans.length, 4),
258
264
  },
259
265
  },
@@ -367,7 +373,7 @@ export default {
367
373
  >
368
374
  <div class="most-popular" v-if="plan.choose_later_plan">
369
375
  <div class="most-popular-label">
370
- {{ translateMe("Most Popular") }}
376
+ {{ translateMe("Most popular") }}
371
377
  </div>
372
378
  </div>
373
379
  <h3 class="title">
@@ -394,25 +400,23 @@ export default {
394
400
  </span>
395
401
  </h2>
396
402
  </div>
397
- <h6 class="description">
398
- {{
399
- plan.description ? translateMe(plan.description) : translateMe(placeholder.description)
400
- }}
403
+ <h6
404
+ class="description"
405
+ :style="{
406
+ visibility:
407
+ plan.description
408
+ ? 'visible'
409
+ : 'hidden',
410
+ }"
411
+ >
412
+ {{ plan.description ? translateMe(plan.description) : translateMe(placeholder.description) }}
401
413
  </h6>
402
414
  <VariantButton
403
415
  :variant="'secondary'"
404
- :disabled="currentPlan && currentPlan.id === plan.id"
416
+ :disabled="isPlanButtonDisabled(shopifyPlan, plan, currentPlan)"
405
417
  :loading="loadingPlanId === plan.id"
406
418
  @click="handlePlanClick(plan)"
407
- >{{
408
- currentPlan && currentPlan.id === plan.id
409
- ? translateMe("Selected Plan")
410
- : (
411
- currentPlan && plan.price > currentPlan.price
412
- ? translateMe("Upgrade")
413
- : translateMe("Choose Plan")
414
- )
415
- }}
419
+ >{{ getPlanButtonText(shopifyPlan, plan, translateMe, currentPlan) }}
416
420
  </VariantButton
417
421
  >
418
422
  <div class="features">
@@ -448,7 +452,16 @@ export default {
448
452
  </div>
449
453
  </div>
450
454
  </div>
451
- <div ref="swiperAnnually" class="swiper cards annually">
455
+ <div
456
+ class="swiper-pagination swiper-pagination-h-monthly"
457
+ :style="{
458
+ display:
459
+ selectedInterval === 'annually'
460
+ ? 'none'
461
+ : 'block',
462
+ }"
463
+ ></div>
464
+ <div ref="swiperAnnually" class="swiper cards annually plans-h-cards">
452
465
  <div class="swiper-wrapper">
453
466
  <div
454
467
  v-for="(plan, index) in annualPlans"
@@ -466,7 +479,7 @@ export default {
466
479
  >
467
480
  <div class="most-popular" v-if="plan.choose_later_plan">
468
481
  <div class="most-popular-label">
469
- {{ translateMe("Most Popular") }}
482
+ {{ translateMe("Most popular") }}
470
483
  </div>
471
484
  </div>
472
485
  <h3 class="title">
@@ -493,25 +506,23 @@ export default {
493
506
  </span>
494
507
  </h2>
495
508
  </div>
496
- <h6 class="description">
497
- {{
498
- plan.description ? translateMe(plan.description) : translateMe(placeholder.description)
499
- }}
509
+ <h6
510
+ class="description"
511
+ :style="{
512
+ visibility:
513
+ plan.description
514
+ ? 'visible'
515
+ : 'hidden',
516
+ }"
517
+ >
518
+ {{ plan.description ? translateMe(plan.description) : translateMe(placeholder.description) }}
500
519
  </h6>
501
520
  <VariantButton
502
521
  :variant="'secondary'"
503
- :disabled="currentPlan && currentPlan.id === plan.id"
522
+ :disabled="isPlanButtonDisabled(shopifyPlan, plan, currentPlan)"
504
523
  :loading="loadingPlanId === plan.id"
505
524
  @click="handlePlanClick(plan)"
506
- >{{
507
- currentPlan && currentPlan.id === plan.id
508
- ? translateMe("Selected Plan")
509
- : (
510
- currentPlan && plan.price > currentPlan.price
511
- ? translateMe("Upgrade")
512
- : translateMe("Choose Plan")
513
- )
514
- }}
525
+ >{{ getPlanButtonText(shopifyPlan, plan, translateMe, currentPlan) }}
515
526
  </VariantButton
516
527
  >
517
528
  <div class="features">
@@ -548,11 +559,10 @@ export default {
548
559
  </div>
549
560
  </div>
550
561
  <div
551
- class="swiper-pagination"
562
+ class="swiper-pagination-h-annually swiper-pagination"
552
563
  :style="{
553
564
  display:
554
- (interval === 'ANNUAL' && annualPlans.length <= 4) ||
555
- (interval === 'EVERY_30_DAYS' && monthlyPlans.length <= 4)
565
+ selectedInterval === 'monthly'
556
566
  ? 'none'
557
567
  : 'block',
558
568
  }"
@@ -695,7 +705,7 @@ export default {
695
705
  .most-popular .most-popular-label {
696
706
  background-color: #91d0ff;
697
707
  color: #00527c;
698
- font-size: 12px;
708
+ font-size: 13px;
699
709
  font-weight: 600;
700
710
  width: 100%;
701
711
  text-align: center;
@@ -81,7 +81,7 @@ export default {
81
81
  >
82
82
  <div v-if="showDescription" class="plan-left">
83
83
  <p class="bundle-offer-label">
84
- {{ translateMe("Bundle Offer") }}
84
+ {{ translateMe("Bundle offer") }}
85
85
  </p>
86
86
  <p class="bundle-desc-label">
87
87
  {{ translateMe("Get") }}
@@ -93,7 +93,7 @@ export default {
93
93
  </div>
94
94
  <div class="plan-right">
95
95
  <div class="plan-content">
96
- <h3 class="plan-name">{{ translateMe("Monthly Bundle:") }}</h3>
96
+ <h3 class="plan-name">{{ translateMe("Monthly bundle:") }}</h3>
97
97
  <div class="prices">
98
98
  <span class="discounted-amount">${{ translateMe(realPrice) }}</span>
99
99
  <span class="original-amount" v-if="realPrice < oldPrice"
@@ -127,7 +127,7 @@ export default {
127
127
  <style scoped>
128
128
  .banner-card {
129
129
  display: flex;
130
- padding: 16px;
130
+ padding: 16px 0;
131
131
  background-color: white;
132
132
  box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
133
133
  gap: 16px;
@@ -146,16 +146,15 @@ export default {
146
146
  display: flex;
147
147
  justify-content: space-between;
148
148
  align-items: center;
149
- max-width: 998px;
149
+ max-width: 1200px;
150
150
  width: 100%;
151
151
  margin-left: auto;
152
152
  margin-right: auto;
153
- padding: 0px 32px;
153
+ padding: 0 96px;
154
154
  }
155
155
 
156
156
  .banner__inner.full-width {
157
- max-width: calc(100% - 200px);
158
- padding: 0 16px;
157
+ max-width: calc(100% - 64px);
159
158
  }
160
159
 
161
160
  .plan-name {
@@ -177,6 +176,7 @@ export default {
177
176
  .prices {
178
177
  display: flex;
179
178
  gap: 8px;
179
+ align-items: center;
180
180
  }
181
181
 
182
182
  .bundle-offer-label {
@@ -241,7 +241,6 @@ export default {
241
241
  flex-direction: column;
242
242
  gap: 32px;
243
243
  align-items: flex-start;
244
- padding: 0;
245
244
  }
246
245
 
247
246
  .plan-right {
@@ -251,6 +250,9 @@ export default {
251
250
  }
252
251
 
253
252
  @media (max-width: 767px) {
253
+ .banner__inner {
254
+ padding: 16px;
255
+ }
254
256
  .banner__inner.full-width {
255
257
  max-width: 100%;
256
258
  }
@@ -1,7 +1,7 @@
1
1
  <script>
2
2
  import Swiper, { Navigation, Pagination } from "swiper";
3
3
  import VariantButton from "./VariantButton";
4
- import {calculatePlanPriceWithDiscounts, formatFeature} from "@/helpers";
4
+ import {calculatePlanPriceWithDiscounts, formatFeature, getPlanButtonText, isPlanButtonDisabled} from "@/helpers";
5
5
 
6
6
  export default {
7
7
  data() {
@@ -33,6 +33,10 @@ export default {
33
33
  type: Object,
34
34
  required: false,
35
35
  },
36
+ shopifyPlan: {
37
+ type: String,
38
+ required: false,
39
+ },
36
40
  selectedInterval: {
37
41
  type: String,
38
42
  required: false,
@@ -48,6 +52,8 @@ export default {
48
52
  }
49
53
  },
50
54
  methods: {
55
+ isPlanButtonDisabled,
56
+ getPlanButtonText,
51
57
  formatFeature,
52
58
  async handlePlanClick(plan) {
53
59
  this.loadingPlanId = plan.id;
@@ -347,7 +353,7 @@ export default {
347
353
  0: {
348
354
  slidesPerView: 1.2,
349
355
  },
350
- 768: {
356
+ 640: {
351
357
  slidesPerView: 2,
352
358
  },
353
359
  1024: {
@@ -378,7 +384,7 @@ export default {
378
384
  0: {
379
385
  slidesPerView: 1.2,
380
386
  },
381
- 768: {
387
+ 640: {
382
388
  slidesPerView: 2,
383
389
  },
384
390
  1024: {
@@ -530,23 +536,11 @@ export default {
530
536
  </div>
531
537
  <VariantButton
532
538
  :variant="'secondary'"
533
- :disabled="currentPlan && currentPlan.id === plan.id"
539
+ :disabled="isPlanButtonDisabled(shopifyPlan, plan, currentPlan)"
534
540
  :loading="loadingPlanId === plan.id"
535
541
  @click="handlePlanClick(plan)"
536
542
  class="button"
537
- >{{
538
- currentPlan && currentPlan.id === plan.id
539
- ? translateMe("Selected Plan")
540
- : (
541
- !currentPlan
542
- ? translateMe("Choose Plan")
543
- : (
544
- plan.price > currentPlan.price
545
- ? translateMe("Upgrade")
546
- : translateMe("Switch to this plan")
547
- )
548
- )
549
- }}</VariantButton>
543
+ >{{ getPlanButtonText(shopifyPlan, plan, translateMe, currentPlan, true) }}</VariantButton>
550
544
  </div>
551
545
  <template v-for="group in monthlyPlansFeatures">
552
546
  <div v-if="group.name" class="feature-group-header plan-feature plan-feature-monthly">
@@ -647,23 +641,11 @@ export default {
647
641
  </div>
648
642
  <VariantButton
649
643
  :variant="'secondary'"
650
- :disabled="currentPlan && currentPlan.id === plan.id"
644
+ :disabled="isPlanButtonDisabled(shopifyPlan, plan, currentPlan)"
651
645
  :loading="loadingPlanId === plan.id"
652
646
  @click="handlePlanClick(plan)"
653
647
  class="button"
654
- >{{
655
- currentPlan && currentPlan.id === plan.id
656
- ? translateMe("Selected Plan")
657
- : (
658
- !currentPlan
659
- ? translateMe("Choose Plan")
660
- : (
661
- plan.price > currentPlan.price
662
- ? translateMe("Upgrade")
663
- : translateMe("Switch to this plan")
664
- )
665
- )
666
- }}</VariantButton>
648
+ >{{ getPlanButtonText(shopifyPlan, plan, translateMe, currentPlan, true) }}</VariantButton>
667
649
  </div>
668
650
  <template v-for="group in annualPlansFeatures">
669
651
  <div v-if="group.name" class="feature-group-header plan-feature plan-feature-annually">
@@ -805,6 +787,9 @@ export default {
805
787
  padding: 12px;
806
788
  border-bottom: 1px solid #e3e3e3;
807
789
  border-left: 1px solid #e3e3e3;
790
+ word-wrap: break-word;
791
+ overflow-wrap: break-word;
792
+ white-space: normal;
808
793
  }
809
794
  .plan-table-checkmark {
810
795
  width: 20px;
@@ -986,4 +971,10 @@ export default {
986
971
  width: calc(100% + -2px);
987
972
  }
988
973
  }
974
+
975
+ @media (max-width: 540px) {
976
+ .plan-header-wrapper .price-wrapper .main-price {
977
+ flex-direction: column;
978
+ }
979
+ }
989
980
  </style>
@@ -131,6 +131,7 @@ export default {
131
131
 
132
132
  .button-primary:hover {
133
133
  background-color: #1a1a1a !important;
134
+ color: #ffffff !important;
134
135
  }
135
136
 
136
137
  .button-primary:active,