@basis-theory/web-elements 3.0.0-beta.3 → 3.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/.vite/manifest.json +30 -8
  2. package/dist/basis-theory-sdk.es.js +1 -1
  3. package/dist/basis-theory-sdk.umd.js +1 -1
  4. package/dist/basis-theory-sdk.umd.js.map +1 -1
  5. package/dist/{create-card-DipDWgph.js → create-card-CB_YcP_4.js} +58 -20
  6. package/dist/create-card-CB_YcP_4.js.map +1 -0
  7. package/dist/create-card-display-kBupMJwe.js +280 -0
  8. package/dist/create-card-display-kBupMJwe.js.map +1 -0
  9. package/dist/create-copy-button-2XtKTEo3.js +236 -0
  10. package/dist/create-copy-button-2XtKTEo3.js.map +1 -0
  11. package/dist/{index-BBfuUaLw.js → index-Dyy7tm5Z.js} +709 -140
  12. package/dist/index-Dyy7tm5Z.js.map +1 -0
  13. package/dist/index.d.ts +1119 -0
  14. package/dist/loader/basis-theory.min.js +1 -1
  15. package/dist/sri.json +9 -9
  16. package/dist/stats.html +1 -1
  17. package/package.json +12 -12
  18. package/dist/api-client/src/api-client.d.ts +0 -11
  19. package/dist/api-client/src/api-client.d.ts.map +0 -1
  20. package/dist/api-client/src/http-client.d.ts +0 -24
  21. package/dist/api-client/src/http-client.d.ts.map +0 -1
  22. package/dist/api-client/src/index.d.ts +0 -9
  23. package/dist/api-client/src/index.d.ts.map +0 -1
  24. package/dist/api-client/src/services/sessions.d.ts +0 -19
  25. package/dist/api-client/src/services/sessions.d.ts.map +0 -1
  26. package/dist/api-client/src/services/token-intents.d.ts +0 -17
  27. package/dist/api-client/src/services/token-intents.d.ts.map +0 -1
  28. package/dist/api-client/src/services/tokens.d.ts +0 -19
  29. package/dist/api-client/src/services/tokens.d.ts.map +0 -1
  30. package/dist/api-client/src/types.d.ts +0 -313
  31. package/dist/api-client/src/types.d.ts.map +0 -1
  32. package/dist/create-card-DipDWgph.js.map +0 -1
  33. package/dist/index-BBfuUaLw.js.map +0 -1
  34. package/dist/postmessage/src/client.d.ts +0 -7
  35. package/dist/postmessage/src/client.d.ts.map +0 -1
  36. package/dist/postmessage/src/event-map.d.ts +0 -135
  37. package/dist/postmessage/src/event-map.d.ts.map +0 -1
  38. package/dist/postmessage/src/index.d.ts +0 -9
  39. package/dist/postmessage/src/index.d.ts.map +0 -1
  40. package/dist/postmessage/src/server.d.ts +0 -11
  41. package/dist/postmessage/src/server.d.ts.map +0 -1
  42. package/dist/postmessage/src/types.d.ts +0 -71
  43. package/dist/postmessage/src/types.d.ts.map +0 -1
  44. package/dist/shared/src/api-url-resolver.d.ts +0 -22
  45. package/dist/shared/src/api-url-resolver.d.ts.map +0 -1
  46. package/dist/shared/src/debug-logger.d.ts +0 -16
  47. package/dist/shared/src/debug-logger.d.ts.map +0 -1
  48. package/dist/shared/src/deep-sanitization.d.ts +0 -24
  49. package/dist/shared/src/deep-sanitization.d.ts.map +0 -1
  50. package/dist/shared/src/errors.d.ts +0 -93
  51. package/dist/shared/src/errors.d.ts.map +0 -1
  52. package/dist/shared/src/generate-id.d.ts +0 -13
  53. package/dist/shared/src/generate-id.d.ts.map +0 -1
  54. package/dist/shared/src/index.d.ts +0 -13
  55. package/dist/shared/src/index.d.ts.map +0 -1
  56. package/dist/shared/src/logger-context.d.ts +0 -25
  57. package/dist/shared/src/logger-context.d.ts.map +0 -1
  58. package/dist/web-elements/src/BasisTheory.d.ts +0 -47
  59. package/dist/web-elements/src/BasisTheory.d.ts.map +0 -1
  60. package/dist/web-elements/src/basis-theory.d.ts +0 -62
  61. package/dist/web-elements/src/basis-theory.d.ts.map +0 -1
  62. package/dist/web-elements/src/elements/create-card-number.d.ts +0 -14
  63. package/dist/web-elements/src/elements/create-card-number.d.ts.map +0 -1
  64. package/dist/web-elements/src/elements/create-card.d.ts +0 -37
  65. package/dist/web-elements/src/elements/create-card.d.ts.map +0 -1
  66. package/dist/web-elements/src/elements/create-cvv.d.ts +0 -10
  67. package/dist/web-elements/src/elements/create-cvv.d.ts.map +0 -1
  68. package/dist/web-elements/src/elements/create-expiry.d.ts +0 -10
  69. package/dist/web-elements/src/elements/create-expiry.d.ts.map +0 -1
  70. package/dist/web-elements/src/elements/create-text.d.ts +0 -13
  71. package/dist/web-elements/src/elements/create-text.d.ts.map +0 -1
  72. package/dist/web-elements/src/index.d.ts +0 -27
  73. package/dist/web-elements/src/index.d.ts.map +0 -1
  74. package/dist/web-elements/src/mounter/create-mounter.d.ts +0 -11
  75. package/dist/web-elements/src/mounter/create-mounter.d.ts.map +0 -1
  76. package/dist/web-elements/src/theme/default-theme.d.ts +0 -22
  77. package/dist/web-elements/src/theme/default-theme.d.ts.map +0 -1
  78. package/dist/web-elements/src/theme/inject-theme-dark.d.ts +0 -13
  79. package/dist/web-elements/src/theme/inject-theme-dark.d.ts.map +0 -1
  80. package/dist/web-elements/src/theme/inject-theme.d.ts +0 -20
  81. package/dist/web-elements/src/theme/inject-theme.d.ts.map +0 -1
  82. package/dist/web-elements/src/types/events.d.ts +0 -137
  83. package/dist/web-elements/src/types/events.d.ts.map +0 -1
  84. package/dist/web-elements/src/types/theme.d.ts +0 -91
  85. package/dist/web-elements/src/types/theme.d.ts.map +0 -1
  86. package/dist/web-elements/src/types.d.ts +0 -537
  87. package/dist/web-elements/src/types.d.ts.map +0 -1
  88. package/dist/web-elements/src/utils/create-event-dispatcher.d.ts +0 -47
  89. package/dist/web-elements/src/utils/create-event-dispatcher.d.ts.map +0 -1
  90. package/dist/web-elements/src/utils/create-iframe.d.ts +0 -10
  91. package/dist/web-elements/src/utils/create-iframe.d.ts.map +0 -1
  92. package/dist/web-elements/src/utils/resolve-element-references.d.ts +0 -20
  93. package/dist/web-elements/src/utils/resolve-element-references.d.ts.map +0 -1
  94. package/dist/web-elements/src/utils/validate-element-options.d.ts +0 -11
  95. package/dist/web-elements/src/utils/validate-element-options.d.ts.map +0 -1
  96. package/dist/web-elements/src/utils/validate-sdk-config.d.ts +0 -15
  97. package/dist/web-elements/src/utils/validate-sdk-config.d.ts.map +0 -1
  98. package/dist/web-elements/src/utils/warn-unknown-keys.d.ts +0 -15
  99. package/dist/web-elements/src/utils/warn-unknown-keys.d.ts.map +0 -1
  100. package/dist/web-elements/src/version.d.ts +0 -25
  101. package/dist/web-elements/src/version.d.ts.map +0 -1
