1.6.6
CardPay: the `IframeStyleConfig` layout options now work, and the merchant logo is constrained.
Of the `layout` block, only `showLabels` / `labelPosition: "hidden"` and `fieldSpacing` had any
effect. `fieldLayout` is now implemented for all three values: `stacked` gives every card field
its own line (the expiry selects included), `grouped` keeps the number full width with the expiry
and CVV sharing the next line, and `single-line` fits the number, expiry and CVV on one line.
Omitting `fieldLayout` still leaves the form as it is. `labelPosition: "floating"` now moves each
label inside its own field and hides that input's placeholder so the two cannot collide; it does
not animate on focus, and the expiry pair keeps its shared label above both selects. The layout
applies to the card fields only - the billing and shipping blocks are unaffected.

`branding.logoUrl` no longer depends on the image being the right size. The rendered logo is
capped and letterboxed (`object-fit: contain`) instead of stretching the form, and two new
optional fields, `branding.logoMaxWidth` and `branding.logoMaxHeight`, move that cap (defaults:
`100%` and `48px`). The README's new "Logo size" section documents the recommended artwork:
about 40px tall and no wider than 320px, as an SVG or a 2x PNG with a transparent background.

Internally, logo handling is now shared: one resolver decides between the merchant logo and the
brand's own for every hosted form that shows one, and a single stylesheet rule replaces the copy
each form used to carry. An empty `logoUrl` now falls back to the brand logo instead of
rendering a blank image.

1.6.5
CardPay: the `IframeStyleConfig` branding options now apply to the hosted forms.
`branding.logoUrl` and `branding.showSecurityBadge` were silently ignored on the card-entry, CVV
and stored-card forms, while every other option in the same config applied correctly. Those two
were the only ones implemented by reaching into the rendered form, and the config is applied
before the form is rendered, so the lookups matched nothing and the values were dropped without
an error. The logo is now bound by the forms themselves and the badge is part of the generated
stylesheet, so both apply whenever the form renders. `showCardBrandIcon` was never affected.

The security badge label is not translated: it is rendered through CSS, which has no access to
the translation service. This matches the label the badge carried before.

1.6.4
CardPay: fixes to the gateway-driven authentication options (OtpByUrl, OtpByGenericUI, OtpByHtml).
`AuthenticationOption: OtpByUrl` did not work at all. The gateway authentication page was opened
with a second `window.open`, which browsers suppress because the call happens after the card was
submitted and the host page no longer holds a user gesture - so no window appeared and the payment
failed on a polling timeout. The page is now shown in the window/iframe already holding the card
form, the same way BankPay opens its bank authorization pages.

Also in this release:
- The flow is no longer cancelled when the form window closes during authentication. With OtpByUrl
  the gateway page occupies that window and its return page closes it, which is the normal end of
  authentication, not an abandonment. A close during card or OTP entry still cancels as before.
- Out-of-band authentication now allows five minutes instead of one, both for the OTP status poll
  and for typing an OTP into the generic form. One minute expired mid-authentication and surfaced
  as a spurious failure.
- `authenticationOption` is matched case-insensitively, since gateways serialize the value
  inconsistently (`OtpByURL`). An unrecognised value now fails with a clear error instead of being
  treated as "authentication already performed": that previously returned the card data as a
  success and silently skipped the authentication the gateway had asked for. Merchants sending a
  value outside the documented set will see an error where the call previously appeared to succeed.
- The stored-card (CVV-only) form now takes part in OtpByUrl as well; it previously ignored the
  instruction to move on to the gateway page. It also blocks submission until the CVV is valid,
  ignores repeat clicks on Submit, and reports an error if the card payload cannot be encrypted
  instead of leaving the payment waiting.

Note: OtpByGenericUI and OtpByHtml remain unsupported in the stored-card (CVV-only) flow.

1.6.3
Documentation updates only - no library or API changes.
The README now shows how to obtain and validate results (`parseResultToken`, `clientSuccess`),
lists the supported payment methods, and documents the stored-card (CVV-only) flow for
returning customers. Links now point at the dedicated eWallet documentation alongside the
full API reference.

1.6.2
CardPay: one more browser property for 3D Secure.
`browserProperties` now also carries `browserAcceptHeader`, collected by the same hosted forms.
A page cannot read the headers of its own request, so the value reported is the wildcard `*/*`
that script-initiated requests send. No integration change is required.

1.6.1
CardPay: three more browser properties for 3D Secure.
`browserProperties` now also carries `browserLanguage` (from `navigator.language`),
`browserJavascriptEnabled` and `browserJavaEnabled`, collected by the same hosted forms.
`browserJavascriptEnabled` is always `true` (the collector is itself JavaScript) and
`browserJavaEnabled` reflects the deprecated `navigator.javaEnabled()`, reported as `false`
where the browser no longer exposes it. No integration change is required.

1.6.0
CardPay: browser properties for 3D Secure are now collected by the hosted forms.
The encrypted card payload (`EncryptedBankCard`) carries a new `browserProperties` object,
populated automatically by the card-entry, CVV, and stored-card forms and forwarded with the
card data to the server. Fields: `windowWidth`, `windowHeight`, `timeZoneOffsetMinutes`,
`timeZoneName`, `userAgent`, `colorDepth`, `browserScreenWidth`, `browserScreenHeight`.
No integration change is required - nothing needs to be passed by the merchant.

