@maytes/checkout-button 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +50 -28
- package/README.md +40 -20
- package/dist/{checkout-button.2a6f6a35.cjs → checkout-button.6d259930.cjs} +5 -2
- package/dist/{checkout-button.2a6f6a35.cjs.map → checkout-button.6d259930.cjs.map} +1 -1
- package/dist/{checkout-button.5403f24b.mjs → checkout-button.81ea2037.mjs} +5 -2
- package/dist/{checkout-button.5403f24b.mjs.map → checkout-button.81ea2037.mjs.map} +1 -1
- package/dist/{checkout-button.3cf081dc.js → checkout-button.8c71493e.js} +2 -2
- package/dist/{checkout-button.3cf081dc.js.map → checkout-button.8c71493e.js.map} +1 -1
- package/dist/checkout-button.cjs +5 -2
- package/dist/checkout-button.cjs.map +1 -1
- package/dist/checkout-button.d.cts +1 -1
- package/dist/checkout-button.d.ts +1 -1
- package/dist/checkout-button.js +2 -2
- package/dist/checkout-button.js.map +1 -1
- package/dist/checkout-button.mjs +5 -2
- package/dist/checkout-button.mjs.map +1 -1
- package/dist/integrity.json +26 -26
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/foundation/brand.generated.ts","../src/branding.ts","../src/errors.ts","../src/overlay.ts","../src/env.ts","../src/redirect.ts","../src/version.ts","../src/styles.ts","../src/button.ts","../src/state.ts","../src/maytes.ts"],"sourcesContent":["import { Maytes } from './maytes.js';\n\nif (typeof window !== 'undefined') {\n (window as unknown as { Maytes: typeof Maytes }).Maytes = Maytes;\n}\n\nexport { Maytes };\nexport { MaytesError, MaytesErrorCode } from './errors.js';\nexport type { MaytesErrorCodeValue } from './errors.js';\nexport type {\n CheckoutUrlOptions,\n CreateCheckoutFn,\n MaytesEnvironment,\n MaytesFactory,\n MaytesInternalOptions,\n MaytesOptions,\n MaytesSDK,\n RedirectOptions,\n RenderButtonCleanup,\n RenderButtonMode,\n RenderButtonOptions,\n} from './types.js';\nexport { SDK_VERSION } from './version.js';\n","// GENERATED by scripts/sync-foundation-tokens.mjs from kttipay/designsystem v0.3.0 web/tokens.ts — DO NOT EDIT. Refresh: npm run sync:foundation -- --tag vX.Y.Z\n\n// Subset of the foundation used by the checkout button and the mock showcase:\n// brand.primary <- colorsLight.brand.primary (burgundy/600)\n// brand.secondary <- colorsLight.brand.secondary (orange/500)\n// palette.burgundy.700 <- palette.burgundy.700 (hover shade for brand.primary)\n// palette.base.white <- palette.base.white\n// text.primaryInverse <- colorsLight.text.primaryInverse (text on brand.primary)\n\nexport const FOUNDATION_TAG = 'v0.3.0';\n\nexport const foundation = {\n brand: {\n primary: '#4A0324',\n secondary: '#FE572A',\n },\n palette: {\n burgundy: {\n 700: '#3B021D',\n },\n base: {\n white: '#FFFFFF',\n },\n },\n text: {\n primaryInverse: '#FFFFFF',\n },\n} as const;\n","import { foundation } from './foundation/brand.generated.js';\n\nexport const MAYTES_RICHE = foundation.brand.primary;\nexport const MAYTES_WALLET = foundation.brand.secondary;\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nconst MAYTES_LOGO_PATHS: readonly string[] = [\n 'M392,6.11c-.3-1.61-1.72-2.79-3.38-2.79h-99.97c-1.66,0-3.09,1.19-3.38,2.79l-51.14,275.49c-.36,2.07,1.24,4.03,3.38,4.03h71.07c1.72,0,3.15-1.24,3.38-2.97l5.57-42.24c.23-1.72,1.66-2.97,3.38-2.97h32.45c1.72,0,3.15,1.24,3.38,2.97l5.57,42.24c.23,1.72,1.66,2.97,3.38,2.97h74.46c2.14,0,3.8-1.96,3.38-4.03L392,6.11ZM344.42,174.89h-14.59c-2.07,0-3.62-1.84-3.38-3.86l9.55-74.33c.06-.48.48-.83.95-.83s.89.35.95.83l9.91,74.33c.3,2.02-1.31,3.86-3.38,3.86h0Z',\n 'M218.86,3.32h-77.72c-1.48,0-2.85,1.01-3.27,2.44l-25.63,83.65c-.12.35-.41.6-.83.6s-.71-.23-.83-.6L84.9,5.76c-.41-1.42-1.78-2.44-3.27-2.44H3.44c-1.9,0-3.44,1.54-3.44,3.44v275.43c0,1.9,1.54,3.45,3.44,3.45h71.26c1.9,0,3.44-1.54,3.44-3.45v-77.3l-.83-51.44c0-.53.41-.95.95-.95.41,0,.77.3.89.71l14.42,59.62c.35,1.54,1.72,2.61,3.32,2.61h28.42c1.61,0,2.97-1.06,3.32-2.61l14.47-59.79c.12-.3.35-.53.71-.53.41,0,.71.3.71.71l-.42,51.67-.06.06v77.3c0,1.9,1.54,3.44,3.44,3.44h71.37c1.9,0,3.44-1.54,3.44-3.44V6.77c0-1.9-1.54-3.44-3.44-3.44h0Z',\n 'M1179.6,147c-9.73-11.8-20.71-21.12-47.76-38.44-27.06-16.91-31.69-23.26-31.69-31.68,0-6.76,3.8-11.39,10.56-11.39,8.19,0,14.18,10.44,15.43,26.28.18,2.14,2.13,3.74,4.27,3.26l63.66-14.12c1.6-.36,2.73-1.9,2.61-3.56-3.97-49.3-35-77.36-86.44-77.36-27.47,0-50.25,8.07-67.63,24.09-17.39,16.01-25.82,36.72-25.82,62.53,0,16.91,4.22,32.09,13.12,45.62,8.9,13.53,25.75,28.3,51.56,44.38,14.77,9.32,24.09,16.49,27.88,21.12,4.21,4.63,6.35,9.31,6.35,14.36,0,6.35-4.63,10.56-11.81,10.56-10.5,0-18.15-11.87-19.28-29.66-.12-2.25-2.31-3.91-4.51-3.26l-63.6,18.68c-1.55.42-2.55,1.84-2.43,3.44,1.78,22.84,11.03,41.41,26.88,55.65,16.49,14.36,36.77,21.53,64.24,21.53s50.32-7.59,67.64-23.26c17.74-15.66,26.64-36.37,26.64-61.28,0-22.01-6.35-40.58-19.87-57.49v-.02Z',\n 'M1002.33,3.32h-146.18c-1.9,0-3.44,1.54-3.44,3.44v275.49c0,1.9,1.54,3.44,3.44,3.44h146.18c1.9,0,3.44-1.54,3.44-3.44v-62.05c0-1.9-1.54-3.44-3.44-3.44h-63.3c-1.9,0-3.45-1.54-3.45-3.45v-34.58c0-1.9,1.54-3.44,3.45-3.44v.18h53.63c1.9,0,3.45-1.54,3.45-3.44v-57.84c0-1.9-1.55-3.44-3.45-3.44h-53.63c-1.9,0-3.45-1.54-3.45-3.44v-31.61c0-1.9,1.54-3.44,3.45-3.44h63.3c1.9,0,3.44-1.54,3.44-3.44V6.77c0-1.9-1.54-3.44-3.44-3.44Z',\n 'M840.22,6.77c0-1.9-1.54-3.44-3.44-3.44h-175.31c-1.9,0-3.45,1.54-3.45,3.44v62c0,1.9,1.54,3.44,3.45,3.44h41.77c1.9,0,3.44,1.54,3.44,3.44v206.62c0,1.9,1.54,3.45,3.44,3.45h78.14c1.9,0,3.45-1.54,3.45-3.45V75.7c0-1.9,1.54-3.44,3.45-3.44h41.77c1.9,0,3.44-1.54,3.44-3.44h-.12V6.77h-.02Z',\n 'M607.71,3.38l-.06-.06c-23.23,0-32.59,48.08-40.22,80.25-1.38,5.82-4.74,18.31-7.75,27.31-4.44,13.26-10.68,30.43-22.21,31.93-18.85,2.47-7.14-39.43-7.14-39.43l21.67-92.98c.84-3.6-1.92-7.02-5.58-7.02h-85.49c-3.12,0-5.64,2.46-5.71,5.64l-1.68,75.09c-.48,21.25,5.64,42.31,18.37,59.37,12.72,17.05,38.81,28,63.12,25.9,52.48-7.08,65.46-70.49,68.4-71.1,3.06-.64,2.56,9.3.84,22.15-2.2,16.42-8.46,32.1-18.52,45.27-5.3,6.95-11.13,12.9-16.55,16.37-32.96,22.51-95.69,9.48-122.4-2.7-3.66-1.68-7.75,1.02-7.75,5.04l16.39,83.98c0,.84.18,1.68.54,2.4,9.48,17.83,53.31,19.33,74.43,17.77,32.18-2.04,100.37-29.35,115.32-122.33,12.17-103.08-1.14-162.91-38.06-162.84l.02-.02Z',\n];\n\nexport function buildMaytesLogo(height: string, color: string): SVGSVGElement {\n const svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('xmlns', SVG_NS);\n svg.setAttribute('viewBox', '0 0 1199.47 289.04');\n svg.style.height = height;\n svg.style.width = 'auto';\n svg.style.color = color;\n for (const d of MAYTES_LOGO_PATHS) {\n const path = document.createElementNS(SVG_NS, 'path');\n path.setAttribute('fill', 'currentColor');\n path.setAttribute('d', d);\n svg.appendChild(path);\n }\n return svg;\n}\n","export const MaytesErrorCode = {\n Config: 'CONFIG',\n} as const;\n\nexport type MaytesErrorCodeValue = (typeof MaytesErrorCode)[keyof typeof MaytesErrorCode];\n\nexport class MaytesError extends Error {\n readonly code: MaytesErrorCodeValue;\n\n constructor(code: MaytesErrorCodeValue, message: string) {\n super(message);\n this.code = code;\n this.name = 'MaytesError';\n }\n}\n","import { buildMaytesLogo, MAYTES_WALLET } from './branding.js';\nimport type { InstanceState } from './state.js';\n\nconst TITLE_ID = 'maytes-overlay-title';\nconst STYLE_MARKER = 'data-maytes-checkout-button-overlay-styles';\nconst NATIVE_BACKDROP_FALLBACK = 'rgba(0, 0, 0, 0.6)';\n\nfunction tryReadTopDocument(): Document | null {\n if (window.top === null || window.top === window) return null;\n try {\n const topDoc = window.top.document;\n return topDoc.body !== null ? topDoc : null;\n } catch (err) {\n if (!(err instanceof DOMException && err.name === 'SecurityError')) {\n console.warn('[maytes/checkout-button] unexpected error resolving overlay host', err);\n }\n return null;\n }\n}\n\nfunction resolveOverlayHost(): Document {\n return tryReadTopDocument() ?? document;\n}\n\nfunction ensureOverlayStylesInTopDocument(host: Document): void {\n if (host === document) return;\n if (host.querySelector(`style[${STYLE_MARKER}]`) !== null) return;\n const localStyle = document.head.querySelector('style[data-maytes-checkout-button]');\n if (localStyle === null) return;\n const copy = host.createElement('style');\n copy.setAttribute(STYLE_MARKER, '');\n const nonce = localStyle.getAttribute('nonce');\n if (nonce !== null) copy.setAttribute('nonce', nonce);\n copy.textContent = localStyle.textContent ?? '';\n host.head.appendChild(copy);\n}\n\nfunction buildOverlay(host: Document, state: InstanceState): HTMLDialogElement {\n const dialog = host.createElement('dialog');\n dialog.className = 'maytes-checkout-overlay';\n dialog.setAttribute('aria-labelledby', TITLE_ID);\n dialog.setAttribute('data-maytes-overlay', '');\n\n const content = host.createElement('div');\n content.className = 'maytes-checkout-overlay__content';\n\n const logoDiv = host.createElement('div');\n logoDiv.setAttribute('aria-hidden', 'true');\n logoDiv.appendChild(buildMaytesLogo('2.5rem', MAYTES_WALLET));\n content.appendChild(logoDiv);\n\n const spinner = host.createElement('div');\n spinner.className = 'maytes-checkout-overlay__spinner';\n spinner.setAttribute('role', 'status');\n spinner.setAttribute('aria-live', 'polite');\n spinner.setAttribute('aria-label', 'Checkout in progress');\n content.appendChild(spinner);\n\n const text = host.createElement('p');\n text.id = TITLE_ID;\n text.className = 'maytes-checkout-overlay__text';\n text.textContent = 'Completing checkout with Maytes…';\n content.appendChild(text);\n\n const link = host.createElement('button');\n link.className = 'maytes-checkout-overlay__link';\n link.type = 'button';\n link.textContent = 'Return to Maytes';\n link.addEventListener('click', () => {\n if (state.popupWindow !== null && !state.popupWindow.closed) {\n try { state.popupWindow.focus(); } catch (err) {\n if (!(err instanceof DOMException && err.name === 'SecurityError')) throw err;\n }\n }\n });\n content.appendChild(link);\n\n dialog.appendChild(content);\n\n dialog.addEventListener('cancel', (event) => {\n event.preventDefault();\n if (state.popupWindow !== null && !state.popupWindow.closed) state.popupWindow.close();\n hideOverlay(state);\n });\n\n return dialog;\n}\n\nfunction applyNativeBackdropFallback(dialog: HTMLDialogElement): void {\n dialog.style.background = NATIVE_BACKDROP_FALLBACK;\n}\n\nexport function showOverlay(state: InstanceState): void {\n if (state.overlayEl !== null) return;\n const host = resolveOverlayHost();\n ensureOverlayStylesInTopDocument(host);\n const dialog = buildOverlay(host, state);\n state.overlayEl = dialog;\n host.body.appendChild(dialog);\n if (typeof dialog.showModal === 'function') {\n try {\n dialog.showModal();\n } catch (err) {\n console.warn('[maytes/checkout-button] dialog.showModal failed; falling back to inline backdrop', err);\n dialog.setAttribute('open', '');\n applyNativeBackdropFallback(dialog);\n }\n } else {\n dialog.setAttribute('open', '');\n applyNativeBackdropFallback(dialog);\n }\n}\n\nexport function hideOverlay(state: InstanceState): void {\n if (state.overlayEl === null) return;\n const dialog = state.overlayEl;\n const host = dialog.ownerDocument;\n if (typeof dialog.close === 'function' && dialog.open) dialog.close();\n dialog.remove();\n if (host !== document) {\n host.head.querySelector(`style[${STYLE_MARKER}]`)?.remove();\n }\n state.overlayEl = null;\n}\n","import { MaytesError, MaytesErrorCode } from './errors.js';\nimport type { MaytesEnvironment } from './types.js';\n\nexport type InternalEnvironment = MaytesEnvironment | 'staging';\n\nconst ENVIRONMENT_BASE_URLS: Record<InternalEnvironment, string> = {\n staging: 'https://staging-checkout.maytes.co',\n sandbox: 'https://sandbox-checkout.maytes.co',\n production: 'https://checkout.maytes.co',\n};\n\nexport function isValidEnvironment(value: unknown): value is InternalEnvironment {\n return value === 'sandbox' || value === 'production' || value === 'staging';\n}\n\nexport function resolveBaseUrl(environment: InternalEnvironment, override: string | undefined): string {\n if (override !== undefined) return override;\n const url = ENVIRONMENT_BASE_URLS[environment];\n if (url === undefined) {\n throw new MaytesError(MaytesErrorCode.Config, `Unknown environment: ${String(environment)}`);\n }\n return url;\n}\n","import { MaytesError, MaytesErrorCode } from './errors.js';\nimport { resolveBaseUrl, type InternalEnvironment } from './env.js';\nimport type { CheckoutUrlOptions, RedirectOptions } from './types.js';\n\nexport function isHttpUrl(value: string): boolean {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n return false;\n }\n return parsed.protocol === 'https:' || parsed.protocol === 'http:';\n}\n\nexport function normalizeBaseUrl(rawBaseUrl: string): string {\n const candidate = rawBaseUrl.trim().replace(/\\/+$/, '');\n let parsed: URL;\n try {\n parsed = new URL(candidate);\n } catch {\n throw new MaytesError(MaytesErrorCode.Config, `baseUrl is not a valid URL: ${candidate}`);\n }\n if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n `baseUrl must use http or https; got ${parsed.protocol}`,\n );\n }\n return candidate;\n}\n\nfunction requireCheckoutId(id: unknown): string {\n if (typeof id !== 'string' || id.trim().length === 0) {\n throw new MaytesError(MaytesErrorCode.Config, 'checkoutId is required (non-empty string)');\n }\n return id.trim();\n}\n\nexport function buildCheckoutUrl(\n environment: InternalEnvironment,\n baseUrlOverride: string | undefined,\n checkoutId: string,\n): string {\n const id = requireCheckoutId(checkoutId);\n const base = normalizeBaseUrl(resolveBaseUrl(environment, baseUrlOverride));\n return `${base}/?id=${encodeURIComponent(id)}`;\n}\n\nexport function performRedirect(url: string, replace: boolean): void {\n if (typeof window === 'undefined') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'redirectToCheckout requires a browser context (window is undefined)',\n );\n }\n if (replace) {\n window.location.replace(url);\n } else {\n window.location.href = url;\n }\n}\n\nexport function makeRedirect(\n environment: InternalEnvironment,\n baseUrlOverride: string | undefined,\n) {\n return {\n checkoutUrl(opts: CheckoutUrlOptions): string {\n return buildCheckoutUrl(environment, baseUrlOverride, opts.checkoutId);\n },\n redirectToCheckout(opts: RedirectOptions): void {\n const url = buildCheckoutUrl(environment, baseUrlOverride, opts.checkoutId);\n performRedirect(url, opts.replace === true);\n },\n };\n}\n","export const SDK_VERSION = '1.0.0';\n","import { foundation } from './foundation/brand.generated.js';\nimport { SDK_VERSION } from './version.js';\n\nconst STYLE_ATTR = 'data-maytes-checkout-button';\nconst STYLE_SELECTOR = `style[${STYLE_ATTR}=\"${SDK_VERSION}\"]`;\nconst REFCOUNT_KEY = `__maytes_checkout_button_styles_refs_${SDK_VERSION}__`;\n\ninterface RefCountWindow extends Window {\n [REFCOUNT_KEY]?: number;\n}\n\n// WEB-LOCAL: no foundation role (a11y focus ring); see MOB-994\nconst FOCUS_RING = '#6b8aff';\n\nconst BUTTON_CSS = `\n.maytes-checkout-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.57em;\n padding: 0.71em 1.29em;\n border: none;\n border-radius: 999px;\n background: ${foundation.brand.primary};\n color: ${foundation.text.primaryInverse};\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n font-size: var(--maytes-button-font-size, 14px);\n font-weight: 600;\n line-height: 1;\n cursor: pointer;\n user-select: none;\n transition: background-color 120ms ease, opacity 120ms ease;\n}\n.maytes-checkout-button:hover { background: ${foundation.palette.burgundy[700]}; }\n.maytes-checkout-button:focus-visible {\n outline: 2px solid ${FOCUS_RING};\n outline-offset: 2px;\n}\n.maytes-checkout-button[aria-disabled='true'] {\n cursor: progress;\n opacity: 0.7;\n}\n.maytes-checkout-button--block {\n display: flex;\n width: 100%;\n}\n.maytes-checkout-button__logo { height: 1em; width: auto; flex: none; }\n.maytes-checkout-button__spinner {\n height: 1em;\n width: 1em;\n border-radius: 50%;\n border: 0.14em solid currentColor;\n border-right-color: transparent;\n animation: maytes-checkout-button-spin 0.7s linear infinite;\n}\n@keyframes maytes-checkout-button-spin {\n to { transform: rotate(360deg); }\n}\n.maytes-checkout-overlay {\n position: fixed;\n inset: 0;\n width: 100vw;\n height: 100vh;\n max-width: 100vw;\n max-height: 100vh;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n z-index: 2147483646;\n font: 500 15px/1.4 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n}\n.maytes-checkout-overlay[open] {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.maytes-checkout-overlay::backdrop {\n background: rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n}\n.maytes-checkout-overlay__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n}\n.maytes-checkout-overlay__spinner {\n width: 2.5rem;\n height: 2.5rem;\n border: 4px solid rgba(255, 255, 255, 0.3);\n border-top-color: ${foundation.brand.secondary};\n border-radius: 50%;\n animation: maytes-checkout-button-spin 0.8s linear infinite;\n}\n.maytes-checkout-overlay__text {\n color: ${foundation.text.primaryInverse};\n font-size: 1.125rem;\n font-weight: 500;\n margin: 0;\n}\n.maytes-checkout-overlay__link {\n color: rgba(255, 255, 255, 0.7);\n font-size: 0.875rem;\n text-decoration: underline;\n text-underline-offset: 4px;\n background: none;\n border: none;\n cursor: pointer;\n font-family: inherit;\n transition: color 0.15s;\n}\n.maytes-checkout-overlay__link:hover { color: ${foundation.text.primaryInverse}; }\n@media (prefers-reduced-motion: reduce) {\n .maytes-checkout-overlay__spinner,\n .maytes-checkout-button__spinner { animation: none; }\n}\n`;\n\nexport const POPUP_LOADING_CSS = `\n:root { color-scheme: light; }\nhtml, body { margin: 0; height: 100%; }\nbody.maytes-popup-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n background: ${foundation.brand.primary};\n color: ${foundation.text.primaryInverse};\n font: 500 16px/1.45 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n}\n.maytes-popup-loading__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n padding: 2rem;\n text-align: center;\n}\n.maytes-popup-loading__logo { height: 2.75rem; width: auto; }\n.maytes-popup-loading__spinner {\n width: 2.5rem;\n height: 2.5rem;\n border: 4px solid rgba(255, 255, 255, 0.25);\n border-top-color: ${foundation.brand.secondary};\n border-radius: 50%;\n animation: maytes-checkout-button-spin 0.8s linear infinite;\n}\n@keyframes maytes-checkout-button-spin {\n to { transform: rotate(360deg); }\n}\n.maytes-popup-loading__text { margin: 0; font-size: 1.05rem; font-weight: 500; }\n.maytes-popup-loading__slow {\n margin: 0;\n font-size: 0.9rem;\n font-weight: 400;\n color: rgba(255, 255, 255, 0.75);\n max-width: 22rem;\n}\n.maytes-popup-loading__slow[hidden] { display: none; }\n@media (prefers-reduced-motion: reduce) {\n .maytes-popup-loading__spinner { animation: none; }\n}\n`;\n\nfunction getRefCount(): number {\n const w = window as RefCountWindow;\n return w[REFCOUNT_KEY] ?? 0;\n}\n\nfunction setRefCount(value: number): void {\n const w = window as RefCountWindow;\n w[REFCOUNT_KEY] = value;\n}\n\nexport function ensureStylesInjected(cspNonce: string | undefined): void {\n const next = getRefCount() + 1;\n setRefCount(next);\n if (document.head.querySelector(STYLE_SELECTOR) !== null) return;\n const el = document.createElement('style');\n el.setAttribute(STYLE_ATTR, SDK_VERSION);\n if (cspNonce !== undefined && cspNonce !== '') el.setAttribute('nonce', cspNonce);\n el.textContent = BUTTON_CSS;\n document.head.appendChild(el);\n}\n\nexport function releaseStyles(): void {\n const next = Math.max(0, getRefCount() - 1);\n setRefCount(next);\n if (next > 0) return;\n const el = document.head.querySelector(STYLE_SELECTOR);\n if (el !== null) el.remove();\n}\n\nexport function resetStylesForTests(): void {\n setRefCount(0);\n document.head.querySelectorAll(`style[${STYLE_ATTR}]`).forEach((el) => el.remove());\n}\n","import { buildMaytesLogo } from './branding.js';\nimport { foundation } from './foundation/brand.generated.js';\nimport { MaytesError, MaytesErrorCode } from './errors.js';\nimport { hideOverlay, showOverlay } from './overlay.js';\nimport { buildCheckoutUrl, isHttpUrl } from './redirect.js';\nimport { ensureStylesInjected, POPUP_LOADING_CSS, releaseStyles } from './styles.js';\nimport type { InstanceState } from './state.js';\nimport type { RenderButtonCleanup, RenderButtonMode, RenderButtonOptions } from './types.js';\n\nconst POPUP_WIDTH = 500;\nconst POPUP_HEIGHT = 800;\nconst POPUP_POLL_INTERVAL_MS = 500;\nconst MOBILE_MAX_WIDTH = 600;\nconst SLOW_NETWORK_DELAY_MS = 8000;\n\nfunction buildLogo(): SVGSVGElement {\n const svg = buildMaytesLogo('1em', 'currentColor');\n svg.setAttribute('class', 'maytes-checkout-button__logo');\n svg.setAttribute('aria-hidden', 'true');\n return svg;\n}\n\nfunction buildSpinner(): HTMLSpanElement {\n const spinner = document.createElement('span');\n spinner.className = 'maytes-checkout-button__spinner';\n spinner.setAttribute('aria-hidden', 'true');\n return spinner;\n}\n\nfunction isValidCheckoutResult(value: unknown): value is { checkoutId: string; checkoutUrl?: string } {\n if (typeof value !== 'object' || value === null) return false;\n const obj = value as { checkoutId?: unknown; checkoutUrl?: unknown };\n if (typeof obj.checkoutId !== 'string' || obj.checkoutId.trim().length === 0) return false;\n if (obj.checkoutUrl !== undefined) {\n if (typeof obj.checkoutUrl !== 'string' || obj.checkoutUrl.trim().length === 0) return false;\n if (!isHttpUrl(obj.checkoutUrl)) return false;\n }\n return true;\n}\n\nfunction isSecurityError(err: unknown): boolean {\n return err instanceof DOMException && err.name === 'SecurityError';\n}\n\nfunction refocusPopup(popup: Window): void {\n try { popup.focus(); } catch (err) {\n if (!isSecurityError(err)) throw err;\n }\n}\n\nexport function closePopupWindow(popup: Window | null): void {\n if (popup === null) return;\n try {\n if (!popup.closed) popup.close();\n } catch (err) {\n if (!isSecurityError(err)) throw err;\n }\n}\n\nfunction popupFeatures(): string {\n const screenWidth = window.screen?.width ?? POPUP_WIDTH;\n const screenHeight = window.screen?.height ?? POPUP_HEIGHT;\n const left = Math.max(0, Math.round((screenWidth - POPUP_WIDTH) / 2));\n const top = Math.max(0, Math.round((screenHeight - POPUP_HEIGHT) / 2));\n return `popup=yes,width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},resizable=yes,scrollbars=yes`;\n}\n\nexport function stopPopupPoll(state: InstanceState): void {\n if (state.popupPollHandle !== null) {\n clearInterval(state.popupPollHandle);\n state.popupPollHandle = null;\n }\n}\n\nfunction startPopupPoll(state: InstanceState, onClose: () => void): void {\n stopPopupPoll(state);\n state.popupPollHandle = setInterval(() => {\n const popup = state.popupWindow;\n if (popup === null || popup.closed) {\n stopPopupPoll(state);\n state.popupWindow = null;\n onClose();\n }\n }, POPUP_POLL_INTERVAL_MS);\n}\n\nfunction isMobileViewport(): boolean {\n return window.innerWidth <= MOBILE_MAX_WIDTH;\n}\n\nfunction openBlankPopup(state: InstanceState): Window | null {\n return window.open('about:blank', state.popupName, popupFeatures());\n}\n\nfunction navigatePopup(popup: Window, url: string): void {\n popup.location.replace(url);\n}\n\nfunction removePopupChildren(doc: Document): void {\n while (doc.body.firstChild !== null) doc.body.removeChild(doc.body.firstChild);\n}\n\nfunction paintPopupLoadingScreen(popup: Window, cspNonce: string | undefined): void {\n const doc = popup.document as Document | null;\n if (doc === null || doc.head === null || doc.body === null) return;\n doc.title = 'Maytes checkout';\n doc.documentElement.lang = 'en';\n const style = doc.createElement('style');\n if (cspNonce !== undefined && cspNonce !== '') style.setAttribute('nonce', cspNonce);\n style.textContent = POPUP_LOADING_CSS;\n doc.head.appendChild(style);\n\n doc.body.classList.add('maytes-popup-loading');\n removePopupChildren(doc);\n\n const content = doc.createElement('main');\n content.className = 'maytes-popup-loading__content';\n content.setAttribute('role', 'status');\n content.setAttribute('aria-live', 'polite');\n\n const logo = buildMaytesLogo('2.75rem', foundation.text.primaryInverse);\n logo.setAttribute('class', 'maytes-popup-loading__logo');\n logo.setAttribute('aria-hidden', 'true');\n content.appendChild(logo);\n\n const spinner = doc.createElement('div');\n spinner.className = 'maytes-popup-loading__spinner';\n spinner.setAttribute('aria-hidden', 'true');\n content.appendChild(spinner);\n\n const text = doc.createElement('p');\n text.className = 'maytes-popup-loading__text';\n text.textContent = 'Completing checkout with Maytes…';\n content.appendChild(text);\n\n const slow = doc.createElement('p');\n slow.className = 'maytes-popup-loading__slow';\n slow.hidden = true;\n slow.textContent = 'Still connecting. This can take a moment on slow networks.';\n content.appendChild(slow);\n\n doc.body.appendChild(content);\n setTimeout(() => { slow.hidden = false; }, SLOW_NETWORK_DELAY_MS);\n}\n\nexport function renderButton(\n state: InstanceState,\n container: HTMLElement,\n options: RenderButtonOptions = {},\n): RenderButtonCleanup {\n if (state.destroyed) {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'renderButton() called on a destroyed Maytes instance',\n );\n }\n if (!(container instanceof HTMLElement)) {\n throw new MaytesError(MaytesErrorCode.Config, 'renderButton(container) requires an HTMLElement');\n }\n\n ensureStylesInjected(state.config.cspNonce);\n\n const label = options.label ?? 'Split with';\n const block = options.block === true;\n const mode: RenderButtonMode = options.mode ?? 'redirect';\n if (mode !== 'redirect' && mode !== 'popup') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n \"renderButton({ mode }) must be 'redirect' or 'popup'\",\n );\n }\n\n const button = document.createElement('button');\n button.type = 'button';\n button.className = block\n ? 'maytes-checkout-button maytes-checkout-button--block'\n : 'maytes-checkout-button';\n button.setAttribute('aria-label', `${label} Maytes`);\n\n const labelNode = document.createTextNode(`${label} `);\n const logo = buildLogo();\n button.appendChild(labelNode);\n button.appendChild(logo);\n\n const setBusy = (busy: boolean) => {\n state.busy = busy;\n if (busy) {\n button.setAttribute('aria-disabled', 'true');\n button.setAttribute('aria-busy', 'true');\n logo.replaceWith(buildSpinner());\n } else {\n button.removeAttribute('aria-disabled');\n button.removeAttribute('aria-busy');\n const currentIndicator = button.querySelector('.maytes-checkout-button__spinner, .maytes-checkout-button__logo');\n if (currentIndicator !== null) currentIndicator.replaceWith(buildLogo());\n }\n };\n\n const teardownActiveCheckout = () => {\n hideOverlay(state);\n setBusy(false);\n };\n\n const onPopupClosed = () => {\n teardownActiveCheckout();\n document.dispatchEvent(new CustomEvent('maytes:checkout-closed'));\n };\n\n const dispatchFailed = (reason: string, cause?: unknown): void => {\n document.dispatchEvent(new CustomEvent('maytes:checkout-failed', {\n detail: cause === undefined ? { reason } : { reason, cause },\n }));\n };\n\n const dispatchRedirected = (url: string): void => {\n document.dispatchEvent(new CustomEvent('maytes:checkout-redirected', { detail: { url } }));\n };\n\n const redirectSameWindow = (url: string): void => {\n teardownActiveCheckout();\n dispatchRedirected(url);\n window.location.href = url;\n };\n\n const closeOrphanPopup = (popup: Window | null): void => {\n closePopupWindow(popup);\n stopPopupPoll(state);\n if (state.popupWindow === popup) state.popupWindow = null;\n teardownActiveCheckout();\n };\n\n const handleClick = async (): Promise<void> => {\n if (state.busy || state.destroyed) return;\n setBusy(true);\n const shouldUsePopup = mode === 'popup' && !isMobileViewport();\n const popup = shouldUsePopup ? openBlankPopup(state) : null;\n if (popup !== null) {\n state.popupWindow = popup;\n refocusPopup(popup);\n paintPopupLoadingScreen(popup, state.config.cspNonce);\n showOverlay(state);\n document.dispatchEvent(new CustomEvent('maytes:checkout-opened'));\n startPopupPoll(state, onPopupClosed);\n }\n try {\n const result = await state.config.createCheckout();\n if (state.destroyed || (popup !== null && popup.closed)) {\n closePopupWindow(popup);\n return;\n }\n if (!isValidCheckoutResult(result)) {\n closeOrphanPopup(popup);\n const shapeError = new MaytesError(\n MaytesErrorCode.Config,\n 'createCheckout must resolve to { checkoutId: string, checkoutUrl?: http(s) URL }',\n );\n console.error(shapeError);\n dispatchFailed('invalid-shape', shapeError);\n return;\n }\n const url = result.checkoutUrl ?? buildCheckoutUrl(\n state.config.environment,\n state.config.baseUrl,\n result.checkoutId,\n );\n if (popup !== null) {\n navigatePopup(popup, url);\n } else {\n if (shouldUsePopup) {\n console.warn('[maytes/checkout-button] popup was blocked; falling back to same-window redirect');\n }\n redirectSameWindow(url);\n }\n } catch (err) {\n if (popup !== null && popup.closed) return;\n closeOrphanPopup(popup);\n console.error('[maytes/checkout-button] createCheckout failed:', err);\n dispatchFailed('create-checkout-rejected', err);\n }\n };\n\n button.addEventListener('click', handleClick);\n container.appendChild(button);\n\n let cleaned = false;\n const teardown = (): void => {\n if (cleaned) return;\n cleaned = true;\n button.removeEventListener('click', handleClick);\n button.remove();\n state.teardowns.delete(teardown);\n releaseStyles();\n };\n state.teardowns.add(teardown);\n\n return teardown;\n}\n","import type { MaytesOptions, MaytesInternalOptions } from './types.js';\n\nexport interface InstanceState {\n config: MaytesOptions & MaytesInternalOptions;\n busy: boolean;\n overlayEl: HTMLDialogElement | null;\n popupWindow: Window | null;\n popupName: string;\n popupPollHandle: ReturnType<typeof setInterval> | null;\n destroyed: boolean;\n teardowns: Set<() => void>;\n}\n\nfunction popupNameSuffix(): string {\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction generatePopupName(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n try {\n return `maytes-checkout-${crypto.randomUUID()}`;\n } catch {\n return `maytes-checkout-${popupNameSuffix()}`;\n }\n }\n return `maytes-checkout-${popupNameSuffix()}`;\n}\n\nexport function createInstanceState(\n options: MaytesOptions,\n internal: MaytesInternalOptions | undefined,\n): InstanceState {\n const config: MaytesOptions & MaytesInternalOptions = {\n createCheckout: options.createCheckout,\n environment: options.environment,\n };\n if (internal?.baseUrl !== undefined) config.baseUrl = internal.baseUrl;\n if (internal?.cspNonce !== undefined) config.cspNonce = internal.cspNonce;\n return {\n config,\n busy: false,\n overlayEl: null,\n popupWindow: null,\n popupName: generatePopupName(),\n popupPollHandle: null,\n destroyed: false,\n teardowns: new Set(),\n };\n}\n","import { closePopupWindow, renderButton, stopPopupPoll } from './button.js';\nimport { isValidEnvironment } from './env.js';\nimport { MaytesError, MaytesErrorCode } from './errors.js';\nimport { hideOverlay } from './overlay.js';\nimport { makeRedirect, normalizeBaseUrl } from './redirect.js';\nimport { createInstanceState } from './state.js';\nimport type {\n MaytesFactory,\n MaytesInternalOptions,\n MaytesOptions,\n MaytesSDK,\n} from './types.js';\n\nfunction validateOptions(options: MaytesOptions): void {\n if (typeof options !== 'object' || options === null) {\n throw new MaytesError(MaytesErrorCode.Config, 'Maytes() requires an options object');\n }\n if (typeof options.createCheckout !== 'function') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'Maytes({ createCheckout }) must be an async function returning { checkoutId }',\n );\n }\n if (!isValidEnvironment(options.environment)) {\n throw new MaytesError(\n MaytesErrorCode.Config,\n \"Maytes({ environment }) must be 'sandbox' or 'production'\",\n );\n }\n}\n\nfunction validateInternalOptions(internal: MaytesInternalOptions | undefined): void {\n if (internal === undefined) return;\n if (internal.baseUrl !== undefined) normalizeBaseUrl(internal.baseUrl);\n}\n\nexport const Maytes: MaytesFactory = (options, internal) => {\n validateOptions(options);\n validateInternalOptions(internal);\n\n const state = createInstanceState(options, internal);\n const { checkoutUrl, redirectToCheckout } = makeRedirect(\n state.config.environment,\n state.config.baseUrl,\n );\n\n const sdk: MaytesSDK = {\n renderButton(container, opts) {\n return renderButton(state, container, opts);\n },\n redirectToCheckout(opts) {\n redirectToCheckout(opts);\n },\n checkoutUrl(opts) {\n return checkoutUrl(opts);\n },\n destroy() {\n if (state.destroyed) return;\n state.destroyed = true;\n stopPopupPoll(state);\n hideOverlay(state);\n closePopupWindow(state.popupWindow);\n state.popupWindow = null;\n state.busy = false;\n for (const teardown of [...state.teardowns]) teardown();\n state.teardowns.clear();\n },\n };\n\n return sdk;\n};\n"],"mappings":"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","names":["src_exports","__export","Maytes","MaytesError","MaytesErrorCode","SDK_VERSION","foundation","MAYTES_RICHE","foundation","MAYTES_WALLET","SVG_NS","MAYTES_LOGO_PATHS","buildMaytesLogo","height","color","svg","d","path","MaytesErrorCode","MaytesError","code","message","TITLE_ID","STYLE_MARKER","NATIVE_BACKDROP_FALLBACK","tryReadTopDocument","topDoc","err","resolveOverlayHost","ensureOverlayStylesInTopDocument","host","localStyle","copy","nonce","buildOverlay","state","dialog","content","logoDiv","buildMaytesLogo","MAYTES_WALLET","spinner","text","link","event","hideOverlay","applyNativeBackdropFallback","showOverlay","ENVIRONMENT_BASE_URLS","isValidEnvironment","value","resolveBaseUrl","environment","override","url","MaytesError","MaytesErrorCode","isHttpUrl","value","parsed","normalizeBaseUrl","rawBaseUrl","candidate","MaytesError","MaytesErrorCode","requireCheckoutId","id","buildCheckoutUrl","environment","baseUrlOverride","checkoutId","resolveBaseUrl","performRedirect","url","replace","makeRedirect","opts","SDK_VERSION","STYLE_ATTR","STYLE_SELECTOR","SDK_VERSION","REFCOUNT_KEY","FOCUS_RING","BUTTON_CSS","foundation","POPUP_LOADING_CSS","getRefCount","setRefCount","value","w","ensureStylesInjected","cspNonce","next","el","releaseStyles","POPUP_WIDTH","POPUP_HEIGHT","POPUP_POLL_INTERVAL_MS","MOBILE_MAX_WIDTH","SLOW_NETWORK_DELAY_MS","buildLogo","svg","buildMaytesLogo","buildSpinner","spinner","isValidCheckoutResult","value","obj","isHttpUrl","isSecurityError","err","refocusPopup","popup","closePopupWindow","popupFeatures","screenWidth","screenHeight","left","top","stopPopupPoll","state","startPopupPoll","onClose","isMobileViewport","openBlankPopup","navigatePopup","url","removePopupChildren","doc","paintPopupLoadingScreen","cspNonce","style","POPUP_LOADING_CSS","content","logo","foundation","text","slow","renderButton","container","options","MaytesError","MaytesErrorCode","ensureStylesInjected","label","block","mode","button","labelNode","setBusy","busy","currentIndicator","teardownActiveCheckout","hideOverlay","onPopupClosed","dispatchFailed","reason","cause","dispatchRedirected","redirectSameWindow","closeOrphanPopup","handleClick","shouldUsePopup","showOverlay","result","shapeError","buildCheckoutUrl","cleaned","teardown","releaseStyles","popupNameSuffix","generatePopupName","createInstanceState","options","internal","config","validateOptions","options","MaytesError","MaytesErrorCode","isValidEnvironment","validateInternalOptions","internal","normalizeBaseUrl","Maytes","state","createInstanceState","checkoutUrl","redirectToCheckout","makeRedirect","container","opts","renderButton","stopPopupPoll","hideOverlay","closePopupWindow","teardown","Maytes"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/foundation/brand.generated.ts","../src/branding.ts","../src/errors.ts","../src/overlay.ts","../src/env.ts","../src/redirect.ts","../src/version.ts","../src/styles.ts","../src/button.ts","../src/state.ts","../src/maytes.ts"],"sourcesContent":["import { Maytes } from './maytes.js';\n\nif (typeof window !== 'undefined') {\n (window as unknown as { Maytes: typeof Maytes }).Maytes = Maytes;\n}\n\nexport { Maytes };\nexport { MaytesError, MaytesErrorCode } from './errors.js';\nexport type { MaytesErrorCodeValue } from './errors.js';\nexport type {\n CheckoutUrlOptions,\n CreateCheckoutFn,\n MaytesEnvironment,\n MaytesFactory,\n MaytesInternalOptions,\n MaytesOptions,\n MaytesSDK,\n RedirectOptions,\n RenderButtonCleanup,\n RenderButtonMode,\n RenderButtonOptions,\n} from './types.js';\nexport { SDK_VERSION } from './version.js';\n","// GENERATED by scripts/sync-foundation-tokens.mjs from kttipay/designsystem v0.3.0 web/tokens.ts — DO NOT EDIT. Refresh: npm run sync:foundation -- --tag vX.Y.Z\n\n// Subset of the foundation used by the checkout button and the mock showcase:\n// brand.primary <- colorsLight.brand.primary (burgundy/600)\n// brand.secondary <- colorsLight.brand.secondary (orange/500)\n// palette.burgundy.700 <- palette.burgundy.700 (hover shade for brand.primary)\n// palette.base.white <- palette.base.white\n// text.primaryInverse <- colorsLight.text.primaryInverse (text on brand.primary)\n\nexport const FOUNDATION_TAG = 'v0.3.0';\n\nexport const foundation = {\n brand: {\n primary: '#4A0324',\n secondary: '#FE572A',\n },\n palette: {\n burgundy: {\n 700: '#3B021D',\n },\n base: {\n white: '#FFFFFF',\n },\n },\n text: {\n primaryInverse: '#FFFFFF',\n },\n} as const;\n","import { foundation } from './foundation/brand.generated.js';\n\nexport const MAYTES_RICHE = foundation.brand.primary;\nexport const MAYTES_WALLET = foundation.brand.secondary;\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nconst MAYTES_LOGO_PATHS: readonly string[] = [\n 'M392,6.11c-.3-1.61-1.72-2.79-3.38-2.79h-99.97c-1.66,0-3.09,1.19-3.38,2.79l-51.14,275.49c-.36,2.07,1.24,4.03,3.38,4.03h71.07c1.72,0,3.15-1.24,3.38-2.97l5.57-42.24c.23-1.72,1.66-2.97,3.38-2.97h32.45c1.72,0,3.15,1.24,3.38,2.97l5.57,42.24c.23,1.72,1.66,2.97,3.38,2.97h74.46c2.14,0,3.8-1.96,3.38-4.03L392,6.11ZM344.42,174.89h-14.59c-2.07,0-3.62-1.84-3.38-3.86l9.55-74.33c.06-.48.48-.83.95-.83s.89.35.95.83l9.91,74.33c.3,2.02-1.31,3.86-3.38,3.86h0Z',\n 'M218.86,3.32h-77.72c-1.48,0-2.85,1.01-3.27,2.44l-25.63,83.65c-.12.35-.41.6-.83.6s-.71-.23-.83-.6L84.9,5.76c-.41-1.42-1.78-2.44-3.27-2.44H3.44c-1.9,0-3.44,1.54-3.44,3.44v275.43c0,1.9,1.54,3.45,3.44,3.45h71.26c1.9,0,3.44-1.54,3.44-3.45v-77.3l-.83-51.44c0-.53.41-.95.95-.95.41,0,.77.3.89.71l14.42,59.62c.35,1.54,1.72,2.61,3.32,2.61h28.42c1.61,0,2.97-1.06,3.32-2.61l14.47-59.79c.12-.3.35-.53.71-.53.41,0,.71.3.71.71l-.42,51.67-.06.06v77.3c0,1.9,1.54,3.44,3.44,3.44h71.37c1.9,0,3.44-1.54,3.44-3.44V6.77c0-1.9-1.54-3.44-3.44-3.44h0Z',\n 'M1179.6,147c-9.73-11.8-20.71-21.12-47.76-38.44-27.06-16.91-31.69-23.26-31.69-31.68,0-6.76,3.8-11.39,10.56-11.39,8.19,0,14.18,10.44,15.43,26.28.18,2.14,2.13,3.74,4.27,3.26l63.66-14.12c1.6-.36,2.73-1.9,2.61-3.56-3.97-49.3-35-77.36-86.44-77.36-27.47,0-50.25,8.07-67.63,24.09-17.39,16.01-25.82,36.72-25.82,62.53,0,16.91,4.22,32.09,13.12,45.62,8.9,13.53,25.75,28.3,51.56,44.38,14.77,9.32,24.09,16.49,27.88,21.12,4.21,4.63,6.35,9.31,6.35,14.36,0,6.35-4.63,10.56-11.81,10.56-10.5,0-18.15-11.87-19.28-29.66-.12-2.25-2.31-3.91-4.51-3.26l-63.6,18.68c-1.55.42-2.55,1.84-2.43,3.44,1.78,22.84,11.03,41.41,26.88,55.65,16.49,14.36,36.77,21.53,64.24,21.53s50.32-7.59,67.64-23.26c17.74-15.66,26.64-36.37,26.64-61.28,0-22.01-6.35-40.58-19.87-57.49v-.02Z',\n 'M1002.33,3.32h-146.18c-1.9,0-3.44,1.54-3.44,3.44v275.49c0,1.9,1.54,3.44,3.44,3.44h146.18c1.9,0,3.44-1.54,3.44-3.44v-62.05c0-1.9-1.54-3.44-3.44-3.44h-63.3c-1.9,0-3.45-1.54-3.45-3.45v-34.58c0-1.9,1.54-3.44,3.45-3.44v.18h53.63c1.9,0,3.45-1.54,3.45-3.44v-57.84c0-1.9-1.55-3.44-3.45-3.44h-53.63c-1.9,0-3.45-1.54-3.45-3.44v-31.61c0-1.9,1.54-3.44,3.45-3.44h63.3c1.9,0,3.44-1.54,3.44-3.44V6.77c0-1.9-1.54-3.44-3.44-3.44Z',\n 'M840.22,6.77c0-1.9-1.54-3.44-3.44-3.44h-175.31c-1.9,0-3.45,1.54-3.45,3.44v62c0,1.9,1.54,3.44,3.45,3.44h41.77c1.9,0,3.44,1.54,3.44,3.44v206.62c0,1.9,1.54,3.45,3.44,3.45h78.14c1.9,0,3.45-1.54,3.45-3.45V75.7c0-1.9,1.54-3.44,3.45-3.44h41.77c1.9,0,3.44-1.54,3.44-3.44h-.12V6.77h-.02Z',\n 'M607.71,3.38l-.06-.06c-23.23,0-32.59,48.08-40.22,80.25-1.38,5.82-4.74,18.31-7.75,27.31-4.44,13.26-10.68,30.43-22.21,31.93-18.85,2.47-7.14-39.43-7.14-39.43l21.67-92.98c.84-3.6-1.92-7.02-5.58-7.02h-85.49c-3.12,0-5.64,2.46-5.71,5.64l-1.68,75.09c-.48,21.25,5.64,42.31,18.37,59.37,12.72,17.05,38.81,28,63.12,25.9,52.48-7.08,65.46-70.49,68.4-71.1,3.06-.64,2.56,9.3.84,22.15-2.2,16.42-8.46,32.1-18.52,45.27-5.3,6.95-11.13,12.9-16.55,16.37-32.96,22.51-95.69,9.48-122.4-2.7-3.66-1.68-7.75,1.02-7.75,5.04l16.39,83.98c0,.84.18,1.68.54,2.4,9.48,17.83,53.31,19.33,74.43,17.77,32.18-2.04,100.37-29.35,115.32-122.33,12.17-103.08-1.14-162.91-38.06-162.84l.02-.02Z',\n];\n\nexport function buildMaytesLogo(height: string, color: string): SVGSVGElement {\n const svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('xmlns', SVG_NS);\n svg.setAttribute('viewBox', '0 0 1199.47 289.04');\n svg.style.height = height;\n svg.style.width = 'auto';\n svg.style.color = color;\n for (const d of MAYTES_LOGO_PATHS) {\n const path = document.createElementNS(SVG_NS, 'path');\n path.setAttribute('fill', 'currentColor');\n path.setAttribute('d', d);\n svg.appendChild(path);\n }\n return svg;\n}\n","export const MaytesErrorCode = {\n Config: 'CONFIG',\n} as const;\n\nexport type MaytesErrorCodeValue = (typeof MaytesErrorCode)[keyof typeof MaytesErrorCode];\n\nexport class MaytesError extends Error {\n readonly code: MaytesErrorCodeValue;\n\n constructor(code: MaytesErrorCodeValue, message: string) {\n super(message);\n this.code = code;\n this.name = 'MaytesError';\n }\n}\n","import { buildMaytesLogo, MAYTES_WALLET } from './branding.js';\nimport type { InstanceState } from './state.js';\n\nconst TITLE_ID = 'maytes-overlay-title';\nconst STYLE_MARKER = 'data-maytes-checkout-button-overlay-styles';\nconst NATIVE_BACKDROP_FALLBACK = 'rgba(0, 0, 0, 0.6)';\n\nfunction tryReadTopDocument(): Document | null {\n if (window.top === null || window.top === window) return null;\n try {\n const topDoc = window.top.document;\n return topDoc.body !== null ? topDoc : null;\n } catch (err) {\n if (!(err instanceof DOMException && err.name === 'SecurityError')) {\n console.warn('[maytes/checkout-button] unexpected error resolving overlay host', err);\n }\n return null;\n }\n}\n\nfunction resolveOverlayHost(): Document {\n return tryReadTopDocument() ?? document;\n}\n\nfunction ensureOverlayStylesInTopDocument(host: Document): void {\n if (host === document) return;\n if (host.querySelector(`style[${STYLE_MARKER}]`) !== null) return;\n const localStyle = document.head.querySelector('style[data-maytes-checkout-button]');\n if (localStyle === null) return;\n const copy = host.createElement('style');\n copy.setAttribute(STYLE_MARKER, '');\n const nonce = localStyle.getAttribute('nonce');\n if (nonce !== null) copy.setAttribute('nonce', nonce);\n copy.textContent = localStyle.textContent ?? '';\n host.head.appendChild(copy);\n}\n\nfunction buildOverlay(host: Document, state: InstanceState): HTMLDialogElement {\n const dialog = host.createElement('dialog');\n dialog.className = 'maytes-checkout-overlay';\n dialog.setAttribute('aria-labelledby', TITLE_ID);\n dialog.setAttribute('data-maytes-overlay', '');\n\n const content = host.createElement('div');\n content.className = 'maytes-checkout-overlay__content';\n\n const logoDiv = host.createElement('div');\n logoDiv.setAttribute('aria-hidden', 'true');\n logoDiv.appendChild(buildMaytesLogo('2.5rem', MAYTES_WALLET));\n content.appendChild(logoDiv);\n\n const spinner = host.createElement('div');\n spinner.className = 'maytes-checkout-overlay__spinner';\n spinner.setAttribute('role', 'status');\n spinner.setAttribute('aria-live', 'polite');\n spinner.setAttribute('aria-label', 'Checkout in progress');\n content.appendChild(spinner);\n\n const text = host.createElement('p');\n text.id = TITLE_ID;\n text.className = 'maytes-checkout-overlay__text';\n text.textContent = 'Completing checkout with Maytes…';\n content.appendChild(text);\n\n const link = host.createElement('button');\n link.className = 'maytes-checkout-overlay__link';\n link.type = 'button';\n link.textContent = 'Return to Maytes';\n link.addEventListener('click', () => {\n if (state.popupWindow !== null && !state.popupWindow.closed) {\n try { state.popupWindow.focus(); } catch (err) {\n if (!(err instanceof DOMException && err.name === 'SecurityError')) throw err;\n }\n }\n });\n content.appendChild(link);\n\n dialog.appendChild(content);\n\n dialog.addEventListener('cancel', (event) => {\n event.preventDefault();\n if (state.popupWindow !== null && !state.popupWindow.closed) state.popupWindow.close();\n hideOverlay(state);\n });\n\n return dialog;\n}\n\nfunction applyNativeBackdropFallback(dialog: HTMLDialogElement): void {\n dialog.style.background = NATIVE_BACKDROP_FALLBACK;\n}\n\nexport function showOverlay(state: InstanceState): void {\n if (state.overlayEl !== null) return;\n const host = resolveOverlayHost();\n ensureOverlayStylesInTopDocument(host);\n const dialog = buildOverlay(host, state);\n state.overlayEl = dialog;\n host.body.appendChild(dialog);\n if (typeof dialog.showModal === 'function') {\n try {\n dialog.showModal();\n } catch (err) {\n console.warn('[maytes/checkout-button] dialog.showModal failed; falling back to inline backdrop', err);\n dialog.setAttribute('open', '');\n applyNativeBackdropFallback(dialog);\n }\n } else {\n dialog.setAttribute('open', '');\n applyNativeBackdropFallback(dialog);\n }\n}\n\nexport function hideOverlay(state: InstanceState): void {\n if (state.overlayEl === null) return;\n const dialog = state.overlayEl;\n const host = dialog.ownerDocument;\n if (typeof dialog.close === 'function' && dialog.open) dialog.close();\n dialog.remove();\n if (host !== document) {\n host.head.querySelector(`style[${STYLE_MARKER}]`)?.remove();\n }\n state.overlayEl = null;\n}\n","import { MaytesError, MaytesErrorCode } from './errors.js';\nimport type { MaytesEnvironment } from './types.js';\n\nexport type InternalEnvironment = MaytesEnvironment | 'staging';\n\nconst ENVIRONMENT_BASE_URLS: Record<InternalEnvironment, string> = {\n staging: 'https://staging-checkout.maytes.co',\n sandbox: 'https://sandbox-checkout.maytes.co',\n production: 'https://checkout.maytes.co',\n};\n\nexport function isValidEnvironment(value: unknown): value is InternalEnvironment {\n return value === 'sandbox' || value === 'production' || value === 'staging';\n}\n\nexport function resolveBaseUrl(environment: InternalEnvironment, override: string | undefined): string {\n if (override !== undefined) return override;\n const url = ENVIRONMENT_BASE_URLS[environment];\n if (url === undefined) {\n throw new MaytesError(MaytesErrorCode.Config, `Unknown environment: ${String(environment)}`);\n }\n return url;\n}\n","import { MaytesError, MaytesErrorCode } from './errors.js';\nimport { resolveBaseUrl, type InternalEnvironment } from './env.js';\nimport type { CheckoutUrlOptions, RedirectOptions } from './types.js';\n\nexport function isHttpUrl(value: string): boolean {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n return false;\n }\n return parsed.protocol === 'https:' || parsed.protocol === 'http:';\n}\n\nexport function normalizeBaseUrl(rawBaseUrl: string): string {\n const candidate = rawBaseUrl.trim().replace(/\\/+$/, '');\n let parsed: URL;\n try {\n parsed = new URL(candidate);\n } catch {\n throw new MaytesError(MaytesErrorCode.Config, `baseUrl is not a valid URL: ${candidate}`);\n }\n if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n `baseUrl must use http or https; got ${parsed.protocol}`,\n );\n }\n return candidate;\n}\n\nfunction requireCheckoutId(id: unknown): string {\n if (typeof id !== 'string' || id.trim().length === 0) {\n throw new MaytesError(MaytesErrorCode.Config, 'checkoutId is required (non-empty string)');\n }\n return id.trim();\n}\n\nexport function buildCheckoutUrl(\n environment: InternalEnvironment,\n baseUrlOverride: string | undefined,\n checkoutId: string,\n): string {\n const id = requireCheckoutId(checkoutId);\n const base = normalizeBaseUrl(resolveBaseUrl(environment, baseUrlOverride));\n return `${base}/?id=${encodeURIComponent(id)}`;\n}\n\nexport function performRedirect(url: string, replace: boolean): void {\n if (typeof window === 'undefined') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'redirectToCheckout requires a browser context (window is undefined)',\n );\n }\n if (replace) {\n window.location.replace(url);\n } else {\n window.location.href = url;\n }\n}\n\nexport function makeRedirect(\n environment: InternalEnvironment,\n baseUrlOverride: string | undefined,\n) {\n return {\n checkoutUrl(opts: CheckoutUrlOptions): string {\n return buildCheckoutUrl(environment, baseUrlOverride, opts.checkoutId);\n },\n redirectToCheckout(opts: RedirectOptions): void {\n const url = buildCheckoutUrl(environment, baseUrlOverride, opts.checkoutId);\n performRedirect(url, opts.replace === true);\n },\n };\n}\n","export const SDK_VERSION = '1.0.1';\n","import { foundation } from './foundation/brand.generated.js';\nimport { SDK_VERSION } from './version.js';\n\nconst STYLE_ATTR = 'data-maytes-checkout-button';\nconst STYLE_SELECTOR = `style[${STYLE_ATTR}=\"${SDK_VERSION}\"]`;\nconst REFCOUNT_KEY = `__maytes_checkout_button_styles_refs_${SDK_VERSION}__`;\n\ninterface RefCountWindow extends Window {\n [REFCOUNT_KEY]?: number;\n}\n\n// WEB-LOCAL: no foundation role (a11y focus ring); see MOB-994\nconst FOCUS_RING = '#6b8aff';\n\nconst BUTTON_CSS = `\n.maytes-checkout-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.57em;\n padding: 0.71em 1.29em;\n border: none;\n border-radius: 999px;\n background: ${foundation.brand.primary};\n color: ${foundation.text.primaryInverse};\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n font-size: var(--maytes-button-font-size, 14px);\n font-weight: 600;\n line-height: 1;\n cursor: pointer;\n user-select: none;\n transition: background-color 120ms ease, opacity 120ms ease;\n}\n.maytes-checkout-button:hover { background: ${foundation.palette.burgundy[700]}; }\n.maytes-checkout-button:focus-visible {\n outline: 2px solid ${FOCUS_RING};\n outline-offset: 2px;\n}\n.maytes-checkout-button[aria-disabled='true'] {\n cursor: progress;\n opacity: 0.7;\n}\n.maytes-checkout-button--block {\n display: flex;\n width: 100%;\n}\n.maytes-checkout-button__logo { height: 1em; width: auto; flex: none; }\n.maytes-checkout-button__spinner {\n height: 1em;\n width: 1em;\n border-radius: 50%;\n border: 0.14em solid currentColor;\n border-right-color: transparent;\n animation: maytes-checkout-button-spin 0.7s linear infinite;\n}\n@keyframes maytes-checkout-button-spin {\n to { transform: rotate(360deg); }\n}\n.maytes-checkout-overlay {\n position: fixed;\n inset: 0;\n width: 100vw;\n height: 100vh;\n max-width: 100vw;\n max-height: 100vh;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n z-index: 2147483646;\n font: 500 15px/1.4 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n}\n.maytes-checkout-overlay[open] {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.maytes-checkout-overlay::backdrop {\n background: rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n}\n.maytes-checkout-overlay__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n}\n.maytes-checkout-overlay__spinner {\n width: 2.5rem;\n height: 2.5rem;\n border: 4px solid rgba(255, 255, 255, 0.3);\n border-top-color: ${foundation.brand.secondary};\n border-radius: 50%;\n animation: maytes-checkout-button-spin 0.8s linear infinite;\n}\n.maytes-checkout-overlay__text {\n color: ${foundation.text.primaryInverse};\n font-size: 1.125rem;\n font-weight: 500;\n margin: 0;\n}\n.maytes-checkout-overlay__link {\n color: rgba(255, 255, 255, 0.7);\n font-size: 0.875rem;\n text-decoration: underline;\n text-underline-offset: 4px;\n background: none;\n border: none;\n cursor: pointer;\n font-family: inherit;\n transition: color 0.15s;\n}\n.maytes-checkout-overlay__link:hover { color: ${foundation.text.primaryInverse}; }\n@media (prefers-reduced-motion: reduce) {\n .maytes-checkout-overlay__spinner,\n .maytes-checkout-button__spinner { animation: none; }\n}\n`;\n\nexport const POPUP_LOADING_CSS = `\n:root { color-scheme: light; }\nhtml, body { margin: 0; height: 100%; }\nbody.maytes-popup-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n background: ${foundation.brand.primary};\n color: ${foundation.text.primaryInverse};\n font: 500 16px/1.45 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n}\n.maytes-popup-loading__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n padding: 2rem;\n text-align: center;\n}\n.maytes-popup-loading__logo { height: 2.75rem; width: auto; }\n.maytes-popup-loading__spinner {\n width: 2.5rem;\n height: 2.5rem;\n border: 4px solid rgba(255, 255, 255, 0.25);\n border-top-color: ${foundation.brand.secondary};\n border-radius: 50%;\n animation: maytes-checkout-button-spin 0.8s linear infinite;\n}\n@keyframes maytes-checkout-button-spin {\n to { transform: rotate(360deg); }\n}\n.maytes-popup-loading__text { margin: 0; font-size: 1.05rem; font-weight: 500; }\n.maytes-popup-loading__slow {\n margin: 0;\n font-size: 0.9rem;\n font-weight: 400;\n color: rgba(255, 255, 255, 0.75);\n max-width: 22rem;\n}\n.maytes-popup-loading__slow[hidden] { display: none; }\n@media (prefers-reduced-motion: reduce) {\n .maytes-popup-loading__spinner { animation: none; }\n}\n`;\n\nfunction getRefCount(): number {\n const w = window as RefCountWindow;\n return w[REFCOUNT_KEY] ?? 0;\n}\n\nfunction setRefCount(value: number): void {\n const w = window as RefCountWindow;\n w[REFCOUNT_KEY] = value;\n}\n\nexport function ensureStylesInjected(cspNonce: string | undefined): void {\n const next = getRefCount() + 1;\n setRefCount(next);\n if (document.head.querySelector(STYLE_SELECTOR) !== null) return;\n const el = document.createElement('style');\n el.setAttribute(STYLE_ATTR, SDK_VERSION);\n if (cspNonce !== undefined && cspNonce !== '') el.setAttribute('nonce', cspNonce);\n el.textContent = BUTTON_CSS;\n document.head.appendChild(el);\n}\n\nexport function releaseStyles(): void {\n const next = Math.max(0, getRefCount() - 1);\n setRefCount(next);\n if (next > 0) return;\n const el = document.head.querySelector(STYLE_SELECTOR);\n if (el !== null) el.remove();\n}\n\nexport function resetStylesForTests(): void {\n setRefCount(0);\n document.head.querySelectorAll(`style[${STYLE_ATTR}]`).forEach((el) => el.remove());\n}\n","import { buildMaytesLogo } from './branding.js';\nimport { foundation } from './foundation/brand.generated.js';\nimport { MaytesError, MaytesErrorCode } from './errors.js';\nimport { hideOverlay, showOverlay } from './overlay.js';\nimport { buildCheckoutUrl, isHttpUrl } from './redirect.js';\nimport { ensureStylesInjected, POPUP_LOADING_CSS, releaseStyles } from './styles.js';\nimport type { InstanceState } from './state.js';\nimport type { RenderButtonCleanup, RenderButtonMode, RenderButtonOptions } from './types.js';\n\nconst POPUP_WIDTH = 500;\nconst POPUP_HEIGHT = 800;\nconst POPUP_POLL_INTERVAL_MS = 500;\nconst MOBILE_MAX_WIDTH = 600;\nconst SLOW_NETWORK_DELAY_MS = 8000;\n\nfunction buildLogo(): SVGSVGElement {\n const svg = buildMaytesLogo('1em', 'currentColor');\n svg.setAttribute('class', 'maytes-checkout-button__logo');\n svg.setAttribute('aria-hidden', 'true');\n return svg;\n}\n\nfunction buildSpinner(): HTMLSpanElement {\n const spinner = document.createElement('span');\n spinner.className = 'maytes-checkout-button__spinner';\n spinner.setAttribute('aria-hidden', 'true');\n return spinner;\n}\n\nfunction isValidCheckoutResult(value: unknown): value is { checkoutId: string; checkoutUrl?: string } {\n if (typeof value !== 'object' || value === null) return false;\n const obj = value as { checkoutId?: unknown; checkoutUrl?: unknown };\n if (typeof obj.checkoutId !== 'string' || obj.checkoutId.trim().length === 0) return false;\n if (obj.checkoutUrl !== undefined) {\n if (typeof obj.checkoutUrl !== 'string' || obj.checkoutUrl.trim().length === 0) return false;\n if (!isHttpUrl(obj.checkoutUrl)) return false;\n }\n return true;\n}\n\nfunction isSecurityError(err: unknown): boolean {\n return err instanceof DOMException && err.name === 'SecurityError';\n}\n\nfunction refocusPopup(popup: Window): void {\n try { popup.focus(); } catch (err) {\n if (!isSecurityError(err)) throw err;\n }\n}\n\nexport function closePopupWindow(popup: Window | null): void {\n if (popup === null) return;\n try {\n if (!popup.closed) popup.close();\n } catch (err) {\n if (!isSecurityError(err)) throw err;\n }\n}\n\nfunction popupFeatures(): string {\n const screenWidth = window.screen?.width ?? POPUP_WIDTH;\n const screenHeight = window.screen?.height ?? POPUP_HEIGHT;\n const left = Math.max(0, Math.round((screenWidth - POPUP_WIDTH) / 2));\n const top = Math.max(0, Math.round((screenHeight - POPUP_HEIGHT) / 2));\n return `popup=yes,width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},resizable=yes,scrollbars=yes`;\n}\n\nexport function stopPopupPoll(state: InstanceState): void {\n if (state.popupPollHandle !== null) {\n clearInterval(state.popupPollHandle);\n state.popupPollHandle = null;\n }\n}\n\nfunction startPopupPoll(state: InstanceState, onClose: () => void): void {\n stopPopupPoll(state);\n state.popupPollHandle = setInterval(() => {\n const popup = state.popupWindow;\n if (popup === null || popup.closed) {\n stopPopupPoll(state);\n state.popupWindow = null;\n onClose();\n }\n }, POPUP_POLL_INTERVAL_MS);\n}\n\nfunction isMobileViewport(): boolean {\n return window.innerWidth <= MOBILE_MAX_WIDTH;\n}\n\nfunction openBlankPopup(state: InstanceState): Window | null {\n return window.open('about:blank', state.popupName, popupFeatures());\n}\n\nfunction navigatePopup(popup: Window, url: string): void {\n popup.location.replace(url);\n}\n\nfunction removePopupChildren(doc: Document): void {\n while (doc.body.firstChild !== null) doc.body.removeChild(doc.body.firstChild);\n}\n\nfunction paintPopupLoadingScreen(popup: Window, cspNonce: string | undefined): void {\n const doc = popup.document as Document | null;\n if (doc === null || doc.head === null || doc.body === null) return;\n doc.title = 'Maytes checkout';\n doc.documentElement.lang = 'en';\n const style = doc.createElement('style');\n if (cspNonce !== undefined && cspNonce !== '') style.setAttribute('nonce', cspNonce);\n style.textContent = POPUP_LOADING_CSS;\n doc.head.appendChild(style);\n\n doc.body.classList.add('maytes-popup-loading');\n removePopupChildren(doc);\n\n const content = doc.createElement('main');\n content.className = 'maytes-popup-loading__content';\n content.setAttribute('role', 'status');\n content.setAttribute('aria-live', 'polite');\n\n const logo = buildMaytesLogo('2.75rem', foundation.text.primaryInverse);\n logo.setAttribute('class', 'maytes-popup-loading__logo');\n logo.setAttribute('aria-hidden', 'true');\n content.appendChild(logo);\n\n const spinner = doc.createElement('div');\n spinner.className = 'maytes-popup-loading__spinner';\n spinner.setAttribute('aria-hidden', 'true');\n content.appendChild(spinner);\n\n const text = doc.createElement('p');\n text.className = 'maytes-popup-loading__text';\n text.textContent = 'Completing checkout with Maytes…';\n content.appendChild(text);\n\n const slow = doc.createElement('p');\n slow.className = 'maytes-popup-loading__slow';\n slow.hidden = true;\n slow.textContent = 'Still connecting. This can take a moment on slow networks.';\n content.appendChild(slow);\n\n doc.body.appendChild(content);\n setTimeout(() => { slow.hidden = false; }, SLOW_NETWORK_DELAY_MS);\n}\n\nexport function renderButton(\n state: InstanceState,\n container: HTMLElement,\n options: RenderButtonOptions = {},\n): RenderButtonCleanup {\n if (state.destroyed) {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'renderButton() called on a destroyed Maytes instance',\n );\n }\n if (!(container instanceof HTMLElement)) {\n throw new MaytesError(MaytesErrorCode.Config, 'renderButton(container) requires an HTMLElement');\n }\n\n ensureStylesInjected(state.config.cspNonce);\n\n const label = options.label ?? 'Split with';\n const block = options.block === true;\n const mode: RenderButtonMode = options.mode ?? 'redirect';\n if (mode !== 'redirect' && mode !== 'popup') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n \"renderButton({ mode }) must be 'redirect' or 'popup'\",\n );\n }\n\n const button = document.createElement('button');\n button.type = 'button';\n button.className = block\n ? 'maytes-checkout-button maytes-checkout-button--block'\n : 'maytes-checkout-button';\n button.setAttribute('aria-label', `${label} Maytes`);\n\n const labelNode = document.createTextNode(`${label} `);\n const logo = buildLogo();\n button.appendChild(labelNode);\n button.appendChild(logo);\n\n const setBusy = (busy: boolean) => {\n state.busy = busy;\n if (busy) {\n button.setAttribute('aria-disabled', 'true');\n button.setAttribute('aria-busy', 'true');\n logo.replaceWith(buildSpinner());\n } else {\n button.removeAttribute('aria-disabled');\n button.removeAttribute('aria-busy');\n const currentIndicator = button.querySelector('.maytes-checkout-button__spinner, .maytes-checkout-button__logo');\n if (currentIndicator !== null) currentIndicator.replaceWith(buildLogo());\n }\n };\n\n const teardownActiveCheckout = () => {\n hideOverlay(state);\n setBusy(false);\n };\n\n const onPopupClosed = () => {\n teardownActiveCheckout();\n document.dispatchEvent(new CustomEvent('maytes:checkout-closed'));\n };\n\n const dispatchFailed = (reason: string, cause?: unknown): void => {\n document.dispatchEvent(new CustomEvent('maytes:checkout-failed', {\n detail: cause === undefined ? { reason } : { reason, cause },\n }));\n };\n\n const dispatchRedirected = (url: string): void => {\n document.dispatchEvent(new CustomEvent('maytes:checkout-redirected', { detail: { url } }));\n };\n\n const redirectSameWindow = (url: string): void => {\n teardownActiveCheckout();\n dispatchRedirected(url);\n window.location.href = url;\n };\n\n const closeOrphanPopup = (popup: Window | null): void => {\n closePopupWindow(popup);\n stopPopupPoll(state);\n if (state.popupWindow === popup) state.popupWindow = null;\n teardownActiveCheckout();\n };\n\n const handleClick = async (): Promise<void> => {\n if (state.busy || state.destroyed) return;\n setBusy(true);\n const shouldUsePopup = mode === 'popup' && !isMobileViewport();\n const popup = shouldUsePopup ? openBlankPopup(state) : null;\n if (popup !== null) {\n state.popupWindow = popup;\n state.popupNavigated = false;\n refocusPopup(popup);\n paintPopupLoadingScreen(popup, state.config.cspNonce);\n showOverlay(state);\n document.dispatchEvent(new CustomEvent('maytes:checkout-opened'));\n startPopupPoll(state, onPopupClosed);\n }\n try {\n const result = await state.config.createCheckout();\n if (state.destroyed || (popup !== null && popup.closed)) {\n closePopupWindow(popup);\n return;\n }\n if (!isValidCheckoutResult(result)) {\n closeOrphanPopup(popup);\n const shapeError = new MaytesError(\n MaytesErrorCode.Config,\n 'createCheckout must resolve to { checkoutId: string, checkoutUrl?: http(s) URL }',\n );\n console.error(shapeError);\n dispatchFailed('invalid-shape', shapeError);\n return;\n }\n const url = result.checkoutUrl ?? buildCheckoutUrl(\n state.config.environment,\n state.config.baseUrl,\n result.checkoutId,\n );\n if (popup !== null) {\n state.popupNavigated = true;\n navigatePopup(popup, url);\n } else {\n if (shouldUsePopup) {\n console.warn('[maytes/checkout-button] popup was blocked; falling back to same-window redirect');\n }\n redirectSameWindow(url);\n }\n } catch (err) {\n if (popup !== null && popup.closed) return;\n closeOrphanPopup(popup);\n console.error('[maytes/checkout-button] createCheckout failed:', err);\n dispatchFailed('create-checkout-rejected', err);\n }\n };\n\n button.addEventListener('click', handleClick);\n container.appendChild(button);\n\n let cleaned = false;\n const teardown = (): void => {\n if (cleaned) return;\n cleaned = true;\n button.removeEventListener('click', handleClick);\n button.remove();\n state.teardowns.delete(teardown);\n releaseStyles();\n };\n state.teardowns.add(teardown);\n\n return teardown;\n}\n","import type { MaytesOptions, MaytesInternalOptions } from './types.js';\n\nexport interface InstanceState {\n config: MaytesOptions & MaytesInternalOptions;\n busy: boolean;\n overlayEl: HTMLDialogElement | null;\n popupWindow: Window | null;\n popupNavigated: boolean;\n popupName: string;\n popupPollHandle: ReturnType<typeof setInterval> | null;\n destroyed: boolean;\n teardowns: Set<() => void>;\n}\n\nfunction popupNameSuffix(): string {\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction generatePopupName(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n try {\n return `maytes-checkout-${crypto.randomUUID()}`;\n } catch {\n return `maytes-checkout-${popupNameSuffix()}`;\n }\n }\n return `maytes-checkout-${popupNameSuffix()}`;\n}\n\nexport function createInstanceState(\n options: MaytesOptions,\n internal: MaytesInternalOptions | undefined,\n): InstanceState {\n const config: MaytesOptions & MaytesInternalOptions = {\n createCheckout: options.createCheckout,\n environment: options.environment,\n };\n if (internal?.baseUrl !== undefined) config.baseUrl = internal.baseUrl;\n if (internal?.cspNonce !== undefined) config.cspNonce = internal.cspNonce;\n return {\n config,\n busy: false,\n overlayEl: null,\n popupWindow: null,\n popupNavigated: false,\n popupName: generatePopupName(),\n popupPollHandle: null,\n destroyed: false,\n teardowns: new Set(),\n };\n}\n","import { closePopupWindow, renderButton, stopPopupPoll } from './button.js';\nimport { isValidEnvironment } from './env.js';\nimport { MaytesError, MaytesErrorCode } from './errors.js';\nimport { hideOverlay } from './overlay.js';\nimport { makeRedirect, normalizeBaseUrl } from './redirect.js';\nimport { createInstanceState } from './state.js';\nimport type {\n MaytesFactory,\n MaytesInternalOptions,\n MaytesOptions,\n MaytesSDK,\n} from './types.js';\n\nfunction validateOptions(options: MaytesOptions): void {\n if (typeof options !== 'object' || options === null) {\n throw new MaytesError(MaytesErrorCode.Config, 'Maytes() requires an options object');\n }\n if (typeof options.createCheckout !== 'function') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'Maytes({ createCheckout }) must be an async function returning { checkoutId }',\n );\n }\n if (!isValidEnvironment(options.environment)) {\n throw new MaytesError(\n MaytesErrorCode.Config,\n \"Maytes({ environment }) must be 'sandbox' or 'production'\",\n );\n }\n}\n\nfunction validateInternalOptions(internal: MaytesInternalOptions | undefined): void {\n if (internal === undefined) return;\n if (internal.baseUrl !== undefined) normalizeBaseUrl(internal.baseUrl);\n}\n\nexport const Maytes: MaytesFactory = (options, internal) => {\n validateOptions(options);\n validateInternalOptions(internal);\n\n const state = createInstanceState(options, internal);\n const { checkoutUrl, redirectToCheckout } = makeRedirect(\n state.config.environment,\n state.config.baseUrl,\n );\n\n const sdk: MaytesSDK = {\n renderButton(container, opts) {\n return renderButton(state, container, opts);\n },\n redirectToCheckout(opts) {\n redirectToCheckout(opts);\n },\n checkoutUrl(opts) {\n return checkoutUrl(opts);\n },\n destroy() {\n if (state.destroyed) return;\n state.destroyed = true;\n stopPopupPoll(state);\n hideOverlay(state);\n if (!state.popupNavigated) closePopupWindow(state.popupWindow);\n state.popupWindow = null;\n state.busy = false;\n for (const teardown of [...state.teardowns]) teardown();\n state.teardowns.clear();\n },\n };\n\n return sdk;\n};\n"],"mappings":"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","names":["src_exports","__export","Maytes","MaytesError","MaytesErrorCode","SDK_VERSION","foundation","MAYTES_RICHE","foundation","MAYTES_WALLET","SVG_NS","MAYTES_LOGO_PATHS","buildMaytesLogo","height","color","svg","d","path","MaytesErrorCode","MaytesError","code","message","TITLE_ID","STYLE_MARKER","NATIVE_BACKDROP_FALLBACK","tryReadTopDocument","topDoc","err","resolveOverlayHost","ensureOverlayStylesInTopDocument","host","localStyle","copy","nonce","buildOverlay","state","dialog","content","logoDiv","buildMaytesLogo","MAYTES_WALLET","spinner","text","link","event","hideOverlay","applyNativeBackdropFallback","showOverlay","ENVIRONMENT_BASE_URLS","isValidEnvironment","value","resolveBaseUrl","environment","override","url","MaytesError","MaytesErrorCode","isHttpUrl","value","parsed","normalizeBaseUrl","rawBaseUrl","candidate","MaytesError","MaytesErrorCode","requireCheckoutId","id","buildCheckoutUrl","environment","baseUrlOverride","checkoutId","resolveBaseUrl","performRedirect","url","replace","makeRedirect","opts","SDK_VERSION","STYLE_ATTR","STYLE_SELECTOR","SDK_VERSION","REFCOUNT_KEY","FOCUS_RING","BUTTON_CSS","foundation","POPUP_LOADING_CSS","getRefCount","setRefCount","value","w","ensureStylesInjected","cspNonce","next","el","releaseStyles","POPUP_WIDTH","POPUP_HEIGHT","POPUP_POLL_INTERVAL_MS","MOBILE_MAX_WIDTH","SLOW_NETWORK_DELAY_MS","buildLogo","svg","buildMaytesLogo","buildSpinner","spinner","isValidCheckoutResult","value","obj","isHttpUrl","isSecurityError","err","refocusPopup","popup","closePopupWindow","popupFeatures","screenWidth","screenHeight","left","top","stopPopupPoll","state","startPopupPoll","onClose","isMobileViewport","openBlankPopup","navigatePopup","url","removePopupChildren","doc","paintPopupLoadingScreen","cspNonce","style","POPUP_LOADING_CSS","content","logo","foundation","text","slow","renderButton","container","options","MaytesError","MaytesErrorCode","ensureStylesInjected","label","block","mode","button","labelNode","setBusy","busy","currentIndicator","teardownActiveCheckout","hideOverlay","onPopupClosed","dispatchFailed","reason","cause","dispatchRedirected","redirectSameWindow","closeOrphanPopup","handleClick","shouldUsePopup","showOverlay","result","shapeError","buildCheckoutUrl","cleaned","teardown","releaseStyles","popupNameSuffix","generatePopupName","createInstanceState","options","internal","config","validateOptions","options","MaytesError","MaytesErrorCode","isValidEnvironment","validateInternalOptions","internal","normalizeBaseUrl","Maytes","state","createInstanceState","checkoutUrl","redirectToCheckout","makeRedirect","container","opts","renderButton","stopPopupPoll","hideOverlay","closePopupWindow","teardown","Maytes"]}
|
package/dist/checkout-button.mjs
CHANGED
|
@@ -248,7 +248,7 @@ function makeRedirect(environment, baseUrlOverride) {
|
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
// src/version.ts
|
|
251
|
-
var SDK_VERSION = "1.0.
|
|
251
|
+
var SDK_VERSION = "1.0.1";
|
|
252
252
|
|
|
253
253
|
// src/styles.ts
|
|
254
254
|
var STYLE_ATTR = "data-maytes-checkout-button";
|
|
@@ -625,6 +625,7 @@ function renderButton(state, container, options = {}) {
|
|
|
625
625
|
const popup = shouldUsePopup ? openBlankPopup(state) : null;
|
|
626
626
|
if (popup !== null) {
|
|
627
627
|
state.popupWindow = popup;
|
|
628
|
+
state.popupNavigated = false;
|
|
628
629
|
refocusPopup(popup);
|
|
629
630
|
paintPopupLoadingScreen(popup, state.config.cspNonce);
|
|
630
631
|
showOverlay(state);
|
|
@@ -653,6 +654,7 @@ function renderButton(state, container, options = {}) {
|
|
|
653
654
|
result.checkoutId
|
|
654
655
|
);
|
|
655
656
|
if (popup !== null) {
|
|
657
|
+
state.popupNavigated = true;
|
|
656
658
|
navigatePopup(popup, url);
|
|
657
659
|
} else {
|
|
658
660
|
if (shouldUsePopup) {
|
|
@@ -708,6 +710,7 @@ function createInstanceState(options, internal) {
|
|
|
708
710
|
busy: false,
|
|
709
711
|
overlayEl: null,
|
|
710
712
|
popupWindow: null,
|
|
713
|
+
popupNavigated: false,
|
|
711
714
|
popupName: generatePopupName(),
|
|
712
715
|
popupPollHandle: null,
|
|
713
716
|
destroyed: false,
|
|
@@ -760,7 +763,7 @@ var Maytes = (options, internal) => {
|
|
|
760
763
|
state.destroyed = true;
|
|
761
764
|
stopPopupPoll(state);
|
|
762
765
|
hideOverlay(state);
|
|
763
|
-
closePopupWindow(state.popupWindow);
|
|
766
|
+
if (!state.popupNavigated) closePopupWindow(state.popupWindow);
|
|
764
767
|
state.popupWindow = null;
|
|
765
768
|
state.busy = false;
|
|
766
769
|
for (const teardown of [...state.teardowns]) teardown();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/foundation/brand.generated.ts","../src/branding.ts","../src/errors.ts","../src/overlay.ts","../src/env.ts","../src/redirect.ts","../src/version.ts","../src/styles.ts","../src/button.ts","../src/state.ts","../src/maytes.ts","../src/index.ts"],"sourcesContent":["// GENERATED by scripts/sync-foundation-tokens.mjs from kttipay/designsystem v0.3.0 web/tokens.ts — DO NOT EDIT. Refresh: npm run sync:foundation -- --tag vX.Y.Z\n\n// Subset of the foundation used by the checkout button and the mock showcase:\n// brand.primary <- colorsLight.brand.primary (burgundy/600)\n// brand.secondary <- colorsLight.brand.secondary (orange/500)\n// palette.burgundy.700 <- palette.burgundy.700 (hover shade for brand.primary)\n// palette.base.white <- palette.base.white\n// text.primaryInverse <- colorsLight.text.primaryInverse (text on brand.primary)\n\nexport const FOUNDATION_TAG = 'v0.3.0';\n\nexport const foundation = {\n brand: {\n primary: '#4A0324',\n secondary: '#FE572A',\n },\n palette: {\n burgundy: {\n 700: '#3B021D',\n },\n base: {\n white: '#FFFFFF',\n },\n },\n text: {\n primaryInverse: '#FFFFFF',\n },\n} as const;\n","import { foundation } from './foundation/brand.generated.js';\n\nexport const MAYTES_RICHE = foundation.brand.primary;\nexport const MAYTES_WALLET = foundation.brand.secondary;\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nconst MAYTES_LOGO_PATHS: readonly string[] = [\n 'M392,6.11c-.3-1.61-1.72-2.79-3.38-2.79h-99.97c-1.66,0-3.09,1.19-3.38,2.79l-51.14,275.49c-.36,2.07,1.24,4.03,3.38,4.03h71.07c1.72,0,3.15-1.24,3.38-2.97l5.57-42.24c.23-1.72,1.66-2.97,3.38-2.97h32.45c1.72,0,3.15,1.24,3.38,2.97l5.57,42.24c.23,1.72,1.66,2.97,3.38,2.97h74.46c2.14,0,3.8-1.96,3.38-4.03L392,6.11ZM344.42,174.89h-14.59c-2.07,0-3.62-1.84-3.38-3.86l9.55-74.33c.06-.48.48-.83.95-.83s.89.35.95.83l9.91,74.33c.3,2.02-1.31,3.86-3.38,3.86h0Z',\n 'M218.86,3.32h-77.72c-1.48,0-2.85,1.01-3.27,2.44l-25.63,83.65c-.12.35-.41.6-.83.6s-.71-.23-.83-.6L84.9,5.76c-.41-1.42-1.78-2.44-3.27-2.44H3.44c-1.9,0-3.44,1.54-3.44,3.44v275.43c0,1.9,1.54,3.45,3.44,3.45h71.26c1.9,0,3.44-1.54,3.44-3.45v-77.3l-.83-51.44c0-.53.41-.95.95-.95.41,0,.77.3.89.71l14.42,59.62c.35,1.54,1.72,2.61,3.32,2.61h28.42c1.61,0,2.97-1.06,3.32-2.61l14.47-59.79c.12-.3.35-.53.71-.53.41,0,.71.3.71.71l-.42,51.67-.06.06v77.3c0,1.9,1.54,3.44,3.44,3.44h71.37c1.9,0,3.44-1.54,3.44-3.44V6.77c0-1.9-1.54-3.44-3.44-3.44h0Z',\n 'M1179.6,147c-9.73-11.8-20.71-21.12-47.76-38.44-27.06-16.91-31.69-23.26-31.69-31.68,0-6.76,3.8-11.39,10.56-11.39,8.19,0,14.18,10.44,15.43,26.28.18,2.14,2.13,3.74,4.27,3.26l63.66-14.12c1.6-.36,2.73-1.9,2.61-3.56-3.97-49.3-35-77.36-86.44-77.36-27.47,0-50.25,8.07-67.63,24.09-17.39,16.01-25.82,36.72-25.82,62.53,0,16.91,4.22,32.09,13.12,45.62,8.9,13.53,25.75,28.3,51.56,44.38,14.77,9.32,24.09,16.49,27.88,21.12,4.21,4.63,6.35,9.31,6.35,14.36,0,6.35-4.63,10.56-11.81,10.56-10.5,0-18.15-11.87-19.28-29.66-.12-2.25-2.31-3.91-4.51-3.26l-63.6,18.68c-1.55.42-2.55,1.84-2.43,3.44,1.78,22.84,11.03,41.41,26.88,55.65,16.49,14.36,36.77,21.53,64.24,21.53s50.32-7.59,67.64-23.26c17.74-15.66,26.64-36.37,26.64-61.28,0-22.01-6.35-40.58-19.87-57.49v-.02Z',\n 'M1002.33,3.32h-146.18c-1.9,0-3.44,1.54-3.44,3.44v275.49c0,1.9,1.54,3.44,3.44,3.44h146.18c1.9,0,3.44-1.54,3.44-3.44v-62.05c0-1.9-1.54-3.44-3.44-3.44h-63.3c-1.9,0-3.45-1.54-3.45-3.45v-34.58c0-1.9,1.54-3.44,3.45-3.44v.18h53.63c1.9,0,3.45-1.54,3.45-3.44v-57.84c0-1.9-1.55-3.44-3.45-3.44h-53.63c-1.9,0-3.45-1.54-3.45-3.44v-31.61c0-1.9,1.54-3.44,3.45-3.44h63.3c1.9,0,3.44-1.54,3.44-3.44V6.77c0-1.9-1.54-3.44-3.44-3.44Z',\n 'M840.22,6.77c0-1.9-1.54-3.44-3.44-3.44h-175.31c-1.9,0-3.45,1.54-3.45,3.44v62c0,1.9,1.54,3.44,3.45,3.44h41.77c1.9,0,3.44,1.54,3.44,3.44v206.62c0,1.9,1.54,3.45,3.44,3.45h78.14c1.9,0,3.45-1.54,3.45-3.45V75.7c0-1.9,1.54-3.44,3.45-3.44h41.77c1.9,0,3.44-1.54,3.44-3.44h-.12V6.77h-.02Z',\n 'M607.71,3.38l-.06-.06c-23.23,0-32.59,48.08-40.22,80.25-1.38,5.82-4.74,18.31-7.75,27.31-4.44,13.26-10.68,30.43-22.21,31.93-18.85,2.47-7.14-39.43-7.14-39.43l21.67-92.98c.84-3.6-1.92-7.02-5.58-7.02h-85.49c-3.12,0-5.64,2.46-5.71,5.64l-1.68,75.09c-.48,21.25,5.64,42.31,18.37,59.37,12.72,17.05,38.81,28,63.12,25.9,52.48-7.08,65.46-70.49,68.4-71.1,3.06-.64,2.56,9.3.84,22.15-2.2,16.42-8.46,32.1-18.52,45.27-5.3,6.95-11.13,12.9-16.55,16.37-32.96,22.51-95.69,9.48-122.4-2.7-3.66-1.68-7.75,1.02-7.75,5.04l16.39,83.98c0,.84.18,1.68.54,2.4,9.48,17.83,53.31,19.33,74.43,17.77,32.18-2.04,100.37-29.35,115.32-122.33,12.17-103.08-1.14-162.91-38.06-162.84l.02-.02Z',\n];\n\nexport function buildMaytesLogo(height: string, color: string): SVGSVGElement {\n const svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('xmlns', SVG_NS);\n svg.setAttribute('viewBox', '0 0 1199.47 289.04');\n svg.style.height = height;\n svg.style.width = 'auto';\n svg.style.color = color;\n for (const d of MAYTES_LOGO_PATHS) {\n const path = document.createElementNS(SVG_NS, 'path');\n path.setAttribute('fill', 'currentColor');\n path.setAttribute('d', d);\n svg.appendChild(path);\n }\n return svg;\n}\n","export const MaytesErrorCode = {\n Config: 'CONFIG',\n} as const;\n\nexport type MaytesErrorCodeValue = (typeof MaytesErrorCode)[keyof typeof MaytesErrorCode];\n\nexport class MaytesError extends Error {\n readonly code: MaytesErrorCodeValue;\n\n constructor(code: MaytesErrorCodeValue, message: string) {\n super(message);\n this.code = code;\n this.name = 'MaytesError';\n }\n}\n","import { buildMaytesLogo, MAYTES_WALLET } from './branding.js';\nimport type { InstanceState } from './state.js';\n\nconst TITLE_ID = 'maytes-overlay-title';\nconst STYLE_MARKER = 'data-maytes-checkout-button-overlay-styles';\nconst NATIVE_BACKDROP_FALLBACK = 'rgba(0, 0, 0, 0.6)';\n\nfunction tryReadTopDocument(): Document | null {\n if (window.top === null || window.top === window) return null;\n try {\n const topDoc = window.top.document;\n return topDoc.body !== null ? topDoc : null;\n } catch (err) {\n if (!(err instanceof DOMException && err.name === 'SecurityError')) {\n console.warn('[maytes/checkout-button] unexpected error resolving overlay host', err);\n }\n return null;\n }\n}\n\nfunction resolveOverlayHost(): Document {\n return tryReadTopDocument() ?? document;\n}\n\nfunction ensureOverlayStylesInTopDocument(host: Document): void {\n if (host === document) return;\n if (host.querySelector(`style[${STYLE_MARKER}]`) !== null) return;\n const localStyle = document.head.querySelector('style[data-maytes-checkout-button]');\n if (localStyle === null) return;\n const copy = host.createElement('style');\n copy.setAttribute(STYLE_MARKER, '');\n const nonce = localStyle.getAttribute('nonce');\n if (nonce !== null) copy.setAttribute('nonce', nonce);\n copy.textContent = localStyle.textContent ?? '';\n host.head.appendChild(copy);\n}\n\nfunction buildOverlay(host: Document, state: InstanceState): HTMLDialogElement {\n const dialog = host.createElement('dialog');\n dialog.className = 'maytes-checkout-overlay';\n dialog.setAttribute('aria-labelledby', TITLE_ID);\n dialog.setAttribute('data-maytes-overlay', '');\n\n const content = host.createElement('div');\n content.className = 'maytes-checkout-overlay__content';\n\n const logoDiv = host.createElement('div');\n logoDiv.setAttribute('aria-hidden', 'true');\n logoDiv.appendChild(buildMaytesLogo('2.5rem', MAYTES_WALLET));\n content.appendChild(logoDiv);\n\n const spinner = host.createElement('div');\n spinner.className = 'maytes-checkout-overlay__spinner';\n spinner.setAttribute('role', 'status');\n spinner.setAttribute('aria-live', 'polite');\n spinner.setAttribute('aria-label', 'Checkout in progress');\n content.appendChild(spinner);\n\n const text = host.createElement('p');\n text.id = TITLE_ID;\n text.className = 'maytes-checkout-overlay__text';\n text.textContent = 'Completing checkout with Maytes…';\n content.appendChild(text);\n\n const link = host.createElement('button');\n link.className = 'maytes-checkout-overlay__link';\n link.type = 'button';\n link.textContent = 'Return to Maytes';\n link.addEventListener('click', () => {\n if (state.popupWindow !== null && !state.popupWindow.closed) {\n try { state.popupWindow.focus(); } catch (err) {\n if (!(err instanceof DOMException && err.name === 'SecurityError')) throw err;\n }\n }\n });\n content.appendChild(link);\n\n dialog.appendChild(content);\n\n dialog.addEventListener('cancel', (event) => {\n event.preventDefault();\n if (state.popupWindow !== null && !state.popupWindow.closed) state.popupWindow.close();\n hideOverlay(state);\n });\n\n return dialog;\n}\n\nfunction applyNativeBackdropFallback(dialog: HTMLDialogElement): void {\n dialog.style.background = NATIVE_BACKDROP_FALLBACK;\n}\n\nexport function showOverlay(state: InstanceState): void {\n if (state.overlayEl !== null) return;\n const host = resolveOverlayHost();\n ensureOverlayStylesInTopDocument(host);\n const dialog = buildOverlay(host, state);\n state.overlayEl = dialog;\n host.body.appendChild(dialog);\n if (typeof dialog.showModal === 'function') {\n try {\n dialog.showModal();\n } catch (err) {\n console.warn('[maytes/checkout-button] dialog.showModal failed; falling back to inline backdrop', err);\n dialog.setAttribute('open', '');\n applyNativeBackdropFallback(dialog);\n }\n } else {\n dialog.setAttribute('open', '');\n applyNativeBackdropFallback(dialog);\n }\n}\n\nexport function hideOverlay(state: InstanceState): void {\n if (state.overlayEl === null) return;\n const dialog = state.overlayEl;\n const host = dialog.ownerDocument;\n if (typeof dialog.close === 'function' && dialog.open) dialog.close();\n dialog.remove();\n if (host !== document) {\n host.head.querySelector(`style[${STYLE_MARKER}]`)?.remove();\n }\n state.overlayEl = null;\n}\n","import { MaytesError, MaytesErrorCode } from './errors.js';\nimport type { MaytesEnvironment } from './types.js';\n\nexport type InternalEnvironment = MaytesEnvironment | 'staging';\n\nconst ENVIRONMENT_BASE_URLS: Record<InternalEnvironment, string> = {\n staging: 'https://staging-checkout.maytes.co',\n sandbox: 'https://sandbox-checkout.maytes.co',\n production: 'https://checkout.maytes.co',\n};\n\nexport function isValidEnvironment(value: unknown): value is InternalEnvironment {\n return value === 'sandbox' || value === 'production' || value === 'staging';\n}\n\nexport function resolveBaseUrl(environment: InternalEnvironment, override: string | undefined): string {\n if (override !== undefined) return override;\n const url = ENVIRONMENT_BASE_URLS[environment];\n if (url === undefined) {\n throw new MaytesError(MaytesErrorCode.Config, `Unknown environment: ${String(environment)}`);\n }\n return url;\n}\n","import { MaytesError, MaytesErrorCode } from './errors.js';\nimport { resolveBaseUrl, type InternalEnvironment } from './env.js';\nimport type { CheckoutUrlOptions, RedirectOptions } from './types.js';\n\nexport function isHttpUrl(value: string): boolean {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n return false;\n }\n return parsed.protocol === 'https:' || parsed.protocol === 'http:';\n}\n\nexport function normalizeBaseUrl(rawBaseUrl: string): string {\n const candidate = rawBaseUrl.trim().replace(/\\/+$/, '');\n let parsed: URL;\n try {\n parsed = new URL(candidate);\n } catch {\n throw new MaytesError(MaytesErrorCode.Config, `baseUrl is not a valid URL: ${candidate}`);\n }\n if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n `baseUrl must use http or https; got ${parsed.protocol}`,\n );\n }\n return candidate;\n}\n\nfunction requireCheckoutId(id: unknown): string {\n if (typeof id !== 'string' || id.trim().length === 0) {\n throw new MaytesError(MaytesErrorCode.Config, 'checkoutId is required (non-empty string)');\n }\n return id.trim();\n}\n\nexport function buildCheckoutUrl(\n environment: InternalEnvironment,\n baseUrlOverride: string | undefined,\n checkoutId: string,\n): string {\n const id = requireCheckoutId(checkoutId);\n const base = normalizeBaseUrl(resolveBaseUrl(environment, baseUrlOverride));\n return `${base}/?id=${encodeURIComponent(id)}`;\n}\n\nexport function performRedirect(url: string, replace: boolean): void {\n if (typeof window === 'undefined') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'redirectToCheckout requires a browser context (window is undefined)',\n );\n }\n if (replace) {\n window.location.replace(url);\n } else {\n window.location.href = url;\n }\n}\n\nexport function makeRedirect(\n environment: InternalEnvironment,\n baseUrlOverride: string | undefined,\n) {\n return {\n checkoutUrl(opts: CheckoutUrlOptions): string {\n return buildCheckoutUrl(environment, baseUrlOverride, opts.checkoutId);\n },\n redirectToCheckout(opts: RedirectOptions): void {\n const url = buildCheckoutUrl(environment, baseUrlOverride, opts.checkoutId);\n performRedirect(url, opts.replace === true);\n },\n };\n}\n","export const SDK_VERSION = '1.0.0';\n","import { foundation } from './foundation/brand.generated.js';\nimport { SDK_VERSION } from './version.js';\n\nconst STYLE_ATTR = 'data-maytes-checkout-button';\nconst STYLE_SELECTOR = `style[${STYLE_ATTR}=\"${SDK_VERSION}\"]`;\nconst REFCOUNT_KEY = `__maytes_checkout_button_styles_refs_${SDK_VERSION}__`;\n\ninterface RefCountWindow extends Window {\n [REFCOUNT_KEY]?: number;\n}\n\n// WEB-LOCAL: no foundation role (a11y focus ring); see MOB-994\nconst FOCUS_RING = '#6b8aff';\n\nconst BUTTON_CSS = `\n.maytes-checkout-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.57em;\n padding: 0.71em 1.29em;\n border: none;\n border-radius: 999px;\n background: ${foundation.brand.primary};\n color: ${foundation.text.primaryInverse};\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n font-size: var(--maytes-button-font-size, 14px);\n font-weight: 600;\n line-height: 1;\n cursor: pointer;\n user-select: none;\n transition: background-color 120ms ease, opacity 120ms ease;\n}\n.maytes-checkout-button:hover { background: ${foundation.palette.burgundy[700]}; }\n.maytes-checkout-button:focus-visible {\n outline: 2px solid ${FOCUS_RING};\n outline-offset: 2px;\n}\n.maytes-checkout-button[aria-disabled='true'] {\n cursor: progress;\n opacity: 0.7;\n}\n.maytes-checkout-button--block {\n display: flex;\n width: 100%;\n}\n.maytes-checkout-button__logo { height: 1em; width: auto; flex: none; }\n.maytes-checkout-button__spinner {\n height: 1em;\n width: 1em;\n border-radius: 50%;\n border: 0.14em solid currentColor;\n border-right-color: transparent;\n animation: maytes-checkout-button-spin 0.7s linear infinite;\n}\n@keyframes maytes-checkout-button-spin {\n to { transform: rotate(360deg); }\n}\n.maytes-checkout-overlay {\n position: fixed;\n inset: 0;\n width: 100vw;\n height: 100vh;\n max-width: 100vw;\n max-height: 100vh;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n z-index: 2147483646;\n font: 500 15px/1.4 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n}\n.maytes-checkout-overlay[open] {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.maytes-checkout-overlay::backdrop {\n background: rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n}\n.maytes-checkout-overlay__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n}\n.maytes-checkout-overlay__spinner {\n width: 2.5rem;\n height: 2.5rem;\n border: 4px solid rgba(255, 255, 255, 0.3);\n border-top-color: ${foundation.brand.secondary};\n border-radius: 50%;\n animation: maytes-checkout-button-spin 0.8s linear infinite;\n}\n.maytes-checkout-overlay__text {\n color: ${foundation.text.primaryInverse};\n font-size: 1.125rem;\n font-weight: 500;\n margin: 0;\n}\n.maytes-checkout-overlay__link {\n color: rgba(255, 255, 255, 0.7);\n font-size: 0.875rem;\n text-decoration: underline;\n text-underline-offset: 4px;\n background: none;\n border: none;\n cursor: pointer;\n font-family: inherit;\n transition: color 0.15s;\n}\n.maytes-checkout-overlay__link:hover { color: ${foundation.text.primaryInverse}; }\n@media (prefers-reduced-motion: reduce) {\n .maytes-checkout-overlay__spinner,\n .maytes-checkout-button__spinner { animation: none; }\n}\n`;\n\nexport const POPUP_LOADING_CSS = `\n:root { color-scheme: light; }\nhtml, body { margin: 0; height: 100%; }\nbody.maytes-popup-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n background: ${foundation.brand.primary};\n color: ${foundation.text.primaryInverse};\n font: 500 16px/1.45 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n}\n.maytes-popup-loading__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n padding: 2rem;\n text-align: center;\n}\n.maytes-popup-loading__logo { height: 2.75rem; width: auto; }\n.maytes-popup-loading__spinner {\n width: 2.5rem;\n height: 2.5rem;\n border: 4px solid rgba(255, 255, 255, 0.25);\n border-top-color: ${foundation.brand.secondary};\n border-radius: 50%;\n animation: maytes-checkout-button-spin 0.8s linear infinite;\n}\n@keyframes maytes-checkout-button-spin {\n to { transform: rotate(360deg); }\n}\n.maytes-popup-loading__text { margin: 0; font-size: 1.05rem; font-weight: 500; }\n.maytes-popup-loading__slow {\n margin: 0;\n font-size: 0.9rem;\n font-weight: 400;\n color: rgba(255, 255, 255, 0.75);\n max-width: 22rem;\n}\n.maytes-popup-loading__slow[hidden] { display: none; }\n@media (prefers-reduced-motion: reduce) {\n .maytes-popup-loading__spinner { animation: none; }\n}\n`;\n\nfunction getRefCount(): number {\n const w = window as RefCountWindow;\n return w[REFCOUNT_KEY] ?? 0;\n}\n\nfunction setRefCount(value: number): void {\n const w = window as RefCountWindow;\n w[REFCOUNT_KEY] = value;\n}\n\nexport function ensureStylesInjected(cspNonce: string | undefined): void {\n const next = getRefCount() + 1;\n setRefCount(next);\n if (document.head.querySelector(STYLE_SELECTOR) !== null) return;\n const el = document.createElement('style');\n el.setAttribute(STYLE_ATTR, SDK_VERSION);\n if (cspNonce !== undefined && cspNonce !== '') el.setAttribute('nonce', cspNonce);\n el.textContent = BUTTON_CSS;\n document.head.appendChild(el);\n}\n\nexport function releaseStyles(): void {\n const next = Math.max(0, getRefCount() - 1);\n setRefCount(next);\n if (next > 0) return;\n const el = document.head.querySelector(STYLE_SELECTOR);\n if (el !== null) el.remove();\n}\n\nexport function resetStylesForTests(): void {\n setRefCount(0);\n document.head.querySelectorAll(`style[${STYLE_ATTR}]`).forEach((el) => el.remove());\n}\n","import { buildMaytesLogo } from './branding.js';\nimport { foundation } from './foundation/brand.generated.js';\nimport { MaytesError, MaytesErrorCode } from './errors.js';\nimport { hideOverlay, showOverlay } from './overlay.js';\nimport { buildCheckoutUrl, isHttpUrl } from './redirect.js';\nimport { ensureStylesInjected, POPUP_LOADING_CSS, releaseStyles } from './styles.js';\nimport type { InstanceState } from './state.js';\nimport type { RenderButtonCleanup, RenderButtonMode, RenderButtonOptions } from './types.js';\n\nconst POPUP_WIDTH = 500;\nconst POPUP_HEIGHT = 800;\nconst POPUP_POLL_INTERVAL_MS = 500;\nconst MOBILE_MAX_WIDTH = 600;\nconst SLOW_NETWORK_DELAY_MS = 8000;\n\nfunction buildLogo(): SVGSVGElement {\n const svg = buildMaytesLogo('1em', 'currentColor');\n svg.setAttribute('class', 'maytes-checkout-button__logo');\n svg.setAttribute('aria-hidden', 'true');\n return svg;\n}\n\nfunction buildSpinner(): HTMLSpanElement {\n const spinner = document.createElement('span');\n spinner.className = 'maytes-checkout-button__spinner';\n spinner.setAttribute('aria-hidden', 'true');\n return spinner;\n}\n\nfunction isValidCheckoutResult(value: unknown): value is { checkoutId: string; checkoutUrl?: string } {\n if (typeof value !== 'object' || value === null) return false;\n const obj = value as { checkoutId?: unknown; checkoutUrl?: unknown };\n if (typeof obj.checkoutId !== 'string' || obj.checkoutId.trim().length === 0) return false;\n if (obj.checkoutUrl !== undefined) {\n if (typeof obj.checkoutUrl !== 'string' || obj.checkoutUrl.trim().length === 0) return false;\n if (!isHttpUrl(obj.checkoutUrl)) return false;\n }\n return true;\n}\n\nfunction isSecurityError(err: unknown): boolean {\n return err instanceof DOMException && err.name === 'SecurityError';\n}\n\nfunction refocusPopup(popup: Window): void {\n try { popup.focus(); } catch (err) {\n if (!isSecurityError(err)) throw err;\n }\n}\n\nexport function closePopupWindow(popup: Window | null): void {\n if (popup === null) return;\n try {\n if (!popup.closed) popup.close();\n } catch (err) {\n if (!isSecurityError(err)) throw err;\n }\n}\n\nfunction popupFeatures(): string {\n const screenWidth = window.screen?.width ?? POPUP_WIDTH;\n const screenHeight = window.screen?.height ?? POPUP_HEIGHT;\n const left = Math.max(0, Math.round((screenWidth - POPUP_WIDTH) / 2));\n const top = Math.max(0, Math.round((screenHeight - POPUP_HEIGHT) / 2));\n return `popup=yes,width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},resizable=yes,scrollbars=yes`;\n}\n\nexport function stopPopupPoll(state: InstanceState): void {\n if (state.popupPollHandle !== null) {\n clearInterval(state.popupPollHandle);\n state.popupPollHandle = null;\n }\n}\n\nfunction startPopupPoll(state: InstanceState, onClose: () => void): void {\n stopPopupPoll(state);\n state.popupPollHandle = setInterval(() => {\n const popup = state.popupWindow;\n if (popup === null || popup.closed) {\n stopPopupPoll(state);\n state.popupWindow = null;\n onClose();\n }\n }, POPUP_POLL_INTERVAL_MS);\n}\n\nfunction isMobileViewport(): boolean {\n return window.innerWidth <= MOBILE_MAX_WIDTH;\n}\n\nfunction openBlankPopup(state: InstanceState): Window | null {\n return window.open('about:blank', state.popupName, popupFeatures());\n}\n\nfunction navigatePopup(popup: Window, url: string): void {\n popup.location.replace(url);\n}\n\nfunction removePopupChildren(doc: Document): void {\n while (doc.body.firstChild !== null) doc.body.removeChild(doc.body.firstChild);\n}\n\nfunction paintPopupLoadingScreen(popup: Window, cspNonce: string | undefined): void {\n const doc = popup.document as Document | null;\n if (doc === null || doc.head === null || doc.body === null) return;\n doc.title = 'Maytes checkout';\n doc.documentElement.lang = 'en';\n const style = doc.createElement('style');\n if (cspNonce !== undefined && cspNonce !== '') style.setAttribute('nonce', cspNonce);\n style.textContent = POPUP_LOADING_CSS;\n doc.head.appendChild(style);\n\n doc.body.classList.add('maytes-popup-loading');\n removePopupChildren(doc);\n\n const content = doc.createElement('main');\n content.className = 'maytes-popup-loading__content';\n content.setAttribute('role', 'status');\n content.setAttribute('aria-live', 'polite');\n\n const logo = buildMaytesLogo('2.75rem', foundation.text.primaryInverse);\n logo.setAttribute('class', 'maytes-popup-loading__logo');\n logo.setAttribute('aria-hidden', 'true');\n content.appendChild(logo);\n\n const spinner = doc.createElement('div');\n spinner.className = 'maytes-popup-loading__spinner';\n spinner.setAttribute('aria-hidden', 'true');\n content.appendChild(spinner);\n\n const text = doc.createElement('p');\n text.className = 'maytes-popup-loading__text';\n text.textContent = 'Completing checkout with Maytes…';\n content.appendChild(text);\n\n const slow = doc.createElement('p');\n slow.className = 'maytes-popup-loading__slow';\n slow.hidden = true;\n slow.textContent = 'Still connecting. This can take a moment on slow networks.';\n content.appendChild(slow);\n\n doc.body.appendChild(content);\n setTimeout(() => { slow.hidden = false; }, SLOW_NETWORK_DELAY_MS);\n}\n\nexport function renderButton(\n state: InstanceState,\n container: HTMLElement,\n options: RenderButtonOptions = {},\n): RenderButtonCleanup {\n if (state.destroyed) {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'renderButton() called on a destroyed Maytes instance',\n );\n }\n if (!(container instanceof HTMLElement)) {\n throw new MaytesError(MaytesErrorCode.Config, 'renderButton(container) requires an HTMLElement');\n }\n\n ensureStylesInjected(state.config.cspNonce);\n\n const label = options.label ?? 'Split with';\n const block = options.block === true;\n const mode: RenderButtonMode = options.mode ?? 'redirect';\n if (mode !== 'redirect' && mode !== 'popup') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n \"renderButton({ mode }) must be 'redirect' or 'popup'\",\n );\n }\n\n const button = document.createElement('button');\n button.type = 'button';\n button.className = block\n ? 'maytes-checkout-button maytes-checkout-button--block'\n : 'maytes-checkout-button';\n button.setAttribute('aria-label', `${label} Maytes`);\n\n const labelNode = document.createTextNode(`${label} `);\n const logo = buildLogo();\n button.appendChild(labelNode);\n button.appendChild(logo);\n\n const setBusy = (busy: boolean) => {\n state.busy = busy;\n if (busy) {\n button.setAttribute('aria-disabled', 'true');\n button.setAttribute('aria-busy', 'true');\n logo.replaceWith(buildSpinner());\n } else {\n button.removeAttribute('aria-disabled');\n button.removeAttribute('aria-busy');\n const currentIndicator = button.querySelector('.maytes-checkout-button__spinner, .maytes-checkout-button__logo');\n if (currentIndicator !== null) currentIndicator.replaceWith(buildLogo());\n }\n };\n\n const teardownActiveCheckout = () => {\n hideOverlay(state);\n setBusy(false);\n };\n\n const onPopupClosed = () => {\n teardownActiveCheckout();\n document.dispatchEvent(new CustomEvent('maytes:checkout-closed'));\n };\n\n const dispatchFailed = (reason: string, cause?: unknown): void => {\n document.dispatchEvent(new CustomEvent('maytes:checkout-failed', {\n detail: cause === undefined ? { reason } : { reason, cause },\n }));\n };\n\n const dispatchRedirected = (url: string): void => {\n document.dispatchEvent(new CustomEvent('maytes:checkout-redirected', { detail: { url } }));\n };\n\n const redirectSameWindow = (url: string): void => {\n teardownActiveCheckout();\n dispatchRedirected(url);\n window.location.href = url;\n };\n\n const closeOrphanPopup = (popup: Window | null): void => {\n closePopupWindow(popup);\n stopPopupPoll(state);\n if (state.popupWindow === popup) state.popupWindow = null;\n teardownActiveCheckout();\n };\n\n const handleClick = async (): Promise<void> => {\n if (state.busy || state.destroyed) return;\n setBusy(true);\n const shouldUsePopup = mode === 'popup' && !isMobileViewport();\n const popup = shouldUsePopup ? openBlankPopup(state) : null;\n if (popup !== null) {\n state.popupWindow = popup;\n refocusPopup(popup);\n paintPopupLoadingScreen(popup, state.config.cspNonce);\n showOverlay(state);\n document.dispatchEvent(new CustomEvent('maytes:checkout-opened'));\n startPopupPoll(state, onPopupClosed);\n }\n try {\n const result = await state.config.createCheckout();\n if (state.destroyed || (popup !== null && popup.closed)) {\n closePopupWindow(popup);\n return;\n }\n if (!isValidCheckoutResult(result)) {\n closeOrphanPopup(popup);\n const shapeError = new MaytesError(\n MaytesErrorCode.Config,\n 'createCheckout must resolve to { checkoutId: string, checkoutUrl?: http(s) URL }',\n );\n console.error(shapeError);\n dispatchFailed('invalid-shape', shapeError);\n return;\n }\n const url = result.checkoutUrl ?? buildCheckoutUrl(\n state.config.environment,\n state.config.baseUrl,\n result.checkoutId,\n );\n if (popup !== null) {\n navigatePopup(popup, url);\n } else {\n if (shouldUsePopup) {\n console.warn('[maytes/checkout-button] popup was blocked; falling back to same-window redirect');\n }\n redirectSameWindow(url);\n }\n } catch (err) {\n if (popup !== null && popup.closed) return;\n closeOrphanPopup(popup);\n console.error('[maytes/checkout-button] createCheckout failed:', err);\n dispatchFailed('create-checkout-rejected', err);\n }\n };\n\n button.addEventListener('click', handleClick);\n container.appendChild(button);\n\n let cleaned = false;\n const teardown = (): void => {\n if (cleaned) return;\n cleaned = true;\n button.removeEventListener('click', handleClick);\n button.remove();\n state.teardowns.delete(teardown);\n releaseStyles();\n };\n state.teardowns.add(teardown);\n\n return teardown;\n}\n","import type { MaytesOptions, MaytesInternalOptions } from './types.js';\n\nexport interface InstanceState {\n config: MaytesOptions & MaytesInternalOptions;\n busy: boolean;\n overlayEl: HTMLDialogElement | null;\n popupWindow: Window | null;\n popupName: string;\n popupPollHandle: ReturnType<typeof setInterval> | null;\n destroyed: boolean;\n teardowns: Set<() => void>;\n}\n\nfunction popupNameSuffix(): string {\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction generatePopupName(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n try {\n return `maytes-checkout-${crypto.randomUUID()}`;\n } catch {\n return `maytes-checkout-${popupNameSuffix()}`;\n }\n }\n return `maytes-checkout-${popupNameSuffix()}`;\n}\n\nexport function createInstanceState(\n options: MaytesOptions,\n internal: MaytesInternalOptions | undefined,\n): InstanceState {\n const config: MaytesOptions & MaytesInternalOptions = {\n createCheckout: options.createCheckout,\n environment: options.environment,\n };\n if (internal?.baseUrl !== undefined) config.baseUrl = internal.baseUrl;\n if (internal?.cspNonce !== undefined) config.cspNonce = internal.cspNonce;\n return {\n config,\n busy: false,\n overlayEl: null,\n popupWindow: null,\n popupName: generatePopupName(),\n popupPollHandle: null,\n destroyed: false,\n teardowns: new Set(),\n };\n}\n","import { closePopupWindow, renderButton, stopPopupPoll } from './button.js';\nimport { isValidEnvironment } from './env.js';\nimport { MaytesError, MaytesErrorCode } from './errors.js';\nimport { hideOverlay } from './overlay.js';\nimport { makeRedirect, normalizeBaseUrl } from './redirect.js';\nimport { createInstanceState } from './state.js';\nimport type {\n MaytesFactory,\n MaytesInternalOptions,\n MaytesOptions,\n MaytesSDK,\n} from './types.js';\n\nfunction validateOptions(options: MaytesOptions): void {\n if (typeof options !== 'object' || options === null) {\n throw new MaytesError(MaytesErrorCode.Config, 'Maytes() requires an options object');\n }\n if (typeof options.createCheckout !== 'function') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'Maytes({ createCheckout }) must be an async function returning { checkoutId }',\n );\n }\n if (!isValidEnvironment(options.environment)) {\n throw new MaytesError(\n MaytesErrorCode.Config,\n \"Maytes({ environment }) must be 'sandbox' or 'production'\",\n );\n }\n}\n\nfunction validateInternalOptions(internal: MaytesInternalOptions | undefined): void {\n if (internal === undefined) return;\n if (internal.baseUrl !== undefined) normalizeBaseUrl(internal.baseUrl);\n}\n\nexport const Maytes: MaytesFactory = (options, internal) => {\n validateOptions(options);\n validateInternalOptions(internal);\n\n const state = createInstanceState(options, internal);\n const { checkoutUrl, redirectToCheckout } = makeRedirect(\n state.config.environment,\n state.config.baseUrl,\n );\n\n const sdk: MaytesSDK = {\n renderButton(container, opts) {\n return renderButton(state, container, opts);\n },\n redirectToCheckout(opts) {\n redirectToCheckout(opts);\n },\n checkoutUrl(opts) {\n return checkoutUrl(opts);\n },\n destroy() {\n if (state.destroyed) return;\n state.destroyed = true;\n stopPopupPoll(state);\n hideOverlay(state);\n closePopupWindow(state.popupWindow);\n state.popupWindow = null;\n state.busy = false;\n for (const teardown of [...state.teardowns]) teardown();\n state.teardowns.clear();\n },\n };\n\n return sdk;\n};\n","import { Maytes } from './maytes.js';\n\nif (typeof window !== 'undefined') {\n (window as unknown as { Maytes: typeof Maytes }).Maytes = Maytes;\n}\n\nexport { Maytes };\nexport { MaytesError, MaytesErrorCode } from './errors.js';\nexport type { MaytesErrorCodeValue } from './errors.js';\nexport type {\n CheckoutUrlOptions,\n CreateCheckoutFn,\n MaytesEnvironment,\n MaytesFactory,\n MaytesInternalOptions,\n MaytesOptions,\n MaytesSDK,\n RedirectOptions,\n RenderButtonCleanup,\n RenderButtonMode,\n RenderButtonOptions,\n} from './types.js';\nexport { SDK_VERSION } from './version.js';\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/foundation/brand.generated.ts","../src/branding.ts","../src/errors.ts","../src/overlay.ts","../src/env.ts","../src/redirect.ts","../src/version.ts","../src/styles.ts","../src/button.ts","../src/state.ts","../src/maytes.ts","../src/index.ts"],"sourcesContent":["// GENERATED by scripts/sync-foundation-tokens.mjs from kttipay/designsystem v0.3.0 web/tokens.ts — DO NOT EDIT. Refresh: npm run sync:foundation -- --tag vX.Y.Z\n\n// Subset of the foundation used by the checkout button and the mock showcase:\n// brand.primary <- colorsLight.brand.primary (burgundy/600)\n// brand.secondary <- colorsLight.brand.secondary (orange/500)\n// palette.burgundy.700 <- palette.burgundy.700 (hover shade for brand.primary)\n// palette.base.white <- palette.base.white\n// text.primaryInverse <- colorsLight.text.primaryInverse (text on brand.primary)\n\nexport const FOUNDATION_TAG = 'v0.3.0';\n\nexport const foundation = {\n brand: {\n primary: '#4A0324',\n secondary: '#FE572A',\n },\n palette: {\n burgundy: {\n 700: '#3B021D',\n },\n base: {\n white: '#FFFFFF',\n },\n },\n text: {\n primaryInverse: '#FFFFFF',\n },\n} as const;\n","import { foundation } from './foundation/brand.generated.js';\n\nexport const MAYTES_RICHE = foundation.brand.primary;\nexport const MAYTES_WALLET = foundation.brand.secondary;\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nconst MAYTES_LOGO_PATHS: readonly string[] = [\n 'M392,6.11c-.3-1.61-1.72-2.79-3.38-2.79h-99.97c-1.66,0-3.09,1.19-3.38,2.79l-51.14,275.49c-.36,2.07,1.24,4.03,3.38,4.03h71.07c1.72,0,3.15-1.24,3.38-2.97l5.57-42.24c.23-1.72,1.66-2.97,3.38-2.97h32.45c1.72,0,3.15,1.24,3.38,2.97l5.57,42.24c.23,1.72,1.66,2.97,3.38,2.97h74.46c2.14,0,3.8-1.96,3.38-4.03L392,6.11ZM344.42,174.89h-14.59c-2.07,0-3.62-1.84-3.38-3.86l9.55-74.33c.06-.48.48-.83.95-.83s.89.35.95.83l9.91,74.33c.3,2.02-1.31,3.86-3.38,3.86h0Z',\n 'M218.86,3.32h-77.72c-1.48,0-2.85,1.01-3.27,2.44l-25.63,83.65c-.12.35-.41.6-.83.6s-.71-.23-.83-.6L84.9,5.76c-.41-1.42-1.78-2.44-3.27-2.44H3.44c-1.9,0-3.44,1.54-3.44,3.44v275.43c0,1.9,1.54,3.45,3.44,3.45h71.26c1.9,0,3.44-1.54,3.44-3.45v-77.3l-.83-51.44c0-.53.41-.95.95-.95.41,0,.77.3.89.71l14.42,59.62c.35,1.54,1.72,2.61,3.32,2.61h28.42c1.61,0,2.97-1.06,3.32-2.61l14.47-59.79c.12-.3.35-.53.71-.53.41,0,.71.3.71.71l-.42,51.67-.06.06v77.3c0,1.9,1.54,3.44,3.44,3.44h71.37c1.9,0,3.44-1.54,3.44-3.44V6.77c0-1.9-1.54-3.44-3.44-3.44h0Z',\n 'M1179.6,147c-9.73-11.8-20.71-21.12-47.76-38.44-27.06-16.91-31.69-23.26-31.69-31.68,0-6.76,3.8-11.39,10.56-11.39,8.19,0,14.18,10.44,15.43,26.28.18,2.14,2.13,3.74,4.27,3.26l63.66-14.12c1.6-.36,2.73-1.9,2.61-3.56-3.97-49.3-35-77.36-86.44-77.36-27.47,0-50.25,8.07-67.63,24.09-17.39,16.01-25.82,36.72-25.82,62.53,0,16.91,4.22,32.09,13.12,45.62,8.9,13.53,25.75,28.3,51.56,44.38,14.77,9.32,24.09,16.49,27.88,21.12,4.21,4.63,6.35,9.31,6.35,14.36,0,6.35-4.63,10.56-11.81,10.56-10.5,0-18.15-11.87-19.28-29.66-.12-2.25-2.31-3.91-4.51-3.26l-63.6,18.68c-1.55.42-2.55,1.84-2.43,3.44,1.78,22.84,11.03,41.41,26.88,55.65,16.49,14.36,36.77,21.53,64.24,21.53s50.32-7.59,67.64-23.26c17.74-15.66,26.64-36.37,26.64-61.28,0-22.01-6.35-40.58-19.87-57.49v-.02Z',\n 'M1002.33,3.32h-146.18c-1.9,0-3.44,1.54-3.44,3.44v275.49c0,1.9,1.54,3.44,3.44,3.44h146.18c1.9,0,3.44-1.54,3.44-3.44v-62.05c0-1.9-1.54-3.44-3.44-3.44h-63.3c-1.9,0-3.45-1.54-3.45-3.45v-34.58c0-1.9,1.54-3.44,3.45-3.44v.18h53.63c1.9,0,3.45-1.54,3.45-3.44v-57.84c0-1.9-1.55-3.44-3.45-3.44h-53.63c-1.9,0-3.45-1.54-3.45-3.44v-31.61c0-1.9,1.54-3.44,3.45-3.44h63.3c1.9,0,3.44-1.54,3.44-3.44V6.77c0-1.9-1.54-3.44-3.44-3.44Z',\n 'M840.22,6.77c0-1.9-1.54-3.44-3.44-3.44h-175.31c-1.9,0-3.45,1.54-3.45,3.44v62c0,1.9,1.54,3.44,3.45,3.44h41.77c1.9,0,3.44,1.54,3.44,3.44v206.62c0,1.9,1.54,3.45,3.44,3.45h78.14c1.9,0,3.45-1.54,3.45-3.45V75.7c0-1.9,1.54-3.44,3.45-3.44h41.77c1.9,0,3.44-1.54,3.44-3.44h-.12V6.77h-.02Z',\n 'M607.71,3.38l-.06-.06c-23.23,0-32.59,48.08-40.22,80.25-1.38,5.82-4.74,18.31-7.75,27.31-4.44,13.26-10.68,30.43-22.21,31.93-18.85,2.47-7.14-39.43-7.14-39.43l21.67-92.98c.84-3.6-1.92-7.02-5.58-7.02h-85.49c-3.12,0-5.64,2.46-5.71,5.64l-1.68,75.09c-.48,21.25,5.64,42.31,18.37,59.37,12.72,17.05,38.81,28,63.12,25.9,52.48-7.08,65.46-70.49,68.4-71.1,3.06-.64,2.56,9.3.84,22.15-2.2,16.42-8.46,32.1-18.52,45.27-5.3,6.95-11.13,12.9-16.55,16.37-32.96,22.51-95.69,9.48-122.4-2.7-3.66-1.68-7.75,1.02-7.75,5.04l16.39,83.98c0,.84.18,1.68.54,2.4,9.48,17.83,53.31,19.33,74.43,17.77,32.18-2.04,100.37-29.35,115.32-122.33,12.17-103.08-1.14-162.91-38.06-162.84l.02-.02Z',\n];\n\nexport function buildMaytesLogo(height: string, color: string): SVGSVGElement {\n const svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('xmlns', SVG_NS);\n svg.setAttribute('viewBox', '0 0 1199.47 289.04');\n svg.style.height = height;\n svg.style.width = 'auto';\n svg.style.color = color;\n for (const d of MAYTES_LOGO_PATHS) {\n const path = document.createElementNS(SVG_NS, 'path');\n path.setAttribute('fill', 'currentColor');\n path.setAttribute('d', d);\n svg.appendChild(path);\n }\n return svg;\n}\n","export const MaytesErrorCode = {\n Config: 'CONFIG',\n} as const;\n\nexport type MaytesErrorCodeValue = (typeof MaytesErrorCode)[keyof typeof MaytesErrorCode];\n\nexport class MaytesError extends Error {\n readonly code: MaytesErrorCodeValue;\n\n constructor(code: MaytesErrorCodeValue, message: string) {\n super(message);\n this.code = code;\n this.name = 'MaytesError';\n }\n}\n","import { buildMaytesLogo, MAYTES_WALLET } from './branding.js';\nimport type { InstanceState } from './state.js';\n\nconst TITLE_ID = 'maytes-overlay-title';\nconst STYLE_MARKER = 'data-maytes-checkout-button-overlay-styles';\nconst NATIVE_BACKDROP_FALLBACK = 'rgba(0, 0, 0, 0.6)';\n\nfunction tryReadTopDocument(): Document | null {\n if (window.top === null || window.top === window) return null;\n try {\n const topDoc = window.top.document;\n return topDoc.body !== null ? topDoc : null;\n } catch (err) {\n if (!(err instanceof DOMException && err.name === 'SecurityError')) {\n console.warn('[maytes/checkout-button] unexpected error resolving overlay host', err);\n }\n return null;\n }\n}\n\nfunction resolveOverlayHost(): Document {\n return tryReadTopDocument() ?? document;\n}\n\nfunction ensureOverlayStylesInTopDocument(host: Document): void {\n if (host === document) return;\n if (host.querySelector(`style[${STYLE_MARKER}]`) !== null) return;\n const localStyle = document.head.querySelector('style[data-maytes-checkout-button]');\n if (localStyle === null) return;\n const copy = host.createElement('style');\n copy.setAttribute(STYLE_MARKER, '');\n const nonce = localStyle.getAttribute('nonce');\n if (nonce !== null) copy.setAttribute('nonce', nonce);\n copy.textContent = localStyle.textContent ?? '';\n host.head.appendChild(copy);\n}\n\nfunction buildOverlay(host: Document, state: InstanceState): HTMLDialogElement {\n const dialog = host.createElement('dialog');\n dialog.className = 'maytes-checkout-overlay';\n dialog.setAttribute('aria-labelledby', TITLE_ID);\n dialog.setAttribute('data-maytes-overlay', '');\n\n const content = host.createElement('div');\n content.className = 'maytes-checkout-overlay__content';\n\n const logoDiv = host.createElement('div');\n logoDiv.setAttribute('aria-hidden', 'true');\n logoDiv.appendChild(buildMaytesLogo('2.5rem', MAYTES_WALLET));\n content.appendChild(logoDiv);\n\n const spinner = host.createElement('div');\n spinner.className = 'maytes-checkout-overlay__spinner';\n spinner.setAttribute('role', 'status');\n spinner.setAttribute('aria-live', 'polite');\n spinner.setAttribute('aria-label', 'Checkout in progress');\n content.appendChild(spinner);\n\n const text = host.createElement('p');\n text.id = TITLE_ID;\n text.className = 'maytes-checkout-overlay__text';\n text.textContent = 'Completing checkout with Maytes…';\n content.appendChild(text);\n\n const link = host.createElement('button');\n link.className = 'maytes-checkout-overlay__link';\n link.type = 'button';\n link.textContent = 'Return to Maytes';\n link.addEventListener('click', () => {\n if (state.popupWindow !== null && !state.popupWindow.closed) {\n try { state.popupWindow.focus(); } catch (err) {\n if (!(err instanceof DOMException && err.name === 'SecurityError')) throw err;\n }\n }\n });\n content.appendChild(link);\n\n dialog.appendChild(content);\n\n dialog.addEventListener('cancel', (event) => {\n event.preventDefault();\n if (state.popupWindow !== null && !state.popupWindow.closed) state.popupWindow.close();\n hideOverlay(state);\n });\n\n return dialog;\n}\n\nfunction applyNativeBackdropFallback(dialog: HTMLDialogElement): void {\n dialog.style.background = NATIVE_BACKDROP_FALLBACK;\n}\n\nexport function showOverlay(state: InstanceState): void {\n if (state.overlayEl !== null) return;\n const host = resolveOverlayHost();\n ensureOverlayStylesInTopDocument(host);\n const dialog = buildOverlay(host, state);\n state.overlayEl = dialog;\n host.body.appendChild(dialog);\n if (typeof dialog.showModal === 'function') {\n try {\n dialog.showModal();\n } catch (err) {\n console.warn('[maytes/checkout-button] dialog.showModal failed; falling back to inline backdrop', err);\n dialog.setAttribute('open', '');\n applyNativeBackdropFallback(dialog);\n }\n } else {\n dialog.setAttribute('open', '');\n applyNativeBackdropFallback(dialog);\n }\n}\n\nexport function hideOverlay(state: InstanceState): void {\n if (state.overlayEl === null) return;\n const dialog = state.overlayEl;\n const host = dialog.ownerDocument;\n if (typeof dialog.close === 'function' && dialog.open) dialog.close();\n dialog.remove();\n if (host !== document) {\n host.head.querySelector(`style[${STYLE_MARKER}]`)?.remove();\n }\n state.overlayEl = null;\n}\n","import { MaytesError, MaytesErrorCode } from './errors.js';\nimport type { MaytesEnvironment } from './types.js';\n\nexport type InternalEnvironment = MaytesEnvironment | 'staging';\n\nconst ENVIRONMENT_BASE_URLS: Record<InternalEnvironment, string> = {\n staging: 'https://staging-checkout.maytes.co',\n sandbox: 'https://sandbox-checkout.maytes.co',\n production: 'https://checkout.maytes.co',\n};\n\nexport function isValidEnvironment(value: unknown): value is InternalEnvironment {\n return value === 'sandbox' || value === 'production' || value === 'staging';\n}\n\nexport function resolveBaseUrl(environment: InternalEnvironment, override: string | undefined): string {\n if (override !== undefined) return override;\n const url = ENVIRONMENT_BASE_URLS[environment];\n if (url === undefined) {\n throw new MaytesError(MaytesErrorCode.Config, `Unknown environment: ${String(environment)}`);\n }\n return url;\n}\n","import { MaytesError, MaytesErrorCode } from './errors.js';\nimport { resolveBaseUrl, type InternalEnvironment } from './env.js';\nimport type { CheckoutUrlOptions, RedirectOptions } from './types.js';\n\nexport function isHttpUrl(value: string): boolean {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n return false;\n }\n return parsed.protocol === 'https:' || parsed.protocol === 'http:';\n}\n\nexport function normalizeBaseUrl(rawBaseUrl: string): string {\n const candidate = rawBaseUrl.trim().replace(/\\/+$/, '');\n let parsed: URL;\n try {\n parsed = new URL(candidate);\n } catch {\n throw new MaytesError(MaytesErrorCode.Config, `baseUrl is not a valid URL: ${candidate}`);\n }\n if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n `baseUrl must use http or https; got ${parsed.protocol}`,\n );\n }\n return candidate;\n}\n\nfunction requireCheckoutId(id: unknown): string {\n if (typeof id !== 'string' || id.trim().length === 0) {\n throw new MaytesError(MaytesErrorCode.Config, 'checkoutId is required (non-empty string)');\n }\n return id.trim();\n}\n\nexport function buildCheckoutUrl(\n environment: InternalEnvironment,\n baseUrlOverride: string | undefined,\n checkoutId: string,\n): string {\n const id = requireCheckoutId(checkoutId);\n const base = normalizeBaseUrl(resolveBaseUrl(environment, baseUrlOverride));\n return `${base}/?id=${encodeURIComponent(id)}`;\n}\n\nexport function performRedirect(url: string, replace: boolean): void {\n if (typeof window === 'undefined') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'redirectToCheckout requires a browser context (window is undefined)',\n );\n }\n if (replace) {\n window.location.replace(url);\n } else {\n window.location.href = url;\n }\n}\n\nexport function makeRedirect(\n environment: InternalEnvironment,\n baseUrlOverride: string | undefined,\n) {\n return {\n checkoutUrl(opts: CheckoutUrlOptions): string {\n return buildCheckoutUrl(environment, baseUrlOverride, opts.checkoutId);\n },\n redirectToCheckout(opts: RedirectOptions): void {\n const url = buildCheckoutUrl(environment, baseUrlOverride, opts.checkoutId);\n performRedirect(url, opts.replace === true);\n },\n };\n}\n","export const SDK_VERSION = '1.0.1';\n","import { foundation } from './foundation/brand.generated.js';\nimport { SDK_VERSION } from './version.js';\n\nconst STYLE_ATTR = 'data-maytes-checkout-button';\nconst STYLE_SELECTOR = `style[${STYLE_ATTR}=\"${SDK_VERSION}\"]`;\nconst REFCOUNT_KEY = `__maytes_checkout_button_styles_refs_${SDK_VERSION}__`;\n\ninterface RefCountWindow extends Window {\n [REFCOUNT_KEY]?: number;\n}\n\n// WEB-LOCAL: no foundation role (a11y focus ring); see MOB-994\nconst FOCUS_RING = '#6b8aff';\n\nconst BUTTON_CSS = `\n.maytes-checkout-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.57em;\n padding: 0.71em 1.29em;\n border: none;\n border-radius: 999px;\n background: ${foundation.brand.primary};\n color: ${foundation.text.primaryInverse};\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n font-size: var(--maytes-button-font-size, 14px);\n font-weight: 600;\n line-height: 1;\n cursor: pointer;\n user-select: none;\n transition: background-color 120ms ease, opacity 120ms ease;\n}\n.maytes-checkout-button:hover { background: ${foundation.palette.burgundy[700]}; }\n.maytes-checkout-button:focus-visible {\n outline: 2px solid ${FOCUS_RING};\n outline-offset: 2px;\n}\n.maytes-checkout-button[aria-disabled='true'] {\n cursor: progress;\n opacity: 0.7;\n}\n.maytes-checkout-button--block {\n display: flex;\n width: 100%;\n}\n.maytes-checkout-button__logo { height: 1em; width: auto; flex: none; }\n.maytes-checkout-button__spinner {\n height: 1em;\n width: 1em;\n border-radius: 50%;\n border: 0.14em solid currentColor;\n border-right-color: transparent;\n animation: maytes-checkout-button-spin 0.7s linear infinite;\n}\n@keyframes maytes-checkout-button-spin {\n to { transform: rotate(360deg); }\n}\n.maytes-checkout-overlay {\n position: fixed;\n inset: 0;\n width: 100vw;\n height: 100vh;\n max-width: 100vw;\n max-height: 100vh;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n z-index: 2147483646;\n font: 500 15px/1.4 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n}\n.maytes-checkout-overlay[open] {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.maytes-checkout-overlay::backdrop {\n background: rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n}\n.maytes-checkout-overlay__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n}\n.maytes-checkout-overlay__spinner {\n width: 2.5rem;\n height: 2.5rem;\n border: 4px solid rgba(255, 255, 255, 0.3);\n border-top-color: ${foundation.brand.secondary};\n border-radius: 50%;\n animation: maytes-checkout-button-spin 0.8s linear infinite;\n}\n.maytes-checkout-overlay__text {\n color: ${foundation.text.primaryInverse};\n font-size: 1.125rem;\n font-weight: 500;\n margin: 0;\n}\n.maytes-checkout-overlay__link {\n color: rgba(255, 255, 255, 0.7);\n font-size: 0.875rem;\n text-decoration: underline;\n text-underline-offset: 4px;\n background: none;\n border: none;\n cursor: pointer;\n font-family: inherit;\n transition: color 0.15s;\n}\n.maytes-checkout-overlay__link:hover { color: ${foundation.text.primaryInverse}; }\n@media (prefers-reduced-motion: reduce) {\n .maytes-checkout-overlay__spinner,\n .maytes-checkout-button__spinner { animation: none; }\n}\n`;\n\nexport const POPUP_LOADING_CSS = `\n:root { color-scheme: light; }\nhtml, body { margin: 0; height: 100%; }\nbody.maytes-popup-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n background: ${foundation.brand.primary};\n color: ${foundation.text.primaryInverse};\n font: 500 16px/1.45 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n}\n.maytes-popup-loading__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n padding: 2rem;\n text-align: center;\n}\n.maytes-popup-loading__logo { height: 2.75rem; width: auto; }\n.maytes-popup-loading__spinner {\n width: 2.5rem;\n height: 2.5rem;\n border: 4px solid rgba(255, 255, 255, 0.25);\n border-top-color: ${foundation.brand.secondary};\n border-radius: 50%;\n animation: maytes-checkout-button-spin 0.8s linear infinite;\n}\n@keyframes maytes-checkout-button-spin {\n to { transform: rotate(360deg); }\n}\n.maytes-popup-loading__text { margin: 0; font-size: 1.05rem; font-weight: 500; }\n.maytes-popup-loading__slow {\n margin: 0;\n font-size: 0.9rem;\n font-weight: 400;\n color: rgba(255, 255, 255, 0.75);\n max-width: 22rem;\n}\n.maytes-popup-loading__slow[hidden] { display: none; }\n@media (prefers-reduced-motion: reduce) {\n .maytes-popup-loading__spinner { animation: none; }\n}\n`;\n\nfunction getRefCount(): number {\n const w = window as RefCountWindow;\n return w[REFCOUNT_KEY] ?? 0;\n}\n\nfunction setRefCount(value: number): void {\n const w = window as RefCountWindow;\n w[REFCOUNT_KEY] = value;\n}\n\nexport function ensureStylesInjected(cspNonce: string | undefined): void {\n const next = getRefCount() + 1;\n setRefCount(next);\n if (document.head.querySelector(STYLE_SELECTOR) !== null) return;\n const el = document.createElement('style');\n el.setAttribute(STYLE_ATTR, SDK_VERSION);\n if (cspNonce !== undefined && cspNonce !== '') el.setAttribute('nonce', cspNonce);\n el.textContent = BUTTON_CSS;\n document.head.appendChild(el);\n}\n\nexport function releaseStyles(): void {\n const next = Math.max(0, getRefCount() - 1);\n setRefCount(next);\n if (next > 0) return;\n const el = document.head.querySelector(STYLE_SELECTOR);\n if (el !== null) el.remove();\n}\n\nexport function resetStylesForTests(): void {\n setRefCount(0);\n document.head.querySelectorAll(`style[${STYLE_ATTR}]`).forEach((el) => el.remove());\n}\n","import { buildMaytesLogo } from './branding.js';\nimport { foundation } from './foundation/brand.generated.js';\nimport { MaytesError, MaytesErrorCode } from './errors.js';\nimport { hideOverlay, showOverlay } from './overlay.js';\nimport { buildCheckoutUrl, isHttpUrl } from './redirect.js';\nimport { ensureStylesInjected, POPUP_LOADING_CSS, releaseStyles } from './styles.js';\nimport type { InstanceState } from './state.js';\nimport type { RenderButtonCleanup, RenderButtonMode, RenderButtonOptions } from './types.js';\n\nconst POPUP_WIDTH = 500;\nconst POPUP_HEIGHT = 800;\nconst POPUP_POLL_INTERVAL_MS = 500;\nconst MOBILE_MAX_WIDTH = 600;\nconst SLOW_NETWORK_DELAY_MS = 8000;\n\nfunction buildLogo(): SVGSVGElement {\n const svg = buildMaytesLogo('1em', 'currentColor');\n svg.setAttribute('class', 'maytes-checkout-button__logo');\n svg.setAttribute('aria-hidden', 'true');\n return svg;\n}\n\nfunction buildSpinner(): HTMLSpanElement {\n const spinner = document.createElement('span');\n spinner.className = 'maytes-checkout-button__spinner';\n spinner.setAttribute('aria-hidden', 'true');\n return spinner;\n}\n\nfunction isValidCheckoutResult(value: unknown): value is { checkoutId: string; checkoutUrl?: string } {\n if (typeof value !== 'object' || value === null) return false;\n const obj = value as { checkoutId?: unknown; checkoutUrl?: unknown };\n if (typeof obj.checkoutId !== 'string' || obj.checkoutId.trim().length === 0) return false;\n if (obj.checkoutUrl !== undefined) {\n if (typeof obj.checkoutUrl !== 'string' || obj.checkoutUrl.trim().length === 0) return false;\n if (!isHttpUrl(obj.checkoutUrl)) return false;\n }\n return true;\n}\n\nfunction isSecurityError(err: unknown): boolean {\n return err instanceof DOMException && err.name === 'SecurityError';\n}\n\nfunction refocusPopup(popup: Window): void {\n try { popup.focus(); } catch (err) {\n if (!isSecurityError(err)) throw err;\n }\n}\n\nexport function closePopupWindow(popup: Window | null): void {\n if (popup === null) return;\n try {\n if (!popup.closed) popup.close();\n } catch (err) {\n if (!isSecurityError(err)) throw err;\n }\n}\n\nfunction popupFeatures(): string {\n const screenWidth = window.screen?.width ?? POPUP_WIDTH;\n const screenHeight = window.screen?.height ?? POPUP_HEIGHT;\n const left = Math.max(0, Math.round((screenWidth - POPUP_WIDTH) / 2));\n const top = Math.max(0, Math.round((screenHeight - POPUP_HEIGHT) / 2));\n return `popup=yes,width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},resizable=yes,scrollbars=yes`;\n}\n\nexport function stopPopupPoll(state: InstanceState): void {\n if (state.popupPollHandle !== null) {\n clearInterval(state.popupPollHandle);\n state.popupPollHandle = null;\n }\n}\n\nfunction startPopupPoll(state: InstanceState, onClose: () => void): void {\n stopPopupPoll(state);\n state.popupPollHandle = setInterval(() => {\n const popup = state.popupWindow;\n if (popup === null || popup.closed) {\n stopPopupPoll(state);\n state.popupWindow = null;\n onClose();\n }\n }, POPUP_POLL_INTERVAL_MS);\n}\n\nfunction isMobileViewport(): boolean {\n return window.innerWidth <= MOBILE_MAX_WIDTH;\n}\n\nfunction openBlankPopup(state: InstanceState): Window | null {\n return window.open('about:blank', state.popupName, popupFeatures());\n}\n\nfunction navigatePopup(popup: Window, url: string): void {\n popup.location.replace(url);\n}\n\nfunction removePopupChildren(doc: Document): void {\n while (doc.body.firstChild !== null) doc.body.removeChild(doc.body.firstChild);\n}\n\nfunction paintPopupLoadingScreen(popup: Window, cspNonce: string | undefined): void {\n const doc = popup.document as Document | null;\n if (doc === null || doc.head === null || doc.body === null) return;\n doc.title = 'Maytes checkout';\n doc.documentElement.lang = 'en';\n const style = doc.createElement('style');\n if (cspNonce !== undefined && cspNonce !== '') style.setAttribute('nonce', cspNonce);\n style.textContent = POPUP_LOADING_CSS;\n doc.head.appendChild(style);\n\n doc.body.classList.add('maytes-popup-loading');\n removePopupChildren(doc);\n\n const content = doc.createElement('main');\n content.className = 'maytes-popup-loading__content';\n content.setAttribute('role', 'status');\n content.setAttribute('aria-live', 'polite');\n\n const logo = buildMaytesLogo('2.75rem', foundation.text.primaryInverse);\n logo.setAttribute('class', 'maytes-popup-loading__logo');\n logo.setAttribute('aria-hidden', 'true');\n content.appendChild(logo);\n\n const spinner = doc.createElement('div');\n spinner.className = 'maytes-popup-loading__spinner';\n spinner.setAttribute('aria-hidden', 'true');\n content.appendChild(spinner);\n\n const text = doc.createElement('p');\n text.className = 'maytes-popup-loading__text';\n text.textContent = 'Completing checkout with Maytes…';\n content.appendChild(text);\n\n const slow = doc.createElement('p');\n slow.className = 'maytes-popup-loading__slow';\n slow.hidden = true;\n slow.textContent = 'Still connecting. This can take a moment on slow networks.';\n content.appendChild(slow);\n\n doc.body.appendChild(content);\n setTimeout(() => { slow.hidden = false; }, SLOW_NETWORK_DELAY_MS);\n}\n\nexport function renderButton(\n state: InstanceState,\n container: HTMLElement,\n options: RenderButtonOptions = {},\n): RenderButtonCleanup {\n if (state.destroyed) {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'renderButton() called on a destroyed Maytes instance',\n );\n }\n if (!(container instanceof HTMLElement)) {\n throw new MaytesError(MaytesErrorCode.Config, 'renderButton(container) requires an HTMLElement');\n }\n\n ensureStylesInjected(state.config.cspNonce);\n\n const label = options.label ?? 'Split with';\n const block = options.block === true;\n const mode: RenderButtonMode = options.mode ?? 'redirect';\n if (mode !== 'redirect' && mode !== 'popup') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n \"renderButton({ mode }) must be 'redirect' or 'popup'\",\n );\n }\n\n const button = document.createElement('button');\n button.type = 'button';\n button.className = block\n ? 'maytes-checkout-button maytes-checkout-button--block'\n : 'maytes-checkout-button';\n button.setAttribute('aria-label', `${label} Maytes`);\n\n const labelNode = document.createTextNode(`${label} `);\n const logo = buildLogo();\n button.appendChild(labelNode);\n button.appendChild(logo);\n\n const setBusy = (busy: boolean) => {\n state.busy = busy;\n if (busy) {\n button.setAttribute('aria-disabled', 'true');\n button.setAttribute('aria-busy', 'true');\n logo.replaceWith(buildSpinner());\n } else {\n button.removeAttribute('aria-disabled');\n button.removeAttribute('aria-busy');\n const currentIndicator = button.querySelector('.maytes-checkout-button__spinner, .maytes-checkout-button__logo');\n if (currentIndicator !== null) currentIndicator.replaceWith(buildLogo());\n }\n };\n\n const teardownActiveCheckout = () => {\n hideOverlay(state);\n setBusy(false);\n };\n\n const onPopupClosed = () => {\n teardownActiveCheckout();\n document.dispatchEvent(new CustomEvent('maytes:checkout-closed'));\n };\n\n const dispatchFailed = (reason: string, cause?: unknown): void => {\n document.dispatchEvent(new CustomEvent('maytes:checkout-failed', {\n detail: cause === undefined ? { reason } : { reason, cause },\n }));\n };\n\n const dispatchRedirected = (url: string): void => {\n document.dispatchEvent(new CustomEvent('maytes:checkout-redirected', { detail: { url } }));\n };\n\n const redirectSameWindow = (url: string): void => {\n teardownActiveCheckout();\n dispatchRedirected(url);\n window.location.href = url;\n };\n\n const closeOrphanPopup = (popup: Window | null): void => {\n closePopupWindow(popup);\n stopPopupPoll(state);\n if (state.popupWindow === popup) state.popupWindow = null;\n teardownActiveCheckout();\n };\n\n const handleClick = async (): Promise<void> => {\n if (state.busy || state.destroyed) return;\n setBusy(true);\n const shouldUsePopup = mode === 'popup' && !isMobileViewport();\n const popup = shouldUsePopup ? openBlankPopup(state) : null;\n if (popup !== null) {\n state.popupWindow = popup;\n state.popupNavigated = false;\n refocusPopup(popup);\n paintPopupLoadingScreen(popup, state.config.cspNonce);\n showOverlay(state);\n document.dispatchEvent(new CustomEvent('maytes:checkout-opened'));\n startPopupPoll(state, onPopupClosed);\n }\n try {\n const result = await state.config.createCheckout();\n if (state.destroyed || (popup !== null && popup.closed)) {\n closePopupWindow(popup);\n return;\n }\n if (!isValidCheckoutResult(result)) {\n closeOrphanPopup(popup);\n const shapeError = new MaytesError(\n MaytesErrorCode.Config,\n 'createCheckout must resolve to { checkoutId: string, checkoutUrl?: http(s) URL }',\n );\n console.error(shapeError);\n dispatchFailed('invalid-shape', shapeError);\n return;\n }\n const url = result.checkoutUrl ?? buildCheckoutUrl(\n state.config.environment,\n state.config.baseUrl,\n result.checkoutId,\n );\n if (popup !== null) {\n state.popupNavigated = true;\n navigatePopup(popup, url);\n } else {\n if (shouldUsePopup) {\n console.warn('[maytes/checkout-button] popup was blocked; falling back to same-window redirect');\n }\n redirectSameWindow(url);\n }\n } catch (err) {\n if (popup !== null && popup.closed) return;\n closeOrphanPopup(popup);\n console.error('[maytes/checkout-button] createCheckout failed:', err);\n dispatchFailed('create-checkout-rejected', err);\n }\n };\n\n button.addEventListener('click', handleClick);\n container.appendChild(button);\n\n let cleaned = false;\n const teardown = (): void => {\n if (cleaned) return;\n cleaned = true;\n button.removeEventListener('click', handleClick);\n button.remove();\n state.teardowns.delete(teardown);\n releaseStyles();\n };\n state.teardowns.add(teardown);\n\n return teardown;\n}\n","import type { MaytesOptions, MaytesInternalOptions } from './types.js';\n\nexport interface InstanceState {\n config: MaytesOptions & MaytesInternalOptions;\n busy: boolean;\n overlayEl: HTMLDialogElement | null;\n popupWindow: Window | null;\n popupNavigated: boolean;\n popupName: string;\n popupPollHandle: ReturnType<typeof setInterval> | null;\n destroyed: boolean;\n teardowns: Set<() => void>;\n}\n\nfunction popupNameSuffix(): string {\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction generatePopupName(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n try {\n return `maytes-checkout-${crypto.randomUUID()}`;\n } catch {\n return `maytes-checkout-${popupNameSuffix()}`;\n }\n }\n return `maytes-checkout-${popupNameSuffix()}`;\n}\n\nexport function createInstanceState(\n options: MaytesOptions,\n internal: MaytesInternalOptions | undefined,\n): InstanceState {\n const config: MaytesOptions & MaytesInternalOptions = {\n createCheckout: options.createCheckout,\n environment: options.environment,\n };\n if (internal?.baseUrl !== undefined) config.baseUrl = internal.baseUrl;\n if (internal?.cspNonce !== undefined) config.cspNonce = internal.cspNonce;\n return {\n config,\n busy: false,\n overlayEl: null,\n popupWindow: null,\n popupNavigated: false,\n popupName: generatePopupName(),\n popupPollHandle: null,\n destroyed: false,\n teardowns: new Set(),\n };\n}\n","import { closePopupWindow, renderButton, stopPopupPoll } from './button.js';\nimport { isValidEnvironment } from './env.js';\nimport { MaytesError, MaytesErrorCode } from './errors.js';\nimport { hideOverlay } from './overlay.js';\nimport { makeRedirect, normalizeBaseUrl } from './redirect.js';\nimport { createInstanceState } from './state.js';\nimport type {\n MaytesFactory,\n MaytesInternalOptions,\n MaytesOptions,\n MaytesSDK,\n} from './types.js';\n\nfunction validateOptions(options: MaytesOptions): void {\n if (typeof options !== 'object' || options === null) {\n throw new MaytesError(MaytesErrorCode.Config, 'Maytes() requires an options object');\n }\n if (typeof options.createCheckout !== 'function') {\n throw new MaytesError(\n MaytesErrorCode.Config,\n 'Maytes({ createCheckout }) must be an async function returning { checkoutId }',\n );\n }\n if (!isValidEnvironment(options.environment)) {\n throw new MaytesError(\n MaytesErrorCode.Config,\n \"Maytes({ environment }) must be 'sandbox' or 'production'\",\n );\n }\n}\n\nfunction validateInternalOptions(internal: MaytesInternalOptions | undefined): void {\n if (internal === undefined) return;\n if (internal.baseUrl !== undefined) normalizeBaseUrl(internal.baseUrl);\n}\n\nexport const Maytes: MaytesFactory = (options, internal) => {\n validateOptions(options);\n validateInternalOptions(internal);\n\n const state = createInstanceState(options, internal);\n const { checkoutUrl, redirectToCheckout } = makeRedirect(\n state.config.environment,\n state.config.baseUrl,\n );\n\n const sdk: MaytesSDK = {\n renderButton(container, opts) {\n return renderButton(state, container, opts);\n },\n redirectToCheckout(opts) {\n redirectToCheckout(opts);\n },\n checkoutUrl(opts) {\n return checkoutUrl(opts);\n },\n destroy() {\n if (state.destroyed) return;\n state.destroyed = true;\n stopPopupPoll(state);\n hideOverlay(state);\n if (!state.popupNavigated) closePopupWindow(state.popupWindow);\n state.popupWindow = null;\n state.busy = false;\n for (const teardown of [...state.teardowns]) teardown();\n state.teardowns.clear();\n },\n };\n\n return sdk;\n};\n","import { Maytes } from './maytes.js';\n\nif (typeof window !== 'undefined') {\n (window as unknown as { Maytes: typeof Maytes }).Maytes = Maytes;\n}\n\nexport { Maytes };\nexport { MaytesError, MaytesErrorCode } from './errors.js';\nexport type { MaytesErrorCodeValue } from './errors.js';\nexport type {\n CheckoutUrlOptions,\n CreateCheckoutFn,\n MaytesEnvironment,\n MaytesFactory,\n MaytesInternalOptions,\n MaytesOptions,\n MaytesSDK,\n RedirectOptions,\n RenderButtonCleanup,\n RenderButtonMode,\n RenderButtonOptions,\n} from './types.js';\nexport { SDK_VERSION } from './version.js';\n"],"mappings":"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","names":[]}
|
package/dist/integrity.json
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.
|
|
3
|
-
"builtAt": "2026-09-
|
|
2
|
+
"version": "1.0.1",
|
|
3
|
+
"builtAt": "2026-09-16T05:24:11.237Z",
|
|
4
4
|
"files": {
|
|
5
5
|
"checkout-button.js": {
|
|
6
6
|
"kind": "iife",
|
|
7
|
-
"hashedName": "checkout-button.
|
|
8
|
-
"semverPath": "v1.0.
|
|
9
|
-
"semverUrl": "https://js.maytes.co/v1.0.
|
|
10
|
-
"hashedUrl": "https://js.maytes.co/checkout-button.
|
|
11
|
-
"sri": "sha384-
|
|
12
|
-
"sha256": "
|
|
13
|
-
"shortHash": "
|
|
14
|
-
"bytes":
|
|
7
|
+
"hashedName": "checkout-button.8c71493e.js",
|
|
8
|
+
"semverPath": "v1.0.1/checkout-button.js",
|
|
9
|
+
"semverUrl": "https://js.maytes.co/v1.0.1/checkout-button.js",
|
|
10
|
+
"hashedUrl": "https://js.maytes.co/checkout-button.8c71493e.js",
|
|
11
|
+
"sri": "sha384-scp0qo7rcOJGuuI+gpadCOUQMn7g7hx3lqY9p7Xr2fd7/9Sb/L79DaHKStTTX7Ko",
|
|
12
|
+
"sha256": "8c71493ec84ee7e12b9a43570e9c8471274f6431446e15420f0913e136a2f71d",
|
|
13
|
+
"shortHash": "8c71493e",
|
|
14
|
+
"bytes": 19218
|
|
15
15
|
},
|
|
16
16
|
"checkout-button.mjs": {
|
|
17
17
|
"kind": "esm",
|
|
18
|
-
"hashedName": "checkout-button.
|
|
19
|
-
"semverPath": "v1.0.
|
|
20
|
-
"semverUrl": "https://js.maytes.co/v1.0.
|
|
21
|
-
"hashedUrl": "https://js.maytes.co/checkout-button.
|
|
22
|
-
"sri": "sha384-
|
|
23
|
-
"sha256": "
|
|
24
|
-
"shortHash": "
|
|
25
|
-
"bytes":
|
|
18
|
+
"hashedName": "checkout-button.81ea2037.mjs",
|
|
19
|
+
"semverPath": "v1.0.1/checkout-button.mjs",
|
|
20
|
+
"semverUrl": "https://js.maytes.co/v1.0.1/checkout-button.mjs",
|
|
21
|
+
"hashedUrl": "https://js.maytes.co/checkout-button.81ea2037.mjs",
|
|
22
|
+
"sri": "sha384-5+TplHKGAk10ajWGdKwpG3pKutLD+v3cOYqtPEvRNLWudyOELPUKuU6sqlAhuy1h",
|
|
23
|
+
"sha256": "81ea2037fa0b9414dd96d945988250e088c6dd00962c637c499f1997db380797",
|
|
24
|
+
"shortHash": "81ea2037",
|
|
25
|
+
"bytes": 27746
|
|
26
26
|
},
|
|
27
27
|
"checkout-button.cjs": {
|
|
28
28
|
"kind": "cjs",
|
|
29
|
-
"hashedName": "checkout-button.
|
|
30
|
-
"semverPath": "v1.0.
|
|
31
|
-
"semverUrl": "https://js.maytes.co/v1.0.
|
|
32
|
-
"hashedUrl": "https://js.maytes.co/checkout-button.
|
|
33
|
-
"sri": "sha384
|
|
34
|
-
"sha256": "
|
|
35
|
-
"shortHash": "
|
|
36
|
-
"bytes":
|
|
29
|
+
"hashedName": "checkout-button.6d259930.cjs",
|
|
30
|
+
"semverPath": "v1.0.1/checkout-button.cjs",
|
|
31
|
+
"semverUrl": "https://js.maytes.co/v1.0.1/checkout-button.cjs",
|
|
32
|
+
"hashedUrl": "https://js.maytes.co/checkout-button.6d259930.cjs",
|
|
33
|
+
"sri": "sha384-+O2S6KfO4Pc0VEvL+kTsFzxU14W4EILV6+U5mAdW8X43Xm8Qk1aV0y/KbM3Fnp9M",
|
|
34
|
+
"sha256": "6d2599302e06f7be644cd80917ca80146c83b56cc6b1cc547230b01ea52f6c47",
|
|
35
|
+
"shortHash": "6d259930",
|
|
36
|
+
"bytes": 28720
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
}
|