@@ -1,313 +0,0 @@
1
- /**
2
- * BasisTheory API Client Types
3
- *
4
- * Type definitions for HTTP client, tokenization, and BIN lookup services
5
- */
6
- /**
7
- * HTTP Client Configuration
8
- */
9
- export interface HttpClientConfig {
10
- /** BasisTheory API key */
11
- apiKey: string;
12
- /** Base URL for API requests (default: https://api.basistheory.com) */
13
- baseUrl?: string;
14
- /** Request timeout in milliseconds (default: 30000) */
15
- timeout?: number;
16
- /** Number of retry attempts (default: 3) */
17
- retries?: number;
18
- /** Initial retry delay in milliseconds (default: 1000, exponential backoff) */
19
- retryDelay?: number;
20
- /** Enable response caching for GET requests (default: false) */
21
- cache?: boolean;
22
- /** Enable debug logging (default: false) */
23
- debug?: boolean;
24
- }
25
- /**
26
- * HTTP Request Options
27
- */
28
- export interface RequestOptions {
29
- /** HTTP method */
30
- method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
31
- /** Request headers */
32
- headers?: Record<string, string>;
33
- /** Request body */
34
- body?: unknown;
35
- /** Request timeout (overrides config timeout) */
36
- timeout?: number;
37
- /** Skip caching for this request */
38
- skipCache?: boolean;
39
- /** Override API key for this request (e.g., session key) */
40
- apiKey?: string;
41
- /** Idempotency key for safe retries */
42
- idempotencyKey?: string;
43
- }
44
- /**
45
- * HTTP Response
46
- */
47
- export interface HttpResponse<T = unknown> {
48
- /** Response data */
49
- data: T;
50
- /** HTTP status code */
51
- status: number;
52
- /** Response headers */
53
- headers: Headers;
54
- /** Whether response was from cache */
55
- cached: boolean;
56
- }
57
- /**
58
- * HTTP Error
59
- */
60
- export interface HttpError extends Error {
61
- /** HTTP status code */
62
- status?: number;
63
- /** Error response body */
64
- body?: unknown;
65
- /** Number of retry attempts made */
66
- retryCount?: number;
67
- }
68
- /**
69
- * Token Data (for tokenization)
70
- */
71
- export interface TokenData {
72
- /** Token type (e.g., 'card', 'bank', 'generic') */
73
- type?: string;
74
- /** Sensitive data to tokenize */
75
- data: Record<string, unknown>;
76
- /** Token ID (for update operations) */
77
- id?: string;
78
- /** Token metadata */
79
- metadata?: Record<string, string>;
80
- /** Token search indexes */
81
- search_indexes?: string[];
82
- /** Fingerprint expression */
83
- fingerprint_expression?: string;
84
- /** Mask expression */
85
- mask?: unknown;
86
- /** Deduplicate token */
87
- deduplicate_token?: boolean;
88
- /** Token containers */
89
- containers?: string[];
90
- }
91
- /**
92
- * Token Response (snake_case matches BasisTheory API)
93
- */
94
- export interface Token {
95
- /** Token ID */
96
- id: string;
97
- /** Token type */
98
- type: string;
99
- /** Tenant ID (snake_case) */
100
- tenant_id: string;
101
- /** Masked data (snake_case) */
102
- data?: Record<string, unknown>;
103
- /** Token metadata (snake_case) */
104
- metadata?: Record<string, string>;
105
- /** Creation timestamp (snake_case) */
106
- created_at: string;
107
- /** Created by application ID (snake_case) */
108
- created_by?: string;
109
- /** Modified timestamp (snake_case) */
110
- modified_at?: string;
111
- /** Modified by application ID (snake_case) */
112
- modified_by?: string;
113
- /** Fingerprint */
114
- fingerprint?: string;
115
- /** Token containers */
116
- containers?: string[];
117
- /** Search indexes (snake_case) */
118
- search_indexes?: string[];
119
- /** Fingerprint expression (snake_case) */
120
- fingerprint_expression?: string;
121
- }
122
- /**
123
- * Tokenize Request
124
- */
125
- export interface TokenizeRequest extends Omit<TokenData, 'id'> {
126
- }
127
- /**
128
- * Token Create Request
129
- */
130
- export interface TokenCreateRequest extends TokenData {
131
- }
132
- /**
133
- * Token Update Request
134
- */
135
- export interface TokenUpdateRequest {
136
- /** Updated data */
137
- data?: Record<string, unknown>;
138
- /** Updated metadata */
139
- metadata?: Record<string, string>;
140
- /** Updated search indexes */
141
- search_indexes?: string[];
142
- /** Updated mask */
143
- mask?: unknown;
144
- /** Updated fingerprint expression */
145
- fingerprint_expression?: string;
146
- /** Updated containers */
147
- containers?: string[];
148
- }
149
- /**
150
- * Token Intent Create Request
151
- */
152
- export interface TokenIntentCreateRequest {
153
- /** Token type (e.g., 'card', 'bank') */
154
- type: string;
155
- /** Sensitive data to validate */
156
- data: Record<string, unknown>;
157
- }
158
- /**
159
- * Token Intent Response
160
- */
161
- export interface TokenIntent {
162
- /** Token Intent ID */
163
- id: string;
164
- /** Tenant ID */
165
- tenant_id: string;
166
- /** Token type */
167
- type: string;
168
- /** Intent status (e.g. 'created') */
169
- status?: string;
170
- /** Card details (when type is 'card') */
171
- card?: {
172
- bin?: string;
173
- last4?: string;
174
- expiration_month?: number;
175
- expiration_year?: number;
176
- brand?: string;
177
- funding?: string;
178
- issuer_country?: {
179
- alpha2?: string;
180
- name?: string;
181
- numeric?: string;
182
- };
183
- authentication?: string;
184
- };
185
- /** Bank details (when type is 'bank') */
186
- bank?: {
187
- routing_number?: string;
188
- account_number_last4?: string;
189
- };
190
- /** Fingerprint */
191
- fingerprint?: string;
192
- /** Created by application ID */
193
- created_by?: string;
194
- /** Creation timestamp */
195
- created_at: string;
196
- /** Expiration timestamp */
197
- expires_at: string;
198
- }
199
- /**
200
- * BIN Lookup Response
201
- */
202
- export interface BinInfo {
203
- /** BIN (first 6 digits) */
204
- bin: string;
205
- /** Card brand (e.g., 'visa', 'mastercard') */
206
- card_brand?: string;
207
- /** Card type (e.g., 'debit', 'credit', 'prepaid') */
208
- card_type?: 'debit' | 'credit' | 'prepaid' | 'unknown';
209
- /** Issuing country (ISO 3166-1 alpha-2) */
210
- country?: string;
211
- /** Issuing bank name */
212
- bank?: string;
213
- /** Card product name */
214
- product?: string;
215
- /** Supported networks (for co-badged cards) */
216
- networks?: string[];
217
- /** Card level (e.g., 'standard', 'gold', 'platinum') */
218
- card_level?: string;
219
- }
220
- /**
221
- * Session Response (snake_case matches BasisTheory API)
222
- */
223
- export interface Session {
224
- /** Session API key - use this for authenticating API calls after authorization */
225
- session_key: string;
226
- /** Session nonce - used to authorize the session */
227
- nonce: string;
228
- /** Session expiration timestamp (ISO 8601) */
229
- expires_at?: string;
230
- }
231
- /**
232
- * Proxy Request
233
- */
234
- export interface ProxyRequest {
235
- /** HTTP method */
236
- method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
237
- /** Request headers */
238
- headers?: Record<string, string>;
239
- /** Request body */
240
- body?: unknown;
241
- }
242
- /**
243
- * Cache Entry
244
- */
245
- export interface CacheEntry<T = unknown> {
246
- /** Cached data */
247
- data: T;
248
- /** Cache timestamp */
249
- timestamp: number;
250
- /** Cache TTL in milliseconds */
251
- ttl: number;
252
- }
253
- /**
254
- * BasisTheory API Client Interface
255
- */
256
- export interface BasisTheoryClient {
257
- /**
258
- * Token operations
259
- */
260
- tokens: {
261
- /**
262
- * Create a new token
263
- */
264
- create: (data: TokenCreateRequest, options?: RequestOptions) => Promise<Token>;
265
- /**
266
- * Update an existing token
267
- */
268
- update: (id: string, data: TokenUpdateRequest, options?: RequestOptions) => Promise<Token>;
269
- /**
270
- * Retrieve a token by ID
271
- */
272
- retrieve: (id: string, options?: RequestOptions) => Promise<Token>;
273
- };
274
- /**
275
- * Token Intent operations
276
- */
277
- tokenIntents: {
278
- /**
279
- * Create a new token intent
280
- */
281
- create: (data: TokenIntentCreateRequest, options?: RequestOptions) => Promise<TokenIntent>;
282
- /**
283
- * Retrieve a token intent by ID
284
- */
285
- get: (id: string, options?: RequestOptions) => Promise<TokenIntent>;
286
- };
287
- /**
288
- * Session operations
289
- */
290
- sessions: {
291
- /**
292
- * Create a new session for temporary elevated access
293
- */
294
- create: (options?: RequestOptions) => Promise<Session>;
295
- };
296
- /**
297
- * Tokenize data (simplified token creation)
298
- */
299
- tokenize: (data: TokenizeRequest, options?: RequestOptions) => Promise<Token>;
300
- /**
301
- * BIN lookup
302
- */
303
- binLookup: (bin: string, options?: RequestOptions) => Promise<BinInfo>;
304
- /**
305
- * Proxy request through BasisTheory gateway
306
- */
307
- proxy: (url: string, request: ProxyRequest, options?: RequestOptions) => Promise<unknown>;
308
- /**
309
- * Clear cache
310
- */
311
- clearCache: () => void;
312
- }
313
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../api-client/src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-card-DipDWgph.js","sources":["../src/elements/create-card.ts"],"sourcesContent":["/**\n * Card Element Factory (Unified)\n */\n\nimport type { PostMessageClient } from '@basis-theory-elements/postmessage';\nimport { createPostMessageClient } from '@basis-theory-elements/postmessage';\nimport { ElementError, log } from '@basis-theory-elements/shared';\nimport { createMounter } from '../mounter/create-mounter';\nimport type {\n CardElement,\n ElementMounter,\n ElementOptions,\n EventListener,\n EventType,\n SDKConfig,\n SubElementRef,\n} from '../types';\nimport { createIframe } from '../utils/create-iframe';\nimport { createEventDispatcher } from '../utils/create-event-dispatcher';\n\n/**\n * Default stack threshold in pixels for CardElement auto-layout\n * When container width is below this threshold, card inputs stack vertically\n */\nconst DEFAULT_CARD_STACK_THRESHOLD = 400;\n\n/**\n * Card element options\n */\nexport interface CardElementOptions {\n /** CSS styling */\n style?: Record<string, any>;\n\n /** Placeholder text for each sub-field */\n placeholder?: {\n cardNumber?: string;\n expiryDate?: string;\n cvc?: string;\n };\n\n /** Accessibility label */\n ariaLabel?: string;\n\n /** Disabled state (applies to all 3 sub-fields) */\n disabled?: boolean;\n\n /** Read-only state (applies to all 3 sub-fields) */\n readOnly?: boolean;\n\n /** Layout mode */\n layout?: 'row' | 'column' | 'auto';\n\n /** Stack threshold in pixels (only applies when layout: 'auto') */\n stackAt?: number;\n\n /** Icon position */\n iconPosition?: 'left' | 'right' | 'none';\n\n /** Restrict accepted card brands */\n cardBrands?: string[];\n}\n\n/**\n * Factory function to create a unified card element\n * No class, pure functional approach with closure-based state\n */\nexport const createCardElement = (\n apiKey: string,\n sdkConfig: SDKConfig,\n options: CardElementOptions = {},\n coordinatorElementId: string,\n ensureCoordinatorReady: () => Promise<void>\n): CardElement => {\n // Private state (closure)\n let iframe: HTMLIFrameElement | null = null;\n let client: PostMessageClient | null = null;\n let mounter: ElementMounter | null = null;\n let isMounted = false;\n let container: HTMLElement | null = null;\n let eventDispatcher: ReturnType<typeof createEventDispatcher> | null = null;\n\n // Event target for event emission\n const eventTarget = new EventTarget();\n\n // Use coordinator-generated ID for all references\n const id = coordinatorElementId;\n const type = 'card';\n\n // Setup event dispatcher\n const setupEventListeners = () => {\n if (!client) {\n return;\n }\n\n eventDispatcher = createEventDispatcher({\n elementType: type,\n elementId: id,\n client,\n eventTarget,\n });\n\n eventDispatcher.setupSubscriptions();\n };\n\n /**\n * Create sub-element reference for tokenization\n * These refs are used in bt.tokens.create() data payload\n */\n const createSubElementRef = (subId: string): SubElementRef => ({\n id: subId,\n type: 'card',\n get mounted() {\n return isMounted;\n },\n mount: () => {\n throw ElementError('Sub-field refs cannot be mounted independently');\n },\n unmount: () => {},\n update: () => Promise.resolve(),\n focus: () => {},\n blur: () => {},\n clear: () => {},\n on: () => () => {},\n });\n\n // Public API (Element interface with sub-field refs)\n const cardElement = {\n id,\n type,\n get mounted() {\n return isMounted;\n },\n\n // Sub-field references for tokenization\n fields: {\n number: createSubElementRef(`${id}__number`),\n expiryDate: createSubElementRef(`${id}__expiry`),\n cvc: createSubElementRef(`${id}__cvc`),\n },\n\n mount: async (selector: string | HTMLElement) => {\n if (isMounted) {\n throw ElementError('Element is already mounted');\n }\n\n // Resolve container\n container =\n typeof selector === 'string'\n ? document.querySelector(selector)\n : selector;\n\n if (!container) {\n throw ElementError(`Container not found: ${selector}`);\n }\n\n // Create iframe\n const parentOrigin = window.location.origin;\n const iframeUrl = new URL(`${sdkConfig.elementsBaseUrl}/card.html`);\n iframeUrl.searchParams.set('parentOrigin', parentOrigin);\n iframeUrl.searchParams.set('elementId', id);\n iframeUrl.searchParams.set(\n 'measurePerformance',\n String(sdkConfig.measurePerformance || false)\n );\n iframeUrl.searchParams.set('debug', String(sdkConfig.debug || false));\n\n iframe = createIframe({\n src: iframeUrl.toString(),\n sandbox: 'allow-scripts allow-same-origin',\n title: options.ariaLabel || 'Card Input',\n });\n\n // Add element ID and theme mode attributes\n iframe.setAttribute('data-bt-element-id', id);\n iframe.setAttribute('data-theme-mode', sdkConfig.themeMode || 'auto');\n\n // Create PostMessage client\n client = createPostMessageClient(iframe, {\n targetOrigin: sdkConfig.iframeOrigin,\n timeout: sdkConfig.timeoutMs,\n retries: sdkConfig.retryConfig.maxRetries,\n debug: sdkConfig.debug,\n });\n\n // Create mounter\n mounter = createMounter();\n\n // Set up event listeners\n setupEventListeners();\n\n // Subscribe to 'ready' event BEFORE mounting iframe\n const readyPromise = new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(\n ElementError(\n `Iframe EVENT_READY not received within ${sdkConfig.timeoutMs}ms`,\n id,\n { elementType: type, timeoutMs: sdkConfig.timeoutMs }\n )\n );\n }, sdkConfig.timeoutMs);\n\n const handleReady = () => {\n clearTimeout(timeout);\n resolve();\n };\n\n eventTarget.addEventListener('ready', handleReady, { once: true });\n });\n\n // Mount iframe to DOM (synchronous)\n mounter.mount(container, iframe, {\n timeoutMs: sdkConfig.timeoutMs,\n });\n\n isMounted = true;\n\n // Wait for coordinator + configuration to complete\n try {\n // Wait for coordinator (loads Core SDK if needed)\n await ensureCoordinatorReady();\n\n // Wait for EVENT_READY\n await readyPromise;\n\n // Send initial configuration with card-specific options\n await client!.sendRequest('CMD_SET_CONFIG', {\n elementId: id,\n apiKey,\n apiTimeout: sdkConfig.timeoutMs,\n apiRetries: sdkConfig.retryConfig.maxRetries,\n theme: sdkConfig.theme,\n darkTheme: sdkConfig.darkTheme,\n themeMode: sdkConfig.themeMode,\n placeholder: options.placeholder,\n style: options.style,\n disabled: options.disabled,\n readOnly: options.readOnly,\n layout: options.layout || 'auto',\n stackAt: options.stackAt || DEFAULT_CARD_STACK_THRESHOLD,\n iconPosition: options.iconPosition || 'left',\n cardBrands: options.cardBrands,\n debug: sdkConfig.debug,\n });\n\n // Reveal iframe now that theme is fully applied\n if (iframe) iframe.style.opacity = '1';\n } catch (error) {\n // Dispatch error event before cleanup\n if (eventDispatcher) {\n eventDispatcher.dispatchError(\n 'MOUNT_ERROR',\n (error as Error).message,\n error as Error\n );\n }\n\n // Mount failed - clean up and mark as unmounted\n isMounted = false;\n\n if (client) {\n client.destroy();\n client = null;\n }\n\n if (mounter && iframe) {\n mounter.unmount(iframe);\n iframe = null;\n mounter = null;\n }\n\n eventDispatcher = null;\n container = null;\n\n throw error;\n }\n },\n\n unmount: () => {\n if (!isMounted) {\n throw ElementError('Element is not mounted');\n }\n\n // Tell iframe to notify coordinator to clear cached values (all 3 sub-fields)\n if (client) {\n client.sendRequest('CMD_CLEAR_CACHE', {}).catch((error) => {\n log('Failed to send clear cache command', {\n elementId: id,\n error: (error as Error).message,\n });\n });\n\n client.destroy();\n client = null;\n }\n\n if (mounter && iframe) {\n mounter.unmount(iframe);\n iframe = null;\n mounter = null;\n }\n\n eventDispatcher = null;\n container = null;\n isMounted = false;\n },\n\n update: async (newOptions: Partial<ElementOptions> & { themeMode?: string }) => {\n if (!isMounted || !client) {\n throw ElementError('Element must be mounted before updating');\n }\n\n // Cast to CardElementOptions to access card-specific properties\n const cardOptions = newOptions as Partial<CardElementOptions> & { themeMode?: string };\n\n // Build update payload\n const updatePayload: Record<string, any> = {\n placeholder: cardOptions.placeholder,\n style: cardOptions.style,\n disabled: cardOptions.disabled,\n readOnly: cardOptions.readOnly,\n layout: cardOptions.layout,\n stackAt: cardOptions.stackAt,\n iconPosition: cardOptions.iconPosition,\n cardBrands: cardOptions.cardBrands,\n };\n\n // Include theme mode update if provided\n if (newOptions.themeMode !== undefined) {\n updatePayload.themeMode = newOptions.themeMode;\n updatePayload.theme = sdkConfig.theme;\n updatePayload.darkTheme = sdkConfig.darkTheme;\n }\n\n await client.sendRequest('CMD_UPDATE_CONFIG', updatePayload);\n },\n\n focus: () => {\n if (!isMounted || !client) {\n throw ElementError('Element must be mounted before focusing');\n }\n\n client.sendRequest('CMD_FOCUS', {});\n },\n\n blur: () => {\n if (!isMounted || !client) {\n throw ElementError('Element must be mounted before blurring');\n }\n\n client.sendRequest('CMD_BLUR', {});\n },\n\n clear: () => {\n if (!isMounted || !client) {\n throw ElementError('Element must be mounted before clearing');\n }\n\n client.sendRequest('CMD_CLEAR', {});\n },\n\n on: (eventType: EventType, listener: EventListener) => {\n eventTarget.addEventListener(\n eventType,\n listener as EventListenerOrEventListenerObject\n );\n\n // Return unsubscribe function\n return () =>\n eventTarget.removeEventListener(\n eventType,\n listener as EventListenerOrEventListenerObject\n );\n },\n };\n\n return cardElement as CardElement;\n};\n"],"names":[],"mappings":"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"}