1.5.0
CardPay: granular per-field billing address prompts.
`RequiredBillingInfo` now accepts an optional `fields` object (`RequiredBillingFields`) that
controls exactly which billing fields are prompted to the end customer - only fields marked
`true` are shown. When set, it takes precedence over the coarse `details` (MIN/FULL) and the
`phoneRequired`/`emailAddressRequired` flags. Fields: `name`, `countryCode`, `postalCode`,
`addressLines`, `locality`, `administrativeArea`, `phoneNumber`, `emailAddress`.
In addition, `Engine.payBy` now honors its `requiredAncillaryInfo` parameter (previously
reserved); when supplied it overrides the value passed to the `Engine` constructor.

1.4.0
CardPay: optional visual customization of the hosted card-entry forms.
`Engine.payBy` now accepts an optional `iframeStyleConfig` parameter that re-skins the
new-card, CVV, and stored-card forms (color palette, typography, per-field states,
chrome, layout/labels, branding, and locale/RTL direction). It is transported to the
hosted forms in the CardEntry postMessage and applied by a single consolidated style
service. All fields are optional; anything omitted keeps its default styling.

1.3.8
Reverse CHANGELOG.md ordering so the most recent version appears at the top.

1.3.7
Fix broken CHANGELOG.md link in the npm README (relative link 404'd; now points to the unpkg CDN).

1.3.6
Include CHANGELOG.md in the published distribution packages.

1.3.3 - 1.3.5
Documentation cleanup.

1.3.1 - 1.3.2
Remove .map harmless 404 console error.

1.3.0
Added the GATEWAY_TOKENIZE operation for CardPay.
After the card details are accepted, the engine posts the card data to [POST] /gateway-tokenize
(same body as /tokenize, with no other parameters) instead of /charge or /tokenize.

1.2.0
CardPay: optional iframe display mode for the card-entry form.
The Engine `uiOptions` now accepts:
- `displayMode`: 'popup' (default) | 'iframe' - render the CardPay form in a separate window or an in-page iframe.
- `iframeContainerSelector`: CSS selector of an element to host the iframe inline; a centered modal overlay is used when omitted.
When embedded as an iframe, the hosted form posts results to the parent window (window.parent) and renders frame-less.

1.1.0 - 1.1.1
Added Pelecard bank provider (server-side polling).

1.0.8-1.0.11
Brand-specific distribution (no code change)

1.0.7
Release.

1.0.6-beta.1
Otp implementation (Html).

1.0.6-beta.0
Upi implementation.

1.0.5-beta.1
Update payTools-3ds.

1.0.5-beta.0
Update npm packages, including payTools-3ds with CyberSource support.

1.0.4
Fix parsing of EWalletChargeResults.

1.0.3-beta.7
Added a formal status to ClientPaymentDataResults class.
Apple Pay user cancellation returned to caller.

1.0.3-beta.6
Fix popup window closing in CardPay.

1.0.3-beta.5
Disable popup window closing disablement from 1.0.3-beta.3.

1.0.3-beta.4
Fix result token parsing.

1.0.3-beta.3
Prevent popup window in card entry from closing in test mode.
Added exception handling in cardpay operation.

1.0.3-beta.2
Support PREAUTH_AND_TOKENIZE operation.

1.0.3-beta.1
Bug fix in handling closed popup window returned message.

1.0.3-beta.0
Avoid usage of static class names, to allow minification.

1.0.2-beta.6
Added logging in factory.

1.0.2-beta.5
Added logging in checkAvailability().

1.0.2-beta.4
Fix ApplePay session validation returned data.

1.0.2-beta.3
Extended the returned model (EWalletResultData) with 2 additional properties, to include client-side errors.
        /** Indicates whether client operation was successfu */
        clientSuccess!: boolean;

        /** In case client operation was unsuccessful */
        clientErrorMessage: any;

The engine.parseResultToken supports the new structure.

1.0.2-beta.2
Fixed bug in accepting 3ds results from CardEntry page

1.0.2-beta.1
Accept 3ds results from CardEntry page

1.0.2-beta.0
Support Charge + Tokenize.
Support unified result token.

1.0.1-beta.15
Expose 3ds data after tokenization.

1.0.1-beta.14
Support branding of popup windows.

1.0.1-beta.13
Support 20 languages.
Support 3d secure in Card Pay.

1.0.1-beta.12
Packaging and publish revision.
Ignore ApplePay exception.

1.0.1-beta.11
Fix ApplePay session completion reporting.

1.0.1-beta.10
Fix parsing results (Tokenization/Charge).

1.0.1-beta.9
Support i18n fixes.

1.0.1-beta.8
Support i18n.

1.0.1-beta.7
Complete support for Credit card payments.
Fixed tokenization results parsing.

1.0.1-beta.6
Initial support for Credit card payments.
Fixes to Apple Pay.

1.0.1-beta.5
Initial support for bank payment: Europe open banking and USA ACH.
Expose the eWallet provider name used.

1.0.1-beta.4
Change APPLE_JS_VERSION to 12.

1.0.1-beta.3
Added ApplePay version compatibility of Safari.
Initial BankPay implementation.

1.0.1 - Including a pre-release for bank payments
