@cimplify/sdk 0.3.6 → 0.4.0

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/react.mjs ADDED
@@ -0,0 +1,136 @@
1
+ import { createContext, useContext, useState, useEffect, useRef, useCallback } from 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // src/react/index.tsx
5
+
6
+ // src/types/elements.ts
7
+ var ELEMENT_TYPES = {
8
+ AUTH: "auth",
9
+ ADDRESS: "address",
10
+ PAYMENT: "payment"
11
+ };
12
+ var EVENT_TYPES = {
13
+ READY: "ready",
14
+ AUTHENTICATED: "authenticated",
15
+ REQUIRES_OTP: "requires_otp",
16
+ ERROR: "error",
17
+ CHANGE: "change"};
18
+ var ElementsContext = createContext({
19
+ elements: null,
20
+ isReady: false
21
+ });
22
+ function useElements() {
23
+ return useContext(ElementsContext).elements;
24
+ }
25
+ function useElementsReady() {
26
+ return useContext(ElementsContext).isReady;
27
+ }
28
+ function ElementsProvider({
29
+ client,
30
+ businessId,
31
+ options,
32
+ children
33
+ }) {
34
+ const [elements, setElements] = useState(null);
35
+ const [isReady, setIsReady] = useState(false);
36
+ useEffect(() => {
37
+ const instance = client.elements(businessId, options);
38
+ setElements(instance);
39
+ setIsReady(true);
40
+ return () => instance.destroy();
41
+ }, [client, businessId, options]);
42
+ return /* @__PURE__ */ jsx(ElementsContext.Provider, { value: { elements, isReady }, children });
43
+ }
44
+ function AuthElement({
45
+ className,
46
+ style,
47
+ prefillEmail,
48
+ onReady,
49
+ onAuthenticated,
50
+ onRequiresOtp,
51
+ onError
52
+ }) {
53
+ const containerRef = useRef(null);
54
+ const elementRef = useRef(null);
55
+ const elements = useElements();
56
+ useEffect(() => {
57
+ if (!elements || !containerRef.current) return;
58
+ const element = elements.create(ELEMENT_TYPES.AUTH, { prefillEmail });
59
+ elementRef.current = element;
60
+ element.on(EVENT_TYPES.READY, () => onReady?.());
61
+ element.on(EVENT_TYPES.AUTHENTICATED, (data) => onAuthenticated?.(data));
62
+ element.on(EVENT_TYPES.REQUIRES_OTP, (data) => onRequiresOtp?.(data));
63
+ element.on(EVENT_TYPES.ERROR, (data) => onError?.(data));
64
+ element.mount(containerRef.current);
65
+ return () => element.destroy();
66
+ }, [elements, prefillEmail, onReady, onAuthenticated, onRequiresOtp, onError]);
67
+ return /* @__PURE__ */ jsx("div", { ref: containerRef, className, style });
68
+ }
69
+ function AddressElement({
70
+ className,
71
+ style,
72
+ mode = "shipping",
73
+ onReady,
74
+ onChange,
75
+ onError
76
+ }) {
77
+ const containerRef = useRef(null);
78
+ const elementRef = useRef(null);
79
+ const elements = useElements();
80
+ useEffect(() => {
81
+ if (!elements || !containerRef.current) return;
82
+ const element = elements.create(ELEMENT_TYPES.ADDRESS, { mode });
83
+ elementRef.current = element;
84
+ element.on(EVENT_TYPES.READY, () => onReady?.());
85
+ element.on(EVENT_TYPES.CHANGE, (data) => onChange?.(data));
86
+ element.on(EVENT_TYPES.ERROR, (data) => onError?.(data));
87
+ element.mount(containerRef.current);
88
+ return () => element.destroy();
89
+ }, [elements, mode, onReady, onChange, onError]);
90
+ return /* @__PURE__ */ jsx("div", { ref: containerRef, className, style });
91
+ }
92
+ function PaymentElement({
93
+ className,
94
+ style,
95
+ amount,
96
+ currency,
97
+ onReady,
98
+ onChange,
99
+ onError
100
+ }) {
101
+ const containerRef = useRef(null);
102
+ const elementRef = useRef(null);
103
+ const elements = useElements();
104
+ useEffect(() => {
105
+ if (!elements || !containerRef.current) return;
106
+ const element = elements.create(ELEMENT_TYPES.PAYMENT, { amount, currency });
107
+ elementRef.current = element;
108
+ element.on(EVENT_TYPES.READY, () => onReady?.());
109
+ element.on(EVENT_TYPES.CHANGE, (data) => onChange?.(data));
110
+ element.on(EVENT_TYPES.ERROR, (data) => onError?.(data));
111
+ element.mount(containerRef.current);
112
+ return () => element.destroy();
113
+ }, [elements, amount, currency, onReady, onChange, onError]);
114
+ return /* @__PURE__ */ jsx("div", { ref: containerRef, className, style });
115
+ }
116
+ function useCheckout() {
117
+ const elements = useElements();
118
+ const [isLoading, setIsLoading] = useState(false);
119
+ const submit = useCallback(
120
+ async (data) => {
121
+ if (!elements) {
122
+ return { success: false, error: { code: "NO_ELEMENTS", message: "Elements not initialized" } };
123
+ }
124
+ setIsLoading(true);
125
+ try {
126
+ return await elements.submitCheckout(data);
127
+ } finally {
128
+ setIsLoading(false);
129
+ }
130
+ },
131
+ [elements]
132
+ );
133
+ return { submit, isLoading };
134
+ }
135
+
136
+ export { AddressElement, AuthElement, ElementsProvider, PaymentElement, useCheckout, useElements, useElementsReady };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cimplify/sdk",
3
- "version": "0.3.6",
3
+ "version": "0.4.0",
4
4
  "description": "Cimplify Commerce SDK for storefronts",
5
5
  "keywords": [
6
6
  "cimplify",
@@ -20,6 +20,11 @@
20
20
  "types": "./dist/index.d.ts",
21
21
  "import": "./dist/index.mjs",
22
22
  "require": "./dist/index.js"
23
+ },
24
+ "./react": {
25
+ "types": "./dist/react.d.ts",
26
+ "import": "./dist/react.mjs",
27
+ "require": "./dist/react.js"
23
28
  }
24
29
  },
25
30
  "scripts": {
@@ -31,8 +36,18 @@
31
36
  "format": "oxfmt . --write",
32
37
  "format:check": "oxfmt . --check"
33
38
  },
39
+ "peerDependencies": {
40
+ "react": ">=17.0.0"
41
+ },
42
+ "peerDependenciesMeta": {
43
+ "react": {
44
+ "optional": true
45
+ }
46
+ },
34
47
  "devDependencies": {
48
+ "@types/react": "^19.2.7",
35
49
  "@typescript/native-preview": "^7.0.0-dev.20260109.1",
50
+ "react": "^19.2.3",
36
51
  "tsup": "^8.5.1",
37
52
  "typescript": "5.9.3"
38
53
  }