@zonos/elements 1.3.205 → 1.3.207

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.
Files changed (148) hide show
  1. package/dist/cjs/{cart-193af95a.js → cart-3d961c6e.js} +1 -1
  2. package/dist/cjs/index.cjs.js +7 -7
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/{localization-88da0959.js → localization-ff33875b.js} +420 -181
  5. package/dist/cjs/{paypal-8525404c.js → paypal-dee5c109.js} +2 -2
  6. package/dist/cjs/zonos-address_11.cjs.entry.js +2 -2
  7. package/dist/cjs/zonos-cart-items_14.cjs.entry.js +3 -3
  8. package/dist/cjs/zonos-checkout.cjs.entry.js +3 -3
  9. package/dist/cjs/zonos-controller.cjs.entry.js +2 -2
  10. package/dist/cjs/zonos-country-flag.cjs.entry.js +1 -1
  11. package/dist/cjs/zonos-country-select_4.cjs.entry.js +94 -46
  12. package/dist/cjs/zonos-elements.cjs.js +1 -1
  13. package/dist/cjs/zonos-empty-state-payment_4.cjs.entry.js +3 -3
  14. package/dist/cjs/zonos-hello-dialog.cjs.entry.js +82 -24
  15. package/dist/cjs/zonos-hello.cjs.entry.js +11 -2
  16. package/dist/cjs/zonos-language-select_2.cjs.entry.js +1 -1
  17. package/dist/collection/components/common/zonos-virtual-scroll/zonos-virtual-scroll.css +9 -2
  18. package/dist/collection/components/common/zonos-virtual-scroll/zonos-virtual-scroll.js +129 -59
  19. package/dist/collection/components/hello/zonos-hello/zonos-hello.js +10 -1
  20. package/dist/collection/components/hello/zonos-hello-dialog/zonos-hello-dialog.js +81 -23
  21. package/dist/collection/components/store/translationStore/strings.arabic.js +21 -9
  22. package/dist/collection/components/store/translationStore/strings.base.js +21 -10
  23. package/dist/collection/components/store/translationStore/strings.chinese.js +21 -9
  24. package/dist/collection/components/store/translationStore/strings.danish.js +21 -9
  25. package/dist/collection/components/store/translationStore/strings.dutch.js +21 -9
  26. package/dist/collection/components/store/translationStore/strings.french.js +21 -9
  27. package/dist/collection/components/store/translationStore/strings.german.js +21 -9
  28. package/dist/collection/components/store/translationStore/strings.hebrew.js +21 -9
  29. package/dist/collection/components/store/translationStore/strings.indonesian.js +21 -9
  30. package/dist/collection/components/store/translationStore/strings.italian.js +21 -9
  31. package/dist/collection/components/store/translationStore/strings.japanese.js +21 -9
  32. package/dist/collection/components/store/translationStore/strings.korean.js +21 -9
  33. package/dist/collection/components/store/translationStore/strings.norwegian.js +21 -9
  34. package/dist/collection/components/store/translationStore/strings.polish.js +21 -9
  35. package/dist/collection/components/store/translationStore/strings.portuguese.js +21 -9
  36. package/dist/collection/components/store/translationStore/strings.russian.js +21 -9
  37. package/dist/collection/components/store/translationStore/strings.spanish.js +21 -9
  38. package/dist/collection/components/store/translationStore/strings.swedish.js +21 -9
  39. package/dist/collection/components/store/translationStore/strings.turkish.js +21 -9
  40. package/dist/collection/components/store/translationStore/strings.vietnamese.js +21 -9
  41. package/dist/collection/types/common-ui/VirtualScroll.js +1 -0
  42. package/dist/collection/types/generated/graphql.internal.types.js +6 -0
  43. package/dist/esm/{cart-a921e0b7.js → cart-5835676d.js} +1 -1
  44. package/dist/esm/index.js +7 -7
  45. package/dist/esm/loader.js +1 -1
  46. package/dist/esm/{localization-a2b8f9ed.js → localization-4c7f64e8.js} +420 -181
  47. package/dist/esm/{paypal-67d51f03.js → paypal-b4f106be.js} +2 -2
  48. package/dist/esm/zonos-address_11.entry.js +2 -2
  49. package/dist/esm/zonos-cart-items_14.entry.js +3 -3
  50. package/dist/esm/zonos-checkout.entry.js +3 -3
  51. package/dist/esm/zonos-controller.entry.js +2 -2
  52. package/dist/esm/zonos-country-flag.entry.js +1 -1
  53. package/dist/esm/zonos-country-select_4.entry.js +94 -46
  54. package/dist/esm/zonos-elements.js +1 -1
  55. package/dist/esm/zonos-empty-state-payment_4.entry.js +3 -3
  56. package/dist/esm/zonos-hello-dialog.entry.js +82 -24
  57. package/dist/esm/zonos-hello.entry.js +11 -2
  58. package/dist/esm/zonos-language-select_2.entry.js +1 -1
  59. package/dist/esm-es5/{cart-a921e0b7.js → cart-5835676d.js} +1 -1
  60. package/dist/esm-es5/index.js +1 -1
  61. package/dist/esm-es5/loader.js +1 -1
  62. package/dist/esm-es5/localization-4c7f64e8.js +1 -0
  63. package/dist/esm-es5/{paypal-67d51f03.js → paypal-b4f106be.js} +1 -1
  64. package/dist/esm-es5/zonos-address_11.entry.js +1 -1
  65. package/dist/esm-es5/zonos-cart-items_14.entry.js +1 -1
  66. package/dist/esm-es5/zonos-checkout.entry.js +1 -1
  67. package/dist/esm-es5/zonos-controller.entry.js +1 -1
  68. package/dist/esm-es5/zonos-country-flag.entry.js +1 -1
  69. package/dist/esm-es5/zonos-country-select_4.entry.js +1 -1
  70. package/dist/esm-es5/zonos-elements.js +1 -1
  71. package/dist/esm-es5/zonos-empty-state-payment_4.entry.js +1 -1
  72. package/dist/esm-es5/zonos-hello-dialog.entry.js +1 -1
  73. package/dist/esm-es5/zonos-hello.entry.js +1 -1
  74. package/dist/esm-es5/zonos-language-select_2.entry.js +1 -1
  75. package/dist/scripts/index.d.ts +30 -28
  76. package/dist/scripts/index.js +1 -1
  77. package/dist/scripts/loadZonos.js +1 -1
  78. package/dist/scripts/zonos.js +1 -1
  79. package/dist/types/components/common/zonos-virtual-scroll/zonos-virtual-scroll.d.ts +49 -12
  80. package/dist/types/components/hello/zonos-hello/zonos-hello.d.ts +2 -0
  81. package/dist/types/components/hello/zonos-hello-dialog/zonos-hello-dialog.d.ts +3 -0
  82. package/dist/types/components/store/translationStore/strings.arabic.d.ts +18 -6
  83. package/dist/types/components/store/translationStore/strings.base.d.ts +18 -6
  84. package/dist/types/components/store/translationStore/strings.chinese.d.ts +18 -6
  85. package/dist/types/components/store/translationStore/strings.danish.d.ts +18 -6
  86. package/dist/types/components/store/translationStore/strings.dutch.d.ts +18 -6
  87. package/dist/types/components/store/translationStore/strings.french.d.ts +18 -6
  88. package/dist/types/components/store/translationStore/strings.german.d.ts +18 -6
  89. package/dist/types/components/store/translationStore/strings.hebrew.d.ts +18 -6
  90. package/dist/types/components/store/translationStore/strings.indonesian.d.ts +18 -6
  91. package/dist/types/components/store/translationStore/strings.italian.d.ts +18 -6
  92. package/dist/types/components/store/translationStore/strings.japanese.d.ts +18 -6
  93. package/dist/types/components/store/translationStore/strings.korean.d.ts +18 -6
  94. package/dist/types/components/store/translationStore/strings.norwegian.d.ts +18 -6
  95. package/dist/types/components/store/translationStore/strings.polish.d.ts +18 -6
  96. package/dist/types/components/store/translationStore/strings.portuguese.d.ts +18 -6
  97. package/dist/types/components/store/translationStore/strings.russian.d.ts +18 -6
  98. package/dist/types/components/store/translationStore/strings.spanish.d.ts +18 -6
  99. package/dist/types/components/store/translationStore/strings.swedish.d.ts +18 -6
  100. package/dist/types/components/store/translationStore/strings.turkish.d.ts +18 -6
  101. package/dist/types/components/store/translationStore/strings.vietnamese.d.ts +18 -6
  102. package/dist/types/components/utils/api/getLocaleMessages.d.ts +1 -1
  103. package/dist/types/components.d.ts +30 -28
  104. package/dist/types/types/common-ui/VirtualScroll.d.ts +1 -0
  105. package/dist/types/types/generated/graphql.frontend.types.d.ts +1 -1
  106. package/dist/types/types/generated/graphql.frontend.types.ts +1 -1
  107. package/dist/types/types/generated/graphql.internal.types.d.ts +7 -0
  108. package/dist/types/types/generated/graphql.internal.types.ts +9 -0
  109. package/dist/types/types/index.d.ts +1 -0
  110. package/dist/zonos-elements/index.esm.js +1 -1
  111. package/dist/zonos-elements/{p-69577745.system.js → p-0de2c731.system.js} +1 -1
  112. package/dist/zonos-elements/{p-ee7a661d.system.entry.js → p-1aa24297.system.entry.js} +1 -1
  113. package/dist/zonos-elements/{p-8debefec.system.entry.js → p-265af369.system.entry.js} +1 -1
  114. package/dist/zonos-elements/p-30778fde.system.entry.js +1 -0
  115. package/dist/zonos-elements/{p-6d467dfb.entry.js → p-3a50124e.entry.js} +1 -1
  116. package/dist/zonos-elements/p-3ee44728.system.js +1 -1
  117. package/dist/zonos-elements/p-41c1d7c4.entry.js +1 -0
  118. package/dist/zonos-elements/{p-87e807b4.entry.js → p-42a9557f.entry.js} +1 -1
  119. package/dist/zonos-elements/{p-90c185ac.entry.js → p-47e2cd31.entry.js} +1 -1
  120. package/dist/zonos-elements/{p-d649fb9a.system.entry.js → p-4cb8b87f.system.entry.js} +1 -1
  121. package/dist/zonos-elements/p-4e9c8f9e.system.js +1 -0
  122. package/dist/zonos-elements/p-536f69eb.entry.js +1 -0
  123. package/dist/zonos-elements/{p-05a91fe6.entry.js → p-5616b304.entry.js} +1 -1
  124. package/dist/zonos-elements/p-620deb03.system.entry.js +1 -0
  125. package/dist/zonos-elements/{p-dfe7d1dd.js → p-658936c9.js} +2 -2
  126. package/dist/zonos-elements/{p-be53e893.system.js → p-666164d9.system.js} +1 -1
  127. package/dist/zonos-elements/{p-28fcd277.system.js → p-91c996d3.system.js} +1 -1
  128. package/dist/zonos-elements/p-9f78b79e.entry.js +1 -0
  129. package/dist/zonos-elements/{p-f98276ed.entry.js → p-a2b55d11.entry.js} +1 -1
  130. package/dist/zonos-elements/{p-3c921768.system.entry.js → p-aafcd40f.system.entry.js} +1 -1
  131. package/dist/zonos-elements/{p-0d7af8be.system.entry.js → p-abe218ab.system.entry.js} +1 -1
  132. package/dist/zonos-elements/{p-dd0f8f06.system.entry.js → p-ba027b70.system.entry.js} +1 -1
  133. package/dist/zonos-elements/{p-91fc6911.entry.js → p-bab19e2a.entry.js} +1 -1
  134. package/dist/zonos-elements/{p-5fbaa153.system.entry.js → p-c4e0f49a.system.entry.js} +1 -1
  135. package/dist/zonos-elements/{p-dcbd57df.entry.js → p-dbd23bea.entry.js} +1 -1
  136. package/dist/zonos-elements/p-edcfb3a3.js +1 -0
  137. package/dist/zonos-elements/{p-4329f616.system.entry.js → p-f4d741de.system.entry.js} +1 -1
  138. package/dist/zonos-elements/{p-8e000d8d.js → p-f9664811.js} +1 -1
  139. package/dist/zonos-elements/zonos-elements.esm.js +1 -1
  140. package/package.json +1 -1
  141. package/dist/esm-es5/localization-a2b8f9ed.js +0 -1
  142. package/dist/zonos-elements/p-0d2df4d2.system.js +0 -1
  143. package/dist/zonos-elements/p-16e858f9.entry.js +0 -1
  144. package/dist/zonos-elements/p-20ac92e1.system.entry.js +0 -1
  145. package/dist/zonos-elements/p-43b72ad6.system.entry.js +0 -1
  146. package/dist/zonos-elements/p-8609e956.js +0 -1
  147. package/dist/zonos-elements/p-e0ebbefe.entry.js +0 -1
  148. package/dist/zonos-elements/p-ebe08e44.entry.js +0 -1
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-1c710d00.js');
6
6
  const debounce = require('./debounce-0b9c0f8a.js');
