@gearbox-protocol/ui-kit 4.7.0 → 4.8.0-next.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.
Files changed (34) hide show
  1. package/README.md +5 -0
  2. package/dist/cjs/index.cjs +1 -1
  3. package/dist/cjs/user-agreements/agreement-cache.cjs +1 -0
  4. package/dist/cjs/user-agreements/agreement-error.cjs +1 -0
  5. package/dist/cjs/user-agreements/agreement-service.cjs +1 -0
  6. package/dist/cjs/user-agreements/index.cjs +1 -0
  7. package/dist/cjs/user-agreements/legal-messages.cjs +18 -0
  8. package/dist/cjs/user-agreements/types.cjs +1 -0
  9. package/dist/cjs/user-agreements/use-agreement.cjs +1 -0
  10. package/dist/cjs/user-agreements/use-blocked-region.cjs +1 -0
  11. package/dist/cjs/utils/index.cjs +1 -1
  12. package/dist/cjs/utils/wallet.cjs +1 -0
  13. package/dist/esm/index.js +181 -176
  14. package/dist/esm/user-agreements/agreement-cache.js +15 -0
  15. package/dist/esm/user-agreements/agreement-error.js +44 -0
  16. package/dist/esm/user-agreements/agreement-service.js +122 -0
  17. package/dist/esm/user-agreements/index.js +25 -0
  18. package/dist/esm/user-agreements/legal-messages.js +61 -0
  19. package/dist/esm/user-agreements/types.js +1 -0
  20. package/dist/esm/user-agreements/use-agreement.js +130 -0
  21. package/dist/esm/user-agreements/use-blocked-region.js +24 -0
  22. package/dist/esm/utils/index.js +30 -25
  23. package/dist/esm/utils/wallet.js +37 -0
  24. package/dist/types/user-agreements/agreement-cache.d.ts +11 -0
  25. package/dist/types/user-agreements/agreement-error.d.ts +19 -0
  26. package/dist/types/user-agreements/agreement-service.d.ts +25 -0
  27. package/dist/types/user-agreements/index.d.ts +6 -0
  28. package/dist/types/user-agreements/legal-messages.d.ts +49 -0
  29. package/dist/types/user-agreements/types.d.ts +28 -0
  30. package/dist/types/user-agreements/use-agreement.d.ts +76 -0
  31. package/dist/types/user-agreements/use-blocked-region.d.ts +15 -0
  32. package/dist/types/utils/index.d.ts +1 -0
  33. package/dist/types/utils/wallet.d.ts +25 -0
  34. package/package.json +20 -5
@@ -0,0 +1,76 @@
1
+ import { Address } from 'viem';
2
+ import { AgreementRecord } from './agreement-cache';
3
+ import { AgreementError } from './agreement-error';
4
+ import { AgreementConfig, AgreementResult, AgreementStatus, CheckAgreementProps, SignAgreementProps } from './types';
5
+ export interface CheckAgreementErrorEvent {
6
+ error: AgreementError;
7
+ account: Address;
8
+ chainId: number;
9
+ }
10
+ export interface SignAgreementEvent {
11
+ account: Address;
12
+ chainId: number;
13
+ legalMessageVersion: number;
14
+ }
15
+ export interface SignAgreementSuccessEvent {
16
+ account: Address;
17
+ result: AgreementResult;
18
+ chainId: number;
19
+ legalMessageVersion: number;
20
+ }
21
+ export interface SignAgreementErrorEvent {
22
+ error: AgreementError;
23
+ account: Address;
24
+ chainId: number;
25
+ }
26
+ export interface UseAgreementOptions {
27
+ /** Agreement service configuration */
28
+ config: AgreementConfig;
29
+ /** Account address (optional, falls back to wagmi's useAccount) */
30
+ account?: Address;
31
+ /** Current chain ID (optional, falls back to wagmi's useChainId) */
32
+ chainId?: number;
33
+ /** Auto-check agreement status on mount */
34
+ autoCheck?: boolean;
35
+ /**
36
+ * Constant reference with additional query key parts, used to namespace
37
+ * statuses, e.g. ["RWA"] or ["COMMON"] for the RWA or combined agreement
38
+ */
39
+ additionalQueryDep?: string[];
40
+ onCheckAgreement?: (props: CheckAgreementProps) => void;
41
+ onCheckAgreementError?: (event: CheckAgreementErrorEvent) => void;
42
+ onSignAgreement?: (event: SignAgreementEvent) => void;
43
+ onSignAgreementSuccess?: (event: SignAgreementSuccessEvent) => void;
44
+ onSignAgreementError?: (event: SignAgreementErrorEvent) => void;
45
+ }
46
+ export interface UseAgreementReturn {
47
+ /** Current agreement status */
48
+ status: AgreementStatus | undefined;
49
+ /** Whether check is in progress */
50
+ isLoading: boolean;
51
+ /** Whether signing is in progress */
52
+ isSigning: boolean;
53
+ /** Error if check/sign failed */
54
+ error: Error | null;
55
+ /** Check agreement status */
56
+ checkAgreement: () => Promise<AgreementResult | undefined>;
57
+ /** Sign the legal agreement */
58
+ signAgreement: (props: SignAgreementProps) => Promise<AgreementResult | undefined>;
59
+ /** Whether user has an older signature (needs re-sign) */
60
+ hasV2Signature: boolean;
61
+ /** Legal message text */
62
+ legalMessage: string;
63
+ /** Legal message version */
64
+ legalMessageVersion: number;
65
+ /** All agreement statuses (for multiple accounts) */
66
+ allStatuses: AgreementRecord;
67
+ }
68
+ /**
69
+ * Checks and signs the legal agreement, caching statuses in react-query.
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * const { status, signAgreement } = useAgreement({ config: {} });
74
+ * ```
75
+ */
76
+ export declare function useAgreement(options: UseAgreementOptions): UseAgreementReturn;
@@ -0,0 +1,15 @@
1
+ import { AgreementConfig } from './types';
2
+ export interface UseBlockedRegionReturn {
3
+ isBlocked: boolean;
4
+ isLoading: boolean;
5
+ isError: boolean;
6
+ }
7
+ /**
8
+ * Checks whether the user's region is blocked via the access check endpoint.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const { isBlocked } = useBlockedRegion({});
13
+ * ```
14
+ */
15
+ export declare function useBlockedRegion(config: AgreementConfig): UseBlockedRegionReturn;
@@ -12,5 +12,6 @@ export * from './ranges';
12
12
  export * from './shorten-string';
