@commercengine/checkout 0.1.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/README.md +402 -0
- package/dist/index.cjs +7 -0
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/react.cjs +105 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +69 -0
- package/dist/react.d.cts.map +1 -0
- package/dist/react.d.ts +69 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +100 -0
- package/dist/react.js.map +1 -0
- package/dist/solid.cjs +162 -0
- package/dist/solid.cjs.map +1 -0
- package/dist/solid.d.cts +92 -0
- package/dist/solid.d.cts.map +1 -0
- package/dist/solid.d.ts +92 -0
- package/dist/solid.d.ts.map +1 -0
- package/dist/solid.js +155 -0
- package/dist/solid.js.map +1 -0
- package/dist/store.cjs +250 -0
- package/dist/store.cjs.map +1 -0
- package/dist/store.d.cts +176 -0
- package/dist/store.d.cts.map +1 -0
- package/dist/store.d.ts +176 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +221 -0
- package/dist/store.js.map +1 -0
- package/dist/svelte.cjs +124 -0
- package/dist/svelte.cjs.map +1 -0
- package/dist/svelte.d.cts +77 -0
- package/dist/svelte.d.cts.map +1 -0
- package/dist/svelte.d.ts +77 -0
- package/dist/svelte.d.ts.map +1 -0
- package/dist/svelte.js +115 -0
- package/dist/svelte.js.map +1 -0
- package/dist/vue.cjs +98 -0
- package/dist/vue.cjs.map +1 -0
- package/dist/vue.d.cts +59 -0
- package/dist/vue.d.cts.map +1 -0
- package/dist/vue.d.ts +59 -0
- package/dist/vue.d.ts.map +1 -0
- package/dist/vue.js +93 -0
- package/dist/vue.js.map +1 -0
- package/package.json +116 -0
package/dist/vue.cjs
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
const require_store = require('./store.cjs');
|
|
2
|
+
let vue = require("vue");
|
|
3
|
+
|
|
4
|
+
//#region src/vue.ts
|
|
5
|
+
/**
|
|
6
|
+
* Commerce Engine Checkout - Vue Binding
|
|
7
|
+
*
|
|
8
|
+
* Vue composable for checkout integration with automatic reactivity.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```vue
|
|
12
|
+
* <script setup>
|
|
13
|
+
* import { useCheckout, initCheckout } from "@commercengine/checkout/vue";
|
|
14
|
+
* import { onMounted, onUnmounted } from "vue";
|
|
15
|
+
*
|
|
16
|
+
* // Initialize once at app root (App.vue or plugin)
|
|
17
|
+
* onMounted(() => {
|
|
18
|
+
* initCheckout({
|
|
19
|
+
* storeId: "store_xxx",
|
|
20
|
+
* apiKey: "ak_xxx",
|
|
21
|
+
* });
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Use anywhere
|
|
25
|
+
* const { cartCount, openCart, isReady } = useCheckout();
|
|
26
|
+
* <\/script>
|
|
27
|
+
*
|
|
28
|
+
* <template>
|
|
29
|
+
* <button @click="openCart" :disabled="!isReady">
|
|
30
|
+
* Cart ({{ cartCount }})
|
|
31
|
+
* </button>
|
|
32
|
+
* </template>
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @packageDocumentation
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* Vue composable for checkout integration
|
|
39
|
+
*
|
|
40
|
+
* Provides reactive access to checkout state and methods.
|
|
41
|
+
* No provider required - works anywhere in your component tree.
|
|
42
|
+
*
|
|
43
|
+
* @returns Checkout state (reactive refs) and methods
|
|
44
|
+
*
|
|
45
|
+
* @example Basic usage
|
|
46
|
+
* ```vue
|
|
47
|
+
* <script setup>
|
|
48
|
+
* import { useCheckout } from "@commercengine/checkout/vue";
|
|
49
|
+
*
|
|
50
|
+
* const { cartCount, openCart, isReady } = useCheckout();
|
|
51
|
+
* <\/script>
|
|
52
|
+
*
|
|
53
|
+
* <template>
|
|
54
|
+
* <button @click="openCart" :disabled="!isReady">
|
|
55
|
+
* Cart ({{ cartCount }})
|
|
56
|
+
* </button>
|
|
57
|
+
* </template>
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
function useCheckout() {
|
|
61
|
+
const initialState = require_store.checkoutStore.getState();
|
|
62
|
+
const isReady = (0, vue.ref)(initialState.isReady);
|
|
63
|
+
const isOpen = (0, vue.ref)(initialState.isOpen);
|
|
64
|
+
const cartCount = (0, vue.ref)(initialState.cartCount);
|
|
65
|
+
const cartTotal = (0, vue.ref)(initialState.cartTotal);
|
|
66
|
+
const cartCurrency = (0, vue.ref)(initialState.cartCurrency);
|
|
67
|
+
const unsubscribe = require_store.checkoutStore.subscribe((state) => {
|
|
68
|
+
isReady.value = state.isReady;
|
|
69
|
+
isOpen.value = state.isOpen;
|
|
70
|
+
cartCount.value = state.cartCount;
|
|
71
|
+
cartTotal.value = state.cartTotal;
|
|
72
|
+
cartCurrency.value = state.cartCurrency;
|
|
73
|
+
});
|
|
74
|
+
(0, vue.onUnmounted)(() => {
|
|
75
|
+
unsubscribe();
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
isReady: (0, vue.readonly)(isReady),
|
|
79
|
+
isOpen: (0, vue.readonly)(isOpen),
|
|
80
|
+
cartCount: (0, vue.readonly)(cartCount),
|
|
81
|
+
cartTotal: (0, vue.readonly)(cartTotal),
|
|
82
|
+
cartCurrency: (0, vue.readonly)(cartCurrency),
|
|
83
|
+
openCart: () => require_store.checkoutStore.getState().openCart(),
|
|
84
|
+
openCheckout: () => require_store.checkoutStore.getState().openCheckout(),
|
|
85
|
+
close: () => require_store.checkoutStore.getState().close(),
|
|
86
|
+
addToCart: (productId, variantId, quantity) => require_store.checkoutStore.getState().addToCart(productId, variantId, quantity),
|
|
87
|
+
updateTokens: (accessToken, refreshToken) => require_store.checkoutStore.getState().updateTokens(accessToken, refreshToken)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//#endregion
|
|
92
|
+
exports.checkoutStore = require_store.checkoutStore;
|
|
93
|
+
exports.destroyCheckout = require_store.destroyCheckout;
|
|
94
|
+
exports.getCheckout = require_store.getCheckout;
|
|
95
|
+
exports.initCheckout = require_store.initCheckout;
|
|
96
|
+
exports.subscribeToCheckout = require_store.subscribeToCheckout;
|
|
97
|
+
exports.useCheckout = useCheckout;
|
|
98
|
+
//# sourceMappingURL=vue.cjs.map
|
package/dist/vue.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.cjs","names":["checkoutStore"],"sources":["../src/vue.ts"],"sourcesContent":["/**\n * Commerce Engine Checkout - Vue Binding\n *\n * Vue composable for checkout integration with automatic reactivity.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useCheckout, initCheckout } from \"@commercengine/checkout/vue\";\n * import { onMounted, onUnmounted } from \"vue\";\n *\n * // Initialize once at app root (App.vue or plugin)\n * onMounted(() => {\n * initCheckout({\n * storeId: \"store_xxx\",\n * apiKey: \"ak_xxx\",\n * });\n * });\n *\n * // Use anywhere\n * const { cartCount, openCart, isReady } = useCheckout();\n * </script>\n *\n * <template>\n * <button @click=\"openCart\" :disabled=\"!isReady\">\n * Cart ({{ cartCount }})\n * </button>\n * </template>\n * ```\n *\n * @packageDocumentation\n */\n\nimport { type DeepReadonly, onUnmounted, type Ref, readonly, ref } from \"vue\";\nimport { checkoutStore } from \"./store\";\n\n// Re-export types from @commercengine/js\nexport type {\n AddToCartItem,\n AuthLoginData,\n AuthLogoutData,\n AuthMode,\n AuthRefreshData,\n CartData,\n Channel,\n CheckoutConfig,\n CheckoutEventType,\n Environment,\n ErrorData,\n LoginMethod,\n OrderData,\n QuickBuyConfig,\n SessionMode,\n UserInfo,\n} from \"@commercengine/js\";\n// Re-export everything from vanilla for convenience\nexport {\n type CheckoutActions,\n type CheckoutState,\n type CheckoutStore,\n checkoutStore,\n destroyCheckout,\n getCheckout,\n initCheckout,\n subscribeToCheckout,\n} from \"./store\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Return type from useCheckout composable\n */\nexport interface UseCheckoutReturn {\n /** Whether checkout is ready to use (reactive) */\n isReady: DeepReadonly<Ref<boolean>>;\n /** Whether checkout overlay is currently open (reactive) */\n isOpen: DeepReadonly<Ref<boolean>>;\n /** Number of items in cart (reactive) */\n cartCount: DeepReadonly<Ref<number>>;\n /** Cart subtotal amount (reactive) */\n cartTotal: DeepReadonly<Ref<number>>;\n /** Cart currency code (reactive) */\n cartCurrency: DeepReadonly<Ref<string>>;\n /** Open the cart drawer */\n openCart: () => void;\n /** Open the checkout drawer directly */\n openCheckout: () => void;\n /** Close the checkout overlay */\n close: () => void;\n /** Add item to cart */\n addToCart: (productId: string, variantId: string | null, quantity?: number) => void;\n /** Update authentication tokens */\n updateTokens: (accessToken: string, refreshToken?: string) => void;\n}\n\n// =============================================================================\n// COMPOSABLE\n// =============================================================================\n\n/**\n * Vue composable for checkout integration\n *\n * Provides reactive access to checkout state and methods.\n * No provider required - works anywhere in your component tree.\n *\n * @returns Checkout state (reactive refs) and methods\n *\n * @example Basic usage\n * ```vue\n * <script setup>\n * import { useCheckout } from \"@commercengine/checkout/vue\";\n *\n * const { cartCount, openCart, isReady } = useCheckout();\n * </script>\n *\n * <template>\n * <button @click=\"openCart\" :disabled=\"!isReady\">\n * Cart ({{ cartCount }})\n * </button>\n * </template>\n * ```\n */\nexport function useCheckout(): UseCheckoutReturn {\n // Create reactive refs for state\n const initialState = checkoutStore.getState();\n\n const isReady = ref(initialState.isReady);\n const isOpen = ref(initialState.isOpen);\n const cartCount = ref(initialState.cartCount);\n const cartTotal = ref(initialState.cartTotal);\n const cartCurrency = ref(initialState.cartCurrency);\n\n // Subscribe to store changes and update refs\n const unsubscribe = checkoutStore.subscribe((state) => {\n isReady.value = state.isReady;\n isOpen.value = state.isOpen;\n cartCount.value = state.cartCount;\n cartTotal.value = state.cartTotal;\n cartCurrency.value = state.cartCurrency;\n });\n\n // Cleanup subscription on unmount\n onUnmounted(() => {\n unsubscribe();\n });\n\n return {\n // Reactive state (readonly to prevent direct mutation)\n isReady: readonly(isReady),\n isOpen: readonly(isOpen),\n cartCount: readonly(cartCount),\n cartTotal: readonly(cartTotal),\n cartCurrency: readonly(cartCurrency),\n // Actions\n openCart: () => checkoutStore.getState().openCart(),\n openCheckout: () => checkoutStore.getState().openCheckout(),\n close: () => checkoutStore.getState().close(),\n addToCart: (productId, variantId, quantity) =>\n checkoutStore.getState().addToCart(productId, variantId, quantity),\n updateTokens: (accessToken, refreshToken) =>\n checkoutStore.getState().updateTokens(accessToken, refreshToken),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4HA,SAAgB,cAAiC;CAE/C,MAAM,eAAeA,4BAAc,UAAU;CAE7C,MAAM,uBAAc,aAAa,QAAQ;CACzC,MAAM,sBAAa,aAAa,OAAO;CACvC,MAAM,yBAAgB,aAAa,UAAU;CAC7C,MAAM,yBAAgB,aAAa,UAAU;CAC7C,MAAM,4BAAmB,aAAa,aAAa;CAGnD,MAAM,cAAcA,4BAAc,WAAW,UAAU;AACrD,UAAQ,QAAQ,MAAM;AACtB,SAAO,QAAQ,MAAM;AACrB,YAAU,QAAQ,MAAM;AACxB,YAAU,QAAQ,MAAM;AACxB,eAAa,QAAQ,MAAM;GAC3B;AAGF,4BAAkB;AAChB,eAAa;GACb;AAEF,QAAO;EAEL,2BAAkB,QAAQ;EAC1B,0BAAiB,OAAO;EACxB,6BAAoB,UAAU;EAC9B,6BAAoB,UAAU;EAC9B,gCAAuB,aAAa;EAEpC,gBAAgBA,4BAAc,UAAU,CAAC,UAAU;EACnD,oBAAoBA,4BAAc,UAAU,CAAC,cAAc;EAC3D,aAAaA,4BAAc,UAAU,CAAC,OAAO;EAC7C,YAAY,WAAW,WAAW,aAChCA,4BAAc,UAAU,CAAC,UAAU,WAAW,WAAW,SAAS;EACpE,eAAe,aAAa,iBAC1BA,4BAAc,UAAU,CAAC,aAAa,aAAa,aAAa;EACnE"}
|
package/dist/vue.d.cts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { a as destroyCheckout, c as subscribeToCheckout, i as checkoutStore, n as CheckoutState, o as getCheckout, r as CheckoutStore, s as initCheckout, t as CheckoutActions } from "./store.cjs";
|
|
2
|
+
import { AddToCartItem, AuthLoginData, AuthLogoutData, AuthMode, AuthRefreshData, CartData, Channel, CheckoutConfig, CheckoutEventType, Environment, ErrorData, LoginMethod, OrderData, QuickBuyConfig, SessionMode, UserInfo } from "@commercengine/js";
|
|
3
|
+
import { DeepReadonly, Ref } from "vue";
|
|
4
|
+
|
|
5
|
+
//#region src/vue.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Return type from useCheckout composable
|
|
9
|
+
*/
|
|
10
|
+
interface UseCheckoutReturn {
|
|
11
|
+
/** Whether checkout is ready to use (reactive) */
|
|
12
|
+
isReady: DeepReadonly<Ref<boolean>>;
|
|
13
|
+
/** Whether checkout overlay is currently open (reactive) */
|
|
14
|
+
isOpen: DeepReadonly<Ref<boolean>>;
|
|
15
|
+
/** Number of items in cart (reactive) */
|
|
16
|
+
cartCount: DeepReadonly<Ref<number>>;
|
|
17
|
+
/** Cart subtotal amount (reactive) */
|
|
18
|
+
cartTotal: DeepReadonly<Ref<number>>;
|
|
19
|
+
/** Cart currency code (reactive) */
|
|
20
|
+
cartCurrency: DeepReadonly<Ref<string>>;
|
|
21
|
+
/** Open the cart drawer */
|
|
22
|
+
openCart: () => void;
|
|
23
|
+
/** Open the checkout drawer directly */
|
|
24
|
+
openCheckout: () => void;
|
|
25
|
+
/** Close the checkout overlay */
|
|
26
|
+
close: () => void;
|
|
27
|
+
/** Add item to cart */
|
|
28
|
+
addToCart: (productId: string, variantId: string | null, quantity?: number) => void;
|
|
29
|
+
/** Update authentication tokens */
|
|
30
|
+
updateTokens: (accessToken: string, refreshToken?: string) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Vue composable for checkout integration
|
|
34
|
+
*
|
|
35
|
+
* Provides reactive access to checkout state and methods.
|
|
36
|
+
* No provider required - works anywhere in your component tree.
|
|
37
|
+
*
|
|
38
|
+
* @returns Checkout state (reactive refs) and methods
|
|
39
|
+
*
|
|
40
|
+
* @example Basic usage
|
|
41
|
+
* ```vue
|
|
42
|
+
* <script setup>
|
|
43
|
+
* import { useCheckout } from "@commercengine/checkout/vue";
|
|
44
|
+
*
|
|
45
|
+
* const { cartCount, openCart, isReady } = useCheckout();
|
|
46
|
+
* </script>
|
|
47
|
+
*
|
|
48
|
+
* <template>
|
|
49
|
+
* <button @click="openCart" :disabled="!isReady">
|
|
50
|
+
* Cart ({{ cartCount }})
|
|
51
|
+
* </button>
|
|
52
|
+
* </template>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
declare function useCheckout(): UseCheckoutReturn;
|
|
56
|
+
//# sourceMappingURL=vue.d.ts.map
|
|
57
|
+
//#endregion
|
|
58
|
+
export { type AddToCartItem, type AuthLoginData, type AuthLogoutData, type AuthMode, type AuthRefreshData, type CartData, type Channel, type CheckoutActions, type CheckoutConfig, type CheckoutEventType, type CheckoutState, type CheckoutStore, type Environment, type ErrorData, type LoginMethod, type OrderData, type QuickBuyConfig, type SessionMode, UseCheckoutReturn, type UserInfo, checkoutStore, destroyCheckout, getCheckout, initCheckout, subscribeToCheckout, useCheckout };
|
|
59
|
+
//# sourceMappingURL=vue.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.d.cts","names":[],"sources":["../src/vue.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UA0EiB,iBAAA;;WAEN,aAAa;;UAEd,aAAa;;aAEV,aAAa;;aAEb,aAAa;;gBAEV,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwCb,WAAA,CAAA,GAAe"}
|
package/dist/vue.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { a as destroyCheckout, c as subscribeToCheckout, i as checkoutStore, n as CheckoutState, o as getCheckout, r as CheckoutStore, s as initCheckout, t as CheckoutActions } from "./store.js";
|
|
2
|
+
import { AddToCartItem, AuthLoginData, AuthLogoutData, AuthMode, AuthRefreshData, CartData, Channel, CheckoutConfig, CheckoutEventType, Environment, ErrorData, LoginMethod, OrderData, QuickBuyConfig, SessionMode, UserInfo } from "@commercengine/js";
|
|
3
|
+
import { DeepReadonly, Ref } from "vue";
|
|
4
|
+
|
|
5
|
+
//#region src/vue.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Return type from useCheckout composable
|
|
9
|
+
*/
|
|
10
|
+
interface UseCheckoutReturn {
|
|
11
|
+
/** Whether checkout is ready to use (reactive) */
|
|
12
|
+
isReady: DeepReadonly<Ref<boolean>>;
|
|
13
|
+
/** Whether checkout overlay is currently open (reactive) */
|
|
14
|
+
isOpen: DeepReadonly<Ref<boolean>>;
|
|
15
|
+
/** Number of items in cart (reactive) */
|
|
16
|
+
cartCount: DeepReadonly<Ref<number>>;
|
|
17
|
+
/** Cart subtotal amount (reactive) */
|
|
18
|
+
cartTotal: DeepReadonly<Ref<number>>;
|
|
19
|
+
/** Cart currency code (reactive) */
|
|
20
|
+
cartCurrency: DeepReadonly<Ref<string>>;
|
|
21
|
+
/** Open the cart drawer */
|
|
22
|
+
openCart: () => void;
|
|
23
|
+
/** Open the checkout drawer directly */
|
|
24
|
+
openCheckout: () => void;
|
|
25
|
+
/** Close the checkout overlay */
|
|
26
|
+
close: () => void;
|
|
27
|
+
/** Add item to cart */
|
|
28
|
+
addToCart: (productId: string, variantId: string | null, quantity?: number) => void;
|
|
29
|
+
/** Update authentication tokens */
|
|
30
|
+
updateTokens: (accessToken: string, refreshToken?: string) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Vue composable for checkout integration
|
|
34
|
+
*
|
|
35
|
+
* Provides reactive access to checkout state and methods.
|
|
36
|
+
* No provider required - works anywhere in your component tree.
|
|
37
|
+
*
|
|
38
|
+
* @returns Checkout state (reactive refs) and methods
|
|
39
|
+
*
|
|
40
|
+
* @example Basic usage
|
|
41
|
+
* ```vue
|
|
42
|
+
* <script setup>
|
|
43
|
+
* import { useCheckout } from "@commercengine/checkout/vue";
|
|
44
|
+
*
|
|
45
|
+
* const { cartCount, openCart, isReady } = useCheckout();
|
|
46
|
+
* </script>
|
|
47
|
+
*
|
|
48
|
+
* <template>
|
|
49
|
+
* <button @click="openCart" :disabled="!isReady">
|
|
50
|
+
* Cart ({{ cartCount }})
|
|
51
|
+
* </button>
|
|
52
|
+
* </template>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
declare function useCheckout(): UseCheckoutReturn;
|
|
56
|
+
//# sourceMappingURL=vue.d.ts.map
|
|
57
|
+
//#endregion
|
|
58
|
+
export { type AddToCartItem, type AuthLoginData, type AuthLogoutData, type AuthMode, type AuthRefreshData, type CartData, type Channel, type CheckoutActions, type CheckoutConfig, type CheckoutEventType, type CheckoutState, type CheckoutStore, type Environment, type ErrorData, type LoginMethod, type OrderData, type QuickBuyConfig, type SessionMode, UseCheckoutReturn, type UserInfo, checkoutStore, destroyCheckout, getCheckout, initCheckout, subscribeToCheckout, useCheckout };
|
|
59
|
+
//# sourceMappingURL=vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.d.ts","names":[],"sources":["../src/vue.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UA0EiB,iBAAA;;WAEN,aAAa;;UAEd,aAAa;;aAEV,aAAa;;aAEb,aAAa;;gBAEV,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwCb,WAAA,CAAA,GAAe"}
|
package/dist/vue.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { a as subscribeToCheckout, i as initCheckout, n as destroyCheckout, r as getCheckout, t as checkoutStore } from "./store.js";
|
|
2
|
+
import { onUnmounted, readonly, ref } from "vue";
|
|
3
|
+
|
|
4
|
+
//#region src/vue.ts
|
|
5
|
+
/**
|
|
6
|
+
* Commerce Engine Checkout - Vue Binding
|
|
7
|
+
*
|
|
8
|
+
* Vue composable for checkout integration with automatic reactivity.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```vue
|
|
12
|
+
* <script setup>
|
|
13
|
+
* import { useCheckout, initCheckout } from "@commercengine/checkout/vue";
|
|
14
|
+
* import { onMounted, onUnmounted } from "vue";
|
|
15
|
+
*
|
|
16
|
+
* // Initialize once at app root (App.vue or plugin)
|
|
17
|
+
* onMounted(() => {
|
|
18
|
+
* initCheckout({
|
|
19
|
+
* storeId: "store_xxx",
|
|
20
|
+
* apiKey: "ak_xxx",
|
|
21
|
+
* });
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Use anywhere
|
|
25
|
+
* const { cartCount, openCart, isReady } = useCheckout();
|
|
26
|
+
* <\/script>
|
|
27
|
+
*
|
|
28
|
+
* <template>
|
|
29
|
+
* <button @click="openCart" :disabled="!isReady">
|
|
30
|
+
* Cart ({{ cartCount }})
|
|
31
|
+
* </button>
|
|
32
|
+
* </template>
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @packageDocumentation
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* Vue composable for checkout integration
|
|
39
|
+
*
|
|
40
|
+
* Provides reactive access to checkout state and methods.
|
|
41
|
+
* No provider required - works anywhere in your component tree.
|
|
42
|
+
*
|
|
43
|
+
* @returns Checkout state (reactive refs) and methods
|
|
44
|
+
*
|
|
45
|
+
* @example Basic usage
|
|
46
|
+
* ```vue
|
|
47
|
+
* <script setup>
|
|
48
|
+
* import { useCheckout } from "@commercengine/checkout/vue";
|
|
49
|
+
*
|
|
50
|
+
* const { cartCount, openCart, isReady } = useCheckout();
|
|
51
|
+
* <\/script>
|
|
52
|
+
*
|
|
53
|
+
* <template>
|
|
54
|
+
* <button @click="openCart" :disabled="!isReady">
|
|
55
|
+
* Cart ({{ cartCount }})
|
|
56
|
+
* </button>
|
|
57
|
+
* </template>
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
function useCheckout() {
|
|
61
|
+
const initialState = checkoutStore.getState();
|
|
62
|
+
const isReady = ref(initialState.isReady);
|
|
63
|
+
const isOpen = ref(initialState.isOpen);
|
|
64
|
+
const cartCount = ref(initialState.cartCount);
|
|
65
|
+
const cartTotal = ref(initialState.cartTotal);
|
|
66
|
+
const cartCurrency = ref(initialState.cartCurrency);
|
|
67
|
+
const unsubscribe = checkoutStore.subscribe((state) => {
|
|
68
|
+
isReady.value = state.isReady;
|
|
69
|
+
isOpen.value = state.isOpen;
|
|
70
|
+
cartCount.value = state.cartCount;
|
|
71
|
+
cartTotal.value = state.cartTotal;
|
|
72
|
+
cartCurrency.value = state.cartCurrency;
|
|
73
|
+
});
|
|
74
|
+
onUnmounted(() => {
|
|
75
|
+
unsubscribe();
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
isReady: readonly(isReady),
|
|
79
|
+
isOpen: readonly(isOpen),
|
|
80
|
+
cartCount: readonly(cartCount),
|
|
81
|
+
cartTotal: readonly(cartTotal),
|
|
82
|
+
cartCurrency: readonly(cartCurrency),
|
|
83
|
+
openCart: () => checkoutStore.getState().openCart(),
|
|
84
|
+
openCheckout: () => checkoutStore.getState().openCheckout(),
|
|
85
|
+
close: () => checkoutStore.getState().close(),
|
|
86
|
+
addToCart: (productId, variantId, quantity) => checkoutStore.getState().addToCart(productId, variantId, quantity),
|
|
87
|
+
updateTokens: (accessToken, refreshToken) => checkoutStore.getState().updateTokens(accessToken, refreshToken)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//#endregion
|
|
92
|
+
export { checkoutStore, destroyCheckout, getCheckout, initCheckout, subscribeToCheckout, useCheckout };
|
|
93
|
+
//# sourceMappingURL=vue.js.map
|
package/dist/vue.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.js","names":[],"sources":["../src/vue.ts"],"sourcesContent":["/**\n * Commerce Engine Checkout - Vue Binding\n *\n * Vue composable for checkout integration with automatic reactivity.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useCheckout, initCheckout } from \"@commercengine/checkout/vue\";\n * import { onMounted, onUnmounted } from \"vue\";\n *\n * // Initialize once at app root (App.vue or plugin)\n * onMounted(() => {\n * initCheckout({\n * storeId: \"store_xxx\",\n * apiKey: \"ak_xxx\",\n * });\n * });\n *\n * // Use anywhere\n * const { cartCount, openCart, isReady } = useCheckout();\n * </script>\n *\n * <template>\n * <button @click=\"openCart\" :disabled=\"!isReady\">\n * Cart ({{ cartCount }})\n * </button>\n * </template>\n * ```\n *\n * @packageDocumentation\n */\n\nimport { type DeepReadonly, onUnmounted, type Ref, readonly, ref } from \"vue\";\nimport { checkoutStore } from \"./store\";\n\n// Re-export types from @commercengine/js\nexport type {\n AddToCartItem,\n AuthLoginData,\n AuthLogoutData,\n AuthMode,\n AuthRefreshData,\n CartData,\n Channel,\n CheckoutConfig,\n CheckoutEventType,\n Environment,\n ErrorData,\n LoginMethod,\n OrderData,\n QuickBuyConfig,\n SessionMode,\n UserInfo,\n} from \"@commercengine/js\";\n// Re-export everything from vanilla for convenience\nexport {\n type CheckoutActions,\n type CheckoutState,\n type CheckoutStore,\n checkoutStore,\n destroyCheckout,\n getCheckout,\n initCheckout,\n subscribeToCheckout,\n} from \"./store\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Return type from useCheckout composable\n */\nexport interface UseCheckoutReturn {\n /** Whether checkout is ready to use (reactive) */\n isReady: DeepReadonly<Ref<boolean>>;\n /** Whether checkout overlay is currently open (reactive) */\n isOpen: DeepReadonly<Ref<boolean>>;\n /** Number of items in cart (reactive) */\n cartCount: DeepReadonly<Ref<number>>;\n /** Cart subtotal amount (reactive) */\n cartTotal: DeepReadonly<Ref<number>>;\n /** Cart currency code (reactive) */\n cartCurrency: DeepReadonly<Ref<string>>;\n /** Open the cart drawer */\n openCart: () => void;\n /** Open the checkout drawer directly */\n openCheckout: () => void;\n /** Close the checkout overlay */\n close: () => void;\n /** Add item to cart */\n addToCart: (productId: string, variantId: string | null, quantity?: number) => void;\n /** Update authentication tokens */\n updateTokens: (accessToken: string, refreshToken?: string) => void;\n}\n\n// =============================================================================\n// COMPOSABLE\n// =============================================================================\n\n/**\n * Vue composable for checkout integration\n *\n * Provides reactive access to checkout state and methods.\n * No provider required - works anywhere in your component tree.\n *\n * @returns Checkout state (reactive refs) and methods\n *\n * @example Basic usage\n * ```vue\n * <script setup>\n * import { useCheckout } from \"@commercengine/checkout/vue\";\n *\n * const { cartCount, openCart, isReady } = useCheckout();\n * </script>\n *\n * <template>\n * <button @click=\"openCart\" :disabled=\"!isReady\">\n * Cart ({{ cartCount }})\n * </button>\n * </template>\n * ```\n */\nexport function useCheckout(): UseCheckoutReturn {\n // Create reactive refs for state\n const initialState = checkoutStore.getState();\n\n const isReady = ref(initialState.isReady);\n const isOpen = ref(initialState.isOpen);\n const cartCount = ref(initialState.cartCount);\n const cartTotal = ref(initialState.cartTotal);\n const cartCurrency = ref(initialState.cartCurrency);\n\n // Subscribe to store changes and update refs\n const unsubscribe = checkoutStore.subscribe((state) => {\n isReady.value = state.isReady;\n isOpen.value = state.isOpen;\n cartCount.value = state.cartCount;\n cartTotal.value = state.cartTotal;\n cartCurrency.value = state.cartCurrency;\n });\n\n // Cleanup subscription on unmount\n onUnmounted(() => {\n unsubscribe();\n });\n\n return {\n // Reactive state (readonly to prevent direct mutation)\n isReady: readonly(isReady),\n isOpen: readonly(isOpen),\n cartCount: readonly(cartCount),\n cartTotal: readonly(cartTotal),\n cartCurrency: readonly(cartCurrency),\n // Actions\n openCart: () => checkoutStore.getState().openCart(),\n openCheckout: () => checkoutStore.getState().openCheckout(),\n close: () => checkoutStore.getState().close(),\n addToCart: (productId, variantId, quantity) =>\n checkoutStore.getState().addToCart(productId, variantId, quantity),\n updateTokens: (accessToken, refreshToken) =>\n checkoutStore.getState().updateTokens(accessToken, refreshToken),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4HA,SAAgB,cAAiC;CAE/C,MAAM,eAAe,cAAc,UAAU;CAE7C,MAAM,UAAU,IAAI,aAAa,QAAQ;CACzC,MAAM,SAAS,IAAI,aAAa,OAAO;CACvC,MAAM,YAAY,IAAI,aAAa,UAAU;CAC7C,MAAM,YAAY,IAAI,aAAa,UAAU;CAC7C,MAAM,eAAe,IAAI,aAAa,aAAa;CAGnD,MAAM,cAAc,cAAc,WAAW,UAAU;AACrD,UAAQ,QAAQ,MAAM;AACtB,SAAO,QAAQ,MAAM;AACrB,YAAU,QAAQ,MAAM;AACxB,YAAU,QAAQ,MAAM;AACxB,eAAa,QAAQ,MAAM;GAC3B;AAGF,mBAAkB;AAChB,eAAa;GACb;AAEF,QAAO;EAEL,SAAS,SAAS,QAAQ;EAC1B,QAAQ,SAAS,OAAO;EACxB,WAAW,SAAS,UAAU;EAC9B,WAAW,SAAS,UAAU;EAC9B,cAAc,SAAS,aAAa;EAEpC,gBAAgB,cAAc,UAAU,CAAC,UAAU;EACnD,oBAAoB,cAAc,UAAU,CAAC,cAAc;EAC3D,aAAa,cAAc,UAAU,CAAC,OAAO;EAC7C,YAAY,WAAW,WAAW,aAChC,cAAc,UAAU,CAAC,UAAU,WAAW,WAAW,SAAS;EACpE,eAAe,aAAa,iBAC1B,cAAc,UAAU,CAAC,aAAa,aAAa,aAAa;EACnE"}
|
package/package.json
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@commercengine/checkout",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Universal checkout SDK for Commerce Engine - works with React, Vue, Svelte, Solid, and vanilla JS",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.cjs",
|
|
7
|
+
"module": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"./react": {
|
|
21
|
+
"import": {
|
|
22
|
+
"types": "./dist/react.d.ts",
|
|
23
|
+
"default": "./dist/react.js"
|
|
24
|
+
},
|
|
25
|
+
"require": {
|
|
26
|
+
"types": "./dist/react.d.cts",
|
|
27
|
+
"default": "./dist/react.cjs"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"./vue": {
|
|
31
|
+
"import": {
|
|
32
|
+
"types": "./dist/vue.d.ts",
|
|
33
|
+
"default": "./dist/vue.js"
|
|
34
|
+
},
|
|
35
|
+
"require": {
|
|
36
|
+
"types": "./dist/vue.d.cts",
|
|
37
|
+
"default": "./dist/vue.cjs"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"./svelte": {
|
|
41
|
+
"import": {
|
|
42
|
+
"types": "./dist/svelte.d.ts",
|
|
43
|
+
"default": "./dist/svelte.js"
|
|
44
|
+
},
|
|
45
|
+
"require": {
|
|
46
|
+
"types": "./dist/svelte.d.cts",
|
|
47
|
+
"default": "./dist/svelte.cjs"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"./solid": {
|
|
51
|
+
"import": {
|
|
52
|
+
"types": "./dist/solid.d.ts",
|
|
53
|
+
"default": "./dist/solid.js"
|
|
54
|
+
},
|
|
55
|
+
"require": {
|
|
56
|
+
"types": "./dist/solid.d.cts",
|
|
57
|
+
"default": "./dist/solid.cjs"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"./package.json": "./package.json"
|
|
61
|
+
},
|
|
62
|
+
"files": [
|
|
63
|
+
"dist",
|
|
64
|
+
"package.json",
|
|
65
|
+
"README.md"
|
|
66
|
+
],
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"zustand": "^5.0.0",
|
|
69
|
+
"@commercengine/js": "0.3.0"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"react": ">=17.0.0",
|
|
73
|
+
"vue": ">=3.0.0",
|
|
74
|
+
"svelte": ">=5.0.0",
|
|
75
|
+
"solid-js": ">=1.0.0"
|
|
76
|
+
},
|
|
77
|
+
"peerDependenciesMeta": {
|
|
78
|
+
"react": {
|
|
79
|
+
"optional": true
|
|
80
|
+
},
|
|
81
|
+
"vue": {
|
|
82
|
+
"optional": true
|
|
83
|
+
},
|
|
84
|
+
"svelte": {
|
|
85
|
+
"optional": true
|
|
86
|
+
},
|
|
87
|
+
"solid-js": {
|
|
88
|
+
"optional": true
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"devDependencies": {
|
|
92
|
+
"tsdown": "^0.12.6",
|
|
93
|
+
"typescript": "^5.8.3"
|
|
94
|
+
},
|
|
95
|
+
"keywords": [
|
|
96
|
+
"commerce",
|
|
97
|
+
"checkout",
|
|
98
|
+
"ecommerce",
|
|
99
|
+
"cart",
|
|
100
|
+
"react",
|
|
101
|
+
"vue",
|
|
102
|
+
"svelte",
|
|
103
|
+
"solid",
|
|
104
|
+
"zustand"
|
|
105
|
+
],
|
|
106
|
+
"license": "MIT",
|
|
107
|
+
"repository": {
|
|
108
|
+
"type": "git",
|
|
109
|
+
"url": "https://github.com/commercengine/ce-checkout"
|
|
110
|
+
},
|
|
111
|
+
"scripts": {
|
|
112
|
+
"dev": "tsdown --watch",
|
|
113
|
+
"build": "tsdown",
|
|
114
|
+
"typecheck": "tsc --noEmit"
|
|
115
|
+
}
|
|
116
|
+
}
|