7
- const localization = require('./localization-88da0959.js');
7
+ const localization = require('./localization-ff33875b.js');
8
8
  const zonosStore = require('./zonosStore-7c1e1bc1.js');
9
9
  const classes = require('./classes-b7918f56.js');
10
10
  const handleFetch = require('./handleFetch-969d05d8.js');
@@ -251,19 +251,23 @@ const ZonosHello = class {
251
251
  }
252
252
  }, 1000);
253
253
  this.watchProductCountChange = () => {
254
+ var _a;
254
255
  const observer = new MutationObserver(this.handleProductCountChange);
255
256
  observer.observe(document.body, {
256
257
  childList: true,
257
258
  subtree: true,
258
259
  });
260
+ (_a = this.observerWatcher) === null || _a === void 0 ? void 0 : _a.push(observer);
259
261
  };
260
262
  this.watchPriceChange = () => {
263
+ var _a;
261
264
  const observer = new MutationObserver(() => void this.displayCurrency());
262
265
  observer.observe(document.body, {
263
266
  attributes: true,
264
267
  childList: true,
265
268
  subtree: true,
266
269
  });
270
+ (_a = this.observerWatcher) === null || _a === void 0 ? void 0 : _a.push(observer);
267
271
  };
268
272
  this.updateHelloOnPageChange = () => {
269
273
  // If the product count changes on the same url (loading more products), update the peek message and item restrictions
@@ -348,6 +352,11 @@ const ZonosHello = class {
348
352
  }
349
353
  }, 100);