13
13
  export * from './sort';
14
14
  export * from './templates';
15
+ export * from './wallet';
15
16
  export * from './window';
16
17
  export * from './z-index';
@@ -0,0 +1,25 @@
1
+ export type WalletType = "EOA" | "UNKNOWN_CONTRACT" | "UNKNOWN";
2
+ /**
3
+ * Minimal connector shape, compatible with any wagmi version
4
+ */
5
+ export interface ConnectorLike {
6
+ id: string;
7
+ name: string;
8
+ type?: string;
9
+ }
10
+ /**
11
+ * Parent domains that embed the app as a Safe app
12
+ */
13
+ export declare const DEFAULT_SAFE_DOMAINS: RegExp[];
14
+ export declare function isSafeAppsSDK(connector: ConnectorLike): boolean;
15
+ export declare function isBinanceSDK(connector: ConnectorLike): boolean;
16
+ /**
17
+ * Whether the app runs in an iframe embedded by one of the given domains.
18
+ * Always false outside the browser.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * isSafeDomain([...DEFAULT_SAFE_DOMAINS, /my-safe\.example\.com$/]);
23
+ * ```
24
+ */
25
+ export declare function isSafeDomain(domains?: RegExp[]): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/ui-kit",
3
- "version": "4.7.0",
3
+ "version": "4.8.0-next.1",
4
4
  "description": "Internal UI components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -29,6 +29,11 @@
29
29
  "import": "./dist/esm/configs/tailwind-preset.js",
30
30
  "default": "./dist/cjs/configs/tailwind-preset.cjs"
31
31
  },
32
+ "./user-agreements": {
33
+ "types": "./dist/types/user-agreements/index.d.ts",
34
+ "import": "./dist/esm/user-agreements/index.js",
35
+ "default": "./dist/cjs/user-agreements/index.cjs"
36
+ },
32
37
  "./globals.css": "./dist/globals.css",
33
38
  "./grid-safelist.css": "./dist/grid-safelist.css",
34
39
  "./theme.css": "./src/styles/theme.css",
@@ -76,24 +81,29 @@
76
81
  "@radix-ui/react-tooltip": "^1.1.6",
77
82
  "class-variance-authority": "^0.7.1",
78
83
  "clsx": "^2.1.1",
79
- "react-markdown": "^10.1.0",
80
- "remark-gfm": "^4.0.1",
81
84
  "lightweight-charts": "^5.2.1",
82
85
  "luxon": "^3.5.0",
86
+ "react-markdown": "^10.1.0",
87
+ "remark-gfm": "^4.0.1",
83
88
  "tailwind-merge": "^3.4.0",
84
89
  "tailwindcss-animate": "^1.0.7"
85
90
  },
86
91
  "peerDependencies": {
87
92
  "@gearbox-protocol/sdk": "*",
93
+ "@tanstack/react-query": "^5.0.0",
88
94
  "@types/react": "^18 || ^19",
89
95
  "react": "^18 || ^19",
90
96
  "react-intl": "^6.0.0 || ^7.0.0 || ^10.0.0",
91
97
  "react-router-dom": "^6.0.0 || ^7.0.0",
92
98
  "sonner": "^2.0.0",
93
99
  "tailwindcss": "^4.0.0",
94
- "viem": "^2.0.0"
100
+ "viem": "^2.0.0",
101
+ "wagmi": "^2.0.0 || ^3.0.0"
95
102
  },
96
103
  "peerDependenciesMeta": {
104
+ "@tanstack/react-query": {
105
+ "optional": true
106
+ },
97
107
  "react-intl": {
98
108
  "optional": true
99
109
  },
@@ -102,6 +112,9 @@
102
112
  },
103
113
  "tailwindcss": {
104
114
  "optional": true
115
+ },
116
+ "wagmi": {
117
+ "optional": true
105
118
  }
106
119
  },
107
120
  "devDependencies": {
@@ -119,6 +132,7 @@
119
132
  "@storybook/addon-vitest": "^10.0.8",
120
133
  "@storybook/react-vite": "^10.0.8",
121
134
  "@tailwindcss/postcss": "^4.3.3",
135
+ "@tanstack/react-query": "^5.104.1",
122
136
  "@types/cross-spawn": "^6.0.6",
123
137
  "@types/luxon": "^3.7.5",
124
138
  "@types/react": "^19.2.18",
@@ -151,7 +165,8 @@
151
165
  "vite": "^6.3.5",
152
166
  "vite-plugin-dts": "^4.5.4",
153
167
  "vite-tsconfig-paths": "^5.1.4",
154
- "vitest": "^4.0.14"
168
+ "vitest": "^4.0.14",
169
+ "wagmi": "^3.7.7"
155
170
  },
156
171
  "commitlint": {
157
172
  "extends": [