@idonatedev/idonate-sdk 1.2.0-dev7 → 1.2.0-dev9

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.
@@ -21,16 +21,19 @@ const tokenizer_utils_1 = require("./tokenizer-utils");
21
21
  const SPREEDLY_SCRIPT_URL = 'https://core.spreedly.com/iframe/iframe-v1.min.js';
22
22
  const SPREEDLY_SCRIPT_ID = 'spreedly-iframe-script';
23
23
  class SpreedlyTokenizer extends Tokenizer_1.Tokenizer {
24
- constructor(environmentKey, containerId, styles, mode = 'credit_card', bankCountry = 'US', enableTestMode = false, layout = 'single-line') {
24
+ constructor(environmentKey, containerId, styles, mode = 'credit_card', bankCountry = 'US', enableTestMode = false, layout = 'single-line', responsiveBreakpoint = tokenizer_constants_1.RESPONSIVE_BREAKPOINT) {
25
25
  super();
26
26
  this.environmentKey = environmentKey;
27
27
  this.containerId = containerId;
28
28
  this.layout = layout;
29
29
  this.bankCountry = 'US';
30
30
  this.enableTestMode = false;
31
+ this.effectiveLayout = 'single-line';
32
+ this.responsiveBreakpoint = tokenizer_constants_1.RESPONSIVE_BREAKPOINT;
31
33
  this.mode = mode;
32
34
  this.bankCountry = bankCountry;
33
35
  this.enableTestMode = enableTestMode;
36
+ this.responsiveBreakpoint = responsiveBreakpoint;
34
37
  if (mode === 'credit_card') {
35
38
  const SpreedlyFrame = window.SpreedlyPaymentFrame;
36
39
  if (SpreedlyFrame) {
@@ -77,7 +80,7 @@ class SpreedlyTokenizer extends Tokenizer_1.Tokenizer {
77
80
  if (!environmentKey) {
78
81
  environmentKey = '';
79
82
  }
80
- const tokenizer = new SpreedlyTokenizer(environmentKey, container.containerId, container.styling, container.mode || 'credit_card', container.bankCountry || 'US', container.enableTestMode || false, container.layout || 'single-line');
83
+ const tokenizer = new SpreedlyTokenizer(environmentKey, container.containerId, container.styling, container.mode || 'credit_card', container.bankCountry || 'US', container.enableTestMode || false, container.layout || 'single-line', container.responsiveBreakpoint || tokenizer_constants_1.RESPONSIVE_BREAKPOINT);
81
84
  tokenizer.organizationId = config.organizationId;
82
85
  tokenizer.embedId = config.embedId;
83
86
  tokenizer.clientConfig = config.clientConfig;
@@ -683,7 +686,64 @@ class SpreedlyTokenizer extends Tokenizer_1.Tokenizer {
683
686
  element === null || element === void 0 ? void 0 : element.focus();
684
687
  }
685
688
  }
689
+ determineLayout(width) {
690
+ return width < this.responsiveBreakpoint ? 'two-line' : 'single-line';
691
+ }
692
+ setupResizeObserver() {
693
+ if (this.layout !== 'responsive')
694
+ return;
695
+ const container = document.getElementById(this.containerId);
696
+ if (!container)
697
+ return;
698
+ let debounceTimer;
699
+ this.resizeObserver = new ResizeObserver((entries) => {
700
+ clearTimeout(debounceTimer);
701
+ debounceTimer = setTimeout(() => {
702
+ const newWidth = entries[0].contentRect.width;
703
+ const newLayout = this.determineLayout(newWidth);
704
+ if (newLayout !== this.effectiveLayout) {
705
+ this.applyLayoutStyles(newLayout);
706
+ }
707
+ }, 100);
708
+ });
709
+ this.resizeObserver.observe(container);
710
+ }
711
+ applyLayoutStyles(newLayout) {
712
+ this.effectiveLayout = newLayout;
713
+ const container = document.getElementById(this.containerId);
714
+ if (!container)
715
+ return;
716
+ if (newLayout === 'two-line') {
717
+ container.style.flexWrap = 'wrap';
718
+ if (this.cardNumberDiv) {
719
+ this.cardNumberDiv.style.flex = '1';
720
+ this.cardNumberDiv.style.flexBasis = '100%';
721
+ }
722
+ if (this.expiryEl) {
723
+ this.expiryEl.style.flex = '1';
724
+ this.expiryEl.style.flexBasis = 'auto';
725
+ }
726
+ if (this.cvvDiv) {
727
+ this.cvvDiv.style.flex = '1';
728
+ this.cvvDiv.style.flexBasis = 'auto';
729
+ }
730
+ }
731
+ else {
732
+ container.style.flexWrap = 'nowrap';
733
+ if (this.cardNumberDiv) {
734
+ this.cardNumberDiv.style.flex = tokenizer_constants_1.FIELD_FLEX.cardNumber.flex;
735
+ }
736
+ if (this.expiryEl) {
737
+ this.expiryEl.style.flex = tokenizer_constants_1.FIELD_FLEX.expiry.flex;
738
+ }
739
+ if (this.cvvDiv) {
740
+ this.cvvDiv.style.flex = tokenizer_constants_1.FIELD_FLEX.cvv.flex;
741
+ }
742
+ }
743
+ }
686
744
  destroy() {
745
+ var _a;
746
+ (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
687
747
  if (this.spreedly && this.spreedly.removeHandlers) {
688
748
  this.spreedly.removeHandlers();
689
749
  }
@@ -760,10 +820,18 @@ class SpreedlyTokenizer extends Tokenizer_1.Tokenizer {
760
820
  }
761
821
  }
762
822
  createCreditCardFields(container) {
763
- if (this.layout === 'two-line') {
823
+ if (this.layout === 'responsive') {
824
+ this.effectiveLayout = this.determineLayout(container.offsetWidth);
825
+ }
826
+ else {
827
+ this.effectiveLayout =
828
+ this.layout === 'two-line' ? 'two-line' : 'single-line';
829
+ }
830
+ if (this.effectiveLayout === 'two-line' && this.layout !== 'responsive') {
764
831
  const cardNumberDiv = (0, tokenizer_utils_1.createFieldContainer)(this.numberEl, '1', tokenizer_constants_1.FIELD_FLEX.cardNumber.minWidth);
765
832
  cardNumberDiv.style.height = this.mergedStyles.input.height;
766
833
  cardNumberDiv.style.flexBasis = '100%';
834
+ this.cardNumberDiv = cardNumberDiv;
767
835
  container.appendChild(cardNumberDiv);
768
836
  this.expiryEl = (0, tokenizer_utils_1.createInputElement)(this.expiryId, 'text', tokenizer_constants_1.PLACEHOLDERS.expiry, tokenizer_constants_1.FIELD_CONSTRAINTS.expiry.maxLength);
769
837
  Object.assign(this.expiryEl.style, {
@@ -784,11 +852,13 @@ class SpreedlyTokenizer extends Tokenizer_1.Tokenizer {
784
852
  container.appendChild(this.expiryEl);
785
853
  const cvvDiv = (0, tokenizer_utils_1.createFieldContainer)(this.cvvEl, '1', tokenizer_constants_1.FIELD_FLEX.cvv.minWidth);
786
854
  cvvDiv.style.height = this.mergedStyles.input.height;
855
+ this.cvvDiv = cvvDiv;
787
856
  container.appendChild(cvvDiv);
788
857
  }
789
858
  else {
790
859
  const cardNumberDiv = (0, tokenizer_utils_1.createFieldContainer)(this.numberEl, tokenizer_constants_1.FIELD_FLEX.cardNumber.flex, tokenizer_constants_1.FIELD_FLEX.cardNumber.minWidth);
791
860
  cardNumberDiv.style.height = this.mergedStyles.input.height;
861
+ this.cardNumberDiv = cardNumberDiv;
792
862
  container.appendChild(cardNumberDiv);
793
863
  this.expiryEl = (0, tokenizer_utils_1.createInputElement)(this.expiryId, 'text', tokenizer_constants_1.PLACEHOLDERS.expiry, tokenizer_constants_1.FIELD_CONSTRAINTS.expiry.maxLength);
794
864
  Object.assign(this.expiryEl.style, {
@@ -809,7 +879,12 @@ class SpreedlyTokenizer extends Tokenizer_1.Tokenizer {
809
879
  container.appendChild(this.expiryEl);
810
880
  const cvvDiv = (0, tokenizer_utils_1.createFieldContainer)(this.cvvEl, tokenizer_constants_1.FIELD_FLEX.cvv.flex, tokenizer_constants_1.FIELD_FLEX.cvv.minWidth);
811
881
  cvvDiv.style.height = this.mergedStyles.input.height;
882
+ this.cvvDiv = cvvDiv;
812
883
  container.appendChild(cvvDiv);
884
+ if (this.layout === 'responsive') {
885
+ this.applyLayoutStyles(this.effectiveLayout);
886
+ this.setupResizeObserver();
887
+ }
813
888
  }
814
889
  }
815
890
  createBankAccountFields(container) {
@@ -1,4 +1,4 @@
1
1
  import { TokenizerStyling, TokenizerStylingComplete } from './types';
2
2
  export declare const DEFAULT_UNIFIED_STYLES: TokenizerStylingComplete;
3
3
  export declare function mergeStyles(defaults: TokenizerStylingComplete, userStyles?: TokenizerStyling): TokenizerStylingComplete;
4
- export declare function getContainerStylesForLayout(baseStyles: TokenizerStylingComplete, layout?: 'single-line' | 'two-line'): TokenizerStylingComplete;
4
+ export declare function getContainerStylesForLayout(baseStyles: TokenizerStylingComplete, layout?: 'single-line' | 'two-line' | 'responsive'): TokenizerStylingComplete;
@@ -32,6 +32,11 @@ exports.DEFAULT_UNIFIED_STYLES = {
32
32
  flexWrap: 'nowrap',
33
33
  rowGap: '1rem',
34
34
  },
35
+ twoLine: {
36
+ padding: '',
37
+ fontSize: '',
38
+ textAlign: '',
39
+ },
35
40
  };
36
41
  function mergeStyles(defaults, userStyles) {
37
42
  if (!userStyles)
@@ -41,6 +46,7 @@ function mergeStyles(defaults, userStyles) {
41
46
  focus: Object.assign(Object.assign({}, defaults.focus), userStyles.focus),
42
47
  error: Object.assign(Object.assign({}, defaults.error), userStyles.error),
43
48
  container: Object.assign(Object.assign({}, defaults.container), userStyles.container),
49
+ twoLine: Object.assign(Object.assign({}, defaults.twoLine), userStyles.twoLine),
44
50
  };
45
51
  }
46
52
  function getContainerStylesForLayout(baseStyles, layout = 'single-line') {
@@ -60,3 +60,4 @@ export declare const FIELD_CONSTRAINTS: {
60
60
  readonly maxLength: 4;
61
61
  };
62
62
  };
63
+ export declare const RESPONSIVE_BREAKPOINT = 400;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FIELD_CONSTRAINTS = exports.PLACEHOLDERS = exports.CANADIAN_BANK_FIELD_FLEX = exports.BANK_FIELD_FLEX = exports.FIELD_FLEX = exports.TOKENIZE_TIMEOUT = exports.INIT_TIMEOUT = void 0;
3
+ exports.RESPONSIVE_BREAKPOINT = exports.FIELD_CONSTRAINTS = exports.PLACEHOLDERS = exports.CANADIAN_BANK_FIELD_FLEX = exports.BANK_FIELD_FLEX = exports.FIELD_FLEX = exports.TOKENIZE_TIMEOUT = exports.INIT_TIMEOUT = void 0;
4
4
  exports.INIT_TIMEOUT = 10000;
5
5
  exports.TOKENIZE_TIMEOUT = 30000;
6
6
  exports.FIELD_FLEX = {
@@ -63,3 +63,4 @@ exports.FIELD_CONSTRAINTS = {
63
63
  maxLength: 4,
64
64
  },
65
65
  };
66
+ exports.RESPONSIVE_BREAKPOINT = 400;
@@ -18,7 +18,8 @@ export interface TokenizerContainer {
18
18
  mode?: PaymentMethodMode;
19
19
  bankCountry?: 'US' | 'CA';
20
20
  enableTestMode?: boolean;
21
- layout?: 'single-line' | 'two-line';
21
+ layout?: 'single-line' | 'two-line' | 'responsive';
22
+ responsiveBreakpoint?: number;
22
23
  }
23
24
  export interface TokenizerStylingComplete {
24
25
  input: {
@@ -52,6 +53,11 @@ export interface TokenizerStylingComplete {
52
53
  flexWrap?: string;
53
54
  rowGap?: string;
54
55
  };
56
+ twoLine: {
57
+ padding: string;
58
+ fontSize: string;
59
+ textAlign: string;
60
+ };
55
61
  }
56
62
  type DeepPartial<T> = T extends object ? {
57
63
  [P in keyof T]?: DeepPartial<T[P]>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@idonatedev/idonate-sdk",
3
3
  "author": "iDonate",
4
- "version": "1.2.0-dev7",
4
+ "version": "1.2.0-dev9",
5
5
  "sideEffects": false,
6
6
  "description": "iDonate Web SDK",
7
7
  "engines": {
@@ -89,5 +89,6 @@
89
89
  "@types/spreedly-iframe-browser": "^1.0.3",
90
90
  "@types/uuid": "^8.3.1",
91
91
  "uuid": "^8.3.2"
92
- }
92
+ },
93
+ "packageManager": "pnpm@10.15.1+sha512.34e538c329b5553014ca8e8f4535997f96180a1d0f614339357449935350d924e22f8614682191264ec33d1462ac21561aff97f6bb18065351c162c7e8f6de67"
93
94
  }