350
354
  }
355
+ disconnectedCallback() {
356
+ var _a;
357
+ // disconnect all observers
358
+ (_a = this.observerWatcher) === null || _a === void 0 ? void 0 : _a.forEach(observer => observer.disconnect());
359
+ }
351
360
  /**
352
361
  * This method will trigger the currency conversion and display the converted value
353
362
  * @returns void
@@ -499,7 +508,7 @@ const ZonosHello = class {
499
508
  shouldFloat && 'zonos--hello-widget-float',
500
509
  ]), onClick: () => {
501
510
  void this.changeShowDialog(!this.showDialog);
502
- }, onMouseEnter: () => this.enableShowPeekMessage(), onMouseLeave: () => (this.showPeekMessage = false), ref: el => el && (this.helloRef = el) }, index.h("zonos-text", { class: "zonos--hello-message" }, this.peekMessage), selectedCountryCode && (index.h("div", { class: "zonos--hello-country-flag-wrapper" }, index.h("zonos-country-flag", { class: "zonos--hello-country-flag", countryCode: selectedCountryCode })))), index.h("div", { class: classes.classes([
511
+ }, onMouseEnter: () => this.enableShowPeekMessage(), onMouseLeave: () => (this.showPeekMessage = false), ref: el => el && (this.helloRef = el), type: "button" }, index.h("zonos-text", { class: "zonos--hello-message" }, this.peekMessage), selectedCountryCode && (index.h("div", { class: "zonos--hello-country-flag-wrapper" }, index.h("zonos-country-flag", { class: "zonos--hello-country-flag", countryCode: selectedCountryCode })))), index.h("div", { class: classes.classes([
503
512
  'zonos--hello-dialog-wrapper',
504
513
  this.mobileLocationOverride &&
505
514
  'zonos--hello-dialog-wrapper-mobile-override',
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-1c710d00.js');
6
- const localization = require('./localization-88da0959.js');
6
+ const localization = require('./localization-ff33875b.js');
7
7
  const zonosStore = require('./zonosStore-7c1e1bc1.js');
8
8
  const ILanguage = require('./ILanguage-98b04442.js');
9
9
  require('./handleFetch-969d05d8.js');
@@ -32,15 +32,22 @@
32
32
  }
33
33
 
34
34
  :host {
35
- overflow: scroll;
35
+ display: block;
36
+ overflow: auto;
37
+ position: relative;
36
38
  }
37
39
  :host .scroller {
38
40
  display: inline-block;
41
+ pointer-events: none;
39
42
  }
40
43
  :host .item-container {
41
- position: relative;
42
44
  display: inline-block;
45
+ position: absolute;
46
+ left: 0;
47
+ top: 0;
43
48
  }
44
49
  :host .item-container .item {
45
50
  position: absolute;
51
+ top: 0;
52
+ left: 0;
46
53
  }
@@ -1,67 +1,117 @@
1
1
  import { h, Host } from "@stencil/core";
2
+ import { classes } from "../../utils/classes";
2
3
  /**
3
- * The idea is from
4
+ * Virtual scroll component for efficiently rendering large lists
5
+ *
6
+ * The idea is from:
4
7
  * @ref https://github.com/beenotung/stencil-virtual-scroll/blob/master/src/components/virtual-scroll-list/virtual-scroll-list.scss
5
8
  * @ref https://github.dev/ionic-team/ionic-framework/blob/v6.7.5/core/src/components/virtual-scroll/virtual-scroll.tsx
6
9
  */
