@zkpassport/ui 0.16.1 → 0.17.0-beta.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/dist/styles.css CHANGED
@@ -25,8 +25,10 @@
25
25
  background: var(--zkp-bg);
26
26
  color: var(--zkp-fg);
27
27
  font-family: ui-sans-serif, system-ui, sans-serif;
28
+ text-align: left;
28
29
  font-size: 14px;
29
30
  line-height: 1.4;
31
+ min-height: 460px;
30
32
  }
31
33
 
32
34
  .zkp-card[data-theme="dark"] {
@@ -64,6 +66,19 @@
64
66
  font: inherit;
65
67
  cursor: pointer;
66
68
  }
69
+ .zkp-card button:focus-visible,
70
+ .zkp-card a:focus-visible,
71
+ .zkp-card input:focus-visible {
72
+ outline: 2px solid var(--zkp-brand);
73
+ outline-offset: 2px;
74
+ }
75
+ @media (prefers-reduced-motion: reduce) {
76
+ .zkp-card,
77
+ .zkp-card * {
78
+ animation: none !important;
79
+ transition: none !important;
80
+ }
81
+ }
67
82
 
68
83
  /* Header */
69
84
  .zkp-header {
@@ -237,11 +252,15 @@
237
252
  opacity: 0.65;
238
253
  }
239
254
  .zkp-qr-slot[data-state="generating"] .zkp-qr,
255
+ .zkp-qr-slot[data-state="local-proving"] .zkp-qr,
256
+ .zkp-qr-slot[data-state="save-offer"] .zkp-qr,
240
257
  .zkp-qr-slot[data-state="success"] .zkp-qr,
241
258
  .zkp-qr-slot[data-state="error"] .zkp-qr {
242
259
  opacity: 0.35;
243
260
  }
244
261
  .zkp-qr-slot[data-state="generating"] .zkp-qr-logo,
262
+ .zkp-qr-slot[data-state="local-proving"] .zkp-qr-logo,
263
+ .zkp-qr-slot[data-state="save-offer"] .zkp-qr-logo,
245
264
  .zkp-qr-slot[data-state="success"] .zkp-qr-logo,
