DEMO Angular bindings over the same vanilla core Full check-in demo →

Same core, Angular bindings

The library is a plain async function with no framework dependency. This page renders with Angular through a ~20-line injectable service; the React example is the same wrapper as a hook.

The whole binding

@Injectable({ providedIn: "root" })
export class CheckinService {
  readonly status = signal<Status>("idle");
  readonly response = signal<SmartCheckinResponse | undefined>(undefined);

  async request(input, options?) {
    this.status.set("waiting");
    try {
      this.response.set(await requestCheckin(input, options));
      this.status.set("done");
    } catch (e) {
      this.status.set(
        e instanceof CheckinFlowError && e.outcome.status === "declined"
          ? "declined" : "error");
    }
  }
}

Compiled in the browser (JIT) so this page needs no Angular build step — which is why the bundle is large. A real app compiles ahead of time and ships only its own code plus this library.