7
10
  export class ZonosVirtualScroll {
8
11
  constructor() {
12
+ /**
13
+ * Buffer size in pixels for pre-rendering items outside viewport
14
+ * @default 100
15
+ */
16
+ this.buffer = 100;
17
+ /**
18
+ * Current scroll position
19
+ */
9
20
  this.scrollTop = 0;
10
- this.totalHeight = 1;
11
- this.scrollListener = (_ev) => {
12
- this.scrollTop = this.ele.scrollTop;
21
+ /**
22
+ * Total height of all items combined
23
+ */
24
+ this.totalHeight = 0;
25
+ /**
26
+ * Client dimensions of the scroll container
27
+ */
28
+ this.containerDimensions = {
29
+ height: 0,
30
+ width: 0,
31
+ };
32
+ /**
33
+ * Update container dimensions when element size changes
34
+ */
35
+ this.updateContainerDimensions = () => {
36
+ this.containerDimensions = {
37
+ height: this.element.clientHeight,
38
+ width: this.element.clientWidth,
39
+ };
40
+ };
41
+ /**
42
+ * Handle scroll events
43
+ */
44
+ this.handleScroll = () => {
45
+ this.scrollTop = this.element.scrollTop;
13
46
  };
14
47
  }
48
+ /**
49
+ * Watch for changes in item heights or fallback height and recalculate total height
50
+ */
15
51
  updateTotalHeight() {
16
- this.totalHeight = this.itemHeights.reduce((acc, height) => acc + (height || this.fallbackItemHeight), 0);
52
+ this.totalHeight = this.itemHeights.reduce((accumulator, height) => accumulator + (height || this.fallbackItemHeight), 0);
53
+ }
54
+ /**
55
+ * Calculate which items should be rendered based on current scroll position
56
+ */
57
+ getVisibleItems() {
58
+ const { width: containerWidth } = this.containerDimensions;
59
+ const visibleItems = [];
60
+ let accumulatedHeight = 0;
61
+ const itemCount = this.itemHeights.length;
62
+ for (let index = 0; index < itemCount; index++) {
63
+ const itemHeight = this.itemHeights[index] || this.fallbackItemHeight;
64
+ // Skip items that are above the viewport (with buffer)
65
+ if (this.scrollTop > accumulatedHeight + itemHeight + this.buffer) {
66
+ accumulatedHeight += itemHeight;
67
+ continue;
68
+ }
69
+ // Stop rendering items that are below the viewport (with buffer)
70
+ if (this.scrollTop + this.containerDimensions.height <
71
+ accumulatedHeight - this.buffer) {
72
+ break;
73
+ }
74
+ const itemElement = (h("div", { class: classes(['item']), key: `virtual-item-${index}`, style: {
75
+ height: `${itemHeight}px`,
76
+ transform: `translateY(${accumulatedHeight}px)`,
77
+ width: this.itemWidth
78
+ ? `${this.itemWidth}px`
79
+ : `${containerWidth}px`,
80
+ } }, this.renderItem(index)));
81
+ visibleItems.push({
82
+ element: itemElement,
83
+ index,
84
+ });
85
+ accumulatedHeight += itemHeight;
86
+ }
87
+ return visibleItems;
17
88
  }
89
+ /**
90
+ * Component lifecycle - setup event listeners and initial calculations
91
+ */
18
92
  connectedCallback() {
19
- this.ele.addEventListener('scroll', this.scrollListener);
93
+ this.element.addEventListener('scroll', this.handleScroll);
94
+ window.addEventListener('resize', this.updateContainerDimensions);
95
+ // Initial setup
20
96
  this.updateTotalHeight();
97
+ this.updateContainerDimensions();
21
98
  }
99
+ /**
100
+ * Component lifecycle - cleanup event listeners
101
+ */
22
102
  disconnectedCallback() {
23
- this.ele.removeEventListener('scroll', this.scrollListener);
103
+ this.element.removeEventListener('scroll', this.handleScroll);
104
+ window.removeEventListener('resize', this.updateContainerDimensions);
24
105
  }
25
106
  render() {
26
- const W = this.ele.clientWidth;
27
- const H = this.ele.clientHeight;
28
- const heights = this.itemHeights;
29
- const fallbackItemHeight = this.fallbackItemHeight;
30
- const N = this.itemHeights.length;
31
- const scrollTop = this.scrollTop;
32
- const children = [];
33
- let accHeight = 0;
34
- // buffer for pre-rendering for item outside of viewport
35
- const buffer = 100;
36
- for (let i = 0; i < N; i++) {
37
- const itemHeight = heights[i] || fallbackItemHeight;
38
- if (scrollTop > accHeight + itemHeight + buffer) {
39
- accHeight += itemHeight;
40
- continue; // this item is above the viewport
41
- }
42
- if (scrollTop + H < accHeight - buffer) {
43
- break; // this item is below the viewport
44
- }
45
- const x = 0;
46
- const y = accHeight;
47
- children.push(h("div", { class: "item", style: {
48
- height: `${itemHeight}px`,
49
- transform: `translate(${x}px,${y}px)`,
50
- width: this.itemWidth ? `${this.itemWidth}px` : `${W}px`,
51
- } }, this.renderItem(i)));
52
- accHeight += itemHeight;
53
- }
54
- return (h(Host, { key: '6ccfd807912b51223f249543b66552e945859a1a' }, h("div", { key: '21f05d8e9082b54f484badc6e52c3006068df401',
55
- // to capture scroll action
56
- class: "scroller", style: {
107
+ const { width: containerWidth } = this.containerDimensions;
108
+ const visibleItems = this.getVisibleItems();
109
+ return (h(Host, { key: 'ef009c7cd2e654ea2dd3d67675f221229f924ec0', class: classes(['zonos--virtual-scroll']) }, h("div", { key: 'a2831fb8251cb27b3d814e8c493e8303ac04ff1c', class: classes(['scroller']), style: {
57
110
  height: `${this.totalHeight}px`,
58
- width: `${W}px`,
59
- } }), h("div", { key: '3935dc009877c002047f41de3caeeb16e2d7c08d',
60
- // to display items
61
- class: "item-container", ref: el => (this.container = el), style: {
111
+ width: `${containerWidth}px`,
112
+ } }), h("div", { key: 'e36052e45224c89860b469b939898aa9861181a8', class: classes(['item-container']), style: {
62
113
  height: `${this.totalHeight}px`,
63
- left: `${-W}px`,
64
- } }, children)));
114
+ } }, visibleItems.map(({ element }) => element))));
65
115
  }
66
116
  static get is() { return "zonos-virtual-scroll"; }
67
117
  static get encapsulation() { return "scoped"; }
@@ -81,16 +131,13 @@ export class ZonosVirtualScroll {
81
131
  "type": "unknown",
82
132
  "mutable": false,
83
133
  "complexType": {
84
- "original": "(\n itemIndex: number,\n ) =>\n | HTMLElement\n | Promise<HTMLElement>\n | HTMLElement[]\n | Promise<HTMLElement[]>\n | Promise<HTMLElement>[]",
134
+ "original": "VirtualScrollRenderItem",
85
135
  "resolved": "(itemIndex: number) => HTMLElement | HTMLElement[] | Promise<HTMLElement> | Promise<HTMLElement[]> | Promise<HTMLElement>[]",
86
136
  "references": {
87
- "HTMLElement": {
88
- "location": "global",
89
- "id": "global::HTMLElement"
90
- },
91
- "Promise": {
92
- "location": "global",
93
- "id": "global::Promise"
137
+ "VirtualScrollRenderItem": {
138
+ "location": "import",
139
+ "path": "src/types/common-ui/VirtualScroll",
140
+ "id": "src/types/common-ui/VirtualScroll.ts::VirtualScrollRenderItem"
94
141
  }
95
142
  }
96
143
  },
@@ -98,7 +145,7 @@ export class ZonosVirtualScroll {
98
145
  "optional": false,
99
146
  "docs": {
100
147
  "tags": [],
101
- "text": "Render item"
148
+ "text": "Function to render each item in the virtual scroll"
102
149
  },
103
150
  "getter": false,
104
151
  "setter": false
@@ -115,7 +162,7 @@ export class ZonosVirtualScroll {
115
162
  "optional": true,
116
163
  "docs": {
117
164
  "tags": [],
118
- "text": "Width of each item"
165
+ "text": "Width of each item in pixels"
119
166
  },
120
167
  "getter": false,
121
168
  "setter": false,
@@ -134,7 +181,7 @@ export class ZonosVirtualScroll {
134
181
  "optional": false,
135
182
  "docs": {
136
183
  "tags": [],
137
- "text": "Height that is used as a fallback if height is not provided"
184
+ "text": "Fallback height used when specific item height is not provided"
138
185
  },
139
186
  "getter": false,
140
187
  "setter": false,
@@ -153,21 +200,44 @@ export class ZonosVirtualScroll {
153
200
  "optional": false,
154
201
  "docs": {
155
202
  "tags": [],
156
- "text": "Heights list of each item"
203
+ "text": "Array of heights for each item in pixels"
157
204
  },
158
205
  "getter": false,
159
206
  "setter": false
207
+ },
208
+ "buffer": {
209
+ "type": "number",
210
+ "mutable": false,
211
+ "complexType": {
212
+ "original": "number",
213
+ "resolved": "number",
214
+ "references": {}
215
+ },
216
+ "required": false,
217
+ "optional": false,
218
+ "docs": {
219
+ "tags": [{
220
+ "name": "default",
221
+ "text": "100"
222
+ }],
223
+ "text": "Buffer size in pixels for pre-rendering items outside viewport"
224
+ },
225
+ "getter": false,
226
+ "setter": false,
227
+ "attribute": "buffer",
228
+ "reflect": false,
229
+ "defaultValue": "100"
160
230
  }
161
231
  };
162
232
  }
163
233
  static get states() {
164
234
  return {
165
- "container": {},
166
235
  "scrollTop": {},
167
- "totalHeight": {}
236
+ "totalHeight": {},
237
+ "containerDimensions": {}
168
238
  };
169
239
  }
170
- static get elementRef() { return "ele"; }
240
+ static get elementRef() { return "element"; }
171
241
  static get watchers() {
172
242
  return [{
173
243
  "propName": "itemHeights",
@@ -143,19 +143,23 @@ export class ZonosHello {
143
143
  }
144
144
  }, 1000);
145
145
  this.watchProductCountChange = () => {
146
+ var _a;
146
147
  const observer = new MutationObserver(this.handleProductCountChange);
147
148
  observer.observe(document.body, {
148
149
  childList: true,
149
150
  subtree: true,
150
151
  });
152
+ (_a = this.observerWatcher) === null || _a === void 0 ? void 0 : _a.push(observer);
151
153
  };
152
154
  this.watchPriceChange = () => {
155
+ var _a;
153
156
  const observer = new MutationObserver(() => void this.displayCurrency());
154
157
  observer.observe(document.body, {
155
158
  attributes: true,
156
159
  childList: true,
157
160
  subtree: true,
158
161
  });
162
+ (_a = this.observerWatcher) === null || _a === void 0 ? void 0 : _a.push(observer);
159
163
  };
160
164
  this.updateHelloOnPageChange = () => {
161
165
  // If the product count changes on the same url (loading more products), update the peek message and item restrictions
@@ -240,6 +244,11 @@ export class ZonosHello {
240
244
  }
241
245
  }, 100);
242
246
  }
247
+ disconnectedCallback() {
248
+ var _a;
249
+ // disconnect all observers
250
+ (_a = this.observerWatcher) === null || _a === void 0 ? void 0 : _a.forEach(observer => observer.disconnect());
251
+ }
243
252
  /**
244
253
  * This method will trigger the currency conversion and display the converted value
245
254
  * @returns void
@@ -391,7 +400,7 @@ export class ZonosHello {
391
400
  shouldFloat && 'zonos--hello-widget-float',
392
401
  ]), onClick: () => {
393
402
  void this.changeShowDialog(!this.showDialog);
394
- }, onMouseEnter: () => this.enableShowPeekMessage(), onMouseLeave: () => (this.showPeekMessage = false), ref: el => el && (this.helloRef = el) }, h("zonos-text", { class: "zonos--hello-message" }, this.peekMessage), selectedCountryCode && (h("div", { class: "zonos--hello-country-flag-wrapper" }, h("zonos-country-flag", { class: "zonos--hello-country-flag", countryCode: selectedCountryCode })))), h("div", { class: classes([
403
+ }, onMouseEnter: () => this.enableShowPeekMessage(), onMouseLeave: () => (this.showPeekMessage = false), ref: el => el && (this.helloRef = el), type: "button" }, h("zonos-text", { class: "zonos--hello-message" }, this.peekMessage), selectedCountryCode && (h("div", { class: "zonos--hello-country-flag-wrapper" }, h("zonos-country-flag", { class: "zonos--hello-country-flag", countryCode: selectedCountryCode })))), h("div", { class: classes([
395
404
  'zonos--hello-dialog-wrapper',
396
405
  this.mobileLocationOverride &&
397
406
  'zonos--hello-dialog-wrapper-mobile-override',
@@ -8,6 +8,7 @@ import { currencyFormat } from "../../utils/hello/currencyConversion/currencyFor
8
8
  import { getHasMoreSpaceAbove } from "../../utils/hello/getHasMoreSpaceAbove";
9
9
  import { getHasMoreSpaceOnRight } from "../../utils/hello/getHasMoreSpaceOnRight";
10
10
  import { wrapStringWithLink } from "../../utils/wrapStringWithLink";
11
+ import { euCountryCodes } from "../../../types/checkout/Tax";
11
12
  // eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
12
13
  import BagIcon from "./assets/bagIcon.svg";
13
14
  // eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
@@ -20,10 +21,6 @@ import MessageIcon from "./assets/messageIcon.svg";
20
21
  import MoneyIcon from "./assets/moneyIcon.svg";
21
22
  // eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
22
23
  import RemoveIcon from "./assets/removeIcon.svg";
23
- const dutyTaxMessage_AU_lowValueGST = `${translate('The low-value GST law passed July 1st, 2018 applies to this retailer.')} ${wrapStringWithLink({
24
- href: 'https://zonos.com/docs/global-ecommerce/landed-cost/tax-remittance/australia-gst',
25
- text: translate('Learn more.'),
26
- })}`;
27
24
  export class ZonosHelloDialog {
28
25
  constructor() {
29
26
  /**
@@ -87,18 +84,25 @@ export class ZonosHelloDialog {
87
84
  if (!countryCode || !this.hasTaxId()) {
88
85
  return false;
89
86
  }
90
- return ['AU'].includes(countryCode);
87
+ const countryCodes = [
88
+ 'AU',
89
+ 'NZ',
90
+ 'GB',
91
+ 'NO',
92
+ 'SG',
93
+ ...euCountryCodes,
94
+ ];
95
+ return countryCodes.includes(countryCode);
91
96
  };
92
97
  this.getDutyMessage = () => {
93
- const { countryLandedCost } = localizationStore;
98
+ const countryLandedCost = localizationStore.countryLandedCost;
94
99
  // Our Robby API spells deminimis wrong here
95
100
  const dutyDeminimis = (countryLandedCost === null || countryLandedCost === void 0 ? void 0 : countryLandedCost.dutyDeminimus)
96
101
  ? currencyFormat({ amount: countryLandedCost.dutyDeminimus })
97
102
  : null;
98
103
  // If deminimis is undefined or null, assume it's $0
99
- return dutyDeminimis &&
100
- !this.isNoThresholdCountry(countryLandedCost === null || countryLandedCost === void 0 ? void 0 : countryLandedCost.countryCode)
101
- ? translate('Spend [threshold] duty free.', {
104
+ return dutyDeminimis
105
+ ? translate('Spend up to [threshold] duty free.', {
102
106
  threshold: dutyDeminimis,
103
107
  })
104
108
  : translate('Duties will apply to all orders.');
@@ -111,15 +115,31 @@ export class ZonosHelloDialog {
111
115
  : null;
112
116
  return taxDeminimis &&
113
117
  !this.isNoThresholdCountry(countryLandedCost === null || countryLandedCost === void 0 ? void 0 : countryLandedCost.countryCode)
114
- ? translate('Spend [threshold] tax free.', {
118
+ ? translate('Spend up to [threshold] tax free.', {
115
119
  threshold: taxDeminimis,
116
120
  })
117
121
  : translate('Taxes will apply to all orders.');
118
122
  };
123
+ this.getEuDutyTaxMessage = (landedCost) => {
124
+ return [
125
+ `${translate('Due to the IOSS tax law, all orders will be assessed at [percentage] VAT regardless of order total.', {
126
+ percentage: `${landedCost.vatTaxRate * 100}%`,
127
+ })} ${wrapStringWithLink({
128
+ href: 'https://zonos.com/docs/global-ecommerce/landed-cost/tax-remittance/european-ioss',
129
+ text: translate('Learn more.'),
130
+ })}`,
131
+ ];
132
+ };
119
133
  this.getUkDutyTaxMessage = (landedCost) => {
120
134
  if (landedCost.allowLowValueOrders) {
121
- // show nothing if low value orders are allowed
122
- return null;
135
+ return [
136
+ `${translate('Due to the UK tax law, all orders will be assessed at [percentage] VAT regardless of order total.', {
137
+ percentage: `${landedCost.vatTaxRate * 100}%`,
138
+ })} ${wrapStringWithLink({
139
+ href: 'https://zonos.com/docs/global-ecommerce/landed-cost/tax-remittance/european-ioss',
140
+ text: translate('Learn more.'),
141
+ })}`,
142
+ ];
123
143
  }
124
144
  const dutyDeminimis = landedCost.dutyDeminimus;
125
145
  return [
@@ -131,13 +151,15 @@ export class ZonosHelloDialog {
131
151
  };
132
152
  this.getAustraliaDutyTaxMessage = (landedCost) => {
133
153
  if (this.hasInclusivePrices()) {
134
- return [dutyTaxMessage_AU_lowValueGST];
154
+ return [];
135
155
  }
136
156
  return [
137
- translate('Duties & taxes in Australia, VAT or GST is [percentage] and is due on all orders.', {
157
+ `${translate('Due to the Australia tax law, all orders will be assessed at [percentage] GST regardless of order total.', {
138
158
  percentage: `${landedCost.vatTaxRate * 100}%`,
139
- }),
140
- dutyTaxMessage_AU_lowValueGST,
159
+ })} ${wrapStringWithLink({
160
+ href: 'https://zonos.com/docs/global-ecommerce/landed-cost/tax-remittance/australia-gst',
161
+ text: translate('Learn more.'),
162
+ })}`,
141
163
  ];
142
164
  };
143
165
  this.getNewZealandDutyTaxMessge = (landedCost) => {
@@ -145,10 +167,38 @@ export class ZonosHelloDialog {
145
167
  return null;
146
168
  }
147
169
  return [
148
- translate('[percentage] GST due on any order above [threshold] along with an import entry transaction fee and MPI levy.', {
170
+ `${translate('Due to the New Zealand tax law, all orders will be assessed at [percentage] GST regardless of order total.', {
149
171
  percentage: `${landedCost.vatTaxRate * 100}%`,
150
- threshold: currencyFormat({ amount: landedCost.vatTaxDeminimus }),
151
- }),
172
+ })} ${wrapStringWithLink({
173
+ href: 'https://zonos.com/docs/guides/country-guides/new-zealand/new-zealand-import-taxes',
174
+ text: translate('Learn more.'),
175
+ })}`,
176
+ ];
177
+ };
178
+ this.getNorwayDutyTaxMessage = (landedCost) => {
179
+ if (this.hasInclusivePrices()) {
180
+ return null;
181
+ }
182
+ return [
183
+ `${translate('Due to the VOEC tax law, all orders will be assessed at [percentage] VAT regardless of order total.', {
184
+ percentage: `${landedCost.vatTaxRate * 100}%`,
185
+ })} ${wrapStringWithLink({
186
+ href: 'https://zonos.com/docs/guides/country-guides/norway-voec-scheme',
187
+ text: translate('Learn more.'),
188
+ })}`,
189
+ ];
190
+ };
191
+ this.getSingaporeDutyTaxMessage = (landedCost) => {
192
+ if (this.hasInclusivePrices()) {
193
+ return null;
194
+ }
195
+ return [
196
+ `${translate('Due to the Singapore tax law, all orders will be assessed at [percentage] GST regardless of order total.', {
197
+ percentage: `${landedCost.vatTaxRate * 100}%`,
198
+ })} ${wrapStringWithLink({
199
+ href: 'https://zonos.com/docs/global-ecommerce/landed-cost/tax-remittance/singapore-gst-settings',
200
+ text: translate('Learn more.'),
201
+ })}`,
152
202
  ];
153
203
  };
154
204
  this.getInclusivePriceMessage = () => {
@@ -202,7 +252,15 @@ export class ZonosHelloDialog {
202
252
  return this.getAustraliaDutyTaxMessage(localizationStore.countryLandedCost);
203
253
  case 'NZ':
204
254
  return this.getNewZealandDutyTaxMessge(localizationStore.countryLandedCost);
255
+ case 'NO':
256
+ return this.getNorwayDutyTaxMessage(localizationStore.countryLandedCost);
257
+ case 'SG':
258
+ return this.getSingaporeDutyTaxMessage(localizationStore.countryLandedCost);
205
259
  default:
260
+ // show EU duty tax message if country is in EU
261
+ if (euCountryCodes.includes(localizationStore.countryLandedCost.countryCode)) {
262
+ return this.getEuDutyTaxMessage(localizationStore.countryLandedCost);
263
+ }
206
264
  // show nothing
207
265
  return null;
208
266
  }
@@ -240,18 +298,18 @@ export class ZonosHelloDialog {
240
298
  const defaultMessage = formatStringWithLinks(defaultMessageStr);
241
299
  const currentPage = this.getCurrentPageEnum();
242
300
  const filteredMessages = customMessages.filter(x => x.pageName === currentPage);
243
- return (h(Host, { key: '7b6752f327fdefb40d272d30d50a5fd208ff69a6', class: "zonos--elements" }, h("div", { key: 'b03b78ddfb3a0d6cedb156161fd82ebe45926773', class: classes([
301
+ return (h(Host, { key: '0830447fd72c987521c1790936f64948c28e368a', class: "zonos--elements" }, h("div", { key: '945b144257ac98cd3e18484b5df7c656967ed4bb', class: classes([
244
302
  'zonos--hello-dialog',
245
303
  animateLeft && 'zonos--hello-dialog-animate-from-left',
246
304
  animateFromBottom && 'zonos--hello-dialog-animate-from-bottom',
247
305
  !!this.mobileLocationOverride &&
248
306
  'zonos--hello-dialog-mobile-override',
249
307
  this.isOpen && 'zonos--hello-dialog-open',
250
- ]), inert: !this.isOpen, ref: el => el && (this.dialogRef = el) }, !this.showCountrySelect && !this.showLanguageSelect && (h("div", { key: '367b5a0158679001cb3004d5d965a518cdc3b8ce' }, h("div", { key: '01dd9b2df5b20e61764274a6405118a7b42019f3', class: "zonos--hello-dialog-content" }, h("zonos-button", { key: 'ed49fe9a95fd6ace11669ee194d90eaae951d938', class: "zonos--close-button", icon: h("zonos-icon", { "aria-label": "Close Zonos Hello dialog", content: RemoveIcon }), noBackground: true, onClick: () => this.setIsOpen(false) }), h("zonos-v-stack", { key: '23d391b8f4a13a1b077333f7ac788306dbeb98d6', spacing: 24 }, h("zonos-country-flag", { key: '24c6682b66fe5aa5061bab0b260d6c6fed724f52', class: "zonos--hello-country-flag", countryCode: selectedCountryCode }), h("zonos-v-stack", { key: 'fcb2717fa3403337b507f64adb557bd300841a41', class: "zonos--hello-dialog-header", spacing: 4 }, h("zonos-text", { key: '013fbda529816a2a1f22fc9d524d087fd69145c8', type: "boldSubheader" }, welcomeMessage), h("zonos-text", { key: '2134a015a6e22f6e02db8935150055b04620eed8', innerHTML: defaultMessage, textColor: "gray-800" })), h("zonos-v-stack", { key: '67030faaca46fea72230037b594eb3d0abb18acb', spacing: 8 }, this.restrictedItems.map(item => {
308
+ ]), inert: !this.isOpen, ref: el => el && (this.dialogRef = el) }, !this.showCountrySelect && !this.showLanguageSelect && (h("div", { key: 'd4281bee820f6f1c0128a27a68637d9cf14bb9df' }, h("div", { key: '2eb86efbcf9a69fcad628fff00d6f4834026f720', class: "zonos--hello-dialog-content" }, h("zonos-button", { key: '54c1db50880af58304586091a2c96b63d21939b9', class: "zonos--close-button", icon: h("zonos-icon", { "aria-label": "Close Zonos Hello dialog", content: RemoveIcon }), noBackground: true, onClick: () => this.setIsOpen(false) }), h("zonos-v-stack", { key: '4814c176342c0a81379e499c9e9c9fff2611ca30', spacing: 24 }, h("zonos-country-flag", { key: 'a96e2f98b8d34d9c9b85e7b1989e6c29a9efb319', class: "zonos--hello-country-flag", countryCode: selectedCountryCode }), h("zonos-v-stack", { key: 'bdfcfa7d339c007df770101d8a63433d40be6ce2', class: "zonos--hello-dialog-header", spacing: 4 }, h("zonos-text", { key: '7bebb2baef3b43444325b8755d9de41f7617a30a', type: "boldSubheader" }, welcomeMessage), h("zonos-text", { key: 'cc5e7c2dda01e545a1d85bbbb1e5cab53ab27574', innerHTML: defaultMessage, textColor: "gray-800" })), h("zonos-v-stack", { key: 'dbd3743ea89e59796b8f0a7c90eb4bf2564212ad', spacing: 8 }, this.restrictedItems.map(item => {
251
309
  var _a;
252
310
  return item && (h("zonos-banner", { bannerTitle: item.name, intent: "error" }, (_a = item.itemRestrictions) === null || _a === void 0 ? void 0 : _a.map(x => (h("zonos-text", { textColor: "red-800" }, x === null || x === void 0 ? void 0 : x.note)))));
253
- }), h("zonos-card", { key: '21d50e218fd560e137b68e6d2a16edf118d18148', spacing: "12px" }, h("zonos-v-stack", { key: '70c333afd352aee4a92b47b58c267ec5c6ff122c', spacing: 12 }, hasInclusivePrices ? (h("div", { class: "zonos--flex-message" }, h("zonos-icon", { "aria-label": "Duty de minimis", content: InclusivePricingIcon }), h("zonos-text", null, inclusivePriceMessage))) : (h(Fragment, null, h("div", { class: "zonos--flex-message" }, h("zonos-icon", { "aria-label": "Duty de minimis", content: ImportIcon }), h("zonos-text", null, dutyDeMinimisMessage)), h("div", { class: "zonos--flex-message" }, h("zonos-icon", { "aria-label": "Tax de minimis", content: MoneyIcon }), h("zonos-text", null, taxDeMinimisMessage)))), additionalInformation === null || additionalInformation === void 0 ? void 0 :
254
- additionalInformation.map(info => (h("div", { class: "zonos--flex-message" }, h("zonos-icon", { "aria-label": "Additional information for buying goods from selected country", content: BagIcon }), h("zonos-text", { innerHTML: info })))))), filteredMessages.map(x => (h("zonos-custom-message", { icon: MessageIcon, message: x.message })))))), h("zonos-hello-dialog-footer", { key: '7fa2a3e7646668c37ad2026dcfe0d59d6fd350b8', appearanceSettings: this.appearanceSettings, setShowCountrySelect: value => this.setShowCountrySelect(value), setShowLanguageSelect: value => this.setShowLanguageSelect(value) }))), this.showCountrySelect && (h("div", { key: '9a59a41f8ffbef2361ada0d5390708232c829026' }, h("zonos-country-select", { key: '3f10795b4eb5695e9848e2c69611f1a4953f5370', handleOnClose: () => this.setShowCountrySelect(false) }))), this.showLanguageSelect && (h("div", { key: 'c4aa8b2d533e6735a587fc8c7eb217f52e1fc5c9' }, h("zonos-language-select", { key: 'eb75fbe3e7de95b0459d559ac7ee233b77873545', handleOnClose: () => this.setShowLanguageSelect(false) }))))));
311
+ }), h("zonos-card", { key: '428f00f603d782b9496d40049571e3ea9dad57ba', spacing: "12px" }, h("zonos-v-stack", { key: '1433a878c9782cb57cbe85d83bdbe090d0e5d610', spacing: 12 }, hasInclusivePrices ? (h("div", { class: "zonos--flex-message" }, h("zonos-icon", { "aria-label": "Duty de minimis", content: InclusivePricingIcon }), h("zonos-text", null, inclusivePriceMessage))) : (h(Fragment, null, h("div", { class: "zonos--flex-message" }, h("zonos-icon", { "aria-label": "Duty de minimis icon", content: ImportIcon }), h("zonos-text", { "aria-label": "Duty de minimis message" }, dutyDeMinimisMessage)), h("div", { class: "zonos--flex-message" }, h("zonos-icon", { "aria-label": "Tax de minimis icon", content: MoneyIcon }), h("zonos-text", { "aria-label": "Tax de minimis message" }, taxDeMinimisMessage)))), additionalInformation === null || additionalInformation === void 0 ? void 0 :
312
+ additionalInformation.map(info => (h("div", { class: "zonos--flex-message" }, h("zonos-icon", { "aria-label": "Additional information for buying goods from selected country icon", content: BagIcon }), h("zonos-text", { "aria-label": `Additional information for buying goods from selected country message`, innerHTML: info })))))), filteredMessages.map(x => (h("zonos-custom-message", { icon: MessageIcon, message: x.message })))))), h("zonos-hello-dialog-footer", { key: '09e8b05e240cd995e16c0f736df6ef66d9fff511', appearanceSettings: this.appearanceSettings, setShowCountrySelect: value => this.setShowCountrySelect(value), setShowLanguageSelect: value => this.setShowLanguageSelect(value) }))), this.showCountrySelect && (h("div", { key: '1ed01c7f23d1b1f5a1e95d39e614e748ea407d6f' }, h("zonos-country-select", { key: 'b8c249f2e9f902e444b22371e9581be7ab34f07a', handleOnClose: () => this.setShowCountrySelect(false) }))), this.showLanguageSelect && (h("div", { key: 'cc6066e1e0eba08130342cef80ecdcd8c2e53e49' }, h("zonos-language-select", { key: 'c803df7ce92321f72d48a39eddcf1bbd3e279738', handleOnClose: () => this.setShowLanguageSelect(false) }))))));
255
313
  }
256
314
  static get is() { return "zonos-hello-dialog"; }
257
315
  static get encapsulation() { return "shadow"; }
@@ -152,8 +152,23 @@ export const stringsArabic = {
152
152
  'Due at delivery': {
153
153
  value: 'مستحق عند التسليم',
154
154
  },
155
- 'Duties & taxes in Australia, VAT or GST is [percentage] and is due on all orders.': {
156
- value: 'الرسوم والضرائب في أستراليا، ضريبة القيمة المضافة أو GST هي [percentage] وتستحق على جميع الطلبات.',
155
+ 'Due to the Australia tax law, all orders will be assessed at [percentage] GST regardless of order total.': {
156
+ value: 'بسبب قانون الضرائب الأسترالي، سيتم تقييم جميع الطلبات بنسبة [percentage] من ضريبة السلع والخدمات بغض النظر عن إجمالي الطلب.',
157
+ },
158
+ 'Due to the IOSS tax law, all orders will be assessed at [percentage] VAT regardless of order total.': {
159
+ value: 'بسبب قانون الضرائب IOSS، سيتم تقييم جميع الطلبات بنسبة [percentage] ضريبة القيمة المضافة بغض النظر عن إجمالي الطلب.',
160
+ },
161
+ 'Due to the New Zealand tax law, all orders will be assessed at [percentage] GST regardless of order total.': {
162
+ value: 'بسبب قانون الضرائب النيوزيلندي، سيتم تقييم جميع الطلبات بنسبة [percentage] من ضريبة السلع والخدمات بغض النظر عن إجمالي الطلب.',
163
+ },
164
+ 'Due to the Singapore tax law, all orders will be assessed at [percentage] GST regardless of order total.': {
165
+ value: 'بسبب قانون الضرائب في سنغافورة، سيتم تقييم جميع الطلبات بنسبة [percentage] GST بغض النظر عن إجمالي الطلب.',
166
+ },
167
+ 'Due to the UK tax law, all orders will be assessed at [percentage] VAT regardless of order total.': {
168
+ value: 'بسبب قانون الضرائب في المملكة المتحدة، سيتم تقييم جميع الطلبات بنسبة [percentage] ضريبة القيمة المضافة بغض النظر عن إجمالي الطلب.',
169
+ },
170
+ 'Due to the VOEC tax law, all orders will be assessed at [percentage] VAT regardless of order total.': {
171
+ value: 'بسبب قانون الضرائب VOEC، سيتم تقييم جميع الطلبات بنسبة [percentage] ضريبة القيمة المضافة بغض النظر عن إجمالي الطلب.',
157
172
  },
158
173
  'Duties and taxes will be applied to items and shipping.': {
159
174
  value: 'سيتم تطبيق الرسوم والضرائب على العناصر والشحن.',
@@ -464,11 +479,11 @@ export const stringsArabic = {
464
479
  'Something went wrong.': {
465
480
  value: 'حدث خطأ ما.',
466
481
  },
467
- 'Spend [threshold] duty free.': {
468
- value: 'أنفق [threshold] معفى من الرسوم الجمركية.',
482
+ 'Spend up to [threshold] duty free.': {
483
+ value: 'أنفق حتى [threshold] معفى من الرسوم الجمركية.',
469
484
  },
470
- 'Spend [threshold] tax free.': {
471
- value: 'أنفق [threshold] بدون ضرائب.',
485
+ 'Spend up to [threshold] tax free.': {
486
+ value: 'أنفق حتى [threshold] معفى من الضرائب.',
472
487
  },
473
488
  'Staging mode': {
474
489
  value: 'وضع التدريج',
@@ -626,9 +641,6 @@ export const stringsArabic = {
626
641
  Zip: {
627
642
  value: 'الرمز البريدي',
628
643
  },
629
- '[percentage] GST due on any order above [threshold] along with an import entry transaction fee and MPI levy.': {
630
- value: '[percentage] ضريبة القيمة المضافة مستحقة على أي طلب يتجاوز [threshold] بالإضافة إلى رسوم معاملة إدخال الاستيراد ورسوم MPI.',
631
- },
632
644
  '[percentage] GST due on any order above [threshold].': {
633
645
  value: '[percentage] ضريبة القيمة المضافة مستحقة على أي طلب يتجاوز [threshold].',
634
646
  },