246
265
  .zkp-qr-slot[data-state="error"] .zkp-qr-logo {
247
266
  opacity: 0;
@@ -249,6 +268,8 @@
249
268
  .zkp-qr-slot[data-state="connecting"] .zkp-overlay,
250
269
  .zkp-qr-slot[data-state="scanned"] .zkp-overlay,
251
270
  .zkp-qr-slot[data-state="generating"] .zkp-overlay,
271
+ .zkp-qr-slot[data-state="local-proving"] .zkp-overlay,
272
+ .zkp-qr-slot[data-state="save-offer"] .zkp-overlay,
252
273
  .zkp-qr-slot[data-state="success"] .zkp-overlay,
253
274
  .zkp-qr-slot[data-state="error"] .zkp-overlay {
254
275
  display: block;
@@ -422,30 +443,305 @@
422
443
  overflow: hidden;
423
444
  }
424
445
 
425
- /* Open-in-app deep link (mobile only, waiting state) */
446
+ /* Open-in-app deep link (mobile: primary action; shown via .zkp-open-app-block) */
426
447
  .zkp-open-app {
427
- display: none;
428
- margin: 16px 0 0;
429
- padding: 12px 16px;
430
- border-radius: 10px;
431
- background: var(--zkp-accent);
432
- color: var(--zkp-bg);
433
- font-size: 15px;
434
- font-weight: 600;
435
- text-align: center;
436
- text-decoration: none;
437
- box-shadow: 0 4px 12px rgba(17, 24, 39, 0.18);
438
- transition: transform 150ms ease;
448
+ display: none !important;
449
+ margin: 16px 0 0 !important;
450
+ padding: 16px !important;
451
+ border-radius: 8px !important;
452
+ background: var(--zkp-brand) !important;
453
+ color: var(--zkp-bg) !important;
454
+ font-size: 13px !important;
455
+ font-weight: 700 !important;
456
+ letter-spacing: 0.09em !important;
457
+ text-transform: uppercase !important;
458
+ text-align: center !important;
459
+ text-decoration: none !important;
460
+ transition: transform 150ms ease !important;
439
461
  }
440
462
  .zkp-open-app:active {
441
463
  transform: translateY(1px);
442
464
  }
443
- @media (hover: none) and (pointer: coarse) {
444
- .zkp-card[data-state="waiting"] .zkp-open-app {
445
- display: block;
465
+ .zkp-open-app-block {
466
+ display: block !important;
467
+ margin-top: 0 !important;
468
+ width: 100% !important;
469
+ box-sizing: border-box !important;
470
+ }
471
+ /* Mobile-first waiting screen: open-app primary, QR behind a toggle */
472
+ .zkp-open-app-hero {
473
+ display: flex;
474
+ flex-direction: column;
475
+ align-items: stretch;
476
+ gap: 12px;
477
+ padding: 8px 0 4px;
478
+ }
479
+ .zkp-open-app-loading {
480
+ display: flex;
481
+ }
482
+ .zkp-qr-reveal {
483
+ appearance: none !important;
484
+ -webkit-appearance: none !important;
485
+ border: none !important;
486
+ background: none !important;
487
+ padding: 4px !important;
488
+ cursor: pointer !important;
489
+ font-size: 12.5px !important;
490
+ color: var(--zkp-muted) !important;
491
+ text-decoration: underline !important;
492
+ text-underline-offset: 3px !important;
493
+ }
494
+ .zkp-inapp-hint {
495
+ margin: 0;
496
+ font-size: 12px;
497
+ line-height: 1.5;
498
+ text-align: center;
499
+ color: var(--zkp-muted);
500
+ }
501
+
502
+ /* Intro screen */
503
+ .zkp-intro {
504
+ display: flex;
505
+ flex-direction: column;
506
+ flex: 1;
507
+ gap: 16px;
508
+ margin-top: 18px;
509
+ animation: zkp-screen-in 240ms ease;
510
+ }
511
+ .zkp-screen {
512
+ display: flex;
513
+ flex-direction: column;
514
+ flex: 1;
515
+ animation: zkp-screen-in 240ms ease;
516
+ }
517
+ @keyframes zkp-screen-in {
518
+ from {
519
+ opacity: 0;
520
+ transform: translateY(4px);
521
+ }
522
+ to {
523
+ opacity: 1;
524
+ transform: none;
525
+ }
526
+ }
527
+ .zkp-intro > .zkp-divider {
528
+ margin: 2px 0;
529
+ }
530
+ /* Passport data-page style micro-label */
531
+ .zkp-eyebrow {
532
+ margin: 0 0 6px;
533
+ font-size: 11px;
534
+ font-weight: 600;
535
+ letter-spacing: 0.08em;
536
+ text-transform: uppercase;
537
+ color: var(--zkp-muted);
538
+ padding-bottom: 1rem;
539
+ }
540
+ .zkp-intro-request {
541
+ padding: 16px;
542
+ border: 1px solid var(--zkp-border);
543
+ border-radius: 12px;
544
+ background: var(--zkp-surface);
545
+ }
546
+ .zkp-skel-rows {
547
+ display: flex;
548
+ flex-direction: column;
549
+ gap: 12px;
550
+ }
551
+ .zkp-skel-row {
552
+ height: 12px;
553
+ border-radius: 6px;
554
+ background: color-mix(in srgb, var(--zkp-muted) 25%, transparent);
555
+ animation: zkp-skel-pulse 1.4s ease-in-out infinite;
556
+ }
557
+ .zkp-skel-row-detail {
558
+ height: 9px;
559
+ margin-left: 25px;
560
+ opacity: 0.7;
561
+ }
562
+ @keyframes zkp-skel-pulse {
563
+ 0%,
564
+ 100% {
565
+ opacity: 0.55;
566
+ }
567
+ 50% {
568
+ opacity: 1;
569
+ }
570
+ }
571
+ .zkp-intro-list {
572
+ margin: 0;
573
+ padding: 0;
574
+ list-style: none;
575
+ display: flex;
576
+ flex-direction: column;
577
+ gap: 14px;
578
+ }
579
+ .zkp-intro-list li {
580
+ display: flex;
581
+ align-items: flex-start;
582
+ gap: 10px;
583
+ }
584
+ .zkp-intro-list-hint {
585
+ font-size: 12px;
586
+ line-height: 1.45;
587
+ color: var(--zkp-muted);
588
+ margin-top: 5px;
589
+ text-align: center;
590
+ }
591
+ .zkp-intro-item {
592
+ display: flex;
593
+ flex-direction: column;
594
+ gap: 3px;
595
+ min-width: 0;
596
+ }
597
+ .zkp-intro-item-title {
598
+ font-size: 14px;
599
+ font-weight: 600;
600
+ line-height: 1.35;
601
+ color: var(--zkp-fg);
602
+ }
603
+ .zkp-intro-item-detail {
604
+ font-size: 12px;
605
+ line-height: 1.4;
606
+ color: var(--zkp-muted);
607
+ }
608
+ .zkp-intro-check {
609
+ flex: none;
610
+ display: inline-flex;
611
+ width: 15px;
612
+ height: 15px;
613
+ margin-top: 2px;
614
+ color: var(--zkp-brand);
615
+ }
616
+ .zkp-intro-check svg {
617
+ width: 100%;
618
+ height: 100%;
619
+ }
620
+ .zkp-intro-explainer {
621
+ margin: 0;
622
+ font-size: 13px;
623
+ line-height: 1.5;
624
+ color: var(--zkp-muted);
625
+ }
626
+ .zkp-intro-footer {
627
+ display: flex;
628
+ flex-direction: column;
629
+ gap: 10px;
630
+ margin-top: auto;
631
+ padding-top: 4px;
632
+ text-align: center;
633
+ }
634
+ .zkp-intro-footer .zkp-divider {
635
+ margin-bottom: 4px;
636
+ }
637
+ .zkp-intro-footer-note {
638
+ margin: 0;
639
+ font-size: 11.5px;
640
+ line-height: 1.55;
641
+ color: var(--zkp-muted);
642
+ }
643
+ /* Passport-label style privacy assurances */
644
+ .zkp-privacy-strip {
645
+ display: flex;
646
+ align-items: center;
647
+ justify-content: center;
648
+ gap: 10px;
649
+ font-size: 10.5px;
650
+ font-weight: 600;
651
+ letter-spacing: 0.1em;
652
+ text-transform: uppercase;
653
+ color: var(--zkp-brand);
654
+ }
655
+ .zkp-privacy-dot {
656
+ color: var(--zkp-muted);
657
+ letter-spacing: 0;
658
+ }
659
+ .zkp-intro-question {
660
+ display: flex;
661
+ flex-direction: column;
662
+ align-items: center;
663
+ text-align: center;
664
+ gap: 8px;
665
+ padding-top: 6px;
666
+ }
667
+ .zkp-chip-symbol {
668
+ width: 54px;
669
+ color: var(--zkp-brand);
670
+ }
671
+ .zkp-chip-symbol svg {
672
+ width: 100%;
673
+ height: auto;
674
+ display: block;
675
+ }
676
+ .zkp-intro-question-hint {
677
+ margin: 0;
678
+ max-width: 340px;
679
+ font-size: 12.5px;
680
+ line-height: 1.45;
681
+ color: var(--zkp-muted);
682
+ }
683
+ .zkp-intro-question .zkp-intro-continue {
684
+ margin-top: 6px;
685
+ }
686
+
687
+ .zkp-intro-question-text {
688
+ margin: 4px 0 0;
689
+ font-size: 15px;
690
+ font-weight: 600;
691
+ color: var(--zkp-fg);
692
+ }
693
+ .zkp-intro-continue {
694
+ appearance: none !important;
695
+ -webkit-appearance: none !important;
696
+ -webkit-tap-highlight-color: transparent !important;
697
+ display: block !important;
698
+ width: 100% !important;
699
+ padding: 16px !important;
700
+ border: none !important;
701
+ border-radius: 8px !important;
702
+ background: var(--zkp-brand) !important;
703
+ color: var(--zkp-bg) !important;
704
+ font-size: 13px !important;
705
+ font-weight: 700 !important;
706
+ letter-spacing: 0.09em !important;
707
+ text-transform: uppercase !important;
708
+ text-align: center !important;
709
+ cursor: pointer !important;
710
+ transition:
711
+ filter 150ms ease,
712
+ transform 150ms ease !important;
713
+ }
714
+ .zkp-intro-continue:hover {
715
+ filter: brightness(1.08) !important;
716
+ }
717
+ .zkp-intro-continue:active {
718
+ transform: translateY(1px) !important;
719
+ filter: brightness(0.95) !important;
720
+ }
721
+ /* Dark --zkp-brand is a muted accent tint and makes the CTA read as
722
+ disabled; the primary action gets its own saturated fill */
723
+ .zkp-card[data-theme="dark"] .zkp-intro-continue {
724
+ background: #4a68dd !important;
725
+ color: #ffffff !important;
726
+ }
727
+ @media (prefers-color-scheme: dark) {
728
+ .zkp-card[data-theme="auto"] .zkp-intro-continue {
729
+ background: #4a68dd !important;
730
+ color: #ffffff !important;
446
731
  }
447
732
  }
448
733
 
734
+ .zkp-intro-link {
735
+ align-self: center !important;
736
+ padding: 4px 8px !important;
737
+ border: none !important;
738
+ background: transparent !important;
739
+ color: var(--zkp-muted) !important;
740
+ font-size: 13px !important;
741
+ text-decoration: underline !important;
742
+ cursor: pointer !important;
743
+ }
744
+
449
745
  /* Retry */
450
746
  .zkp-result-actions {
451
747
  display: flex;
@@ -551,3 +847,150 @@
551
847
  }
552
848
  }
553
849
  }
850
+
851
+ @layer zkpassport {
852
+ /* "Verify with ZKPassport" button (opens the hosted popup).
853
+ Customize via CSS custom properties on the mount element or any ancestor:
854
+ --zkp-btn-bg/-fg/-border-color/-radius/-padding/-font/-font-size/-letter-spacing/
855
+ -text-transform, and --zkp-btn-success/-error for the verified and failed states.
856
+ Sizing hangs off --zkp-btn-font-size: the icon, gap and padding are all in em.
857
+
858
+ !important throughout: host resets (e.g. Tailwind preflight) are unlayered
859
+ and would otherwise strip these. */
860
+ .zkp-verify-button {
861
+ --zkp-bg: #ffffff;
862
+ --zkp-brand: #2139a3;
863
+ --zkp-border: #d3d9e8;
864
+ appearance: none !important;
865
+ -webkit-appearance: none !important;
866
+ -webkit-tap-highlight-color: transparent !important;
867
+ display: inline-flex !important;
868
+ align-items: center !important;
869
+ justify-content: center !important;
870
+ padding: var(--zkp-btn-padding, 0.8667em 1.6em) !important;
871
+ border: 1px solid var(--zkp-btn-border-color, var(--zkp-border)) !important;
872
+ border-radius: var(--zkp-btn-radius, 8px) !important;
873
+ background: var(--zkp-btn-bg, var(--zkp-bg)) !important;
874
+ color: var(--zkp-btn-fg, var(--zkp-brand)) !important;
875
+ font-family: var(
876
+ --zkp-btn-font,
877
+ ui-sans-serif,
878
+ system-ui,
879
+ -apple-system,
880
+ sans-serif
881
+ ) !important;
882
+ font-size: var(--zkp-btn-font-size, 15px) !important;
883
+ white-space: nowrap !important;
884
+ font-weight: 600 !important;
885
+ letter-spacing: var(--zkp-btn-letter-spacing, 0.04em) !important;
886
+ text-transform: var(--zkp-btn-text-transform, none) !important;
887
+ line-height: 1.2 !important;
888
+ cursor: pointer !important;
889
+ transition:
890
+ filter 150ms ease,
891
+ transform 150ms ease;
892
+ }
893
+ .zkp-verify-wrap[data-theme="dark"] .zkp-verify-button {
894
+ --zkp-bg: #0f172a;
895
+ --zkp-brand: #93b0f5;
896
+ --zkp-border: #334155;
897
+ }
898
+ @media (prefers-color-scheme: dark) {
899
+ .zkp-verify-wrap[data-theme="auto"] .zkp-verify-button {
900
+ --zkp-bg: #0f172a;
901
+ --zkp-brand: #93b0f5;
902
+ --zkp-border: #334155;
903
+ }
904
+ }
905
+ .zkp-verify-button:hover:not(:disabled) {
906
+ filter: brightness(0.97);
907
+ }
908
+ .zkp-verify-button:active:not(:disabled) {
909
+ transform: translateY(1px);
910
+ filter: brightness(0.95);
911
+ }
912
+ /* Both states share one grid cell, so the button is as wide as the longer of the two
913
+ and never resizes when it switches to "Verified" */
914
+ .zkp-verify-content {
915
+ display: grid !important;
916
+ grid-template-areas: "state" !important;
917
+ justify-items: center !important;
918
+ }
919
+ .zkp-verify-state {
920
+ grid-area: state !important;
921
+ display: inline-flex !important;
922
+ align-items: center !important;
923
+ gap: 0.7333em !important;
924
+ }
925
+ .zkp-verify-button:not([data-status="success"]) .zkp-verify-state-success,
926
+ .zkp-verify-button[data-status="success"] .zkp-verify-state-default {
927
+ visibility: hidden !important;
928
+ }
929
+ .zkp-verify-button-mark {
930
+ position: relative;
931
+ display: inline-flex;
932
+ width: 1.3333em;
933
+ height: 1.3333em;
934
+ flex: none;
935
+ }
936
+ .zkp-verify-button-mark svg {
937
+ width: 100%;
938
+ height: 100%;
939
+ display: block;
940
+ }
941
+ /* !important: unlayered host resets (Tailwind preflight sets border-width: 0
942
+ on all ::after elements) would otherwise erase the ring */
943
+ .zkp-verify-button[data-status="in-progress"] .zkp-verify-button-mark::after {
944
+ content: "" !important;
945
+ position: absolute !important;
946
+ inset: -0.3333em !important;
947
+ border-radius: 50% !important;
948
+ border: 0.1333em solid color-mix(in srgb, currentColor 35%, transparent) !important;
949
+ border-top-color: currentColor !important;
950
+ box-sizing: border-box !important;
951
+ animation: zkp-spinner-rotate 0.9s linear infinite !important;
952
+ }
953
+ .zkp-verify-wrap {
954
+ display: inline-flex;
955
+ flex-direction: column;
956
+ align-items: center;
957
+ gap: 8px;
958
+ --zkp-success: #15803d;
959
+ --zkp-error: #dc2626;
960
+ }
961
+ .zkp-verify-wrap[data-theme="dark"] {
962
+ --zkp-success: #4ade80;
963
+ --zkp-error: #f87171;
964
+ }
965
+ @media (prefers-color-scheme: dark) {
966
+ .zkp-verify-wrap[data-theme="auto"] {
967
+ --zkp-success: #4ade80;
968
+ --zkp-error: #f87171;
969
+ }
970
+ }
971
+ .zkp-verify-error {
972
+ margin: 0 !important;
973
+ font-family: ui-sans-serif, system-ui, sans-serif !important;
974
+ font-size: 12.5px !important;
975
+ line-height: 1.4 !important;
976
+ color: var(--zkp-btn-error, var(--zkp-error)) !important;
977
+ }
978
+ .zkp-verify-button:disabled {
979
+ cursor: default !important;
980
+ transform: none !important;
981
+ }
982
+ /* Only the waiting state is dimmed; success is an outcome, not an unavailable button */
983
+ .zkp-verify-button[data-status="in-progress"] {
984
+ opacity: 0.65 !important;
985
+ filter: saturate(0.75) !important;
986
+ }
987
+ .zkp-verify-button[data-status="success"] {
988
+ color: var(--zkp-btn-success, var(--zkp-success)) !important;
989
+ }
990
+
991
+ @keyframes zkp-spinner-rotate {
992
+ to {
993
+ transform: rotate(360deg);
994
+ }
995
+ }
996
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zkpassport/ui",
3
- "version": "0.16.1",
3
+ "version": "0.17.0-beta.1",
4
4
  "description": "Drop-in QR verification card for ZKPassport. Vanilla JS by default; React component available at @zkpassport/ui/react.",
5
5
  "author": "ZKPassport",
6
6
  "license": "Apache-2.0",
@@ -34,20 +34,41 @@
34
34
  "default": "./dist/cjs/react.cjs"
35
35
  }
36
36
  },
