@cimplify/sdk 0.3.5 → 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.
@@ -0,0 +1,59 @@
1
+ import { r as CimplifyElements, C as CimplifyClient, v as ElementsOptions, eh as AuthenticatedData, ef as AddressInfo, eg as PaymentMethodInfo, ej as ElementsCheckoutResult } from './client-Ug3b8v1t.mjs';
2
+ import React, { ReactNode } from 'react';
3
+
4
+ declare function useElements(): CimplifyElements | null;
5
+ declare function useElementsReady(): boolean;
6
+ interface ElementsProviderProps {
7
+ client: CimplifyClient;
8
+ businessId: string;
9
+ options?: ElementsOptions;
10
+ children: ReactNode;
11
+ }
12
+ declare function ElementsProvider({ client, businessId, options, children, }: ElementsProviderProps): React.ReactElement;
13
+ interface BaseElementProps {
14
+ className?: string;
15
+ style?: React.CSSProperties;
16
+ onReady?: () => void;
17
+ onError?: (error: {
18
+ code: string;
19
+ message: string;
20
+ }) => void;
21
+ }
22
+ interface AuthElementProps extends BaseElementProps {
23
+ prefillEmail?: string;
24
+ onAuthenticated?: (data: AuthenticatedData) => void;
25
+ onRequiresOtp?: (data: {
26
+ contactMasked: string;
27
+ }) => void;
28
+ }
29
+ declare function AuthElement({ className, style, prefillEmail, onReady, onAuthenticated, onRequiresOtp, onError, }: AuthElementProps): React.ReactElement | null;
30
+ interface AddressElementProps extends BaseElementProps {
31
+ mode?: "shipping" | "billing";
32
+ onChange?: (data: {
33
+ address: AddressInfo;
34
+ saveToLink: boolean;
35
+ }) => void;
36
+ }
37
+ declare function AddressElement({ className, style, mode, onReady, onChange, onError, }: AddressElementProps): React.ReactElement | null;
38
+ interface PaymentElementProps extends BaseElementProps {
39
+ amount?: number;
40
+ currency?: string;
41
+ onChange?: (data: {
42
+ paymentMethod: PaymentMethodInfo;
43
+ saveToLink: boolean;
44
+ }) => void;
45
+ }
46
+ declare function PaymentElement({ className, style, amount, currency, onReady, onChange, onError, }: PaymentElementProps): React.ReactElement | null;
47
+ declare function useCheckout(): {
48
+ submit: (data: {
49
+ cart_id: string;
50
+ order_type?: "delivery" | "pickup" | "dine_in";
51
+ location_id?: string;
52
+ scheduled_time?: string;
53
+ tip_amount?: number;
54
+ notes?: string;
55
+ }) => Promise<ElementsCheckoutResult>;
56
+ isLoading: boolean;
57
+ };
58
+
59
+ export { AddressElement, AuthElement, ElementsProvider, PaymentElement, useCheckout, useElements, useElementsReady };
@@ -0,0 +1,59 @@
1
+ import { r as CimplifyElements, C as CimplifyClient, v as ElementsOptions, eh as AuthenticatedData, ef as AddressInfo, eg as PaymentMethodInfo, ej as ElementsCheckoutResult } from './client-Ug3b8v1t.js';
2
+ import React, { ReactNode } from 'react';
3
+
4
+ declare function useElements(): CimplifyElements | null;
5
+ declare function useElementsReady(): boolean;
6
+ interface ElementsProviderProps {
7
+ client: CimplifyClient;
8
+ businessId: string;
9
+ options?: ElementsOptions;
10
+ children: ReactNode;
11
+ }
12
+ declare function ElementsProvider({ client, businessId, options, children, }: ElementsProviderProps): React.ReactElement;
13
+ interface BaseElementProps {
14
+ className?: string;
15
+ style?: React.CSSProperties;
16
+ onReady?: () => void;
17
+ onError?: (error: {
18
+ code: string;
19
+ message: string;
20
+ }) => void;
21
+ }
22
+ interface AuthElementProps extends BaseElementProps {
23
+ prefillEmail?: string;
24
+ onAuthenticated?: (data: AuthenticatedData) => void;
25
+ onRequiresOtp?: (data: {
26
+ contactMasked: string;
27
+ }) => void;
28
+ }
29
+ declare function AuthElement({ className, style, prefillEmail, onReady, onAuthenticated, onRequiresOtp, onError, }: AuthElementProps): React.ReactElement | null;
30
+ interface AddressElementProps extends BaseElementProps {
31
+ mode?: "shipping" | "billing";
32
+ onChange?: (data: {
33
+ address: AddressInfo;
34
+ saveToLink: boolean;
35
+ }) => void;
36
+ }
37
+ declare function AddressElement({ className, style, mode, onReady, onChange, onError, }: AddressElementProps): React.ReactElement | null;
38
+ interface PaymentElementProps extends BaseElementProps {
39
+ amount?: number;
40
+ currency?: string;
41
+ onChange?: (data: {
42
+ paymentMethod: PaymentMethodInfo;
43
+ saveToLink: boolean;
44
+ }) => void;
45
+ }
46
+ declare function PaymentElement({ className, style, amount, currency, onReady, onChange, onError, }: PaymentElementProps): React.ReactElement | null;
47
+ declare function useCheckout(): {
48
+ submit: (data: {
49
+ cart_id: string;
50
+ order_type?: "delivery" | "pickup" | "dine_in";
51
+ location_id?: string;
52
+ scheduled_time?: string;
53
+ tip_amount?: number;
54
+ notes?: string;
55
+ }) => Promise<ElementsCheckoutResult>;
56
+ isLoading: boolean;
57
+ };
58
+
59
+ export { AddressElement, AuthElement, ElementsProvider, PaymentElement, useCheckout, useElements, useElementsReady };
package/dist/react.js ADDED
@@ -0,0 +1,144 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/react/index.tsx
7
+
8
+ // src/types/elements.ts
9
+ var ELEMENT_TYPES = {
10
+ AUTH: "auth",
11
+ ADDRESS: "address",
12
+ PAYMENT: "payment"
13
+ };
14
+ var EVENT_TYPES = {
15
+ READY: "ready",
16
+ AUTHENTICATED: "authenticated",
17
+ REQUIRES_OTP: "requires_otp",
18
+ ERROR: "error",
19
+ CHANGE: "change"};
20
+ var ElementsContext = react.createContext({
21
+ elements: null,
22
+ isReady: false
23
+ });
24
+ function useElements() {
25
+ return react.useContext(ElementsContext).elements;
26
+ }
27
+ function useElementsReady() {
28
+ return react.useContext(ElementsContext).isReady;
29
+ }
30
+ function ElementsProvider({
31
+ client,
32
+ businessId,
33
+ options,
34
+ children
35
+ }) {
36
+ const [elements, setElements] = react.useState(null);
37
+ const [isReady, setIsReady] = react.useState(false);
38
+ react.useEffect(() => {
39
+ const instance = client.elements(businessId, options);
40
+ setElements(instance);
41
+ setIsReady(true);
42
+ return () => instance.destroy();
43
+ }, [client, businessId, options]);
44
+ return /* @__PURE__ */ jsxRuntime.jsx(ElementsContext.Provider, { value: { elements, isReady }, children });
45
+ }
46
+ function AuthElement({
47
+ className,
48
+ style,
49
+ prefillEmail,
50
+ onReady,
51
+ onAuthenticated,
52
+ onRequiresOtp,
53
+ onError
54
+ }) {
55
+ const containerRef = react.useRef(null);
56
+ const elementRef = react.useRef(null);
57
+ const elements = useElements();
58
+ react.useEffect(() => {
59
+ if (!elements || !containerRef.current) return;
60
+ const element = elements.create(ELEMENT_TYPES.AUTH, { prefillEmail });
61
+ elementRef.current = element;
62
+ element.on(EVENT_TYPES.READY, () => onReady?.());
63
+ element.on(EVENT_TYPES.AUTHENTICATED, (data) => onAuthenticated?.(data));
64
+ element.on(EVENT_TYPES.REQUIRES_OTP, (data) => onRequiresOtp?.(data));
65
+ element.on(EVENT_TYPES.ERROR, (data) => onError?.(data));
66
+ element.mount(containerRef.current);
67
+ return () => element.destroy();
68
+ }, [elements, prefillEmail, onReady, onAuthenticated, onRequiresOtp, onError]);
69
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: containerRef, className, style });
70
+ }
71
+ function AddressElement({
72
+ className,
73
+ style,
74
+ mode = "shipping",
75
+ onReady,
76
+ onChange,
77
+ onError
78
+ }) {
79
+ const containerRef = react.useRef(null);
80
+ const elementRef = react.useRef(null);
81
+ const elements = useElements();
82
+ react.useEffect(() => {
83
+ if (!elements || !containerRef.current) return;
84
+ const element = elements.create(ELEMENT_TYPES.ADDRESS, { mode });
85
+ elementRef.current = element;
86
+ element.on(EVENT_TYPES.READY, () => onReady?.());
87
+ element.on(EVENT_TYPES.CHANGE, (data) => onChange?.(data));
88
+ element.on(EVENT_TYPES.ERROR, (data) => onError?.(data));
89
+ element.mount(containerRef.current);
90
+ return () => element.destroy();
91
+ }, [elements, mode, onReady, onChange, onError]);
92
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: containerRef, className, style });
93
+ }
94
+ function PaymentElement({
95
+ className,
96
+ style,
97
+ amount,
98
+ currency,
99
+ onReady,
100
+ onChange,
101
+ onError
102
+ }) {
103
+ const containerRef = react.useRef(null);
104
+ const elementRef = react.useRef(null);
105
+ const elements = useElements();
106
+ react.useEffect(() => {
107
+ if (!elements || !containerRef.current) return;
108
+ const element = elements.create(ELEMENT_TYPES.PAYMENT, { amount, currency });
109
+ elementRef.current = element;
110
+ element.on(EVENT_TYPES.READY, () => onReady?.());
111
+ element.on(EVENT_TYPES.CHANGE, (data) => onChange?.(data));
112
+ element.on(EVENT_TYPES.ERROR, (data) => onError?.(data));
113
+ element.mount(containerRef.current);
114
+ return () => element.destroy();
115
+ }, [elements, amount, currency, onReady, onChange, onError]);
116
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: containerRef, className, style });
117
+ }
118
+ function useCheckout() {
119
+ const elements = useElements();
120
+ const [isLoading, setIsLoading] = react.useState(false);
121
+ const submit = react.useCallback(
122
+ async (data) => {
123
+ if (!elements) {
124
+ return { success: false, error: { code: "NO_ELEMENTS", message: "Elements not initialized" } };
125
+ }
126
+ setIsLoading(true);
127
+ try {
128
+ return await elements.submitCheckout(data);
129
+ } finally {
130
+ setIsLoading(false);
131
+ }
132
+ },
133
+ [elements]
134
+ );
135
+ return { submit, isLoading };
136
+ }
137
+
138
+ exports.AddressElement = AddressElement;
139
+ exports.AuthElement = AuthElement;
140
+ exports.ElementsProvider = ElementsProvider;
141
+ exports.PaymentElement = PaymentElement;
142
+ exports.useCheckout = useCheckout;
143
+ exports.useElements = useElements;
144
+ exports.useElementsReady = useElementsReady;
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.5",
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
  }