simpo-component-library 3.6.963 → 3.6.967

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,5 +1,5 @@
1
1
  import * as i3 from '@angular/common';
2
- import { CommonModule, isPlatformBrowser, NgStyle, NgFor, DOCUMENT, NgIf } from '@angular/common';
2
+ import { CommonModule, isPlatformBrowser, NgStyle, NgFor, DOCUMENT, DatePipe, NgIf } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Component, Input, EventEmitter, Injectable, Directive, HostListener, ElementRef, Renderer2, forwardRef, Inject, inject, PLATFORM_ID, Output, ViewChild, Pipe, InjectionToken, Optional, NgModule, ViewChildren } from '@angular/core';
5
5
  import { MatGridListModule } from '@angular/material/grid-list';
@@ -2599,6 +2599,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2599
2599
  args: [LOCAL_STORAGE]
2600
2600
  }] }] });
2601
2601
 
2602
+ class BlogCategory {
2603
+ constructor(json) {
2604
+ this.id = json?.['id'];
2605
+ this.businessId = json?.['businessId'];
2606
+ this.categoryName = json?.['categoryName'];
2607
+ this.description = json?.['description'];
2608
+ this.blogsCreatedCount = json?.['blogsCreatedCount'];
2609
+ this.createdById = json?.['createdById'];
2610
+ this.createdByName = json?.['createdByName'];
2611
+ this.createdTimeStamp = json?.['createdTimeStamp'];
2612
+ }
2613
+ }
2614
+
2602
2615
  class Product {
2603
2616
  // createdTimeStamp: string
2604
2617
  // updatedTimeStamp: string
@@ -2670,7 +2683,9 @@ class checkItemAlreadyAdded {
2670
2683
  }
2671
2684
 
2672
2685
  class RestService {
2673
- constructor(http, BASE_URL, ECOMMERCE_URL, CMIS_URL, cookieService, storage, PASSBOOK_URL, APPOINTMENT_URL) {
2686
+ constructor(http, BASE_URL, ECOMMERCE_URL, CMIS_URL, cookieService, storage, PASSBOOK_URL, APPOINTMENT_URL
2687
+ // @Inject(RECOMMENDATION_URL) private RECOMMENDATION_URL: string
2688
+ ) {
2674
2689
  this.http = http;
2675
2690
  this.BASE_URL = BASE_URL;
2676
2691
  this.ECOMMERCE_URL = ECOMMERCE_URL;
@@ -2690,7 +2705,8 @@ class RestService {
2690
2705
  }
2691
2706
  // passBookUrl: string = "https://prod-passbook.simpo.ai/";
2692
2707
  getBusinessDetails() {
2693
- this.isJewellery = this.storage.getItem('isMaterialBasedPricing') == 'true' ? true : false;
2708
+ this.isJewellery =
2709
+ this.storage.getItem('isMaterialBasedPricing') == 'true' ? true : false;
2694
2710
  }
2695
2711
  ngOnDestroy() {
2696
2712
  if (this.environmentTypeSubscriber)
@@ -2698,36 +2714,60 @@ class RestService {
2698
2714
  }
2699
2715
  getFeaturedProduct(collectionId) {
2700
2716
  this.getBusinessDetails();
2701
- let subIndustryId = this.storage.getItem("subIndustryId");
2717
+ let subIndustryId = this.storage.getItem('subIndustryId');
2702
2718
  if (!subIndustryId)
2703
- subIndustryId = "";
2704
- return this.http.get(this.BASE_URL + `ecommerce/product/collection/id?collectionId=${collectionId}&isJewellery=${this.isJewellery}`).pipe(map((response) => response.data?.map((product) => new Product(product))));
2719
+ subIndustryId = '';
2720
+ return this.http
2721
+ .get(this.BASE_URL +
2722
+ `ecommerce/product/collection/id?collectionId=${collectionId}&isJewellery=${this.isJewellery}`)
2723
+ .pipe(map((response) => response.data?.map((product) => new Product(product))));
2705
2724
  }
2706
2725
  getCategoriesByCollectionId(collectionId) {
2707
- return this.http.get(this.BASE_URL + `ecommerce/inventory/category/collectionId?collectionId=${collectionId}`).pipe(map((response) => response.data?.map((category) => new Category(category))));
2726
+ return this.http
2727
+ .get(this.BASE_URL +
2728
+ `ecommerce/inventory/category/collectionId?collectionId=${collectionId}`)
2729
+ .pipe(map((response) => response.data?.map((category) => new Category(category))));
2708
2730
  }
2709
2731
  // https://newdev-api.simpo.ai/
2710
2732
  getAllCategoriesByBusinessId(payload) {
2711
2733
  return this.http.put(this.BASE_URL + `ecommerce/inventory/get/category`, payload);
2712
2734
  }
2735
+ // GET blog/getAll/categories/{businessId} — backend throws "No Categories Found" when empty;
2736
+ // callers should treat that as an empty list, not an error state.
2737
+ getBlogCategories(businessId) {
2738
+ return this.http
2739
+ .get(this.BASE_URL + `business/blog/getAll/categories/${businessId}`)
2740
+ .pipe(map((response) => response.data?.map((category) => new BlogCategory(category)) ??
2741
+ []));
2742
+ }
2743
+ // GET blog/{businessId}/blog-list?businessId={businessId}&categoryId={categoryId}
2744
+ // Note: the path {businessId} segment is unused server-side per the API doc, but must still be
2745
+ // populated identically to the query param — this is the documented URL shape, not a typo.
2746
+ getBlogsByCategory(businessId, categoryId) {
2747
+ return this.http.get(this.BASE_URL +
2748
+ `business/blog/${businessId}/blog-list?businessId=${businessId}&categoryId=${categoryId}`);
2749
+ }
2713
2750
  getPassbookOrderStatus(orderId) {
2714
2751
  const token = this.getToken();
2715
2752
  const headers = new HttpHeaders({
2716
- 'Authorization': `Bearer ${token}`
2753
+ Authorization: `Bearer ${token}`,
2717
2754
  });
2718
- return this.http.post(this.PASSBOOK_URL + `passbook/manual/payment/status?paymentOrderId=${orderId}`, {}, { headers: headers });
2755
+ return this.http.post(this.PASSBOOK_URL +
2756
+ `passbook/manual/payment/status?paymentOrderId=${orderId}`, {}, { headers: headers });
2719
2757
  }
2720
2758
  getProductBySelectedCategory(categoryId) {
2721
2759
  return this.http.get(this.BASE_URL + `ecommerce/product/${categoryId}`);
2722
2760
  }
2723
2761
  getAllSchemes(userId, storeId) {
2724
- return this.http.get(this.PASSBOOK_URL + `ext/connect/simpo/user?userId=${userId}&storeId=${storeId}`);
2762
+ return this.http.get(this.PASSBOOK_URL +
2763
+ `ext/connect/simpo/user?userId=${userId}&storeId=${storeId}`);
2725
2764
  }
2726
2765
  getAllRedemptionSchemes() {
2727
2766
  return this.http.get(this.orraBaseUrl + `passBook/redemption/amount/check?userCode=C_000313885`);
2728
2767
  }
2729
2768
  getAllProducts(payload) {
2730
- return this.http.put(this.BASE_URL + `ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload);
2769
+ return this.http.put(this.BASE_URL +
2770
+ `ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload);
2731
2771
  }
2732
2772
  getProductDetails(productId = null) {
2733
2773
  this.getBusinessDetails();
@@ -2735,11 +2775,14 @@ class RestService {
2735
2775
  pageNo: 0,
2736
2776
  pageSize: 1,
2737
2777
  itemId: productId,
2738
- subIndustryId: this.storage.getItem("subIndustryId"),
2739
- userId: this.storage.getItem("perId") ?? null,
2740
- request: "USER"
2778
+ subIndustryId: this.storage.getItem('subIndustryId'),
2779
+ userId: this.storage.getItem('perId') ?? null,
2780
+ request: 'USER',
2741
2781
  };
2742
- return this.http.put(this.BASE_URL + `ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload).pipe(map((response) => response.data.data.map((product) => new Product(product))));
2782
+ return this.http
2783
+ .put(this.BASE_URL +
2784
+ `ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload)
2785
+ .pipe(map((response) => response.data.data.map((product) => new Product(product))));
2743
2786
  }
2744
2787
  getProductDetailsV2(slugName = null) {
2745
2788
  this.getBusinessDetails();
@@ -2747,97 +2790,118 @@ class RestService {
2747
2790
  pageNo: 0,
2748
2791
  pageSize: 1,
2749
2792
  slugifiedName: slugName,
2750
- subIndustryId: this.storage.getItem("subIndustryId"),
2751
- businessId: this.storage.getItem("bId") ?? this.storage.getItem("businessId"),
2752
- userId: this.storage.getItem("perId") ?? null,
2753
- request: "USER"
2793
+ subIndustryId: this.storage.getItem('subIndustryId'),
2794
+ businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
2795
+ userId: this.storage.getItem('perId') ?? null,
2796
+ request: 'USER',
2754
2797
  };
2755
- return this.http.put(this.BASE_URL + `ecommerce/product/itemV2/search?isJewellery=${this.isJewellery}`, payload).pipe(map((response) => response.data.data.map((product) => new Product(product))));
2798
+ return this.http
2799
+ .put(this.BASE_URL +
2800
+ `ecommerce/product/itemV2/search?isJewellery=${this.isJewellery}`, payload)
2801
+ .pipe(map((response) => response.data.data.map((product) => new Product(product))));
2756
2802
  }
2757
2803
  getCollectionByIds(collectionIds) {
2758
2804
  const payload = {
2759
- ids: collectionIds
2805
+ ids: collectionIds,
2760
2806
  };
2761
- return this.http.put(this.BASE_URL + `ecommerce/inventory/collection/list/all`, payload).pipe(map((response) => response.data?.map((collection) => new Collection(collection))));
2807
+ return this.http
2808
+ .put(this.BASE_URL + `ecommerce/inventory/collection/list/all`, payload)
2809
+ .pipe(map((response) => response.data?.map((collection) => new Collection(collection))));
2762
2810
  }
2763
2811
  getAllCategories() {
2764
- const businessId = this.storage.getItem("bId") ?? this.storage.getItem("businessId") ?? "";
2765
- const subIndustryId = this.storage.getItem("subIndustryId") ?? localStorage.getItem("subIndustryId") ?? "";
2766
- return this.http.get(this.BASE_URL + `ecommerce/inventory/featured?businessId=${businessId}&subId=${subIndustryId}`).pipe(map((response) => response.data?.map((category) => new Category(category))));
2812
+ const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
2813
+ const subIndustryId = this.storage.getItem('subIndustryId') ??
2814
+ localStorage.getItem('subIndustryId') ??
2815
+ '';
2816
+ return this.http
2817
+ .get(this.BASE_URL +
2818
+ `ecommerce/inventory/featured?businessId=${businessId}&subId=${subIndustryId}`)
2819
+ .pipe(map((response) => response.data?.map((category) => new Category(category))));
2767
2820
  }
2768
2821
  getAllCollections() {
2769
2822
  const payload = {
2770
2823
  pageNo: 0,
2771
2824
  pageSize: 100,
2772
- request: "USER",
2773
- businessId: this.storage.getItem("bId") ?? this.storage.getItem("businessId")
2825
+ request: 'USER',
2826
+ businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
2774
2827
  };
2775
- return this.http.put(this.BASE_URL + 'ecommerce/inventory/get/collection', payload).pipe(map((response) => response.data.data?.map((collection) => new Collection(collection))));
2828
+ return this.http
2829
+ .put(this.BASE_URL + 'ecommerce/inventory/get/collection', payload)
2830
+ .pipe(map((response) => response.data.data?.map((collection) => new Collection(collection))));
2776
2831
  }
2777
2832
  getFilteredProduct(collectionIds, categoryIds, searchText, minPrice, maxPrice, minRating, maxRating, sortBy, pageNo, size) {
2778
2833
  this.getBusinessDetails();
2779
2834
  let payload = {
2780
- "businessId": this.storage.getItem("bId") ?? this.storage.getItem("businessId"),
2781
- "subIndustryId": this.storage.getItem("subIndustryId"),
2782
- "collectionId": collectionIds,
2783
- "categoryId": categoryIds,
2784
- "searchText": searchText,
2785
- "sortBy": sortBy,
2786
- "pageNo": pageNo,
2787
- "pageSize": size,
2788
- "userId": this.storage.getItem("perId") ?? null,
2789
- request: "USER"
2835
+ businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
2836
+ subIndustryId: this.storage.getItem('subIndustryId'),
2837
+ collectionId: collectionIds,
2838
+ categoryId: categoryIds,
2839
+ searchText: searchText,
2840
+ sortBy: sortBy,
2841
+ pageNo: pageNo,
2842
+ pageSize: size,
2843
+ userId: this.storage.getItem('perId') ?? null,
2844
+ request: 'USER',
2790
2845
  };
2791
2846
  if (minPrice > 0)
2792
- payload["minPrice"] = minPrice;
2847
+ payload['minPrice'] = minPrice;
2793
2848
  if (maxPrice > 0)
2794
- payload["maxPrice"] = maxPrice;
2849
+ payload['maxPrice'] = maxPrice;
2795
2850
  if (minRating > 0)
2796
- payload["minRating"] = minRating;
2851
+ payload['minRating'] = minRating;
2797
2852
  if (maxRating > 0)
2798
- payload["maxRating"] = maxRating;
2799
- return this.http.put(this.BASE_URL + `ecommerce/product/itemV2/search?isJewellery=${this.isJewellery}`, payload).pipe(map((response) => {
2853
+ payload['maxRating'] = maxRating;
2854
+ return this.http
2855
+ .put(this.BASE_URL +
2856
+ `ecommerce/product/itemV2/search?isJewellery=${this.isJewellery}`, payload)
2857
+ .pipe(map((response) => {
2800
2858
  return {
2801
2859
  count: response.data.count,
2802
2860
  minPrice: response.data.minPrice,
2803
2861
  maxPrice: response.data.maxPrice,
2804
- data: response.data.data?.map((product) => new Product(product))
2862
+ data: response.data.data?.map((product) => new Product(product)),
2805
2863
  };
2806
2864
  }));
2807
2865
  }
2808
2866
  getProductByCategoryId(categoryId) {
2809
2867
  this.getBusinessDetails();
2810
2868
  const payload = {
2811
- "businessId": this.storage.getItem("bId") ?? this.storage.getItem("businessId"),
2812
- "categoryId": [categoryId],
2813
- "subIndustryId": this.storage.getItem("subIndustryId"),
2814
- "pageNo": 0,
2815
- "pageSize": 10,
2816
- "userId": this.storage.getItem("perId") ?? null,
2817
- request: "USER"
2869
+ businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
2870
+ categoryId: [categoryId],
2871
+ subIndustryId: this.storage.getItem('subIndustryId'),
2872
+ pageNo: 0,
2873
+ pageSize: 10,
2874
+ userId: this.storage.getItem('perId') ?? null,
2875
+ request: 'USER',
2818
2876
  };
2819
- return this.http.put(this.BASE_URL + `ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload).pipe(map((response) => {
2877
+ return this.http
2878
+ .put(this.BASE_URL +
2879
+ `ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload)
2880
+ .pipe(map((response) => {
2820
2881
  return {
2821
2882
  count: response.count,
2822
- data: response.data.data?.map((product) => new Product(product))
2883
+ data: response.data.data?.map((product) => new Product(product)),
2823
2884
  };
2824
2885
  }));
2825
2886
  }
2826
2887
  getProductByCollectionId(collectionId) {
2827
2888
  this.getBusinessDetails();
2828
2889
  const payload = {
2829
- "businessId": this.storage.getItem("bId") ?? this.storage.getItem("businessId"),
2830
- "collectionId": [collectionId],
2831
- "subIndustryId": this.storage.getItem("subIndustryId"),
2832
- "pageNo": 0,
2833
- "pageSize": 10,
2834
- "userId": this.storage.getItem("perId") ?? null,
2835
- request: "USER"
2890
+ businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
2891
+ collectionId: [collectionId],
2892
+ subIndustryId: this.storage.getItem('subIndustryId'),
2893
+ pageNo: 0,
2894
+ pageSize: 10,
2895
+ userId: this.storage.getItem('perId') ?? null,
2896
+ request: 'USER',
2836
2897
  };
2837
- return this.http.put(this.BASE_URL + `ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload).pipe(map((response) => {
2898
+ return this.http
2899
+ .put(this.BASE_URL +
2900
+ `ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload)
2901
+ .pipe(map((response) => {
2838
2902
  return {
2839
2903
  count: response.count,
2840
- data: response.data.data?.map((product) => new Product(product))
2904
+ data: response.data.data?.map((product) => new Product(product)),
2841
2905
  };
2842
2906
  }));
2843
2907
  }
@@ -2848,25 +2912,30 @@ class RestService {
2848
2912
  return this.http.put(this.BASE_URL + `ecommerce/user/filter/reviews?productId=${productId}`, null);
2849
2913
  }
2850
2914
  generateOTP(mobile, countryCode) {
2851
- const businessId = this.storage.getItem("bId") ?? this.storage.getItem("businessId") ?? "";
2852
- return this.http.post(this.BASE_URL + `ecommerce/user/otp/trigger?mobile=${mobile}&countryCode=${countryCode}&businessId=${businessId}`, null);
2915
+ const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
2916
+ return this.http.post(this.BASE_URL +
2917
+ `ecommerce/user/otp/trigger?mobile=${mobile}&countryCode=${countryCode}&businessId=${businessId}`, null);
2853
2918
  }
2854
2919
  verifyOTP(mobile, otp, deviceInfo) {
2855
- const businessId = this.storage.getItem("bId") ?? this.storage.getItem("businessId") ?? "";
2856
- return this.http.put(this.BASE_URL + `ecommerce/user/authenticate?mobile=${mobile}&otp=${otp}&businessId=${businessId}`, deviceInfo);
2920
+ const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
2921
+ return this.http.put(this.BASE_URL +
2922
+ `ecommerce/user/authenticate?mobile=${mobile}&otp=${otp}&businessId=${businessId}`, deviceInfo);
2857
2923
  }
2858
2924
  resendOTP(mobile, countryCode) {
2859
- const businessId = this.storage.getItem("bId") ?? this.storage.getItem("businessId") ?? "";
2860
- return this.http.post(this.BASE_URL + `ecommerce/user/resend?mobile=${mobile}&countryCode=${countryCode}&businessId=${businessId}`, null);
2925
+ const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
2926
+ return this.http.post(this.BASE_URL +
2927
+ `ecommerce/user/resend?mobile=${mobile}&countryCode=${countryCode}&businessId=${businessId}`, null);
2861
2928
  }
2862
2929
  applicableDiscountList(cartId) {
2863
- return this.http.get(this.BASE_URL + `ecommerce/order/discount-coupon/${cartId}/applicability/list`);
2930
+ return this.http.get(this.BASE_URL +
2931
+ `ecommerce/order/discount-coupon/${cartId}/applicability/list`);
2864
2932
  }
2865
2933
  addItemToDB(userCart) {
2866
2934
  return this.http.post(this.BASE_URL + `ecommerce/order/cart`, userCart);
2867
2935
  }
2868
2936
  getUserItems(userId, cartType) {
2869
- return this.http.get(this.BASE_URL + `ecommerce/order/cart?userId=${userId}&cartType=${cartType}`);
2937
+ return this.http.get(this.BASE_URL +
2938
+ `ecommerce/order/cart?userId=${userId}&cartType=${cartType}`);
2870
2939
  }
2871
2940
  getUserInfo(userId) {
2872
2941
  return this.http.put(this.BASE_URL + `ecommerce/user/get/user?userId=${userId}`, null);
@@ -2896,14 +2965,15 @@ class RestService {
2896
2965
  return this.http.post(this.ECOMMERCE_URL + `payment/status`, payloadWithJewellery);
2897
2966
  }
2898
2967
  getRecentViewProduct(userId) {
2899
- return this.http.post(this.BASE_URL + `ecommerce/user/recentView?userId=${userId}`, null).pipe(map((response) => response.data?.map((product) => new Product(product))));
2900
- ;
2968
+ return this.http
2969
+ .post(this.BASE_URL + `ecommerce/user/recentView?userId=${userId}`, null)
2970
+ .pipe(map((response) => response.data?.map((product) => new Product(product))));
2901
2971
  }
2902
2972
  sendSignupOTP(payload) {
2903
2973
  return this.http.post(this.BASE_URL + `ecommerce/user/signup/otp/trigger`, payload);
2904
2974
  }
2905
2975
  verifySignupOTP(payload) {
2906
- const businessId = this.storage.getItem("bId") ?? this.storage.getItem("businessId") ?? '';
2976
+ const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
2907
2977
  // payload["businessId"] = businessId;
2908
2978
  return this.http.put(this.BASE_URL + `ecommerce/user/authenticate/signup`, payload);
2909
2979
  }
@@ -2911,44 +2981,54 @@ class RestService {
2911
2981
  return this.http.put(this.BASE_URL + `ecommerce/user/authenticate/login`, passData);
2912
2982
  }
2913
2983
  endUserRefferalDetails(userId, referralUniqueId) {
2914
- return this.http.post(this.BASE_URL + `ecommerce/api/end-user/referralDetails?userId=${userId}&referralUniqueId=${referralUniqueId}`, {});
2984
+ return this.http.post(this.BASE_URL +
2985
+ `ecommerce/api/end-user/referralDetails?userId=${userId}&referralUniqueId=${referralUniqueId}`, {});
2915
2986
  }
2916
2987
  createAppointment(data) {
2917
2988
  return this.http.post(this.BASE_URL + `crm/appointment/add`, data);
2918
2989
  }
2919
2990
  getAllLocation(businessId, size, page) {
2920
- return this.http.get(this.BASE_URL + `crm/appointment/config/location?businessId=${businessId}&size=${size}&page=${page}`);
2991
+ return this.http.get(this.BASE_URL +
2992
+ `crm/appointment/config/location?businessId=${businessId}&size=${size}&page=${page}`);
2921
2993
  }
2922
2994
  getAllTimeSlots(locationId, date) {
2923
- return this.http.get(this.BASE_URL + `crm/appointment/config/timeslots?locationId=${locationId}&date=${date}`);
2995
+ return this.http.get(this.BASE_URL +
2996
+ `crm/appointment/config/timeslots?locationId=${locationId}&date=${date}`);
2924
2997
  }
2925
2998
  getAllService(businessId, size, page, locationId) {
2926
2999
  if (!locationId) {
2927
- return this.http.get(this.BASE_URL + `crm/appointment/config/service?businessId=${businessId}&size=${size}&page=${page}`);
3000
+ return this.http.get(this.BASE_URL +
3001
+ `crm/appointment/config/service?businessId=${businessId}&size=${size}&page=${page}`);
2928
3002
  }
2929
3003
  else {
2930
- return this.http.get(this.BASE_URL + `crm/appointment/config/service?businessId=${businessId}&size=${size}&page=${page}&locationId=${locationId}`);
3004
+ return this.http.get(this.BASE_URL +
3005
+ `crm/appointment/config/service?businessId=${businessId}&size=${size}&page=${page}&locationId=${locationId}`);
2931
3006
  }
2932
3007
  }
2933
3008
  getAllStaffByLocation(businessId, size, page, locationId, serviceId) {
2934
3009
  if (!serviceId) {
2935
- return this.http.get(this.BASE_URL + `crm/appointment/config/staff?businessId=${businessId}&size=${size}&page=${page}&locationId=${locationId}`);
3010
+ return this.http.get(this.BASE_URL +
3011
+ `crm/appointment/config/staff?businessId=${businessId}&size=${size}&page=${page}&locationId=${locationId}`);
2936
3012
  }
2937
3013
  else {
2938
- return this.http.get(this.BASE_URL + `crm/appointment/config/staff?businessId=${businessId}&size=${size}&page=${page}&locationId=${locationId}&serviceId=${serviceId}`);
3014
+ return this.http.get(this.BASE_URL +
3015
+ `crm/appointment/config/staff?businessId=${businessId}&size=${size}&page=${page}&locationId=${locationId}&serviceId=${serviceId}`);
2939
3016
  }
2940
3017
  }
2941
3018
  getAvailableSlots(data) {
2942
3019
  return this.http.put(this.BASE_URL + `crm/appointment/config/available/timeslots`, data);
2943
3020
  }
2944
3021
  getSelectedListFields(bId, showInErp, formName) {
2945
- return this.http.get(this.CMIS_URL + `crm/fields?businessId=${bId}&status=true&showInForm=${showInErp}&isPagination=false&fieldCategory=${formName}`);
3022
+ return this.http.get(this.CMIS_URL +
3023
+ `crm/fields?businessId=${bId}&status=true&showInForm=${showInErp}&isPagination=false&fieldCategory=${formName}`);
2946
3024
  }
2947
3025
  getActiveSubscriptionForFeeStructure(businessId, gradeId) {
2948
- return this.http.get(this.CMIS_URL + `crm/subscription/plan/list?businessId=${businessId}&gradeId=${gradeId}&status=true&isDeleted=false`);
3026
+ return this.http.get(this.CMIS_URL +
3027
+ `crm/subscription/plan/list?businessId=${businessId}&gradeId=${gradeId}&status=true&isDeleted=false`);
2949
3028
  }
2950
3029
  createAdmission(payload) {
2951
- return this.http.post(this.CMIS_URL + `crm/registration/admission?registrationId=${payload?.registrationId || ''}`, payload);
3030
+ return this.http.post(this.CMIS_URL +
3031
+ `crm/registration/admission?registrationId=${payload?.registrationId || ''}`, payload);
2952
3032
  }
2953
3033
  createPaymentLink(data) {
2954
3034
  return this.http.post(this.CMIS_URL + `crm/registration/admission/v2/payment?isFromWeb=true`, data);
@@ -2958,7 +3038,8 @@ class RestService {
2958
3038
  }
2959
3039
  getSubscriptionForFeeStructure(gradeId) {
2960
3040
  const businessId = this.storage.getItem('businessId');
2961
- return this.http.get(this.CMIS_URL + `crm/subscription/plan/list?businessId=${businessId}&gradeId=${gradeId}`);
3041
+ return this.http.get(this.CMIS_URL +
3042
+ `crm/subscription/plan/list?businessId=${businessId}&gradeId=${gradeId}`);
2962
3043
  }
2963
3044
  getFeeStructure(payload) {
2964
3045
  return this.http.put(this.CMIS_URL + `crm/fee/structure`, payload);
@@ -2995,18 +3076,22 @@ class RestService {
2995
3076
  const websiteDataRaw = this.storage.getItem('websiteData');
2996
3077
  const websiteData = this.safeParse(websiteDataRaw);
2997
3078
  // prefer templateId from bDetails; else fallback to websiteData.homePageId
2998
- const templateId = (details?.templateId ?? websiteData?.homePageId ?? '').toString();
3079
+ const templateId = (details?.templateId ??
3080
+ websiteData?.homePageId ??
3081
+ '').toString();
2999
3082
  return this.http.get(this.BASE_URL + `business/v3/website/${templateId}/pages/list`);
3000
3083
  }
3001
3084
  getEcommerceConfigs() {
3002
- const businessId = this.storage.getItem('businessId') ?? "1f10651f-9258-6b63-9d23-a3d691aceb88";
3085
+ const businessId = this.storage.getItem('businessId') ??
3086
+ '1f10651f-9258-6b63-9d23-a3d691aceb88';
3003
3087
  return this.http.get(this.BASE_URL + `ecommerce/ecommerce/config/all?businessId=${businessId}`);
3004
3088
  }
3005
3089
  postVideoCallDetails(payload) {
3006
3090
  return this.http.post(this.BASE_URL + `ecommerce/ecommerce/config/video-call`, payload);
3007
3091
  }
3008
3092
  getStoreLocatorDetails(pincode) {
3009
- return this.http.get(this.BASE_URL + `ecommerce/store/nearby?pincode=${pincode}&businessId=${this.storage.getItem('businessId')}`);
3093
+ return this.http.get(this.BASE_URL +
3094
+ `ecommerce/store/nearby?pincode=${pincode}&businessId=${this.storage.getItem('businessId')}`);
3010
3095
  }
3011
3096
  saveImagesToBusinessLibrary(mediaRequest) {
3012
3097
  return this.http.post(this.BASE_URL + `admin/library/image/library/save`, mediaRequest);
@@ -3015,32 +3100,36 @@ class RestService {
3015
3100
  return this.http.post(this.BASE_URL + `admin/content/suggest/v2/website/individual`, request);
3016
3101
  }
3017
3102
  getCategoriesHeaderData() {
3018
- return this.http.get(this.BASE_URL + `ecommerce/product/${this.storage.getItem('businessId')}/headers`);
3103
+ return this.http.get(this.BASE_URL +
3104
+ `ecommerce/product/${this.storage.getItem('businessId')}/headers`);
3019
3105
  }
3020
3106
  getAllStores(payload) {
3021
3107
  let url = '';
3022
3108
  if (payload?.pincode && payload.pincode.toString().length == 6) {
3023
3109
  url = url + ` &pincode=${payload.pincode}`;
3024
3110
  }
3025
- return this.http.put(this.BASE_URL + `ecommerce/store/get/v2?businessId=${payload.businessId}${url}`, '');
3111
+ return this.http.put(this.BASE_URL +
3112
+ `ecommerce/store/get/v2?businessId=${payload.businessId}${url}`, '');
3026
3113
  }
3027
3114
  getAllAppointmentService(payload) {
3028
3115
  return this.http.put(this.APPOINTMENT_URL + 'service/list', payload);
3029
3116
  }
3030
3117
  getAllStaff(payload) {
3031
- return this.http.get(this.BASE_URL + `staff/staff/store-staff-list?serviceId=${payload.serviceId}&storeId=${payload.storeId}&businessId=${payload.businessId}`);
3118
+ return this.http.get(this.BASE_URL +
3119
+ `staff/staff/store-staff-list?serviceId=${payload.serviceId}&storeId=${payload.storeId}&businessId=${payload.businessId}`);
3032
3120
  }
3033
3121
  getStoreById(storeId) {
3034
3122
  let payload = {
3035
3123
  storeId: storeId,
3036
- businessId: this.storage.getItem('businessId') ?? "",
3124
+ businessId: this.storage.getItem('businessId') ?? '',
3037
3125
  pageNo: 0,
3038
- pageSize: 1000
3126
+ pageSize: 1000,
3039
3127
  };
3040
3128
  return this.http.put(this.BASE_URL + `ecommerce/store/get`, payload);
3041
3129
  }
3042
3130
  postNewsLetter(email) {
3043
- return this.http.post(this.BASE_URL + `ecommerce/ecommerce/config/registered/newsletter?email=${email}&businessId=${this.storage.getItem('businessId')}`, '');
3131
+ return this.http.post(this.BASE_URL +
3132
+ `ecommerce/ecommerce/config/registered/newsletter?email=${email}&businessId=${this.storage.getItem('businessId')}`, '');
3044
3133
  }
3045
3134
  addReviewToProduct(payload) {
3046
3135
  return this.http.post(this.BASE_URL + `ecommerce/user/add/review?orderId=${payload.orderId}`, payload);
@@ -3081,16 +3170,19 @@ class RestService {
3081
3170
  }
3082
3171
  getHomeAppointmentList(userId) {
3083
3172
  const businessId = this.storage.getItem('bId');
3084
- return this.http.get(this.BASE_URL + `ecommerce/user/try-home?userId=${userId}&businessId=${businessId}`);
3173
+ return this.http.get(this.BASE_URL +
3174
+ `ecommerce/user/try-home?userId=${userId}&businessId=${businessId}`);
3085
3175
  }
3086
3176
  getAllOrraScheme() {
3087
3177
  return this.http.get('https://stageapi-orra.letsmobility.com/passBook/redemption/amount/check?userCode=C_000313885');
3088
3178
  }
3089
3179
  redeemScheme(scheme, cartId, action) {
3090
- return this.http.post(this.BASE_URL + `ecommerce/order/cart/redemption?cartId=${cartId}&removeScheme=${action}`, scheme);
3180
+ return this.http.post(this.BASE_URL +
3181
+ `ecommerce/order/cart/redemption?cartId=${cartId}&removeScheme=${action}`, scheme);
3091
3182
  }
3092
3183
  getReviewsByProductId(productId, pageNumber) {
3093
- return this.http.put(this.BASE_URL + `ecommerce/user/filter/reviews?productId=${productId}&pageNumber=${pageNumber}&pageSize=3`, {});
3184
+ return this.http.put(this.BASE_URL +
3185
+ `ecommerce/user/filter/reviews?productId=${productId}&pageNumber=${pageNumber}&pageSize=3`, {});
3094
3186
  }
3095
3187
  getFieldsToDisplay(fieldsList) {
3096
3188
  let map = {};
@@ -3098,7 +3190,9 @@ class RestService {
3098
3190
  for (let fieldGroup of field.fieldGroup) {
3099
3191
  if (!fieldGroup.fieldStepId)
3100
3192
  continue;
3101
- let stepName = fieldGroup.fieldStepName ? fieldGroup.fieldStepName : 'undefined';
3193
+ let stepName = fieldGroup.fieldStepName
3194
+ ? fieldGroup.fieldStepName
3195
+ : 'undefined';
3102
3196
  let groupName = fieldGroup.fieldGroupName;
3103
3197
  if (!map[stepName]) {
3104
3198
  map[stepName] = {};
@@ -3136,7 +3230,8 @@ class RestService {
3136
3230
  return this.http.put(this.APPOINTMENT_URL + `booking/group/complete/${groupId}`, {});
3137
3231
  }
3138
3232
  getMyBookings(businessId, userId) {
3139
- return this.http.get(this.APPOINTMENT_URL + `booking/group/my?businessId=${businessId}&userId=${userId}`);
3233
+ return this.http.get(this.APPOINTMENT_URL +
3234
+ `booking/group/my?businessId=${businessId}&userId=${userId}`);
3140
3235
  }
3141
3236
  getGroupLines(groupId) {
3142
3237
  return this.http.get(this.APPOINTMENT_URL + `booking/group/${groupId}/lines`);
@@ -3146,10 +3241,12 @@ class RestService {
3146
3241
  return this.http.put(this.APPOINTMENT_URL + `booking/group/${groupId}/cancel${query}`, {});
3147
3242
  }
3148
3243
  getCancellationPolicy(businessId) {
3149
- return this.http.get(this.APPOINTMENT_URL + `policy-masters/${businessId}?policyType=CANCELLATION`);
3244
+ return this.http.get(this.APPOINTMENT_URL +
3245
+ `policy-masters/${businessId}?policyType=CANCELLATION`);
3150
3246
  }
3151
3247
  generateToken(bId, userId) {
3152
- return this.http.post(this.PASSBOOK_URL + `ext/connect/simpo/token?businessId=${bId}&userId=${userId}&userType=EXTERNAL_USER`, {});
3248
+ return this.http.post(this.PASSBOOK_URL +
3249
+ `ext/connect/simpo/token?businessId=${bId}&userId=${userId}&userType=EXTERNAL_USER`, {});
3153
3250
  }
3154
3251
  getAllEnrolledSchemes(payload) {
3155
3252
  return this.http.put(this.PASSBOOK_URL + 'ext/connect/simpo/scheme/list', payload);
@@ -3157,7 +3254,7 @@ class RestService {
3157
3254
  enrollScheme(payload, checkCharges) {
3158
3255
  const token = this.getToken();
3159
3256
  const headers = new HttpHeaders({
3160
- 'Authorization': `Bearer ${token}`
3257
+ Authorization: `Bearer ${token}`,
3161
3258
  });
3162
3259
  if (checkCharges) {
3163
3260
  return this.http.post(this.PASSBOOK_URL + 'passbook/cart/initiate/payment?manualPay=true', payload, { headers: headers });
@@ -3169,19 +3266,22 @@ class RestService {
3169
3266
  getBenefitSlab(passbookId) {
3170
3267
  const token = this.getToken();
3171
3268
  const headers = new HttpHeaders({
3172
- 'Authorization': `Bearer ${token}`
3269
+ Authorization: `Bearer ${token}`,
3173
3270
  });
3174
- return this.http.post(this.PASSBOOK_URL + `passbook/benefit/percentages?passbookId=${passbookId}`, {}, { headers: headers });
3271
+ return this.http.post(this.PASSBOOK_URL +
3272
+ `passbook/benefit/percentages?passbookId=${passbookId}`, {}, { headers: headers });
3175
3273
  }
3176
3274
  getAllStaffList() {
3177
- return this.http.get(this.BASE_URL + `staff/staff/list/${this.storage.getItem('businessId')}?isPagination=false`);
3275
+ return this.http.get(this.BASE_URL +
3276
+ `staff/staff/list/${this.storage.getItem('businessId')}?isPagination=false`);
3178
3277
  }
3179
3278
  requestRedeemption(passbookId) {
3180
3279
  const token = this.getToken();
3181
3280
  const headers = new HttpHeaders({
3182
- 'Authorization': `Bearer ${token}`
3281
+ Authorization: `Bearer ${token}`,
3183
3282
  });
3184
- return this.http.put(this.PASSBOOK_URL + `passbook/request/redemption?passBookId=${passbookId}`, {}, { headers: headers });
3283
+ return this.http.put(this.PASSBOOK_URL +
3284
+ `passbook/request/redemption?passBookId=${passbookId}`, {}, { headers: headers });
3185
3285
  }
3186
3286
  PassbookAppStatus(bId) {
3187
3287
  return this.http.get(this.BASE_URL + `app/app/check-app?businessId=${bId}&appName=Passbook`);
@@ -3190,7 +3290,8 @@ class RestService {
3190
3290
  return this.http.get(this.BASE_URL + `app/app/check-app?businessId=${bId}&appName=${appName}`);
3191
3291
  }
3192
3292
  getRedeemPoints(bId, userId, evetType, orderValue, rewardPoints) {
3193
- return this.http.get(this.BASE_URL + `ecommerce/api/referrals/available-amount?businessId=${bId}&userId=${userId}&eventType=${evetType}&orderValue=${orderValue}&rewardPoints=${rewardPoints}`);
3293
+ return this.http.get(this.BASE_URL +
3294
+ `ecommerce/api/referrals/available-amount?businessId=${bId}&userId=${userId}&eventType=${evetType}&orderValue=${orderValue}&rewardPoints=${rewardPoints}`);
3194
3295
  }
3195
3296
  paymentWithCompletePoints(cartId, data) {
3196
3297
  return this.http.post(this.BASE_URL + `ecommerce/order/order/rewards?cartId=${cartId}`, data);
@@ -3198,9 +3299,10 @@ class RestService {
3198
3299
  getAllPassbookDues(bId, userId) {
3199
3300
  const token = this.getToken();
3200
3301
  const headers = new HttpHeaders({
3201
- 'Authorization': `Bearer ${token}`
3302
+ Authorization: `Bearer ${token}`,
3202
3303
  });
3203
- return this.http.get(this.PASSBOOK_URL + `passbook/payment/dues?page=0&size=1000&businessId=${bId}&userId=${userId}`, { headers: headers });
3304
+ return this.http.get(this.PASSBOOK_URL +
3305
+ `passbook/payment/dues?page=0&size=1000&businessId=${bId}&userId=${userId}`, { headers: headers });
3204
3306
  }
3205
3307
  getToken() {
3206
3308
  let token = this.cookieService.get('passBookToken');
@@ -3209,7 +3311,7 @@ class RestService {
3209
3311
  getAllTransactions(payload) {
3210
3312
  const token = this.getToken();
3211
3313
  const headers = new HttpHeaders({
3212
- 'Authorization': `Bearer ${token}`
3314
+ Authorization: `Bearer ${token}`,
3213
3315
  });
3214
3316
  return this.http.put(this.PASSBOOK_URL + `dashboard/v3/transactions/page`, payload, { headers: headers });
3215
3317
  }
@@ -3233,7 +3335,10 @@ class RestService {
3233
3335
  * Response: { data: { isExistingUser: boolean, message: string } }
3234
3336
  */
3235
3337
  sendOtpV2(identifier, businessId) {
3236
- return this.http.put(this.BASE_URL + `ecommerce/user/auth/send-otp`, { identifier, businessId });
3338
+ return this.http.put(this.BASE_URL + `ecommerce/user/auth/send-otp`, {
3339
+ identifier,
3340
+ businessId,
3341
+ });
3237
3342
  }
3238
3343
  verifyOtpV2(payload) {
3239
3344
  return this.http.put(this.BASE_URL + `ecommerce/user/auth/verify-otp`, payload);
@@ -3245,12 +3350,16 @@ class RestService {
3245
3350
  return this.http.put(this.BASE_URL + `ecommerce/user/auth/login-password`, payload);
3246
3351
  }
3247
3352
  flush(eventsToSend) {
3248
- this.http.post(this.BASE_URL + 'ecommerce/analytics/batch', eventsToSend)
3353
+ this.http
3354
+ .post(this.BASE_URL + 'ecommerce/analytics/batch', eventsToSend)
3249
3355
  .subscribe({ error: () => { } });
3250
3356
  }
3251
3357
  getPopularSearches() {
3252
- const businessId = this.storage.getItem("bId") ?? this.storage.getItem("businessId") ?? "1f121081-dbea-65c6-ad89-1dfe8cdda902";
3253
- return this.http.get(this.BASE_URL + `ecommerce/inventory/popular-searches?businessId=${businessId}`);
3358
+ const businessId = this.storage.getItem('bId') ??
3359
+ this.storage.getItem('businessId') ??
3360
+ '1f121081-dbea-65c6-ad89-1dfe8cdda902';
3361
+ return this.http.get(this.BASE_URL +
3362
+ `ecommerce/inventory/popular-searches?businessId=${businessId}`);
3254
3363
  }
3255
3364
  getMenuItems(menuId) {
3256
3365
  return this.http.get(this.BASE_URL + `ecommerce/menu/${menuId}`);
@@ -12983,10 +13092,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
12983
13092
  }] } });
12984
13093
 
12985
13094
  class BlogListComponent extends BaseSection {
12986
- constructor(_eventService) {
13095
+ constructor(_eventService, restService, storage) {
12987
13096
  super();
12988
13097
  this._eventService = _eventService;
13098
+ this.restService = restService;
13099
+ this.storage = storage;
12989
13100
  this.responseData = [];
13101
+ this.categoryList = [];
13102
+ // undefined = nothing clicked yet (no tab highlighted); null = "All" explicitly clicked.
13103
+ this.selectedCategoryId = undefined;
13104
+ this.filteredBlogs = null;
13105
+ this.apiLoading = false;
12990
13106
  }
12991
13107
  ngOnInit() {
12992
13108
  for (let blog of this.responseData) {
@@ -12998,6 +13114,53 @@ class BlogListComponent extends BaseSection {
12998
13114
  }
12999
13115
  this.style = this.data?.styles;
13000
13116
  this.blogContent = this.data?.content;
13117
+ this.loadBlogCategories();
13118
+ }
13119
+ get businessId() {
13120
+ return (this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? null);
13121
+ }
13122
+ get displayedBlogs() {
13123
+ return this.filteredBlogs ?? this.responseData;
13124
+ }
13125
+ loadBlogCategories() {
13126
+ const bId = this.businessId;
13127
+ if (!bId)
13128
+ return;
13129
+ this.restService.getBlogCategories(bId).subscribe({
13130
+ next: categories => {
13131
+ this.categoryList = categories ?? [];
13132
+ },
13133
+ error: () => {
13134
+ this.categoryList = [];
13135
+ },
13136
+ });
13137
+ }
13138
+ selectCategory(categoryId) {
13139
+ this.selectedCategoryId = categoryId;
13140
+ if (categoryId === null) {
13141
+ this.filteredBlogs = null;
13142
+ return;
13143
+ }
13144
+ const bId = this.businessId;
13145
+ if (!bId)
13146
+ return;
13147
+ this.apiLoading = true;
13148
+ this.restService.getBlogsByCategory(bId, categoryId).subscribe({
13149
+ next: (response) => {
13150
+ const list = response?.data ?? [];
13151
+ for (const blog of list) {
13152
+ blog['img'] = blog.blocks?.find((x) => x.type === 'image')?.data?.file?.url;
13153
+ if (blog?.keyWords?.content?.length > 0)
13154
+ blog['tags'] = blog?.keyWords?.content?.split(',') || [];
13155
+ }
13156
+ this.filteredBlogs = list;
13157
+ this.apiLoading = false;
13158
+ },
13159
+ error: () => {
13160
+ this.filteredBlogs = [];
13161
+ this.apiLoading = false;
13162
+ },
13163
+ });
13001
13164
  }
13002
13165
  get headingSpace() {
13003
13166
  return this.style?.layout?.headingSpacing;
@@ -13016,12 +13179,13 @@ class BlogListComponent extends BaseSection {
13016
13179
  this._eventService.editSection.emit({ data: this.data });
13017
13180
  }, 100);
13018
13181
  }
13019
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, deps: [{ token: EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
13020
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BlogListComponent, isStandalone: true, selector: "simpo-blog-list", inputs: { responseData: "responseData", index: "index", edit: "edit", customClass: "customClass", data: "data", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" class=\"total-container\" simpoHover\n (hovering)=\"showEditTabs($event)\" *ngIf=\"(responseData?.length || 0) > 0;else elseBlock\" [attr.style]=\"customClass\">\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\" [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"row gap-20\">\n <div [simpoColumnDirective]=\"data?.styles?.size\" [id]=\"data?.id\" *ngFor=\"let content of responseData\"\n class=\"d-flex\">\n <a [routerLink]=\"['/blog', content.newPostTitle]\" (click)=\"getBlogById(content.articleSlug)\">\n <div class=\"cards h-100\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\">\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\" alt=\"\" *ngIf=\"content.img\" loading=\"lazy\">\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\" *ngIf=\"!content.img\" loading=\"lazy\">\n <div class=\"p-30\">\n <!-- <div class=\"d-flex flex-wrap align-items-center gap-2\">\n <ng-container *ngFor=\"let tag of content?.tags | slice:0:4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div> -->\n <div class=\"heading-medium title mt-2 fs-20\" *ngIf=\"blogContent?.display?.showHeading\">\n {{content.postTitle.length > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div class=\"body-large mt-4 pb-15\" *ngIf=\"blogContent?.display?.showContent\">\n {{ content.postSummary.length > 250 ? content.postSummary.substring(0, 250) + '...' :\n content.postSummary }}\n </div>\n </ng-container>\n\n <div class=\"d-flex justify-content-end p-2 align-items-center\" *ngIf=\"content?.author?.content && content?.author?.content.length > 0\">\n <p>- {{content?.author?.content | titlecase}}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> &nbsp;&nbsp;<span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> &nbsp;&nbsp; <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
13182
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, deps: [{ token: EventsService }, { token: RestService }, { token: LOCAL_STORAGE }], target: i0.ɵɵFactoryTarget.Component }); }
13183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BlogListComponent, isStandalone: true, selector: "simpo-blog-list", inputs: { responseData: "responseData", index: "index", edit: "edit", customClass: "customClass", data: "data", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section\n [id]=\"data?.id\"\n [simpoBackground]=\"style?.background\"\n class=\"total-container\"\n simpoHover\n (hovering)=\"showEditTabs($event)\"\n *ngIf=\"\n categoryList.length > 0 || (displayedBlogs?.length || 0) > 0 || apiLoading;\n else elseBlock\n \"\n [attr.style]=\"customClass\">\n <div\n [id]=\"data?.id\"\n [simpoOverlay]=\"style?.background\"\n [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\"\n [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"blog-category-tabs\" *ngIf=\"categoryList.length > 0\">\n <span\n class=\"category-tab\"\n [class.active]=\"selectedCategoryId === null\"\n (click)=\"selectCategory(null)\"\n >All</span\n >\n <span\n class=\"category-tab\"\n *ngFor=\"let category of categoryList\"\n [class.active]=\"selectedCategoryId === category.id\"\n (click)=\"selectCategory(category.id)\">\n {{ category.categoryName }}\n </span>\n </div>\n <simpo-card-skeleton-loader\n *ngIf=\"apiLoading\"\n [showTitles]=\"true\"></simpo-card-skeleton-loader>\n <div\n class=\"no-blog-text-inline heading-medium\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) === 0\">\n Sorry there are no blog posts in this category.\n </div>\n <div\n class=\"row gap-20\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) > 0\">\n <div\n [simpoColumnDirective]=\"data?.styles?.size\"\n [id]=\"data?.id\"\n *ngFor=\"let content of displayedBlogs\"\n class=\"d-flex\">\n <a\n [routerLink]=\"['/blog', content.newPostTitle]\"\n (click)=\"getBlogById(content.articleSlug)\">\n <div\n class=\"cards h-100\"\n [simpoCorner]=\"style?.corners\"\n [id]=\"data?.id\">\n <img\n loading=\"lazy\"\n [src]=\"content.img\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n alt=\"\"\n *ngIf=\"content.img\"\n loading=\"lazy\" />\n <img\n loading=\"lazy\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\"\n *ngIf=\"!content.img\"\n loading=\"lazy\" />\n <div class=\"p-30\">\n <div\n class=\"d-flex flex-wrap align-items-center gap-2 mb-2\"\n *ngIf=\"content?.tags?.length || content?.categoryName\">\n <p class=\"mb-0 p-2 border\" *ngIf=\"content?.categoryName\">\n {{ content.categoryName }}\n </p>\n <ng-container\n *ngFor=\"let tag of content?.tags | slice: 0 : 4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div>\n <div\n class=\"heading-medium title mt-2 fs-20\"\n *ngIf=\"blogContent?.display?.showHeading\">\n {{\n content.postTitle.length > 100\n ? content.postTitle.substring(0, 100) + '...\"'\n : content.postTitle\n }}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div\n class=\"body-large mt-4 pb-15\"\n *ngIf=\"blogContent?.display?.showContent\">\n {{\n content.postSummary.length > 250\n ? content.postSummary.substring(0, 250) + '...'\n : content.postSummary\n }}\n </div>\n </ng-container>\n\n <div\n class=\"d-flex justify-content-end p-2 align-items-center\"\n *ngIf=\"\n content?.author?.content &&\n content?.author?.content.length > 0\n \">\n <p>- {{ content?.author?.content | titlecase }}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> &nbsp;&nbsp;<span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> &nbsp;&nbsp; <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider\n [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements\n [data]=\"data\"\n [index]=\"index\"\n [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>\n", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.no-blog-text-inline{font-size:18px;padding:60px 0;text-align:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}.blog-category-tabs{display:flex;flex-wrap:nowrap;align-items:center;gap:32px;overflow-x:auto;border-bottom:1px solid #e5e5e5;padding-bottom:14px;margin-bottom:24px;scrollbar-width:none}.blog-category-tabs::-webkit-scrollbar{display:none}.category-tab{flex-shrink:0;padding-bottom:4px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8a8a8a;white-space:nowrap;cursor:pointer;border-bottom:2px solid transparent}.category-tab:hover,.category-tab.active{color:#1a1a1a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: CardSkeletonLoaderComponent, selector: "simpo-card-skeleton-loader", inputs: ["count", "showTitles"] }] }); }
13021
13184
  }
13022
13185
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, decorators: [{
13023
13186
  type: Component,
13024
- args: [{ selector: 'simpo-blog-list', standalone: true, imports: [CommonModule,
13187
+ args: [{ selector: 'simpo-blog-list', standalone: true, imports: [
13188
+ CommonModule,
13025
13189
  AnimationDirective,
13026
13190
  BorderDirective,
13027
13191
  ContentFitDirective,
@@ -13033,9 +13197,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
13033
13197
  ContentTitleDirective,
13034
13198
  HoverDirective,
13035
13199
  HoverElementsComponent,
13036
- MatIcon, SvgDividerComponent,
13037
- SpacingHorizontalDirective, RouterLink], template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" class=\"total-container\" simpoHover\n (hovering)=\"showEditTabs($event)\" *ngIf=\"(responseData?.length || 0) > 0;else elseBlock\" [attr.style]=\"customClass\">\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\" [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"row gap-20\">\n <div [simpoColumnDirective]=\"data?.styles?.size\" [id]=\"data?.id\" *ngFor=\"let content of responseData\"\n class=\"d-flex\">\n <a [routerLink]=\"['/blog', content.newPostTitle]\" (click)=\"getBlogById(content.articleSlug)\">\n <div class=\"cards h-100\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\">\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\" alt=\"\" *ngIf=\"content.img\" loading=\"lazy\">\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\" *ngIf=\"!content.img\" loading=\"lazy\">\n <div class=\"p-30\">\n <!-- <div class=\"d-flex flex-wrap align-items-center gap-2\">\n <ng-container *ngFor=\"let tag of content?.tags | slice:0:4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div> -->\n <div class=\"heading-medium title mt-2 fs-20\" *ngIf=\"blogContent?.display?.showHeading\">\n {{content.postTitle.length > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div class=\"body-large mt-4 pb-15\" *ngIf=\"blogContent?.display?.showContent\">\n {{ content.postSummary.length > 250 ? content.postSummary.substring(0, 250) + '...' :\n content.postSummary }}\n </div>\n </ng-container>\n\n <div class=\"d-flex justify-content-end p-2 align-items-center\" *ngIf=\"content?.author?.content && content?.author?.content.length > 0\">\n <p>- {{content?.author?.content | titlecase}}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> &nbsp;&nbsp;<span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> &nbsp;&nbsp; <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}\n"] }]
13038
- }], ctorParameters: () => [{ type: EventsService }], propDecorators: { responseData: [{
13200
+ MatIcon,
13201
+ SvgDividerComponent,
13202
+ SpacingHorizontalDirective,
13203
+ RouterLink,
13204
+ CardSkeletonLoaderComponent,
13205
+ ], template: "<section\n [id]=\"data?.id\"\n [simpoBackground]=\"style?.background\"\n class=\"total-container\"\n simpoHover\n (hovering)=\"showEditTabs($event)\"\n *ngIf=\"\n categoryList.length > 0 || (displayedBlogs?.length || 0) > 0 || apiLoading;\n else elseBlock\n \"\n [attr.style]=\"customClass\">\n <div\n [id]=\"data?.id\"\n [simpoOverlay]=\"style?.background\"\n [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\"\n [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"blog-category-tabs\" *ngIf=\"categoryList.length > 0\">\n <span\n class=\"category-tab\"\n [class.active]=\"selectedCategoryId === null\"\n (click)=\"selectCategory(null)\"\n >All</span\n >\n <span\n class=\"category-tab\"\n *ngFor=\"let category of categoryList\"\n [class.active]=\"selectedCategoryId === category.id\"\n (click)=\"selectCategory(category.id)\">\n {{ category.categoryName }}\n </span>\n </div>\n <simpo-card-skeleton-loader\n *ngIf=\"apiLoading\"\n [showTitles]=\"true\"></simpo-card-skeleton-loader>\n <div\n class=\"no-blog-text-inline heading-medium\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) === 0\">\n Sorry there are no blog posts in this category.\n </div>\n <div\n class=\"row gap-20\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) > 0\">\n <div\n [simpoColumnDirective]=\"data?.styles?.size\"\n [id]=\"data?.id\"\n *ngFor=\"let content of displayedBlogs\"\n class=\"d-flex\">\n <a\n [routerLink]=\"['/blog', content.newPostTitle]\"\n (click)=\"getBlogById(content.articleSlug)\">\n <div\n class=\"cards h-100\"\n [simpoCorner]=\"style?.corners\"\n [id]=\"data?.id\">\n <img\n loading=\"lazy\"\n [src]=\"content.img\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n alt=\"\"\n *ngIf=\"content.img\"\n loading=\"lazy\" />\n <img\n loading=\"lazy\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\"\n *ngIf=\"!content.img\"\n loading=\"lazy\" />\n <div class=\"p-30\">\n <div\n class=\"d-flex flex-wrap align-items-center gap-2 mb-2\"\n *ngIf=\"content?.tags?.length || content?.categoryName\">\n <p class=\"mb-0 p-2 border\" *ngIf=\"content?.categoryName\">\n {{ content.categoryName }}\n </p>\n <ng-container\n *ngFor=\"let tag of content?.tags | slice: 0 : 4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div>\n <div\n class=\"heading-medium title mt-2 fs-20\"\n *ngIf=\"blogContent?.display?.showHeading\">\n {{\n content.postTitle.length > 100\n ? content.postTitle.substring(0, 100) + '...\"'\n : content.postTitle\n }}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div\n class=\"body-large mt-4 pb-15\"\n *ngIf=\"blogContent?.display?.showContent\">\n {{\n content.postSummary.length > 250\n ? content.postSummary.substring(0, 250) + '...'\n : content.postSummary\n }}\n </div>\n </ng-container>\n\n <div\n class=\"d-flex justify-content-end p-2 align-items-center\"\n *ngIf=\"\n content?.author?.content &&\n content?.author?.content.length > 0\n \">\n <p>- {{ content?.author?.content | titlecase }}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> &nbsp;&nbsp;<span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> &nbsp;&nbsp; <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider\n [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements\n [data]=\"data\"\n [index]=\"index\"\n [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>\n", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.no-blog-text-inline{font-size:18px;padding:60px 0;text-align:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}.blog-category-tabs{display:flex;flex-wrap:nowrap;align-items:center;gap:32px;overflow-x:auto;border-bottom:1px solid #e5e5e5;padding-bottom:14px;margin-bottom:24px;scrollbar-width:none}.blog-category-tabs::-webkit-scrollbar{display:none}.category-tab{flex-shrink:0;padding-bottom:4px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8a8a8a;white-space:nowrap;cursor:pointer;border-bottom:2px solid transparent}.category-tab:hover,.category-tab.active{color:#1a1a1a}\n"] }]
13206
+ }], ctorParameters: () => [{ type: EventsService }, { type: RestService }, { type: undefined, decorators: [{
13207
+ type: Inject,
13208
+ args: [LOCAL_STORAGE]
13209
+ }] }], propDecorators: { responseData: [{
13039
13210
  type: Input
13040
13211
  }], index: [{
13041
13212
  type: Input
@@ -13050,944 +13221,1300 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
13050
13221
  }] } });
13051
13222
 
13052
13223
  class ViewBlogComponent {
13053
- constructor(_eventService) {
13224
+ constructor(_eventService, _elementRef, platformId) {
13054
13225
  this._eventService = _eventService;
13226
+ this._elementRef = _elementRef;
13055
13227
  this.responseData = {
13056
- "displayId": "BG1285",
13057
- "updatedTimeStamp": "2024-12-14T17:04:14.000+00:00",
13058
- "readTime": "8",
13059
- "wordCount": 1608,
13060
- "totalVisits": 0,
13061
- "id": "1efba3d1-5cac-692c-8486-4505201f8678",
13062
- "time": 0.0,
13063
- "version": "",
13064
- "blocks": [
13228
+ subIndustryId: null,
13229
+ subIndustryName: '',
13230
+ displayId: 'BG1778',
13231
+ articleSlug: 'How-to-Increase-Repeat-Customers-in-a-Jewellery-Store',
13232
+ updatedTimeStamp: '2026-07-22T12:10:20.000+00:00',
13233
+ readTime: '6',
13234
+ wordCount: 1256,
13235
+ totalVisits: 0,
13236
+ id: '1f185c62-898d-67c7-a377-c3e9c2e4f536',
13237
+ businessId: '1ef944db-0e37-6f01-943a-214dd19f54e9',
13238
+ time: 0,
13239
+ version: '',
13240
+ blocks: [
13065
13241
  {
13066
- "id": "6z2AphuRaq",
13067
- "type": "paragraph",
13068
- "data": {
13069
- "text": "<span style=\"font-size:16pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">A Complete Guide to the Top 5 Web Development Frameworks for Novices</span>"
13070
- }
13242
+ id: 'JyDKAbiu81',
13243
+ type: 'header',
13244
+ data: {
13245
+ text: 'How to Increase Repeat Customers in a Jewellery Store:&nbsp; Proven Strategies to Boost Customer Loyalty &amp; Sales',
13246
+ level: 2,
13247
+ },
13071
13248
  },
13072
13249
  {
13073
- "id": "hEM1ub64il",
13074
- "type": "paragraph",
13075
- "data": {
13076
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Overview</span>"
13077
- }
13250
+ id: 'vkcNOX9tLF',
13251
+ type: 'image',
13252
+ data: {
13253
+ caption: '',
13254
+ withBorder: false,
13255
+ withBackground: false,
13256
+ stretched: false,
13257
+ file: {
13258
+ url: 'https://prod-simpo.s3.ap-south-1.amazonaws.com/images/859800c17847214109891.png',
13259
+ height: '500px',
13260
+ },
13261
+ },
13078
13262
  },
13079
13263
  {
13080
- "id": "OkgSbNjWvv",
13081
- "type": "paragraph",
13082
- "data": {
13083
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">The article's goal</span>"
13084
- }
13264
+ id: 'qd0UQID0VJ',
13265
+ type: 'paragraph',
13266
+ data: {
13267
+ text: '<span style="font-size:17pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Imagine This…</span>',
13268
+ },
13085
13269
  },
13086
13270
  {
13087
- "id": "8aLKC67NDP",
13088
- "type": "paragraph",
13089
- "data": {
13090
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Selecting the best framework in the constantly changing field of web development can be difficult, particularly for novices. By outlining the features and advantages of some of the greatest web development frameworks on the market today, this post seeks to assist novices in choosing the one that would best meet their requirements.</span>"
13091
- }
13271
+ id: 'uPNGAY1cB9',
13272
+ type: 'paragraph',
13273
+ data: {
13274
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">You spent </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">₹15,000 on Meta Ads</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, printed thousands of pamphlets for a festive offer, and even ran a local newspaper advertisement.</span>',
13275
+ },
13092
13276
  },
13093
13277
  {
13094
- "id": "Q-lcDNxfID",
13095
- "type": "paragraph",
13096
- "data": {
13097
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;An Overview of Frameworks for Web Development</span>"
13098
- }
13278
+ id: 'bDzXtwyHH9',
13279
+ type: 'paragraph',
13280
+ data: {
13281
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Customers walked into your jewellery showroom. Sales were good during Akshaya Tritiya, Diwali, and the wedding season.</span>',
13282
+ },
13099
13283
  },
13100
13284
  {
13101
- "id": "wKrSxt4XMV",
13102
- "type": "paragraph",
13103
- "data": {
13104
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Web development frameworks are collections of best practices, libraries, and tools designed to make creating websites and apps easier. They give developers a clear structure and pre-built components to help them create applications more rapidly and effectively.</span>"
13105
- }
13285
+ id: 'dummyTableDemo1',
13286
+ type: 'table',
13287
+ data: {
13288
+ withHeadings: true,
13289
+ content: [
13290
+ ['Loyalty Tier', 'Min. Purchase', 'Reward', 'Validity'],
13291
+ ['Silver', '₹25,000', '2% cashback', '12 months'],
13292
+ ['Gold', '₹75,000', '5% cashback', '12 months'],
13293
+ [
13294
+ 'Platinum',
13295
+ '₹1,50,000',
13296
+ '8% cashback + free maintenance',
13297
+ '24 months',
13298
+ ],
13299
+ ],
13300
+ },
13106
13301
  },
13107
13302
  {
13108
- "id": "3p4EODCtRd",
13109
- "type": "paragraph",
13110
- "data": {
13111
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Relevance for Novices</span>"
13112
- }
13303
+ id: 'dummyTableDemo2',
13304
+ type: 'table',
13305
+ data: {
13306
+ withHeadings: false,
13307
+ content: [
13308
+ ['Festive Season', 'Akshaya Tritiya, Diwali, wedding season'],
13309
+ ['Avg. Repeat Purchase Gap', '8-10 months'],
13310
+ ['Preferred Contact Channel', 'WhatsApp'],
13311
+ ['Top Reason For Return Visit', 'Referral rewards'],
13312
+ ],
13313
+ },
13113
13314
  },
13114
13315
  {
13115
- "id": "FjGjIfQupa",
13116
- "type": "paragraph",
13117
- "data": {
13118
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Frameworks are a means for novice web developers to avoid writing the same code over and over again. They also assist in resolving some of the most common issues, allowing one to concentrate on learning and improving his abilities rather than making a new discovery.</span>"
13119
- }
13316
+ id: 'dummyTableDemo3',
13317
+ type: 'table',
13318
+ data: {
13319
+ withHeadings: true,
13320
+ content: [
13321
+ [
13322
+ 'Month',
13323
+ 'New Customers',
13324
+ 'Repeat Customers',
13325
+ 'WhatsApp Reminders Sent',
13326
+ 'Redemptions',
13327
+ 'Revenue from Repeats',
13328
+ ],
13329
+ ['April', '120', '45', '300', '60', '₹4,20,000'],
13330
+ ['May', '98', '62', '340', '78', '₹5,10,000'],
13331
+ ['June', '145', '80', '410', '95', '₹6,35,000'],
13332
+ ],
13333
+ },
13120
13334
  },
13121
13335
  {
13122
- "id": "CRdm6fFkP2",
13123
- "type": "paragraph",
13124
- "data": {
13125
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;The intended audience</span>"
13126
- }
13336
+ id: 'fadoWe1GBc',
13337
+ type: 'paragraph',
13338
+ data: {
13339
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">But after six months, something unexpected happened.</span>',
13340
+ },
13127
13341
  },
13128
13342
  {
13129
- "id": "aLUXXN6bCi",
13130
- "type": "paragraph",
13131
- "data": {
13132
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;This course is perfect for:&nbsp;</span>"
13133
- }
13343
+ id: 'L367jCincd',
13344
+ type: 'paragraph',
13345
+ data: {
13346
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The same customers who once praised your service bought their next jewellery purchase from another store.</span>',
13347
+ },
13134
13348
  },
13135
13349
  {
13136
- "id": "UO06Fqzbdy",
13137
- "type": "paragraph",
13138
- "data": {
13139
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">● Novice web developers who wish to begin their careers</span>"
13140
- }
13350
+ id: 'dkLsmSu2lY',
13351
+ type: 'paragraph',
13352
+ data: {
13353
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Not because your jewellery was expensive.</span>',
13354
+ },
13141
13355
  },
13142
13356
  {
13143
- "id": "1fSaoLtmFI",
13144
- "type": "paragraph",
13145
- "data": {
13146
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">● Students and hobbyists who wish to learn web development as a pastime or career.</span>"
13147
- }
13357
+ id: 'DAdq8GtPbR',
13358
+ type: 'paragraph',
13359
+ data: {
13360
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Not because your designs were outdated.</span>',
13361
+ },
13148
13362
  },
13149
13363
  {
13150
- "id": "4KIezvDnLX",
13151
- "type": "paragraph",
13152
- "data": {
13153
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">An overview of the article</span>"
13154
- }
13364
+ id: '9pqofrbOW0',
13365
+ type: 'paragraph',
13366
+ data: {
13367
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">But because </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">they simply forgot about your business.</span>',
13368
+ },
13155
13369
  },
13156
13370
  {
13157
- "id": "29dySrByJF",
13158
- "type": "paragraph",
13159
- "data": {
13160
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Each framework will be covered in the manner described below:</span>"
13161
- }
13371
+ id: 'IE9A-uBWBg',
13372
+ type: 'paragraph',
13373
+ data: {
13374
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">This is one of the biggest challenges jewellery retailers face today.</span>',
13375
+ },
13162
13376
  },
13163
13377
  {
13164
- "id": "WEWoWWlvj2",
13165
- "type": "paragraph",
13166
- "data": {
13167
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;A synopsis of the framework and its background&nbsp;</span>"
13168
- }
13378
+ id: 'MF3K4P54FE',
13379
+ type: 'paragraph',
13380
+ data: {
13381
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Most jewellery owners spend thousands of rupees attracting new customers while unintentionally neglecting the customers who have already trusted them.</span>',
13382
+ },
13169
13383
  },
13170
13384
  {
13171
- "id": "VatZ_RsLjy",
13172
- "type": "paragraph",
13173
- "data": {
13174
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">● Benefits for novices&nbsp;</span>"
13175
- }
13385
+ id: 's_Na0psxmH',
13386
+ type: 'paragraph',
13387
+ data: {
13388
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The result?</span>',
13389
+ },
13176
13390
  },
13177
13391
  {
13178
- "id": "ICP_OEcFRo",
13179
- "type": "paragraph",
13180
- "data": {
13181
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">● Educational materials and advice on how to get started</span>"
13182
- }
13392
+ id: 'FeKyQmpgXr',
13393
+ type: 'list',
13394
+ data: {
13395
+ style: 'unordered',
13396
+ items: [
13397
+ 'Customers purchase once and never return.',
13398
+ 'Gold scheme members stop paying monthly instalments.',
13399
+ 'Staff spend hours making reminder calls.',
13400
+ 'Customer records remain in paper files or Excel sheets.',
13401
+ 'Festival campaigns reach only a fraction of past buyers.',
13402
+ 'Competitors reconnect with your customers before you do.',
13403
+ ],
13404
+ },
13183
13405
  },
13184
13406
  {
13185
- "id": "6FqPF85-1S",
13186
- "type": "paragraph",
13187
- "data": {
13188
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;1. React 1.1 React Overview</span>"
13189
- }
13407
+ id: 'zVORjT8DOu',
13408
+ type: 'paragraph',
13409
+ data: {
13410
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">If this sounds familiar, you\'re not alone.</span>',
13411
+ },
13190
13412
  },
13191
13413
  {
13192
- "id": "n5FQGCCR1U",
13193
- "type": "paragraph",
13194
- "data": {
13195
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">React: What is it?</span>"
13196
- }
13414
+ id: 'oHBeq3cDjH',
13415
+ type: 'paragraph',
13416
+ data: {
13417
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The good news is that increasing repeat customers doesn\'t always require a bigger marketing budget.</span>',
13418
+ },
13197
13419
  },
13198
13420
  {
13199
- "id": "k_Vb466Z4h",
13200
- "type": "paragraph",
13201
- "data": {
13202
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;A popular JavaScript package for creating user interfaces, particularly for single-page apps, is called React. It lets programmers make massive web apps that can update data without requiring a page reload.</span>"
13203
- }
13421
+ id: 'xbhYCptZpM',
13422
+ type: 'paragraph',
13423
+ data: {
13424
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Often, it requires a better customer retention strategy.</span>',
13425
+ },
13204
13426
  },
13205
13427
  {
13206
- "id": "GJjjiQIHD0",
13207
- "type": "paragraph",
13208
- "data": {
13209
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;A Synopsis of Development and History</span>"
13210
- }
13428
+ id: '8jTf7G2zLd',
13429
+ type: 'paragraph',
13430
+ data: {
13431
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">In this guide, we\'ll explore practical strategies that leading jewellery retailers use to increase customer loyalty, improve gold scheme collections, and build a business where customers keep coming back year after year.</span>',
13432
+ },
13211
13433
  },
13212
13434
  {
13213
- "id": "J8rdZylegP",
13214
- "type": "paragraph",
13215
- "data": {
13216
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Facebook created React in 2013 to improve the speed and usability of creating intricate user interfaces. It is run by Facebook and has a large community. It has become incredibly popular.</span>"
13217
- }
13435
+ id: 'uNUXVV2HAF',
13436
+ type: 'header',
13437
+ data: {
13438
+ text: 'Why Repeat Customers Matter More Than New Customers',
13439
+ level: 1,
13440
+ },
13218
13441
  },
13219
13442
  {
13220
- "id": "srRVuEHgua",
13221
- "type": "paragraph",
13222
- "data": {
13223
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;React Virtual DOM's salient features include: Because React will just render the modified content, this is what improves performance.</span>"
13224
- }
13443
+ id: 'AraiFCgo1I',
13444
+ type: 'paragraph',
13445
+ data: {
13446
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Every jewellery retailer dreams of attracting new customers.</span>',
13447
+ },
13225
13448
  },
13226
13449
  {
13227
- "id": "WzHtZP0vvp",
13228
- "type": "paragraph",
13229
- "data": {
13230
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Component-Based Architecture: It facilitates easier maintenance and reuse.</span>"
13231
- }
13450
+ id: '11DHzXNNRT',
13451
+ type: 'paragraph',
13452
+ data: {
13453
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">But the most profitable stores know a simple truth:</span>',
13454
+ },
13232
13455
  },
13233
13456
  {
13234
- "id": "vZh0fzzfqm",
13235
- "type": "paragraph",
13236
- "data": {
13237
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;1.2 Advantages of React for Novices</span>"
13238
- }
13457
+ id: 'W0A0GxNHS7',
13458
+ type: 'paragraph',
13459
+ data: {
13460
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The easiest customer to sell to is someone who has already bought from you.</span>',
13461
+ },
13239
13462
  },
13240
13463
  {
13241
- "id": "RwxYz5qsXk",
13242
- "type": "paragraph",
13243
- "data": {
13244
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Architecture Based on Components: Beginners may more easily break down their applications into smaller pieces with React.</span>"
13245
- }
13464
+ id: 'KajmNOsrms',
13465
+ type: 'paragraph',
13466
+ data: {
13467
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Think about a typical jewellery customer.</span>',
13468
+ },
13246
13469
  },
13247
13470
  {
13248
- "id": "93V-qnE525",
13249
- "type": "paragraph",
13250
- "data": {
13251
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Big Ecosystem and Community: React is used by millions of developers, and there is a wealth of third-party tools, forums, and lesson content available.</span>"
13252
- }
13471
+ id: 'XIPJk8oGd5',
13472
+ type: 'paragraph',
13473
+ data: {
13474
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A person buying an engagement ring today might later purchase:</span>',
13475
+ },
13253
13476
  },
13254
13477
  {
13255
- "id": "bhy5WMnYGr",
13256
- "type": "paragraph",
13257
- "data": {
13258
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Comprehensive Resources and Documentation: The people who manage the official tool have produced several very good resources, particularly for new users, including:</span>"
13259
- }
13478
+ id: '6udc4_lhcx',
13479
+ type: 'list',
13480
+ data: {
13481
+ style: 'unordered',
13482
+ items: [
13483
+ 'Wedding jewellery',
13484
+ 'Anniversary gifts',
13485
+ 'Baby shower jewellery',
13486
+ 'Festival collections',
13487
+ 'Gold coins',
13488
+ 'Monthly gold savings schemes',
13489
+ ],
13490
+ },
13260
13491
  },
13261
13492
  {
13262
- "id": "p5bJkb8cGl",
13263
- "type": "paragraph",
13264
- "data": {
13265
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;1.3 The Learning Curve</span>"
13266
- }
13493
+ id: '5KjzrI2UnH',
13494
+ type: 'paragraph',
13495
+ data: {
13496
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Over a lifetime, one customer can generate multiple purchases.</span>',
13497
+ },
13267
13498
  },
13268
13499
  {
13269
- "id": "N9eT_cKnZ5",
13270
- "type": "paragraph",
13271
- "data": {
13272
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Beginners' First Steepness</span>"
13273
- }
13500
+ id: '3XzZwU5W7z',
13501
+ type: 'paragraph',
13502
+ data: {
13503
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The challenge is staying connected between those occasions.</span>',
13504
+ },
13274
13505
  },
13275
13506
  {
13276
- "id": "R9HmsqyUy5",
13277
- "type": "paragraph",
13278
- "data": {
13279
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;But even with its simplicity, JSX, its components, and its lifecycle can be confusing.</span>"
13280
- }
13507
+ id: 'AdmnsV9cTl',
13508
+ type: 'paragraph',
13509
+ data: {
13510
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Unfortunately, many jewellery stores lose touch after the first sale.</span>',
13511
+ },
13281
13512
  },
13282
13513
  {
13283
- "id": "P-3HWcz7DB",
13284
- "type": "paragraph",
13285
- "data": {
13286
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Learning Resources and Tutorials Available</span>"
13287
- }
13514
+ id: 'PEDGnjTgfV',
13515
+ type: 'paragraph',
13516
+ data: {
13517
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No follow-up.</span>',
13518
+ },
13288
13519
  },
13289
13520
  {
13290
- "id": "jkYgAUOe5S",
13291
- "type": "paragraph",
13292
- "data": {
13293
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;● The official React documentation is the ideal starting point.&nbsp;</span>"
13294
- }
13521
+ id: 'E1n0EGLScQ',
13522
+ type: 'paragraph',
13523
+ data: {
13524
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No reminders.</span>',
13525
+ },
13295
13526
  },
13296
13527
  {
13297
- "id": "jMYvQRJIXZ",
13298
- "type": "list",
13299
- "data": {
13300
- "style": "unordered",
13301
- "items": [
13302
- "Both Codecademy and freeCodeCamp provide beginner courses."
13303
- ]
13304
- }
13528
+ id: '9mqQlu_m94',
13529
+ type: 'paragraph',
13530
+ data: {
13531
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No personalized communication.</span>',
13532
+ },
13305
13533
  },
13306
13534
  {
13307
- "id": "NGr8G8BF29",
13308
- "type": "paragraph",
13309
- "data": {
13310
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Usability in Relation to Other Frameworks</span>"
13311
- }
13535
+ id: 'faQUMozk8E',
13536
+ type: 'paragraph',
13537
+ data: {
13538
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No loyalty program.</span>',
13539
+ },
13312
13540
  },
13313
13541
  {
13314
- "id": "6_0pCELwKP",
13315
- "type": "paragraph",
13316
- "data": {
13317
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;React is particularly popular with new users since it has a less steep learning curve than Angular.</span>"
13318
- }
13542
+ id: '95FLH2Z5fH',
13543
+ type: 'paragraph',
13544
+ data: {
13545
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Eventually, the customer walks into another jewellery store—not because they\'re unhappy, but because the competitor stayed visible.</span>',
13546
+ },
13319
13547
  },
13320
13548
  {
13321
- "id": "psn72vsGsf",
13322
- "type": "paragraph",
13323
- "data": {
13324
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;2. The Vue.js</span>"
13325
- }
13549
+ id: 'qHDfLo4bPA',
13550
+ type: 'header',
13551
+ data: {
13552
+ text: 'The Biggest Customer Retention Problems Jewellery Stores Face',
13553
+ level: 1,
13554
+ },
13326
13555
  },
13327
13556
  {
13328
- "id": "xT13vElMbW",
13329
- "type": "paragraph",
13330
- "data": {
13331
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">2.1 Overview of the Framework Vue.js</span>"
13332
- }
13557
+ id: '5VDm7sUJte',
13558
+ type: 'paragraph',
13559
+ data: {
13560
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">After speaking with jewellery retailers across India, the same challenges appear repeatedly.</span>',
13561
+ },
13333
13562
  },
13334
13563
  {
13335
- "id": "L49yNPlfXV",
13336
- "type": "paragraph",
13337
- "data": {
13338
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;A progressive JavaScript framework for creating user interfaces and single-page apps is called Vue.js.</span>"
13339
- }
13564
+ id: 'ee1avurVhp',
13565
+ type: 'header',
13566
+ data: {
13567
+ text: '1. Customers Forget About the Store',
13568
+ level: 3,
13569
+ },
13340
13570
  },
13341
13571
  {
13342
- "id": "soXo-6ypFq",
13343
- "type": "paragraph",
13344
- "data": {
13345
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Fundamental Ideas of Vue.js</span>"
13346
- }
13572
+ id: 'MXpJGVcIu1',
13573
+ type: 'paragraph',
13574
+ data: {
13575
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Most customers buy jewellery only a few times a year.</span>',
13576
+ },
13347
13577
  },
13348
13578
  {
13349
- "id": "9RjPayjPtg",
13350
- "type": "paragraph",
13351
- "data": {
13352
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;It emphasizes adaptability and simplicity, which developers may progressively incorporate into their current projects.</span>"
13353
- }
13579
+ id: 'Wd6TbM8kiP',
13580
+ type: 'paragraph',
13581
+ data: {
13582
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Without regular communication, they forget where they purchased last.</span>',
13583
+ },
13354
13584
  },
13355
13585
  {
13356
- "id": "5CIhGysy3P",
13357
- "type": "paragraph",
13358
- "data": {
13359
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Comparing Angular with React</span>"
13360
- }
13586
+ id: 'gVktfSScPB',
13587
+ type: 'header',
13588
+ data: {
13589
+ text: '2. Gold Scheme Customers Miss Installments',
13590
+ level: 3,
13591
+ },
13361
13592
  },
13362
13593
  {
13363
- "id": "3oFFZ49nDu",
13364
- "type": "paragraph",
13365
- "data": {
13366
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Compared to React and Angular, Vue is praised for being easier to integrate, making it a more gradual introduction for novices.</span>"
13367
- }
13594
+ id: 'pfErs56YIa',
13595
+ type: 'paragraph',
13596
+ data: {
13597
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Monthly gold savings schemes are excellent for customer retention.</span>',
13598
+ },
13368
13599
  },
13369
13600
  {
13370
- "id": "Kx2RhGANZQ",
13371
- "type": "paragraph",
13372
- "data": {
13373
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;2.2 Advantages for Novice Developers</span>"
13374
- }
13601
+ id: 'sATc0rb9-x',
13602
+ type: 'paragraph',
13603
+ data: {
13604
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">However, many customers miss instalments simply because they forget the due date.</span>',
13605
+ },
13375
13606
  },
13376
13607
  {
13377
- "id": "42_Ii7x6oN",
13378
- "type": "paragraph",
13379
- "data": {
13380
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Basic Design and Syntax: New developers may easily and quickly learn the syntax of Vue.</span>"
13381
- }
13608
+ id: 'RWNT1tQ_OV',
13609
+ type: 'paragraph',
13610
+ data: {
13611
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Staff then spend hours making reminder calls.</span>',
13612
+ },
13382
13613
  },
13383
13614
  {
13384
- "id": "ecx1UsJm1L",
13385
- "type": "paragraph",
13386
- "data": {
13387
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Lightweight Framework: This improves user experience by ensuring that the page loads quickly.</span>"
13388
- }
13615
+ id: '-s9MZhQNmg',
13616
+ type: 'header',
13617
+ data: {
13618
+ text: '3. Everything Is Managed Manually',
13619
+ level: 3,
13620
+ },
13389
13621
  },
13390
13622
  {
13391
- "id": "KniDdRn7Li",
13392
- "type": "paragraph",
13393
- "data": {
13394
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Flexibility and Scalability Options: Vue works well for small projects as well as larger ones.</span>"
13395
- }
13623
+ id: '-DWy8vU25_',
13624
+ type: 'paragraph',
13625
+ data: {
13626
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Many retailers still depend on:</span>',
13627
+ },
13396
13628
  },
13397
13629
  {
13398
- "id": "UUqevHV7TS",
13399
- "type": "paragraph",
13400
- "data": {
13401
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;2.3 Vue Learning Resources.Official Documentation for JSON:&nbsp;</span>"
13402
- }
13630
+ id: 'PQTOI6py5T',
13631
+ type: 'list',
13632
+ data: {
13633
+ style: 'unordered',
13634
+ items: [
13635
+ 'Paper passbooks',
13636
+ 'Excel sheets',
13637
+ 'Registers',
13638
+ 'Manual calculations',
13639
+ ],
13640
+ },
13403
13641
  },
13404
13642
  {
13405
- "id": "b6r1UFYVmc",
13406
- "type": "paragraph",
13407
- "data": {
13408
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">It is thorough and highly beginner-friendly.</span>"
13409
- }
13643
+ id: 'B7hdll3Cvd',
13644
+ type: 'paragraph',
13645
+ data: {
13646
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">This increases errors and consumes valuable staff time.</span>',
13647
+ },
13410
13648
  },
13411
13649
  {
13412
- "id": "WoXEmQPNJT",
13413
- "type": "paragraph",
13414
- "data": {
13415
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Suggested Basic Courses:</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\"> Websites such as Coursera and Udemy offer structured learning pathways.</span>"
13416
- }
13650
+ id: '7SINkRpmJZ',
13651
+ type: 'header',
13652
+ data: {
13653
+ text: '4. No Customer Database',
13654
+ level: 3,
13655
+ },
13417
13656
  },
13418
13657
  {
13419
- "id": "Bql0i0LJnr",
13420
- "type": "paragraph",
13421
- "data": {
13422
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Support and Community Forums:</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\"> Stack Overflow and other forums are good places to connect with Vue's friendly community.</span>"
13423
- }
13658
+ id: '_d4DGhIKDp',
13659
+ type: 'paragraph',
13660
+ data: {
13661
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Many stores have thousands of invoices but no structured customer database.</span>',
13662
+ },
13424
13663
  },
13425
13664
  {
13426
- "id": "RVh3cX2L2m",
13427
- "type": "paragraph",
13428
- "data": {
13429
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;3. Angular</span>"
13430
- }
13665
+ id: 'wI62cQ2pbB',
13666
+ type: 'paragraph',
13667
+ data: {
13668
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Without customer information, personalized marketing becomes impossible.</span>',
13669
+ },
13431
13670
  },
13432
13671
  {
13433
- "id": "BZ14DeKTKj",
13434
- "type": "paragraph",
13435
- "data": {
13436
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;3.1 An Overview of Angular</span>"
13437
- }
13672
+ id: 'vbQEMA4Ofn',
13673
+ type: 'header',
13674
+ data: {
13675
+ text: '5. No Follow-Up Process',
13676
+ level: 3,
13677
+ },
13438
13678
  },
13439
13679
  {
13440
- "id": "rZsUY9TS0e",
13441
- "type": "paragraph",
13442
- "data": {
13443
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">The Angular Framework explained</span>"
13444
- }
13680
+ id: 'M60hLTKwgd',
13681
+ type: 'paragraph',
13682
+ data: {
13683
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">After the purchase, communication stops.</span>',
13684
+ },
13445
13685
  },
13446
13686
  {
13447
- "id": "q1rzjU1WO6",
13448
- "type": "paragraph",
13449
- "data": {
13450
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Angular is a framework and platform for creating HTML and TypeScript-based single-page client applications.</span>"
13451
- }
13687
+ id: '--inklHM2v',
13688
+ type: 'paragraph',
13689
+ data: {
13690
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No birthday wishes.</span>',
13691
+ },
13452
13692
  },
13453
13693
  {
13454
- "id": "qhPwzbQNPK",
13455
- "type": "paragraph",
13456
- "data": {
13457
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Key characteristics of angular two-way data binding include: </span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">simplifying the model-view synchronization procedure.</span>"
13458
- }
13694
+ id: 'ELwVErRFlz',
13695
+ type: 'paragraph',
13696
+ data: {
13697
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No anniversary messages.</span>',
13698
+ },
13459
13699
  },
13460
13700
  {
13461
- "id": "1beOsXKlgq",
13462
- "type": "paragraph",
13463
- "data": {
13464
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Injection of Dependency:</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\"> Angular's integrated dependency system improves modularity.</span>"
13465
- }
13701
+ id: 'JBQAOZ2gqS',
13702
+ type: 'paragraph',
13703
+ data: {
13704
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No festive greetings.</span>',
13705
+ },
13466
13706
  },
13467
13707
  {
13468
- "id": "gLuAX7Gclz",
13469
- "type": "paragraph",
13470
- "data": {
13471
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Its Development History.</span>"
13472
- }
13708
+ id: '75hJyzS12C',
13709
+ type: 'paragraph',
13710
+ data: {
13711
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No product recommendations.</span>',
13712
+ },
13473
13713
  },
13474
13714
  {
13475
- "id": "VBTmM6Bqgt",
13476
- "type": "paragraph",
13477
- "data": {
13478
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">It was first created by Google in 2010. Since then, Angular has undergone significant changes to rank among web developers' top options.</span>"
13479
- }
13715
+ id: 'th4EM_Ev9x',
13716
+ type: 'paragraph',
13717
+ data: {
13718
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The relationship quietly fades away.</span>',
13719
+ },
13480
13720
  },
13481
13721
  {
13482
- "id": "WCRkowdWCL",
13483
- "type": "paragraph",
13484
- "data": {
13485
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;3.2 As a Novice, Why Pick Angular?</span>"
13486
- }
13722
+ id: '6LcE7ECdcg',
13723
+ type: 'header',
13724
+ data: {
13725
+ text: '15 Proven Strategies to Increase Repeat Customers',
13726
+ level: 1,
13727
+ },
13487
13728
  },
13488
13729
  {
13489
- "id": "gaS6Yt11oe",
13490
- "type": "paragraph",
13491
- "data": {
13492
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;You don't need to know a lot of libraries because Angular provides everything you need to create a web application.</span>"
13493
- }
13730
+ id: 'Nx632lI-wF',
13731
+ type: 'header',
13732
+ data: {
13733
+ text: '1. Launch a Gold Savings Scheme That Keeps Customers Engaged',
13734
+ level: 2,
13735
+ },
13494
13736
  },
13495
13737
  {
13496
- "id": "eGUVhGboCL",
13497
- "type": "paragraph",
13498
- "data": {
13499
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Strongly typed with TypeScript:</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\"> even if it gets more complicated, knowing TypeScript could help you advance as an engineer.</span>"
13500
- }
13738
+ id: 'J_ADpweVfi',
13739
+ type: 'paragraph',
13740
+ data: {
13741
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">One of the smartest ways to increase repeat business is through a well-managed </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Gold Saving Scheme</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span>',
13742
+ },
13501
13743
  },
13502
13744
  {
13503
- "id": "hXXe00D_dr",
13504
- "type": "paragraph",
13505
- "data": {
13506
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Real-time updates and two-way data binding ensure smooth and simple data administration.</span>"
13507
- }
13745
+ id: 'S5uj000jqa',
13746
+ type: 'paragraph',
13747
+ data: {
13748
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead of waiting for customers to return once a year, a gold scheme encourages monthly interaction with your brand.</span>',
13749
+ },
13508
13750
  },
13509
13751
  {
13510
- "id": "GySevVEO3P",
13511
- "type": "paragraph",
13512
- "data": {
13513
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;3.3 How to Begin Using Angular</span>"
13514
- }
13752
+ id: 'xBrGqoTLrv',
13753
+ type: 'paragraph',
13754
+ data: {
13755
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Every monthly payment becomes another touchpoint.</span>',
13756
+ },
13515
13757
  },
13516
13758
  {
13517
- "id": "8QM95ySPbk",
13518
- "type": "paragraph",
13519
- "data": {
13520
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Instructions for Setting Up</span>"
13521
- }
13759
+ id: 'abNB9cO1Zj',
13760
+ type: 'paragraph',
13761
+ data: {
13762
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Customers stay connected.</span>',
13763
+ },
13522
13764
  },
13523
13765
  {
13524
- "id": "klSo7wB7Qt",
13525
- "type": "paragraph",
13526
- "data": {
13527
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;For installation, you will need Angular CLI and Node.js. Using the official guide can simplify things.</span>"
13528
- }
13766
+ id: 'GLXBsIgN4m',
13767
+ type: 'paragraph',
13768
+ data: {
13769
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Trust grows.</span>',
13770
+ },
13529
13771
  },
13530
13772
  {
13531
- "id": "2v4N4jeIDU",
13532
- "type": "paragraph",
13533
- "data": {
13534
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Educational Materials</span>"
13535
- }
13773
+ id: 'e3goTGwKrT',
13774
+ type: 'paragraph',
13775
+ data: {
13776
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Future purchases become more likely.</span>',
13777
+ },
13536
13778
  },
13537
13779
  {
13538
- "id": "Tj6ghSK5am",
13539
- "type": "paragraph",
13540
- "data": {
13541
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;For novices, the official Angular documentation is helpful.</span>"
13542
- }
13780
+ id: 'yOqzBaTH7B',
13781
+ type: 'paragraph',
13782
+ data: {
13783
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">However, running a gold scheme manually often creates challenges such as missed instalments, paperwork, and customer confusion.</span>',
13784
+ },
13543
13785
  },
13544
13786
  {
13545
- "id": "GXxhUPQOiK",
13546
- "type": "paragraph",
13547
- "data": {
13548
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;YouTube channels and online tutorials offer video support.</span>"
13549
- }
13787
+ id: '1md_1VRYTX',
13788
+ type: 'paragraph',
13789
+ data: {
13790
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">This is why many retailers are moving to digital gold scheme management.</span>',
13791
+ },
13550
13792
  },
13551
13793
  {
13552
- "id": "lD2ns5RdG1",
13553
- "type": "paragraph",
13554
- "data": {
13555
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Typical Errors to Avoid as a Novice</span>"
13556
- }
13794
+ id: 'JYY8zbXkxh',
13795
+ type: 'header',
13796
+ data: {
13797
+ text: '2. Stop Calling Customers Manually',
13798
+ level: 2,
13799
+ },
13557
13800
  },
13558
13801
  {
13559
- "id": "OeYuutbVvY",
13560
- "type": "paragraph",
13561
- "data": {
13562
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Avoid ignoring TypeScript's foundational ideas since they will speed up your learning of Angular.</span>"
13563
- }
13802
+ id: 'V-dw1da3Vl',
13803
+ type: 'paragraph',
13804
+ data: {
13805
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Imagine managing 1,200 active gold scheme members.</span>',
13806
+ },
13564
13807
  },
13565
13808
  {
13566
- "id": "MhYPzCCTl7",
13567
- "type": "paragraph",
13568
- "data": {
13569
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;4. Django</span>"
13570
- }
13809
+ id: 'hUF1vDzoQX',
13810
+ type: 'paragraph',
13811
+ data: {
13812
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Calling every customer every month is almost impossible.</span>',
13813
+ },
13571
13814
  },
13572
13815
  {
13573
- "id": "sjx8OS39B8",
13574
- "type": "paragraph",
13575
- "data": {
13576
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;4.1 Overview of Django</span>"
13577
- }
13816
+ id: 'icwpJONCvF',
13817
+ type: 'paragraph',
13818
+ data: {
13819
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead, automate:</span>',
13820
+ },
13578
13821
  },
13579
13822
  {
13580
- "id": "Ek6Tq0ZB_c",
13581
- "type": "paragraph",
13582
- "data": {
13583
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Overview of the Web Framework Django</span>"
13584
- }
13823
+ id: 'T_-ge3rEmM',
13824
+ type: 'list',
13825
+ data: {
13826
+ style: 'unordered',
13827
+ items: [
13828
+ 'Payment reminders',
13829
+ 'Due date alerts',
13830
+ 'Festival greetings',
13831
+ 'Gold rate updates',
13832
+ 'New collection announcements',
13833
+ ],
13834
+ },
13585
13835
  },
13586
13836
  {
13587
- "id": "y1K9pPfGzk",
13588
- "type": "paragraph",
13589
- "data": {
13590
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;A high-level Python web framework called Django promotes quick development and simple, straightforward design.</span>"
13591
- }
13837
+ id: 'GiVE5WcouE',
13838
+ type: 'paragraph',
13839
+ data: {
13840
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Automated WhatsApp reminders ensure customers stay informed while allowing your staff to focus on sales rather than repetitive follow-up calls.</span>',
13841
+ },
13592
13842
  },
13593
13843
  {
13594
- "id": "RMyUvKc24F",
13595
- "type": "paragraph",
13596
- "data": {
13597
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Important Concepts (DRY, ORM, etc.)</span>"
13598
- }
13844
+ id: '19I6Ja1L5B',
13845
+ type: 'header',
13846
+ data: {
13847
+ text: '3. Replace Paper Passbooks with Digital Passbooks',
13848
+ level: 2,
13849
+ },
13599
13850
  },
13600
13851
  {
13601
- "id": "95pf_ytY6Q",
13602
- "type": "paragraph",
13603
- "data": {
13604
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Django adheres to the \"Don't Repeat Yourself\" (DRY) concept, which advocates for code reuse. Database management has been greatly simplified by its ORM.</span>"
13605
- }
13852
+ id: '1MvUvFnBBY',
13853
+ type: 'paragraph',
13854
+ data: {
13855
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">One of the most common complaints jewellery retailers hear is:</span>',
13856
+ },
13606
13857
  },
13607
13858
  {
13608
- "id": "9cCS8KT9_x",
13609
- "type": "paragraph",
13610
- "data": {
13611
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;When to utilize Django</span>"
13612
- }
13859
+ id: 'LjZ9E-2MT6',
13860
+ type: 'paragraph',
13861
+ data: {
13862
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"I\'ve lost my passbook."</span>',
13863
+ },
13613
13864
  },
13614
13865
  {
13615
- "id": "0b0cfLM1Ie",
13616
- "type": "paragraph",
13617
- "data": {
13618
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Select Django for the rapid construction of complex online applications, such as social media platforms and content management systems.</span>"
13619
- }
13866
+ id: 'wkbiyMWRVq',
13867
+ type: 'paragraph',
13868
+ data: {
13869
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Now your staff spends valuable time searching through records.</span>',
13870
+ },
13620
13871
  },
13621
13872
  {
13622
- "id": "AiFVFqfdE_",
13623
- "type": "paragraph",
13624
- "data": {
13625
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">4.2 Benefits of Django for Novices</span>"
13626
- }
13873
+ id: '0oFKoXyH18',
13874
+ type: 'paragraph',
13875
+ data: {
13876
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A digital passbook eliminates this problem.</span>',
13877
+ },
13627
13878
  },
13628
13879
  {
13629
- "id": "cwSyfMSYnT",
13630
- "type": "paragraph",
13631
- "data": {
13632
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Quick Development Skills: </span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">You can create applications quickly thanks to a number of built-in capabilities.</span>"
13633
- }
13880
+ id: 'Ka3ilpF4J0',
13881
+ type: 'paragraph',
13882
+ data: {
13883
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Customers can instantly view:</span>',
13884
+ },
13634
13885
  },
13635
13886
  {
13636
- "id": "RComdVUvy8",
13637
- "type": "paragraph",
13638
- "data": {
13639
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Integrated Admin Panel: </span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">A useful tool for managing application data without the need for further coding.</span>"
13640
- }
13887
+ id: 'Q5qeRog7bp',
13888
+ type: 'list',
13889
+ data: {
13890
+ style: 'unordered',
13891
+ items: [
13892
+ 'Instalment history',
13893
+ 'Payment status',
13894
+ 'Remaining balance',
13895
+ 'Scheme progress',
13896
+ ],
13897
+ },
13641
13898
  },
13642
13899
  {
13643
- "id": "0RK7Flimc1",
13644
- "type": "paragraph",
13645
- "data": {
13646
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Robust Security Features: </span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Django upholds sound security procedures, which may reassure more junior developers.</span>"
13647
- }
13900
+ id: 'L7nZOmQnSg',
13901
+ type: 'paragraph',
13902
+ data: {
13903
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">It also builds transparency and confidence.</span>',
13904
+ },
13648
13905
  },
13649
13906
  {
13650
- "id": "m5LNICKEez",
13651
- "type": "paragraph",
13652
- "data": {
13653
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;4.3 Resources for Learning the Official Django Documentation and Tutorials: </span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">An ideal place for any developer to start.</span>"
13654
- }
13907
+ id: 'y0pj6TvTtZ',
13908
+ type: 'header',
13909
+ data: {
13910
+ text: '4. Build a Customer Database, Not Just a Billing Database',
13911
+ level: 2,
13912
+ },
13655
13913
  },
13656
13914
  {
13657
- "id": "JSrudPFcaO",
13658
- "type": "paragraph",
13659
- "data": {
13660
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Django-Specific Online Courses: </span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Courses on websites such as Coursera and Udemy are highly structured.</span>"
13661
- }
13915
+ id: 'jj1Nls6VFv',
13916
+ type: 'paragraph',
13917
+ data: {
13918
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Many retailers have years of invoices but very little usable customer information.</span>',
13919
+ },
13662
13920
  },
13663
13921
  {
13664
- "id": "RmeuyOXYfl",
13665
- "type": "paragraph",
13666
- "data": {
13667
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Community and Support Resources: </span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">The Django community, particularly on Reddit and other sites, is friendly and willing to help.</span>"
13668
- }
13922
+ id: 'ze4wFv2xpu',
13923
+ type: 'paragraph',
13924
+ data: {
13925
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A complete customer profile should include:</span>',
13926
+ },
13669
13927
  },
13670
13928
  {
13671
- "id": "N9kHvi68Sl",
13672
- "type": "paragraph",
13673
- "data": {
13674
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;5. The flask</span>"
13675
- }
13929
+ id: '_HQ-XU8xyU',
13930
+ type: 'list',
13931
+ data: {
13932
+ style: 'unordered',
13933
+ items: [
13934
+ 'Birthday',
13935
+ 'Anniversary',
13936
+ 'Purchase history',
13937
+ 'Preferred jewellery category',
13938
+ 'Gold scheme status',
13939
+ 'Visit history',
13940
+ ],
13941
+ },
13676
13942
  },
13677
13943
  {
13678
- "id": "0epcv2bQc-",
13679
- "type": "paragraph",
13680
- "data": {
13681
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;5.1 Overview of Flask</span>"
13682
- }
13944
+ id: '526IaO8rZg',
13945
+ type: 'paragraph',
13946
+ data: {
13947
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">This enables personalized communication that feels relevant instead of generic.</span>',
13948
+ },
13683
13949
  },
13684
13950
  {
13685
- "id": "Jy-5pwTvCR",
13686
- "type": "paragraph",
13687
- "data": {
13688
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">An explanation of the Flask Framework</span>"
13689
- }
13951
+ id: 'HTc9WUGYbQ',
13952
+ type: 'header',
13953
+ data: {
13954
+ text: '5. Make WhatsApp Your Strongest Marketing Channel',
13955
+ level: 2,
13956
+ },
13690
13957
  },
13691
13958
  {
13692
- "id": "S-WNQo0YGa",
13693
- "type": "paragraph",
13694
- "data": {
13695
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Flask is a lightweight, straightforward Python microweb framework.</span>"
13696
- }
13959
+ id: 'd6s5rP32z8',
13960
+ type: 'paragraph',
13961
+ data: {
13962
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Your customers already use WhatsApp every day.</span>',
13963
+ },
13697
13964
  },
13698
13965
  {
13699
- "id": "sb5DyFDBlK",
13700
- "type": "paragraph",
13701
- "data": {
13702
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Comparing Django</span>"
13703
- }
13966
+ id: 'aZzSRfbV2I',
13967
+ type: 'paragraph',
13968
+ data: {
13969
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead of relying only on social media, communicate through the platform they check most often.</span>',
13970
+ },
13704
13971
  },
13705
13972
  {
13706
- "id": "uxFsjDiGwe",
13707
- "type": "paragraph",
13708
- "data": {
13709
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Django is a complete framework, however Flask allows you to select your components more freely.</span>"
13710
- }
13973
+ id: 'KeFelhxn4l',
13974
+ type: 'paragraph',
13975
+ data: {
13976
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Examples include:</span>',
13977
+ },
13711
13978
  },
13712
13979
  {
13713
- "id": "ujwGMDrqFN",
13714
- "type": "paragraph",
13715
- "data": {
13716
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Fundamental Flask Routing Features: </span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Applications' responses to web requests are easily controllable.</span>"
13717
- }
13980
+ id: 'nnLkPLK_Gm',
13981
+ type: 'list',
13982
+ data: {
13983
+ style: 'unordered',
13984
+ items: [
13985
+ 'Monthly gold scheme reminders',
13986
+ 'Festival wishes',
13987
+ 'New arrivals',
13988
+ 'Bridal collections',
13989
+ 'Gold rate updates',
13990
+ 'Exclusive offers',
13991
+ ],
13992
+ },
13718
13993
  },
13719
13994
  {
13720
- "id": "ayqy1gLAmt",
13721
- "type": "paragraph",
13722
- "data": {
13723
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Templating:</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\"> It makes use of the user-friendly and adaptable Jinja2 framework.</span>"
13724
- }
13995
+ id: 'fogDf4PfgP',
13996
+ type: 'paragraph',
13997
+ data: {
13998
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Consistent communication keeps your store top of mind.</span>',
13999
+ },
13725
14000
  },
13726
14001
  {
13727
- "id": "2BM3aUImT_",
13728
- "type": "paragraph",
13729
- "data": {
13730
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">5.2 The Reason Flask Is Novice Amiable</span>"
13731
- }
14002
+ id: 'Tf04Utqhp4',
14003
+ type: 'header',
14004
+ data: {
14005
+ text: '6. Reward Loyalty, Not Just New Customers',
14006
+ level: 2,
14007
+ },
13732
14008
  },
13733
14009
  {
13734
- "id": "ynBDuveBCZ",
13735
- "type": "paragraph",
13736
- "data": {
13737
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Simplicity and Minimalism:</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\"> Because it is lightweight, there is less initial complexity.</span>"
13738
- }
14010
+ id: '8x3-lLpWuS',
14011
+ type: 'paragraph',
14012
+ data: {
14013
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Many jewellery businesses offer discounts only to attract new buyers.</span>',
14014
+ },
13739
14015
  },
13740
14016
  {
13741
- "id": "kUOJBjnB6_",
13742
- "type": "paragraph",
13743
- "data": {
13744
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Adaptability in Component Selection: </span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Learning will be more efficient if you only select the resources you require.</span>"
13745
- }
14017
+ id: 'GW-gifTTF8',
14018
+ type: 'paragraph',
14019
+ data: {
14020
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead, reward customers who continue choosing your brand.</span>',
14021
+ },
13746
14022
  },
13747
14023
  {
13748
- "id": "AOVaOTxCxq",
13749
- "type": "paragraph",
13750
- "data": {
13751
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Installation and Setup Ease:</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\"> Just a few commands are needed to get going.</span>"
13752
- }
14024
+ id: '8Jk9fRWsJ3',
14025
+ type: 'paragraph',
14026
+ data: {
14027
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Ideas include:</span>',
14028
+ },
13753
14029
  },
13754
14030
  {
13755
- "id": "CA-8e21K6c",
13756
- "type": "paragraph",
13757
- "data": {
13758
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;5.3 Introduction to Flask</span>"
13759
- }
14031
+ id: 'OZIeXOHvnM',
14032
+ type: 'list',
14033
+ data: {
14034
+ style: 'unordered',
14035
+ items: [
14036
+ 'Bonus gold after completing a scheme',
14037
+ 'Loyalty rewards',
14038
+ 'Referral incentives',
14039
+ 'Exclusive previews',
14040
+ 'Complimentary jewellery cleaning',
14041
+ ],
14042
+ },
13760
14043
  },
13761
14044
  {
13762
- "id": "4vdJYqlnjk",
13763
- "type": "paragraph",
13764
- "data": {
13765
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Suggested Software and Tools</span>"
13766
- }
14045
+ id: 'wWYtCpA3Wr',
14046
+ type: 'paragraph',
14047
+ data: {
14048
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">These small gestures encourage long-term relationships.</span>',
14049
+ },
13767
14050
  },
13768
14051
  {
13769
- "id": "OHMpNWDAg2",
13770
- "type": "paragraph",
13771
- "data": {
13772
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Actually, all you'll need to start programming locally is Flask and Python.</span>"
13773
- }
14052
+ id: 'ZfPjEsrvKM',
14053
+ type: 'header',
14054
+ data: {
14055
+ text: "7. Recover Customers Before They're Lost",
14056
+ level: 2,
14057
+ },
13774
14058
  },
13775
14059
  {
13776
- "id": "IRKn7EowfW",
13777
- "type": "paragraph",
13778
- "data": {
13779
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Excellent Flask Instructions for Novices</span>"
13780
- }
14060
+ id: 'CaSeL7KD8q',
14061
+ type: 'paragraph',
14062
+ data: {
14063
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Not every inactive customer is gone forever.</span>',
14064
+ },
13781
14065
  },
13782
14066
  {
13783
- "id": "W2ZncQ8izQ",
13784
- "type": "paragraph",
13785
- "data": {
13786
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;There are many useful examples in the official Flask documentation, which is a wonderful place to start.</span>"
13787
- }
14067
+ id: '5mzmqjmKwM',
14068
+ type: 'paragraph',
14069
+ data: {
14070
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Identify customers who haven\'t visited in the last 6–12 months and reconnect them with:</span>',
14071
+ },
13788
14072
  },
13789
14073
  {
13790
- "id": "BAUD9Ibjta",
13791
- "type": "paragraph",
13792
- "data": {
13793
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Many of the YouTube videos that are available are quite helpful.</span>"
13794
- }
14074
+ id: 'VeT4U-9auh',
14075
+ type: 'list',
14076
+ data: {
14077
+ style: 'unordered',
14078
+ items: [
14079
+ 'Personalized WhatsApp messages',
14080
+ 'Festival invitations',
14081
+ 'Gold scheme offers',
14082
+ 'New collection previews',
14083
+ ],
14084
+ },
13795
14085
  },
13796
14086
  {
13797
- "id": "GVbGwbQKhQ",
13798
- "type": "paragraph",
13799
- "data": {
13800
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Beneficial Forums and Communities</span>"
13801
- }
14087
+ id: 'ru3MnsQ27U',
14088
+ type: 'paragraph',
14089
+ data: {
14090
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Winning back an existing customer is usually easier than finding a new one.</span>',
14091
+ },
13802
14092
  },
13803
14093
  {
13804
- "id": "vTDH6RUYuh",
13805
- "type": "paragraph",
13806
- "data": {
13807
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;The wonderful community of Flask truly flourishes on support. For guidance, consult Stack Overflow and Reddit.</span>"
13808
- }
14094
+ id: '7gpH_wPDHs',
14095
+ type: 'header',
14096
+ data: {
14097
+ text: '8. Use Technology to Stay Organized',
14098
+ level: 2,
14099
+ },
13809
14100
  },
13810
14101
  {
13811
- "id": "HQlnu8W8zQ",
13812
- "type": "paragraph",
13813
- "data": {
13814
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;In conclusion</span>"
13815
- }
14102
+ id: 'qVQurPoeJ8',
14103
+ type: 'paragraph',
14104
+ data: {
14105
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">As your customer base grows, spreadsheets and paper registers become difficult to manage.</span>',
14106
+ },
13816
14107
  },
13817
14108
  {
13818
- "id": "UCEKXjOweb",
13819
- "type": "paragraph",
13820
- "data": {
13821
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;An overview of the frameworks</span>"
13822
- }
14109
+ id: 'vbtKHxUnzC',
14110
+ type: 'paragraph',
14111
+ data: {
14112
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A digital platform such as </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">PassbookApp</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> helps jewellery retailers:</span>',
14113
+ },
13823
14114
  },
13824
14115
  {
13825
- "id": "hX3DDv9m2s",
13826
- "type": "paragraph",
13827
- "data": {
13828
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;In conclusion, we discussed five excellent frameworks: Flask, Django, Angular, Vue.js, and React. Each of them has advantages and can serve as a solid foundation for your web development endeavors.</span>"
13829
- }
14116
+ id: 'N5QzSekQgD',
14117
+ type: 'list',
14118
+ data: {
14119
+ style: 'unordered',
14120
+ items: [
14121
+ 'Manage gold savings schemes',
14122
+ 'Track customer payments',
14123
+ 'Send automated WhatsApp reminders',
14124
+ 'Maintain digital passbooks',
14125
+ 'Build customer profiles',
14126
+ 'Monitor collections from one dashboard',
14127
+ ],
14128
+ },
13830
14129
  },
13831
14130
  {
13832
- "id": "R-luOykisv",
13833
- "type": "paragraph",
13834
- "data": {
13835
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">How to Pick the Ideal Framework</span>"
13836
- }
14131
+ id: 'XWG64zeXFo',
14132
+ type: 'paragraph',
14133
+ data: {
14134
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead of replacing your personal customer relationships, technology strengthens them by ensuring no customer is forgotten.</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">—--------------------------------------------------------------------------------------------------------------------</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Other strategies </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Launch a Gold Savings Scheme</span>',
14135
+ },
13837
14136
  },
13838
14137
  {
13839
- "id": "eBepeuEj5o",
13840
- "type": "paragraph",
13841
- "data": {
13842
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;The ideal framework is determined by your own objectives and the kind of projects you wish to construct. As you get better, start with the easy and work your way up to the harder.</span>"
13843
- }
14138
+ id: 'kp5J8fAJY1',
14139
+ type: 'paragraph',
14140
+ data: {
14141
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Automate WhatsApp Payment Reminders</span>',
14142
+ },
13844
14143
  },
13845
14144
  {
13846
- "id": "Cn4NWTK6zt",
13847
- "type": "paragraph",
13848
- "data": {
13849
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Concluding Remarks on Web Development</span>"
13850
- }
14145
+ id: 'nRtfEBFVVC',
14146
+ type: 'paragraph',
14147
+ data: {
14148
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Replace Paper Passbooks with Digital Passbooks</span>',
14149
+ },
13851
14150
  },
13852
14151
  {
13853
- "id": "5EoA4But4R",
13854
- "type": "paragraph",
13855
- "data": {
13856
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Since progress occurs when mistakes are made, learn from them and don't be afraid of them. Explore web programming while continuously learning new frameworks and technologies. You have only just begun your journey!</span>"
13857
- }
14152
+ id: '5vQ5XPtHMS',
14153
+ type: 'paragraph',
14154
+ data: {
14155
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Build a Customer Database</span>',
14156
+ },
13858
14157
  },
13859
14158
  {
13860
- "id": "vLKrOczs4d",
13861
- "type": "paragraph",
13862
- "data": {
13863
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;FAQs</span>"
13864
- }
14159
+ id: '8_hfT_gfRB',
14160
+ type: 'paragraph',
14161
+ data: {
14162
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Personalize Every Customer Interaction</span>',
14163
+ },
13865
14164
  },
13866
14165
  {
13867
- "id": "GmYWFU8_cZ",
13868
- "type": "paragraph",
13869
- "data": {
13870
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Which framework is the simplest for a novice?</span>"
13871
- }
14166
+ id: 'WFKlteD8Kv',
14167
+ type: 'paragraph',
14168
+ data: {
14169
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Create a Jewellery Loyalty Program</span>',
14170
+ },
13872
14171
  },
13873
14172
  {
13874
- "id": "Zv7wQl8G0w",
13875
- "type": "paragraph",
13876
- "data": {
13877
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Vue.js is the easiest to use because of its straightforward syntax and ease of use.</span>"
13878
- }
14173
+ id: 'PVFMJpMwG4',
14174
+ type: 'paragraph',
14175
+ data: {
14176
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Recover Inactive Customers</span>',
14177
+ },
13879
14178
  },
13880
14179
  {
13881
- "id": "PnvwjfSnz2",
13882
- "type": "paragraph",
13883
- "data": {
13884
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">Is it possible for me to switch web frameworks later on in my development career?</span>"
13885
- }
14180
+ id: 'MWRSH4ARCb',
14181
+ type: 'paragraph',
14182
+ data: {
14183
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Automate Customer Follow-ups</span>',
14184
+ },
13886
14185
  },
13887
14186
  {
13888
- "id": "UV1tXiNGRo",
13889
- "type": "paragraph",
13890
- "data": {
13891
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Of course! As they develop and their project's requirements evolve, developers frequently switch frameworks.</span>"
13892
- }
14187
+ id: 'sjiKzwCrel',
14188
+ type: 'paragraph',
14189
+ data: {
14190
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Celebrate Birthdays &amp; Anniversaries</span>',
14191
+ },
13893
14192
  },
13894
14193
  {
13895
- "id": "JGENKf2cs3",
13896
- "type": "paragraph",
13897
- "data": {
13898
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Does using these frameworks require my knowledge of programming languages?</span>"
13899
- }
14194
+ id: 'JQpBXE6dlq',
14195
+ type: 'paragraph',
14196
+ data: {
14197
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Run Festival Marketing Campaigns</span>',
14198
+ },
13900
14199
  },
13901
14200
  {
13902
- "id": "JJS9VCbEqf",
13903
- "type": "paragraph",
13904
- "data": {
13905
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Yes, mastering these frameworks will benefit greatly by having a basic understanding of Python or JavaScript.</span>"
13906
- }
14201
+ id: 'jg8ONHkNjf',
14202
+ type: 'paragraph',
14203
+ data: {
14204
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Offer Referral Rewards</span>',
14205
+ },
13907
14206
  },
13908
14207
  {
13909
- "id": "p6mT7ZkgFM",
13910
- "type": "paragraph",
13911
- "data": {
13912
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Does each framework have any particular projects that I should begin with?</span>"
13913
- }
14208
+ id: '81ad5L3GEn',
14209
+ type: 'paragraph',
14210
+ data: {
14211
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Track Customer Purchase History</span>',
14212
+ },
13914
14213
  },
13915
14214
  {
13916
- "id": "g9lzRQ7xbK",
13917
- "type": "paragraph",
13918
- "data": {
13919
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Start with something basic, like a portfolio website constructed using the framework you choose, a personal blog, or a to-do list application.</span>"
13920
- }
14215
+ id: 'T82owhXECh',
14216
+ type: 'paragraph',
14217
+ data: {
14218
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Segment Customers Based on Buying Behaviour</span>',
14219
+ },
13921
14220
  },
13922
14221
  {
13923
- "id": "bHpNK_2OOh",
13924
- "type": "paragraph",
13925
- "data": {
13926
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;</span><span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">To what extent does the community play a role in framework selection?</span>"
13927
- }
14222
+ id: '3zTjcoV-Ku',
14223
+ type: 'paragraph',
14224
+ data: {
14225
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Send Gold Rate &amp; New Collection Updates</span>',
14226
+ },
13928
14227
  },
13929
14228
  {
13930
- "id": "lbqsoESpxP",
13931
- "type": "paragraph",
13932
- "data": {
13933
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;Crucial! More information, lessons, and assistance when you run into problems are all part of a robust community.</span>"
13934
- }
14229
+ id: 'PmdDZ5Jkir',
14230
+ type: 'paragraph',
14231
+ data: {
14232
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Improve In-Store Customer Experience</span>',
14233
+ },
13935
14234
  },
13936
14235
  {
13937
- "id": "R-uKQn30Tv",
13938
- "type": "paragraph",
13939
- "data": {
13940
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;By: Gaurav Sharma</span>"
13941
- }
14236
+ id: '139x-wirAi',
14237
+ type: 'paragraph',
14238
+ data: {
14239
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Use Jewellery CRM Software</span>',
14240
+ },
13942
14241
  },
13943
14242
  {
13944
- "id": "eSjeLO8MWe",
13945
- "type": "paragraph",
13946
- "data": {
13947
- "text": "<span style=\"font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;\">&nbsp;&nbsp;(Founder “Tejsoft”)</span>"
13948
- }
13949
- }
14243
+ id: 'VUJd-tT-Eu',
14244
+ type: 'paragraph',
14245
+ data: {
14246
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Measure Customer Retention Metrics</span>',
14247
+ },
14248
+ },
14249
+ {
14250
+ id: 'k1Oj2zBVeZ',
14251
+ type: 'paragraph',
14252
+ data: {
14253
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Collect Customer Feedback &amp; Reviews</span>',
14254
+ },
14255
+ },
14256
+ {
14257
+ id: 'zCXobUMJOb',
14258
+ type: 'paragraph',
14259
+ data: {
14260
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Analyze Customer Buying Trends</span>',
14261
+ },
14262
+ },
14263
+ {
14264
+ id: 'SaDYv1p6sg',
14265
+ type: 'paragraph',
14266
+ data: {
14267
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Digitize Your Jewellery Business with PassbookApp</span>',
14268
+ },
14269
+ },
14270
+ {
14271
+ id: 'itszx-eghp',
14272
+ type: 'header',
14273
+ data: {
14274
+ text: 'Final Thoughts',
14275
+ level: 1,
14276
+ },
14277
+ },
14278
+ {
14279
+ id: 'DWZ9Y5DpTi',
14280
+ type: 'paragraph',
14281
+ data: {
14282
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The future of jewellery retail belongs to businesses that focus not only on acquiring customers but also on retaining them.</span>',
14283
+ },
14284
+ },
14285
+ {
14286
+ id: 'sh__WfsKsR',
14287
+ type: 'paragraph',
14288
+ data: {
14289
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Every missed follow-up, forgotten anniversary, or delayed reminder is a missed opportunity to strengthen a customer relationship.</span>',
14290
+ },
14291
+ },
14292
+ {
14293
+ id: '-yIVi7hG1p',
14294
+ type: 'paragraph',
14295
+ data: {
14296
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">By implementing structured customer retention strategies—such as gold savings schemes, automated reminders, personalized engagement, and digital customer management—you can increase repeat purchases, improve loyalty, and create a more predictable stream of recurring business.</span>',
14297
+ },
14298
+ },
14299
+ {
14300
+ id: 'fqIBVidohQ',
14301
+ type: 'paragraph',
14302
+ data: {
14303
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">PassbookApp is designed to support this journey by helping jewellery retailers digitize customer management, automate gold scheme operations, and deliver a modern experience that keeps customers coming back.</span>',
14304
+ },
14305
+ },
14306
+ {
14307
+ id: 'ijRpOnUsO4',
14308
+ type: 'header',
14309
+ data: {
14310
+ text: 'Frequently Asked Questions',
14311
+ level: 2,
14312
+ },
14313
+ },
14314
+ {
14315
+ id: 'IBJcODGBFG',
14316
+ type: 'paragraph',
14317
+ data: {
14318
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">How can a jewellery store increase repeat customers?</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> Focus on customer retention through gold savings schemes, personalized communication, WhatsApp reminders, loyalty programs, and regular engagement.</span>',
14319
+ },
14320
+ },
14321
+ {
14322
+ id: 'Hw_lhi15c5',
14323
+ type: 'paragraph',
14324
+ data: {
14325
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Why do customers stop visiting jewellery stores?</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> The most common reasons are lack of follow-up, poor engagement, and competitors maintaining stronger communication.</span>',
14326
+ },
14327
+ },
14328
+ {
14329
+ id: 'ADBXyeKS4e',
14330
+ type: 'paragraph',
14331
+ data: {
14332
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">What is the best software for managing jewellery customers?</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> A platform that combines customer records, digital passbooks, gold scheme management, payment tracking, and automated reminders can simplify operations and improve retention.</span>',
14333
+ },
14334
+ },
14335
+ {
14336
+ id: 'E4QcS9ieOL',
14337
+ type: 'paragraph',
14338
+ data: {
14339
+ text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Do gold savings schemes help customer loyalty?</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> Yes. They encourage regular monthly interaction, improve retention, and increase the likelihood of future purchases.</span>',
14340
+ },
14341
+ },
14342
+ {
14343
+ id: 'dvXEFf_A4B',
14344
+ type: 'header',
14345
+ data: {
14346
+ text: '<a href="https://www.passbookapp.in/demo">Book a Free Demo</a>',
14347
+ level: 2,
14348
+ },
14349
+ },
13950
14350
  ],
13951
- "createdBy": "Simpo",
13952
- "postSummary": " Selecting the best framework in the constantly changing field of web development can be difficult, particularly for novices. By outlining the features and advantages of some of the greatest web development frameworks on the market today, this post seeks to assist novices in choosing the one that would best meet their requirements.",
13953
- "postTitle": "A Complete Guide to the Top 5 Web Development Frameworks for Novices",
13954
- "newPostTitle": "A-Complete-Guide-to-the-Top-5-Web-Development-Frameworks-for-Novices",
13955
- "blogMeta": {
13956
- "metaTitle": "",
13957
- "metaDescription": {
13958
- "name": "description",
13959
- "content": ""
13960
- }
14351
+ createdBy: 'Raj',
14352
+ postSummary: 'Discover 15 proven strategies to increase repeat customers in your jewellery store using gold schemes, WhatsApp reminders, customer retention software, and digital customer management.',
14353
+ postTitle: 'How to Increase Repeat Customers in a Jewellery Store',
14354
+ newPostTitle: 'How-to-Increase-Repeat-Customers-in-a-Jewellery-Store',
14355
+ blogMeta: {
14356
+ metaTitle: 'How to Increase Repeat Customers in a Jewellery Store',
14357
+ metaDescription: {
14358
+ name: 'description',
14359
+ content: 'Discover 15 proven strategies to increase repeat customers in your jewellery store using gold schemes, WhatsApp reminders, customer retention software, and digital customer management.',
14360
+ },
13961
14361
  },
13962
- "createdTimeStamp": "2024-12-14T17:01:38.000+00:00",
13963
- "publishedDate": null,
13964
- "blogScheduledDate": "2024-12-14T00:00:00.000+00:00",
13965
- "blogScheduleTime": "22:34:14",
13966
- "keyWords": {
13967
- "name": "keywords",
13968
- "content": " web development framework, technology, business needs"
14362
+ createdTimeStamp: '2026-07-22T12:09:09.000+00:00',
14363
+ publishedDate: null,
14364
+ blogScheduledDate: '2026-07-22T00:00:00.000+00:00',
14365
+ blogScheduleTime: '17:40:20',
14366
+ keyWords: {
14367
+ name: 'keywords',
14368
+ content: 'WhatsApp CRM,WhatsApp marketing for jewellers,Jewellery WhatsApp reminders,Jewellery Business Growth',
13969
14369
  },
13970
- "author": {
13971
- "name": "author",
13972
- "content": "Gaurav Sharma"
14370
+ author: {
14371
+ name: 'author',
14372
+ content: 'Passbookapp',
13973
14373
  },
13974
- "blogStatus": "PUBLISH",
13975
- "businessId": "1ef595b4-d80d-66de-9df6-13a8e47644dd",
13976
- "blogType": "BUSINESS"
14374
+ blogStatus: 'PUBLISH',
14375
+ blogType: 'BUSINESS',
13977
14376
  };
14377
+ this.tocItems = [];
14378
+ this.tocOpen = false;
14379
+ this.activeTocId = null;
14380
+ this.headingBlockIds = new Set();
14381
+ this.isBrowser = isPlatformBrowser(platformId);
13978
14382
  }
13979
14383
  ngOnInit() {
14384
+ this.buildTableOfContents();
14385
+ }
14386
+ ngOnChanges(changes) {
14387
+ if (changes['responseData'] && !changes['responseData'].isFirstChange()) {
14388
+ this.buildTableOfContents();
14389
+ }
14390
+ }
14391
+ ngAfterViewInit() {
14392
+ this.setupScrollSpy();
14393
+ }
14394
+ ngOnDestroy() {
14395
+ this.tocObserver?.disconnect();
13980
14396
  }
13981
14397
  editSection() {
13982
14398
  // this._eventService.toggleEditorEvent.emit(false);
13983
14399
  }
13984
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewBlogComponent, deps: [{ token: EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
13985
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ViewBlogComponent, isStandalone: true, selector: "simpo-view-blog", inputs: { responseData: "responseData" }, ngImport: i0, template: "<section class=\"main-section\">\n <div class=\"blog-details\">\n <!-- <h1 class=\"blog-title\">{{responseData.postTitle}}</h1> -->\n <div style=\"margin-top: 20px;\">\n <ng-container *ngFor=\"let item of responseData?.blocks\">\n <div *ngIf=\"item.type=='header'\">\n <h1 *ngIf=\"item.data.level==1\" [innerHTML]=\"item.data.text\"></h1>\n <h2 *ngIf=\"item.data.level==2\" [innerHTML]=\"item.data.text\"></h2>\n <h3 *ngIf=\"item.data.level==3\" [innerHTML]=\"item.data.text\"></h3>\n <h4 *ngIf=\"item.data.level==4\" [innerHTML]=\"item.data.text\"></h4>\n <h5 *ngIf=\"item.data.level==5\" [innerHTML]=\"item.data.text\"></h5>\n <h6 *ngIf=\"item.data.level==6\" [innerHTML]=\"item.data.text\"></h6>\n </div>\n <div *ngIf=\"item.type=='paragraph'\">\n <p class=\"inner-text\" [innerHTML]=\"item.data.text\"></p>\n </div>\n <div *ngIf=\"item.type=='list'\">\n <div *ngIf=\"item.type=='list'\">\n <div *ngIf=\"item.data.style=='ordered'\">\n <ol class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ol>\n </div>\n <div *ngIf=\"item.data.style=='unordered'\">\n <ul class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"item.type=='delimiter'\" class=\"ce-delimiter\">\n </div>\n <div *ngIf=\"item.type=='image'\" class=\"image-container\">\n <img loading=\"lazy\" [src]=\"item.data.file.url\" alt=\"\" loading=\"lazy\">\n </div>\n <div *ngIf=\"item.type=='table'\">\n\n <table>\n <ng-container *ngFor=\"let data of item.data.content\">\n <tr>\n <ng-container *ngFor=\"let item of data\">\n <td [innerHTML]=\"item\"></td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n\n </div>\n </ng-container>\n </div>\n </div>\n</section>\n", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-section{padding:5%;background-color:#fff}.blog-details{width:60%;margin:0 auto}.delimiter{display:flex;justify-content:center}.ce-delimiter:before{display:inline-block;content:\"***\";font-size:30px;line-height:65px;height:30px;letter-spacing:.2em}p{line-height:1.6em}.back-text{@include body16r();margin-left:9px;margin-top:1px;cursor:pointer}table{border-collapse:collapse;width:100%}th,td{border:1px solid black;text-align:center}.header{margin-top:8px;margin-bottom:14px;padding-left:20px}.header img,.configuration-tab img{cursor:pointer}.blogs-totalsection{background:#eee;position:absolute;top:55px;height:calc(100vh - 55px);width:81.7%;z-index:10;overflow-y:scroll;padding:14px}.blog-title{line-height:35px}.image-container{width:100%;margin:10px 0}.image-container img{width:100%}h1,h2,h3,h4,h5,h6{padding:.6em 0 3px}.h1,.h2,.h3,h1,h2,h3{margin-top:0}.list-style li{text-align:left}@media only screen and (max-width :500px){.blog-details{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
14400
+ scrollToBlock(event, blockId) {
14401
+ event.preventDefault();
14402
+ if (!this.isBrowser) {
14403
+ return;
14404
+ }
14405
+ this._elementRef.nativeElement
14406
+ .querySelector(`#block-${blockId}`)
14407
+ ?.scrollIntoView({ behavior: 'smooth', block: 'start' });
14408
+ this.tocOpen = false;
14409
+ }
14410
+ buildTableOfContents() {
14411
+ const blocks = this.responseData?.blocks || [];
14412
+ this.headingBlockIds.clear();
14413
+ this.tocItems = blocks
14414
+ .map(block => this.getHeadingCandidate(block))
14415
+ .filter((item) => !!item);
14416
+ this.tocItems.forEach(item => this.headingBlockIds.add(item.id));
14417
+ if (this.isBrowser) {
14418
+ // Re-attach the scroll spy since the anchors it watches just changed.
14419
+ setTimeout(() => this.setupScrollSpy());
14420
+ }
14421
+ }
14422
+ isTocAnchor(blockId) {
14423
+ return this.headingBlockIds.has(blockId);
14424
+ }
14425
+ hasVisibleText(html) {
14426
+ return this.stripHtml(html).length > 0;
14427
+ }
14428
+ getHeadingCandidate(block) {
14429
+ if (!block?.id) {
14430
+ return null;
14431
+ }
14432
+ if (block.type === 'header') {
14433
+ const level = block.data?.['level'] || 2;
14434
+ const text = this.stripHtml(block.data?.['text']);
14435
+ if (level <= 1 || !text) {
14436
+ return null;
14437
+ }
14438
+ return { id: block.id, text };
14439
+ }
14440
+ if (block.type === 'paragraph') {
14441
+ return this.getBoldParagraphHeading(block);
14442
+ }
14443
+ return null;
14444
+ }
14445
+ getBoldParagraphHeading(block) {
14446
+ const html = block.data?.['text'] || '';
14447
+ if (!html.includes('<span')) {
14448
+ return null;
14449
+ }
14450
+ const spanRegex = /<span([^>]*)>([\s\S]*?)<\/span>/g;
14451
+ let match;
14452
+ let boldText = '';
14453
+ let nonBoldText = '';
14454
+ let maxFontSizePt = 0;
14455
+ while ((match = spanRegex.exec(html))) {
14456
+ const style = match[1];
14457
+ const innerText = this.stripHtml(match[2]);
14458
+ const isBold = /font-weight:\s*(bold|[6-9]00)/i.test(style);
14459
+ const sizeMatch = style.match(/font-size:\s*([\d.]+)pt/i);
14460
+ if (sizeMatch) {
14461
+ maxFontSizePt = Math.max(maxFontSizePt, parseFloat(sizeMatch[1]));
14462
+ }
14463
+ if (isBold) {
14464
+ boldText += innerText;
14465
+ }
14466
+ else if (innerText) {
14467
+ nonBoldText += innerText;
14468
+ }
14469
+ }
14470
+ const text = boldText.trim();
14471
+ // Mixed bold/plain text is an emphasized phrase inside a normal paragraph, not a heading.
14472
+ if (!text || nonBoldText.trim() || text.length > 120) {
14473
+ return null;
14474
+ }
14475
+ // Title-sized bold text (>=16pt, matching the article's own heading) isn't a TOC entry.
14476
+ if (maxFontSizePt >= 16) {
14477
+ return null;
14478
+ }
14479
+ return { id: block.id, text };
14480
+ }
14481
+ stripHtml(html) {
14482
+ if (!html) {
14483
+ return '';
14484
+ }
14485
+ return html
14486
+ .replace(/<[^>]*>/g, '')
14487
+ .replace(/&nbsp;/g, ' ')
14488
+ .replace(/&amp;/g, '&')
14489
+ .trim();
14490
+ }
14491
+ setupScrollSpy() {
14492
+ if (!this.isBrowser) {
14493
+ return;
14494
+ }
14495
+ this.tocObserver?.disconnect();
14496
+ const anchors = Array.from(this._elementRef.nativeElement.querySelectorAll('.toc-anchor'));
14497
+ if (!anchors.length) {
14498
+ return;
14499
+ }
14500
+ this.tocObserver = new IntersectionObserver(entries => {
14501
+ const visible = entries.filter(entry => entry.isIntersecting);
14502
+ if (visible.length) {
14503
+ this.activeTocId = visible[0].target.id.replace('block-', '');
14504
+ }
14505
+ }, { rootMargin: '0px 0px -70% 0px' });
14506
+ anchors.forEach(anchor => this.tocObserver?.observe(anchor));
14507
+ }
14508
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewBlogComponent, deps: [{ token: EventsService }, { token: i0.ElementRef }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
14509
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ViewBlogComponent, isStandalone: true, selector: "simpo-view-blog", inputs: { responseData: "responseData" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"main-section\">\n <div class=\"blog-container\">\n <h1 class=\"blog-title\" *ngIf=\"responseData?.postTitle\">\n {{ responseData.postTitle }}\n </h1>\n\n <div class=\"meta-bar\">\n <div class=\"meta-item\">\n <span class=\"meta-label\">Publication Date</span>\n <span class=\"meta-value\">{{\n responseData?.publishedDate ||\n responseData?.blogScheduledDate ||\n responseData?.createdTimeStamp | date: 'd MMMM y'\n }}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Author</span>\n <span class=\"meta-value\">{{\n responseData?.author?.content || '\u2014'\n }}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Read Time</span>\n <span class=\"meta-value\"\n >{{ responseData?.readTime || '\u2014' }} min read</span\n >\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Views</span>\n <span class=\"meta-value\">{{ responseData?.totalVisits || 0 }}+</span>\n </div>\n </div>\n\n <div class=\"blog-layout\" [class.with-toc]=\"tocItems.length > 1\">\n <aside class=\"toc-sidebar\" *ngIf=\"tocItems.length > 1\">\n <button\n type=\"button\"\n class=\"toc-toggle\"\n (click)=\"tocOpen = !tocOpen\"\n [attr.aria-expanded]=\"tocOpen\">\n <span>Table Of Content</span>\n <span class=\"toc-toggle-icon\" [class.open]=\"tocOpen\"></span>\n </button>\n <div class=\"toc-header\">Table Of Content</div>\n <nav class=\"toc-list\" [class.open]=\"tocOpen\">\n <a\n *ngFor=\"let toc of tocItems\"\n class=\"toc-link\"\n [class.active]=\"activeTocId === toc.id\"\n [href]=\"'#block-' + toc.id\"\n (click)=\"scrollToBlock($event, toc.id)\">\n {{ toc.text }}\n </a>\n </nav>\n </aside>\n\n <div class=\"blog-details\">\n <ng-container *ngFor=\"let item of responseData?.blocks\">\n <div\n *ngIf=\"item.type == 'header' && hasVisibleText(item.data?.text)\"\n [id]=\"'block-' + item.id\"\n [class.toc-anchor]=\"isTocAnchor(item.id)\">\n <h1 *ngIf=\"item.data.level == 1\" [innerHTML]=\"item.data.text\"></h1>\n <h2 *ngIf=\"item.data.level == 2\" [innerHTML]=\"item.data.text\"></h2>\n <h3 *ngIf=\"item.data.level == 3\" [innerHTML]=\"item.data.text\"></h3>\n <h4 *ngIf=\"item.data.level == 4\" [innerHTML]=\"item.data.text\"></h4>\n <h5 *ngIf=\"item.data.level == 5\" [innerHTML]=\"item.data.text\"></h5>\n <h6 *ngIf=\"item.data.level == 6\" [innerHTML]=\"item.data.text\"></h6>\n </div>\n <div\n *ngIf=\"item.type == 'paragraph' && hasVisibleText(item.data?.text)\"\n [id]=\"'block-' + item.id\"\n [class.toc-anchor]=\"isTocAnchor(item.id)\">\n <p\n class=\"inner-text\"\n [class.heading-paragraph]=\"isTocAnchor(item.id)\"\n [innerHTML]=\"item.data.text\"></p>\n </div>\n <div *ngIf=\"item.type == 'list'\">\n <div *ngIf=\"item.data.style == 'ordered'\">\n <ol class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ol>\n </div>\n <div *ngIf=\"item.data.style == 'unordered'\">\n <ul class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ul>\n </div>\n </div>\n <div *ngIf=\"item.type == 'delimiter'\" class=\"ce-delimiter\"></div>\n <div *ngIf=\"item.type == 'image'\" class=\"image-container\">\n <img\n loading=\"lazy\"\n [src]=\"item.data.file.url\"\n alt=\"\"\n loading=\"lazy\" />\n </div>\n <div *ngIf=\"item.type == 'table'\">\n <div class=\"table-wrapper\">\n <table\n [class.table-no-heading]=\"item.data.withHeadings === false\">\n <ng-container *ngFor=\"let data of item.data.content\">\n <tr>\n <ng-container *ngFor=\"let item of data\">\n <td [innerHTML]=\"item\"></td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</section>\n", styles: [":host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-section{padding:2% 5%;background-color:#fff}.blog-container{width:85%;margin:0 auto}.blog-title{font-size:2em;font-weight:700;line-height:1.25em;margin:0 0 20px}.meta-bar{display:flex;gap:12px;margin-bottom:28px}.meta-item{flex:1;background-color:#f5f5f5;border-radius:6px;padding:12px 10px;text-align:center}.meta-label{display:block;font-size:.75em;color:#8a8a8a;letter-spacing:.02em;margin-bottom:6px}.meta-value{display:block;font-size:.95em;font-weight:700;color:#1a1a1a}.blog-layout{display:block}.blog-layout.with-toc{display:flex;align-items:flex-start;gap:40px}.with-toc .blog-details{flex:1;min-width:0;order:1}.toc-sidebar{width:340px;flex-shrink:0;position:sticky;top:20px;background-color:#f5f5f5;border-radius:6px;padding:16px;order:2}.toc-header{font-weight:700;font-size:1.05em;padding-bottom:12px;margin-bottom:8px;border-bottom:1px solid #dcdcdc}.toc-toggle{display:none;width:100%;align-items:center;justify-content:space-between;background:none;border:none;font-weight:700;font-size:1.05em;padding:0;cursor:pointer}.toc-toggle-icon{width:10px;height:10px;border-right:2px solid #1a1a1a;border-bottom:2px solid #1a1a1a;transform:rotate(45deg);transition:transform .2s ease}.toc-toggle-icon.open{transform:rotate(-135deg)}.toc-list{display:flex;flex-direction:column;gap:14px;max-height:600px;overflow-y:auto;padding-right:8px;scrollbar-width:thin;scrollbar-color:#c9c9c9 transparent}.toc-list::-webkit-scrollbar{display:block;width:6px}.toc-list::-webkit-scrollbar-track{background-color:transparent}.toc-list::-webkit-scrollbar-thumb{display:block;background-color:#c9c9c9;border-radius:3px}.toc-link{color:#6f6f6f;text-decoration:none;font-size:.92em;line-height:1.4em}.toc-link:hover{color:#1a1a1a}.toc-link.active{color:#1a1a1a;font-weight:700}.delimiter{display:flex;justify-content:center}.ce-delimiter:before{display:inline-block;content:\"***\";font-size:30px;line-height:65px;height:30px;letter-spacing:.2em}p{line-height:1.6em}.back-text{@include body16r();margin-left:9px;margin-top:1px;cursor:pointer}.table-wrapper{width:100%;overflow-x:auto;margin:16px 0;border-radius:8px;border:1px solid #ececec}table{border-collapse:collapse;width:100%}th,td{border:1px solid #ececec;padding:10px 14px;text-align:left}table:not(.table-no-heading) tr:first-child td{background-color:#eee;font-weight:700;text-transform:uppercase;font-size:.82em}table:not(.table-no-heading) tr:not(:first-child):nth-child(2n) td{background-color:#fafafa}table.table-no-heading tr:nth-child(odd) td{background-color:#fafafa}.header{margin-top:8px;margin-bottom:14px;padding-left:20px}.header img,.configuration-tab img{cursor:pointer}.blogs-totalsection{background:#eee;position:absolute;top:55px;height:calc(100vh - 55px);width:81.7%;z-index:10;overflow-y:scroll;padding:14px}.blog-title{line-height:35px}.image-container{width:100%;margin:10px 0}.image-container img{width:100%}h1,h2,h3,h4,h5,h6{padding:.6em 0 3px}.h1,.h2,.h3,h1,h2,h3{margin-top:0}h2,h3,h4,h5,h6,.inner-text.heading-paragraph{font-weight:700;padding-bottom:12px;margin-bottom:8px;border-bottom:1px solid #ececec}.list-style{margin:16px 0;padding-left:22px;list-style-position:outside}.list-style li{text-align:left;line-height:1.6em;padding-left:6px}.list-style li:not(:last-child){margin-bottom:10px}.list-style li::marker{color:#1a1a1a;font-weight:700}@media only screen and (max-width: 900px){.blog-container{width:100%}.blog-layout.with-toc{flex-direction:column}.toc-sidebar{width:100%;position:static;box-sizing:border-box;order:0}.with-toc .blog-details{order:1}.toc-header{display:none}.toc-toggle{display:flex}.toc-list{display:none;margin-top:12px}.toc-list.open{display:flex}.meta-bar{flex-wrap:wrap}.meta-item{flex-basis:calc(50% - 6px)}}@media only screen and (max-width: 500px){.blog-details{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] }); }
13986
14510
  }
13987
14511
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewBlogComponent, decorators: [{
13988
14512
  type: Component,
13989
- args: [{ selector: 'simpo-view-blog', standalone: true, imports: [CommonModule], template: "<section class=\"main-section\">\n <div class=\"blog-details\">\n <!-- <h1 class=\"blog-title\">{{responseData.postTitle}}</h1> -->\n <div style=\"margin-top: 20px;\">\n <ng-container *ngFor=\"let item of responseData?.blocks\">\n <div *ngIf=\"item.type=='header'\">\n <h1 *ngIf=\"item.data.level==1\" [innerHTML]=\"item.data.text\"></h1>\n <h2 *ngIf=\"item.data.level==2\" [innerHTML]=\"item.data.text\"></h2>\n <h3 *ngIf=\"item.data.level==3\" [innerHTML]=\"item.data.text\"></h3>\n <h4 *ngIf=\"item.data.level==4\" [innerHTML]=\"item.data.text\"></h4>\n <h5 *ngIf=\"item.data.level==5\" [innerHTML]=\"item.data.text\"></h5>\n <h6 *ngIf=\"item.data.level==6\" [innerHTML]=\"item.data.text\"></h6>\n </div>\n <div *ngIf=\"item.type=='paragraph'\">\n <p class=\"inner-text\" [innerHTML]=\"item.data.text\"></p>\n </div>\n <div *ngIf=\"item.type=='list'\">\n <div *ngIf=\"item.type=='list'\">\n <div *ngIf=\"item.data.style=='ordered'\">\n <ol class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ol>\n </div>\n <div *ngIf=\"item.data.style=='unordered'\">\n <ul class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"item.type=='delimiter'\" class=\"ce-delimiter\">\n </div>\n <div *ngIf=\"item.type=='image'\" class=\"image-container\">\n <img loading=\"lazy\" [src]=\"item.data.file.url\" alt=\"\" loading=\"lazy\">\n </div>\n <div *ngIf=\"item.type=='table'\">\n\n <table>\n <ng-container *ngFor=\"let data of item.data.content\">\n <tr>\n <ng-container *ngFor=\"let item of data\">\n <td [innerHTML]=\"item\"></td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n\n </div>\n </ng-container>\n </div>\n </div>\n</section>\n", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-section{padding:5%;background-color:#fff}.blog-details{width:60%;margin:0 auto}.delimiter{display:flex;justify-content:center}.ce-delimiter:before{display:inline-block;content:\"***\";font-size:30px;line-height:65px;height:30px;letter-spacing:.2em}p{line-height:1.6em}.back-text{@include body16r();margin-left:9px;margin-top:1px;cursor:pointer}table{border-collapse:collapse;width:100%}th,td{border:1px solid black;text-align:center}.header{margin-top:8px;margin-bottom:14px;padding-left:20px}.header img,.configuration-tab img{cursor:pointer}.blogs-totalsection{background:#eee;position:absolute;top:55px;height:calc(100vh - 55px);width:81.7%;z-index:10;overflow-y:scroll;padding:14px}.blog-title{line-height:35px}.image-container{width:100%;margin:10px 0}.image-container img{width:100%}h1,h2,h3,h4,h5,h6{padding:.6em 0 3px}.h1,.h2,.h3,h1,h2,h3{margin-top:0}.list-style li{text-align:left}@media only screen and (max-width :500px){.blog-details{width:100%}}\n"] }]
13990
- }], ctorParameters: () => [{ type: EventsService }], propDecorators: { responseData: [{
14513
+ args: [{ selector: 'simpo-view-blog', standalone: true, imports: [CommonModule, DatePipe], template: "<section class=\"main-section\">\n <div class=\"blog-container\">\n <h1 class=\"blog-title\" *ngIf=\"responseData?.postTitle\">\n {{ responseData.postTitle }}\n </h1>\n\n <div class=\"meta-bar\">\n <div class=\"meta-item\">\n <span class=\"meta-label\">Publication Date</span>\n <span class=\"meta-value\">{{\n responseData?.publishedDate ||\n responseData?.blogScheduledDate ||\n responseData?.createdTimeStamp | date: 'd MMMM y'\n }}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Author</span>\n <span class=\"meta-value\">{{\n responseData?.author?.content || '\u2014'\n }}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Read Time</span>\n <span class=\"meta-value\"\n >{{ responseData?.readTime || '\u2014' }} min read</span\n >\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Views</span>\n <span class=\"meta-value\">{{ responseData?.totalVisits || 0 }}+</span>\n </div>\n </div>\n\n <div class=\"blog-layout\" [class.with-toc]=\"tocItems.length > 1\">\n <aside class=\"toc-sidebar\" *ngIf=\"tocItems.length > 1\">\n <button\n type=\"button\"\n class=\"toc-toggle\"\n (click)=\"tocOpen = !tocOpen\"\n [attr.aria-expanded]=\"tocOpen\">\n <span>Table Of Content</span>\n <span class=\"toc-toggle-icon\" [class.open]=\"tocOpen\"></span>\n </button>\n <div class=\"toc-header\">Table Of Content</div>\n <nav class=\"toc-list\" [class.open]=\"tocOpen\">\n <a\n *ngFor=\"let toc of tocItems\"\n class=\"toc-link\"\n [class.active]=\"activeTocId === toc.id\"\n [href]=\"'#block-' + toc.id\"\n (click)=\"scrollToBlock($event, toc.id)\">\n {{ toc.text }}\n </a>\n </nav>\n </aside>\n\n <div class=\"blog-details\">\n <ng-container *ngFor=\"let item of responseData?.blocks\">\n <div\n *ngIf=\"item.type == 'header' && hasVisibleText(item.data?.text)\"\n [id]=\"'block-' + item.id\"\n [class.toc-anchor]=\"isTocAnchor(item.id)\">\n <h1 *ngIf=\"item.data.level == 1\" [innerHTML]=\"item.data.text\"></h1>\n <h2 *ngIf=\"item.data.level == 2\" [innerHTML]=\"item.data.text\"></h2>\n <h3 *ngIf=\"item.data.level == 3\" [innerHTML]=\"item.data.text\"></h3>\n <h4 *ngIf=\"item.data.level == 4\" [innerHTML]=\"item.data.text\"></h4>\n <h5 *ngIf=\"item.data.level == 5\" [innerHTML]=\"item.data.text\"></h5>\n <h6 *ngIf=\"item.data.level == 6\" [innerHTML]=\"item.data.text\"></h6>\n </div>\n <div\n *ngIf=\"item.type == 'paragraph' && hasVisibleText(item.data?.text)\"\n [id]=\"'block-' + item.id\"\n [class.toc-anchor]=\"isTocAnchor(item.id)\">\n <p\n class=\"inner-text\"\n [class.heading-paragraph]=\"isTocAnchor(item.id)\"\n [innerHTML]=\"item.data.text\"></p>\n </div>\n <div *ngIf=\"item.type == 'list'\">\n <div *ngIf=\"item.data.style == 'ordered'\">\n <ol class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ol>\n </div>\n <div *ngIf=\"item.data.style == 'unordered'\">\n <ul class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ul>\n </div>\n </div>\n <div *ngIf=\"item.type == 'delimiter'\" class=\"ce-delimiter\"></div>\n <div *ngIf=\"item.type == 'image'\" class=\"image-container\">\n <img\n loading=\"lazy\"\n [src]=\"item.data.file.url\"\n alt=\"\"\n loading=\"lazy\" />\n </div>\n <div *ngIf=\"item.type == 'table'\">\n <div class=\"table-wrapper\">\n <table\n [class.table-no-heading]=\"item.data.withHeadings === false\">\n <ng-container *ngFor=\"let data of item.data.content\">\n <tr>\n <ng-container *ngFor=\"let item of data\">\n <td [innerHTML]=\"item\"></td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</section>\n", styles: [":host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-section{padding:2% 5%;background-color:#fff}.blog-container{width:85%;margin:0 auto}.blog-title{font-size:2em;font-weight:700;line-height:1.25em;margin:0 0 20px}.meta-bar{display:flex;gap:12px;margin-bottom:28px}.meta-item{flex:1;background-color:#f5f5f5;border-radius:6px;padding:12px 10px;text-align:center}.meta-label{display:block;font-size:.75em;color:#8a8a8a;letter-spacing:.02em;margin-bottom:6px}.meta-value{display:block;font-size:.95em;font-weight:700;color:#1a1a1a}.blog-layout{display:block}.blog-layout.with-toc{display:flex;align-items:flex-start;gap:40px}.with-toc .blog-details{flex:1;min-width:0;order:1}.toc-sidebar{width:340px;flex-shrink:0;position:sticky;top:20px;background-color:#f5f5f5;border-radius:6px;padding:16px;order:2}.toc-header{font-weight:700;font-size:1.05em;padding-bottom:12px;margin-bottom:8px;border-bottom:1px solid #dcdcdc}.toc-toggle{display:none;width:100%;align-items:center;justify-content:space-between;background:none;border:none;font-weight:700;font-size:1.05em;padding:0;cursor:pointer}.toc-toggle-icon{width:10px;height:10px;border-right:2px solid #1a1a1a;border-bottom:2px solid #1a1a1a;transform:rotate(45deg);transition:transform .2s ease}.toc-toggle-icon.open{transform:rotate(-135deg)}.toc-list{display:flex;flex-direction:column;gap:14px;max-height:600px;overflow-y:auto;padding-right:8px;scrollbar-width:thin;scrollbar-color:#c9c9c9 transparent}.toc-list::-webkit-scrollbar{display:block;width:6px}.toc-list::-webkit-scrollbar-track{background-color:transparent}.toc-list::-webkit-scrollbar-thumb{display:block;background-color:#c9c9c9;border-radius:3px}.toc-link{color:#6f6f6f;text-decoration:none;font-size:.92em;line-height:1.4em}.toc-link:hover{color:#1a1a1a}.toc-link.active{color:#1a1a1a;font-weight:700}.delimiter{display:flex;justify-content:center}.ce-delimiter:before{display:inline-block;content:\"***\";font-size:30px;line-height:65px;height:30px;letter-spacing:.2em}p{line-height:1.6em}.back-text{@include body16r();margin-left:9px;margin-top:1px;cursor:pointer}.table-wrapper{width:100%;overflow-x:auto;margin:16px 0;border-radius:8px;border:1px solid #ececec}table{border-collapse:collapse;width:100%}th,td{border:1px solid #ececec;padding:10px 14px;text-align:left}table:not(.table-no-heading) tr:first-child td{background-color:#eee;font-weight:700;text-transform:uppercase;font-size:.82em}table:not(.table-no-heading) tr:not(:first-child):nth-child(2n) td{background-color:#fafafa}table.table-no-heading tr:nth-child(odd) td{background-color:#fafafa}.header{margin-top:8px;margin-bottom:14px;padding-left:20px}.header img,.configuration-tab img{cursor:pointer}.blogs-totalsection{background:#eee;position:absolute;top:55px;height:calc(100vh - 55px);width:81.7%;z-index:10;overflow-y:scroll;padding:14px}.blog-title{line-height:35px}.image-container{width:100%;margin:10px 0}.image-container img{width:100%}h1,h2,h3,h4,h5,h6{padding:.6em 0 3px}.h1,.h2,.h3,h1,h2,h3{margin-top:0}h2,h3,h4,h5,h6,.inner-text.heading-paragraph{font-weight:700;padding-bottom:12px;margin-bottom:8px;border-bottom:1px solid #ececec}.list-style{margin:16px 0;padding-left:22px;list-style-position:outside}.list-style li{text-align:left;line-height:1.6em;padding-left:6px}.list-style li:not(:last-child){margin-bottom:10px}.list-style li::marker{color:#1a1a1a;font-weight:700}@media only screen and (max-width: 900px){.blog-container{width:100%}.blog-layout.with-toc{flex-direction:column}.toc-sidebar{width:100%;position:static;box-sizing:border-box;order:0}.with-toc .blog-details{order:1}.toc-header{display:none}.toc-toggle{display:flex}.toc-list{display:none;margin-top:12px}.toc-list.open{display:flex}.meta-bar{flex-wrap:wrap}.meta-item{flex-basis:calc(50% - 6px)}}@media only screen and (max-width: 500px){.blog-details{width:100%}}\n"] }]
14514
+ }], ctorParameters: () => [{ type: EventsService }, { type: i0.ElementRef }, { type: undefined, decorators: [{
14515
+ type: Inject,
14516
+ args: [PLATFORM_ID]
14517
+ }] }], propDecorators: { responseData: [{
13991
14518
  type: Input
13992
14519
  }] } });
13993
14520