37
+ "./button": {
38
+ "import": {
39
+ "types": "./dist/esm/button.d.ts",
40
+ "default": "./dist/esm/button.js"
41
+ },
42
+ "require": {
43
+ "types": "./dist/cjs/button.d.cts",
44
+ "default": "./dist/cjs/button.cjs"
45
+ }
46
+ },
47
+ "./react-button": {
48
+ "import": {
49
+ "types": "./dist/esm/react-button.d.ts",
50
+ "default": "./dist/esm/react-button.js"
51
+ },
52
+ "require": {
53
+ "types": "./dist/cjs/react-button.d.cts",
54
+ "default": "./dist/cjs/react-button.cjs"
55
+ }
56
+ },
37
57
  "./styles.css": "./dist/styles.css"
38
58
  },
39
59
  "scripts": {
40
60
  "build": "tsup --config tsup.config.ts",
41
61
  "dev:build": "DEV_BUILD=true bun run build",
42
62
  "clean": "rimraf dist tsconfig.tsbuildinfo",
43
- "test": "echo 'no tests yet'",
44
- "check": "tsc --noEmit && prettier -c src && eslint src --ext .ts,.tsx",
45
- "format": "prettier -c -w src && eslint src --ext .ts,.tsx --fix",
46
- "validate-package": "../../scripts/validate-package.sh --exclude-entrypoints ./styles.css",
63
+ "test": "bun test",
64
+ "check": "tsc --noEmit && prettier -c src tests && eslint src tests --ext .ts,.tsx",
65
+ "format": "prettier -c -w src tests && eslint src tests --ext .ts,.tsx --fix",
66
+ "validate-package": "../../scripts/validate-package.sh --exclude-entrypoints ./styles.css && node ../../scripts/check-dts-self-contained.mjs",
47
67
  "prepublishOnly": "../../scripts/prepublish.sh"
48
68
  },
49
69
  "files": [
50
- "dist"
70
+ "dist",
71
+ "!dist/hosted*"
51
72
  ],
52
73
  "sideEffects": [
53
74
  "*.css"
@@ -61,14 +82,9 @@
61
82
  "verification",
62
83
  "widget"
63
84
  ],
64
- "dependencies": {
65
- "@zkpassport/sdk": "0.16.1",
66
- "qrcode": "^1.5.4"
67
- },
68
85
  "peerDependencies": {
69
86
  "react": ">=18",
70
- "react-dom": ">=18",
71
- "typescript": "^5.0.0"
87
+ "react-dom": ">=18"
72
88
  },
73
89
  "peerDependenciesMeta": {
74
90
  "react": {
@@ -82,7 +98,9 @@
82
98
  "@types/qrcode": "^1.5.5",
83
99
  "@types/react": "^18.3.0",
84
100
  "@types/react-dom": "^18.3.0",
85
- "preact": "^10.22.0",
101
+ "@zkpassport/sdk": "0.17.0-beta.1",
102
+ "preact": "10.29.2",
103
+ "qrcode": "1.5.4",
86
104
  "react": "^18.3.0",
87
105
  "react-dom": "^18.3.0"
88
106
  },
@@ -1,31 +0,0 @@
1
- import { ZKPassport, QueryBuilder, QueryBuilderResult } from '@zkpassport/sdk';
2
-
3
- type SdkCallback<K extends keyof QueryBuilderResult> = QueryBuilderResult[K] extends (cb: infer C) => void ? C : never;
4
- type SdkRequestProps = Omit<Parameters<ZKPassport["request"]>[0], "projectID" | "topicOverride" | "keyPairOverride" | "cloudProverUrl" | "bridgeUrl">;
5
- type ZKPassportQRCodeDisplayOptions = {
6
- header?: boolean;
7
- steps?: boolean;
8
- appLinks?: boolean;
9
- };
10
- type ZKPassportQRCodeOptions = SdkRequestProps & {
11
- domain?: string;
12
- theme?: "light" | "dark" | "auto";
13
- display?: ZKPassportQRCodeDisplayOptions;
14
- query: (queryBuilder: QueryBuilder) => QueryBuilderResult;
15
- onReady?: () => void;
16
- onRetryClicked?: () => void;
17
- onBridgeConnect?: SdkCallback<"onBridgeConnect">;
18
- onRequestReceived?: SdkCallback<"onRequestReceived">;
19
- onGeneratingProof?: SdkCallback<"onGeneratingProof">;
20
- onProofGenerated?: SdkCallback<"onProofGenerated">;
21
- onResult?: SdkCallback<"onResult">;
22
- onReject?: SdkCallback<"onReject">;
23
- onError?: SdkCallback<"onError">;
24
- };
25
- type QRCardHandle = {
26
- update(next: ZKPassportQRCodeOptions): void;
27
- retry(): void;
28
- unmount(): void;
29
- };
30
-
31
- export type { QRCardHandle as Q, ZKPassportQRCodeOptions as Z, ZKPassportQRCodeDisplayOptions as a };
@@ -1,31 +0,0 @@
1
- import { ZKPassport, QueryBuilder, QueryBuilderResult } from '@zkpassport/sdk';
2
-
3
- type SdkCallback<K extends keyof QueryBuilderResult> = QueryBuilderResult[K] extends (cb: infer C) => void ? C : never;
4
- type SdkRequestProps = Omit<Parameters<ZKPassport["request"]>[0], "projectID" | "topicOverride" | "keyPairOverride" | "cloudProverUrl" | "bridgeUrl">;
5
- type ZKPassportQRCodeDisplayOptions = {
6
- header?: boolean;
7
- steps?: boolean;
8
- appLinks?: boolean;
9
- };
10
- type ZKPassportQRCodeOptions = SdkRequestProps & {
11
- domain?: string;
12
- theme?: "light" | "dark" | "auto";
13
- display?: ZKPassportQRCodeDisplayOptions;
14
- query: (queryBuilder: QueryBuilder) => QueryBuilderResult;
15
- onReady?: () => void;
16
- onRetryClicked?: () => void;
17
- onBridgeConnect?: SdkCallback<"onBridgeConnect">;
18
- onRequestReceived?: SdkCallback<"onRequestReceived">;
19
- onGeneratingProof?: SdkCallback<"onGeneratingProof">;
20
- onProofGenerated?: SdkCallback<"onProofGenerated">;
21
- onResult?: SdkCallback<"onResult">;
22
- onReject?: SdkCallback<"onReject">;
23
- onError?: SdkCallback<"onError">;
24
- };
25
- type QRCardHandle = {
26
- update(next: ZKPassportQRCodeOptions): void;
27
- retry(): void;
28
- unmount(): void;
29
- };
30
-
31
- export type { QRCardHandle as Q, ZKPassportQRCodeOptions as Z, ZKPassportQRCodeDisplayOptions as a };