@fluid-app/portal-sdk 0.1.50 → 0.1.52
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/{ContactsScreen-CtQEXVJV.cjs → ContactsScreen-BvCjA72q.cjs} +3 -3
- package/dist/{ContactsScreen-CCX0O5gO.mjs → ContactsScreen-BxN-eEX8.mjs} +3 -3
- package/dist/{ContactsScreen-CkTLY2JR.cjs → ContactsScreen-DCHonZs2.cjs} +2 -2
- package/dist/{ContactsScreen-CkTLY2JR.cjs.map → ContactsScreen-DCHonZs2.cjs.map} +1 -1
- package/dist/{ContactsScreen-Cw2oDUbk.mjs → ContactsScreen-p2WN2k0l.mjs} +2 -2
- package/dist/{ContactsScreen-Cw2oDUbk.mjs.map → ContactsScreen-p2WN2k0l.mjs.map} +1 -1
- package/dist/{FluidProvider-Bm9_Q-Vq.cjs → FluidProvider-CfnQ1hQi.cjs} +3 -3
- package/dist/{FluidProvider-Bm9_Q-Vq.cjs.map → FluidProvider-CfnQ1hQi.cjs.map} +1 -1
- package/dist/{FluidProvider-DhhJ_tOB.mjs → FluidProvider-DxTCeF37.mjs} +3 -3
- package/dist/{FluidProvider-DhhJ_tOB.mjs.map → FluidProvider-DxTCeF37.mjs.map} +1 -1
- package/dist/{LinkWidget-CPneatEQ.cjs → LinkWidget-Bk6h0IOA.cjs} +141 -4
- package/dist/LinkWidget-Bk6h0IOA.cjs.map +1 -0
- package/dist/{LinkWidget-AxSj0c6j.cjs → LinkWidget-BnFbK1BC.cjs} +2 -1
- package/dist/{LinkWidget-BIGRdkyq.mjs → LinkWidget-CfgPs5G8.mjs} +141 -4
- package/dist/LinkWidget-CfgPs5G8.mjs.map +1 -0
- package/dist/{MessagingScreen-C52nvMiv.cjs → MessagingScreen-AwU6FVrk.cjs} +3 -3
- package/dist/{MessagingScreen-C52nvMiv.cjs.map → MessagingScreen-AwU6FVrk.cjs.map} +1 -1
- package/dist/{MessagingScreen-CeFtShuJ.mjs → MessagingScreen-Ct13M7D3.mjs} +3 -4
- package/dist/{MessagingScreen-CiAh61n3.cjs → MessagingScreen-DXT-R8PN.cjs} +3 -3
- package/dist/{MessagingScreen-D0usZTLT.mjs → MessagingScreen-G0z-kpur.mjs} +3 -3
- package/dist/{MessagingScreen-D0usZTLT.mjs.map → MessagingScreen-G0z-kpur.mjs.map} +1 -1
- package/dist/{MySiteScreen-Q9JMin6k.cjs → MySiteScreen-CK5ytiiM.cjs} +3 -3
- package/dist/{MySiteScreen-DDCmExRU.mjs → MySiteScreen-CtpBEE-w.mjs} +3 -4
- package/dist/{MySiteScreen-B4D3PBiR.mjs → MySiteScreen-CxFT0dYI.mjs} +2 -2
- package/dist/{MySiteScreen-B4D3PBiR.mjs.map → MySiteScreen-CxFT0dYI.mjs.map} +1 -1
- package/dist/{MySiteScreen-CNp1UcGZ.cjs → MySiteScreen-mKw6Ha6i.cjs} +2 -2
- package/dist/{MySiteScreen-CNp1UcGZ.cjs.map → MySiteScreen-mKw6Ha6i.cjs.map} +1 -1
- package/dist/{OrdersScreen-W2H36ANi.mjs → OrdersScreen-4xcHV4wN.mjs} +3 -5
- package/dist/{OrdersScreen-VMpNhQw9.cjs → OrdersScreen-Btxlpmyb.cjs} +3 -3
- package/dist/{OrdersScreen-VMpNhQw9.cjs.map → OrdersScreen-Btxlpmyb.cjs.map} +1 -1
- package/dist/{OrdersScreen-DsBMev3D.cjs → OrdersScreen-COJthd7g.cjs} +3 -3
- package/dist/{OrdersScreen-hpGhyOSh.mjs → OrdersScreen-DST1uQIZ.mjs} +3 -3
- package/dist/{OrdersScreen-hpGhyOSh.mjs.map → OrdersScreen-DST1uQIZ.mjs.map} +1 -1
- package/dist/{ProductsScreen-zpzMTDoA.mjs → ProductsScreen-BUIAM6Oj.mjs} +4 -4
- package/dist/{ProductsScreen-zpzMTDoA.mjs.map → ProductsScreen-BUIAM6Oj.mjs.map} +1 -1
- package/dist/{ProductsScreen-BnSGiylr.cjs → ProductsScreen-BrnS2fZj.cjs} +4 -4
- package/dist/{ProductsScreen-BnSGiylr.cjs.map → ProductsScreen-BrnS2fZj.cjs.map} +1 -1
- package/dist/{ProductsScreen-DnHGKEgL.mjs → ProductsScreen-DbD-M3_E.mjs} +4 -8
- package/dist/{ProductsScreen-BMZxJgei.cjs → ProductsScreen-nMIeRMz7.cjs} +4 -4
- package/dist/{ProfileScreen-DtK2t6V6.mjs → ProfileScreen-C6WaqIOa.mjs} +3 -3
- package/dist/{ProfileScreen-DtK2t6V6.mjs.map → ProfileScreen-C6WaqIOa.mjs.map} +1 -1
- package/dist/{ProfileScreen-BtLOlbKg.cjs → ProfileScreen-CNqGhQIS.cjs} +3 -3
- package/dist/{ProfileScreen-BtLOlbKg.cjs.map → ProfileScreen-CNqGhQIS.cjs.map} +1 -1
- package/dist/{ProfileScreen-oZ-aRHZd.cjs → ProfileScreen-COxPODra.cjs} +3 -3
- package/dist/{ProfileScreen-DTFiJh4l.mjs → ProfileScreen-CsjqnDHC.mjs} +3 -4
- package/dist/{ShareablesScreen-Bmgjw9sI.cjs → ShareablesScreen-6WYSwoae.cjs} +4 -4
- package/dist/{ShareablesScreen-BeUqK8Rt.mjs → ShareablesScreen-BKGi-Fxq.mjs} +4 -8
- package/dist/{ShareablesScreen-B603m_Vm.mjs → ShareablesScreen-DEG0RgHd.mjs} +4 -4
- package/dist/{ShareablesScreen-B603m_Vm.mjs.map → ShareablesScreen-DEG0RgHd.mjs.map} +1 -1
- package/dist/{ShareablesScreen-B7bILrTZ.cjs → ShareablesScreen-Dr54X4O1.cjs} +4 -4
- package/dist/{ShareablesScreen-B7bILrTZ.cjs.map → ShareablesScreen-Dr54X4O1.cjs.map} +1 -1
- package/dist/{ShopScreen-tank-h0f.cjs → ShopScreen-B-jG6Rem.cjs} +4 -4
- package/dist/{ShopScreen-tank-h0f.cjs.map → ShopScreen-B-jG6Rem.cjs.map} +1 -1
- package/dist/{ShopScreen-CZl3JCcH.cjs → ShopScreen-Bh3_9XNc.cjs} +3 -3
- package/dist/{ShopScreen-CoLFSZEV.mjs → ShopScreen-CFSFBeZn.mjs} +4 -4
- package/dist/{ShopScreen-CoLFSZEV.mjs.map → ShopScreen-CFSFBeZn.mjs.map} +1 -1
- package/dist/{ShopScreen-DnMTRfDV.mjs → ShopScreen-Dwi5A1Mh.mjs} +3 -7
- package/dist/{SubscriptionsScreen-B7vVZdeU.cjs → SubscriptionsScreen-BHoPRbxY.cjs} +3 -3
- package/dist/{SubscriptionsScreen-VY3atpwV.mjs → SubscriptionsScreen-BbHLRNOS.mjs} +3 -5
- package/dist/{SubscriptionsScreen-Q_sourEi.mjs → SubscriptionsScreen-DDuDQzog.mjs} +3 -3
- package/dist/{SubscriptionsScreen-Q_sourEi.mjs.map → SubscriptionsScreen-DDuDQzog.mjs.map} +1 -1
- package/dist/{SubscriptionsScreen-DqgNoNgv.cjs → SubscriptionsScreen-OR9rLA8Q.cjs} +3 -3
- package/dist/{SubscriptionsScreen-DqgNoNgv.cjs.map → SubscriptionsScreen-OR9rLA8Q.cjs.map} +1 -1
- package/dist/WidgetInteractionContext-DAN31Alw.mjs.map +1 -1
- package/dist/WidgetInteractionContext-ywxCBIMm.cjs.map +1 -1
- package/dist/index.cjs +33 -33
- package/dist/index.d.cts +12 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +12 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +33 -33
- package/dist/{products-Csja6Mz3.mjs → products-BVduBT2A.mjs} +3 -3
- package/dist/{products-Csja6Mz3.mjs.map → products-BVduBT2A.mjs.map} +1 -1
- package/dist/{products-DcoIAZKk.cjs → products-IQvKyCYT.cjs} +3 -3
- package/dist/{products-DcoIAZKk.cjs.map → products-IQvKyCYT.cjs.map} +1 -1
- package/dist/{src-BeeIRRwy.cjs → src-CqBhbo1S.cjs} +2 -2
- package/dist/{src-BeeIRRwy.cjs.map → src-CqBhbo1S.cjs.map} +1 -1
- package/dist/{src-C8lPWi5Q.mjs → src-SdohifRY.mjs} +2 -2
- package/dist/{src-C8lPWi5Q.mjs.map → src-SdohifRY.mjs.map} +1 -1
- package/dist/{use-account-clients-DInHTX3i.cjs → use-account-clients-D3Eawm5e.cjs} +2 -2
- package/dist/{use-account-clients-DInHTX3i.cjs.map → use-account-clients-D3Eawm5e.cjs.map} +1 -1
- package/dist/{use-account-clients-Do2v1HKy.mjs → use-account-clients-zeybRls8.mjs} +2 -2
- package/dist/{use-account-clients-Do2v1HKy.mjs.map → use-account-clients-zeybRls8.mjs.map} +1 -1
- package/dist/{use-customer-account-DXKadeJo.cjs → use-customer-account-BFRo6FiF.cjs} +3 -3
- package/dist/{use-customer-account-DXKadeJo.cjs.map → use-customer-account-BFRo6FiF.cjs.map} +1 -1
- package/dist/{use-customer-account-DGbCAfxl.mjs → use-customer-account-CZYDqBtL.mjs} +3 -3
- package/dist/{use-customer-account-DGbCAfxl.mjs.map → use-customer-account-CZYDqBtL.mjs.map} +1 -1
- package/dist/{use-fluid-api-BB3QhQT8.mjs → use-fluid-api-BpRkXNaT.mjs} +2 -2
- package/dist/{use-fluid-api-BB3QhQT8.mjs.map → use-fluid-api-BpRkXNaT.mjs.map} +1 -1
- package/dist/{use-fluid-api-BzIeHDnF.cjs → use-fluid-api-Df5mIIBE.cjs} +2 -2
- package/dist/{use-fluid-api-BzIeHDnF.cjs.map → use-fluid-api-Df5mIIBE.cjs.map} +1 -1
- package/package.json +8 -8
- package/styles/globals.css +164 -166
- package/dist/LinkWidget-BIGRdkyq.mjs.map +0 -1
- package/dist/LinkWidget-CPneatEQ.cjs.map +0 -1
- package/styles/theme.css +0 -169
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require("./chunk-DAgNkxik.cjs");
|
|
2
|
-
const require_FluidProvider = require("./FluidProvider-
|
|
2
|
+
const require_FluidProvider = require("./FluidProvider-CfnQ1hQi.cjs");
|
|
3
3
|
let react = require("react");
|
|
4
4
|
//#region src/hooks/use-fluid-auth.ts
|
|
5
5
|
/**
|
|
@@ -151,4 +151,4 @@ Object.defineProperty(exports, "useSubscriptionsClient", {
|
|
|
151
151
|
}
|
|
152
152
|
});
|
|
153
153
|
|
|
154
|
-
//# sourceMappingURL=use-account-clients-
|
|
154
|
+
//# sourceMappingURL=use-account-clients-D3Eawm5e.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-account-clients-
|
|
1
|
+
{"version":3,"file":"use-account-clients-D3Eawm5e.cjs","names":["useFluidAuthContext","useFluidContext","createOrdersFetchClient","createSubscriptionsFetchClient","createFluidPayFetchClient","createCoreFetchClient"],"sources":["../src/hooks/use-fluid-auth.ts","../src/account/use-account-clients.ts"],"sourcesContent":["/**\n * useFluidAuth Hook\n *\n * Provides access to authentication state and utilities.\n * This is the primary hook for interacting with auth in components.\n */\n\nimport { useFluidAuthContext } from \"../providers/FluidAuthProvider\";\nimport type { FluidAuthContextValue } from \"../auth/types\";\n\n/**\n * Hook to access authentication state and utilities.\n *\n * Must be used within a `FluidAuthProvider`.\n *\n * @returns Authentication context with user info, loading state, and utilities\n * @throws Error if used outside FluidAuthProvider\n *\n * @example\n * ```tsx\n * function UserProfile() {\n * const { isAuthenticated, isLoading, user, clearAuth } = useFluidAuth();\n *\n * if (isLoading) {\n * return <Spinner />;\n * }\n *\n * if (!isAuthenticated) {\n * return <p>Please log in</p>;\n * }\n *\n * return (\n * <div>\n * <p>Welcome, {user.full_name}!</p>\n * <button onClick={clearAuth}>Log out</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useFluidAuth(): FluidAuthContextValue {\n return useFluidAuthContext();\n}\n","import { useMemo } from \"react\";\nimport {\n createFetchClient as createOrdersFetchClient,\n type FetchClient as OrdersFetchClient,\n} from \"@fluid-app/orders-api-client\";\nimport {\n createFetchClient as createSubscriptionsFetchClient,\n type FetchClient as SubscriptionsFetchClient,\n} from \"@fluid-app/subscriptions-api-client\";\nimport {\n createFetchClient as createFluidPayFetchClient,\n type FetchClient as FluidPayFetchClient,\n} from \"@fluid-app/fluid-pay-api-client\";\nimport {\n createFetchClient as createCoreFetchClient,\n type FetchClient as CoreFetchClient,\n} from \"@fluid-app/api-client-core\";\nimport { useFluidContext } from \"../providers/FluidProvider\";\nimport { useFluidAuth } from \"../hooks/use-fluid-auth\";\n\n/** API version prefix for versioned endpoints (e.g. points ledger) */\nexport const API_VERSION = \"/v202506\";\n\n/**\n * Ensures baseUrl ends with /api.\n * Domain-specific API clients (orders, subscriptions, fluid-pay) use endpoint\n * paths without /api (e.g. /fluid_pay/me, /subscriptions), matching fluid-admin's\n * NEXT_PUBLIC_API_URL convention. The portal SDK's config.baseUrl is the domain\n * root (e.g. https://api.fluid.app), so we append /api here.\n */\nfunction withApiPrefix(baseUrl: string): string {\n const base = baseUrl.replace(/\\/+$/, \"\");\n return base.endsWith(\"/api\") ? base : `${base}/api`;\n}\n\nexport function useOrdersClient(): OrdersFetchClient {\n const { config } = useFluidContext();\n const { token } = useFluidAuth();\n\n return useMemo(\n () =>\n createOrdersFetchClient({\n baseUrl: withApiPrefix(config.baseUrl),\n getAuthToken: () => token,\n onAuthError: config.onAuthError,\n }),\n [config.baseUrl, config.onAuthError, token],\n );\n}\n\nexport function useSubscriptionsClient(): SubscriptionsFetchClient {\n const { config } = useFluidContext();\n const { token } = useFluidAuth();\n\n return useMemo(\n () =>\n createSubscriptionsFetchClient({\n baseUrl: withApiPrefix(config.baseUrl),\n getAuthToken: () => token,\n onAuthError: config.onAuthError,\n }),\n [config.baseUrl, config.onAuthError, token],\n );\n}\n\nexport function useFluidPayClient(): FluidPayFetchClient {\n const { config } = useFluidContext();\n const { token } = useFluidAuth();\n\n return useMemo(\n () =>\n createFluidPayFetchClient({\n baseUrl: withApiPrefix(config.baseUrl),\n getAuthToken: () => token,\n onAuthError: config.onAuthError,\n }),\n [config.baseUrl, config.onAuthError, token],\n );\n}\n\n/**\n * Generic SDK fetch client for endpoints not covered by domain-specific clients\n * (e.g. /countries, /v202506/customers/:id/points_ledgers).\n * Uses the same auth/baseUrl/error handling as the domain clients.\n */\nexport function useSdkClient(): CoreFetchClient {\n const { config } = useFluidContext();\n const { token } = useFluidAuth();\n\n return useMemo(\n () =>\n createCoreFetchClient({\n baseUrl: withApiPrefix(config.baseUrl),\n getAuthToken: () => token,\n onAuthError: config.onAuthError,\n }),\n [config.baseUrl, config.onAuthError, token],\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,SAAgB,eAAsC;AACpD,QAAOA,sBAAAA,qBAAqB;;;;;ACpB9B,MAAa,cAAc;;;;;;;;AAS3B,SAAS,cAAc,SAAyB;CAC9C,MAAM,OAAO,QAAQ,QAAQ,QAAQ,GAAG;AACxC,QAAO,KAAK,SAAS,OAAO,GAAG,OAAO,GAAG,KAAK;;AAGhD,SAAgB,kBAAqC;CACnD,MAAM,EAAE,WAAWC,sBAAAA,iBAAiB;CACpC,MAAM,EAAE,UAAU,cAAc;AAEhC,SAAA,GAAA,MAAA,eAEIC,sBAAAA,kBAAwB;EACtB,SAAS,cAAc,OAAO,QAAQ;EACtC,oBAAoB;EACpB,aAAa,OAAO;EACrB,CAAC,EACJ;EAAC,OAAO;EAAS,OAAO;EAAa;EAAM,CAC5C;;AAGH,SAAgB,yBAAmD;CACjE,MAAM,EAAE,WAAWD,sBAAAA,iBAAiB;CACpC,MAAM,EAAE,UAAU,cAAc;AAEhC,SAAA,GAAA,MAAA,eAEIE,sBAAAA,kBAA+B;EAC7B,SAAS,cAAc,OAAO,QAAQ;EACtC,oBAAoB;EACpB,aAAa,OAAO;EACrB,CAAC,EACJ;EAAC,OAAO;EAAS,OAAO;EAAa;EAAM,CAC5C;;AAGH,SAAgB,oBAAyC;CACvD,MAAM,EAAE,WAAWF,sBAAAA,iBAAiB;CACpC,MAAM,EAAE,UAAU,cAAc;AAEhC,SAAA,GAAA,MAAA,eAEIG,sBAAAA,kBAA0B;EACxB,SAAS,cAAc,OAAO,QAAQ;EACtC,oBAAoB;EACpB,aAAa,OAAO;EACrB,CAAC,EACJ;EAAC,OAAO;EAAS,OAAO;EAAa;EAAM,CAC5C;;;;;;;AAQH,SAAgB,eAAgC;CAC9C,MAAM,EAAE,WAAWH,sBAAAA,iBAAiB;CACpC,MAAM,EAAE,UAAU,cAAc;AAEhC,SAAA,GAAA,MAAA,eAEII,sBAAAA,kBAAsB;EACpB,SAAS,cAAc,OAAO,QAAQ;EACtC,oBAAoB;EACpB,aAAa,OAAO;EACrB,CAAC,EACJ;EAAC,OAAO;EAAS,OAAO;EAAa;EAAM,CAC5C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { J as createFetchClient, n as useFluidContext, s as useFluidAuthContext } from "./FluidProvider-
|
|
1
|
+
import { J as createFetchClient, n as useFluidContext, s as useFluidAuthContext } from "./FluidProvider-DxTCeF37.mjs";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
//#region src/hooks/use-fluid-auth.ts
|
|
4
4
|
/**
|
|
@@ -115,4 +115,4 @@ function useSdkClient() {
|
|
|
115
115
|
//#endregion
|
|
116
116
|
export { useSubscriptionsClient as a, useSdkClient as i, useFluidPayClient as n, useFluidAuth as o, useOrdersClient as r, API_VERSION as t };
|
|
117
117
|
|
|
118
|
-
//# sourceMappingURL=use-account-clients-
|
|
118
|
+
//# sourceMappingURL=use-account-clients-zeybRls8.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-account-clients-
|
|
1
|
+
{"version":3,"file":"use-account-clients-zeybRls8.mjs","names":["createOrdersFetchClient","createSubscriptionsFetchClient","createFluidPayFetchClient","createCoreFetchClient"],"sources":["../src/hooks/use-fluid-auth.ts","../src/account/use-account-clients.ts"],"sourcesContent":["/**\n * useFluidAuth Hook\n *\n * Provides access to authentication state and utilities.\n * This is the primary hook for interacting with auth in components.\n */\n\nimport { useFluidAuthContext } from \"../providers/FluidAuthProvider\";\nimport type { FluidAuthContextValue } from \"../auth/types\";\n\n/**\n * Hook to access authentication state and utilities.\n *\n * Must be used within a `FluidAuthProvider`.\n *\n * @returns Authentication context with user info, loading state, and utilities\n * @throws Error if used outside FluidAuthProvider\n *\n * @example\n * ```tsx\n * function UserProfile() {\n * const { isAuthenticated, isLoading, user, clearAuth } = useFluidAuth();\n *\n * if (isLoading) {\n * return <Spinner />;\n * }\n *\n * if (!isAuthenticated) {\n * return <p>Please log in</p>;\n * }\n *\n * return (\n * <div>\n * <p>Welcome, {user.full_name}!</p>\n * <button onClick={clearAuth}>Log out</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useFluidAuth(): FluidAuthContextValue {\n return useFluidAuthContext();\n}\n","import { useMemo } from \"react\";\nimport {\n createFetchClient as createOrdersFetchClient,\n type FetchClient as OrdersFetchClient,\n} from \"@fluid-app/orders-api-client\";\nimport {\n createFetchClient as createSubscriptionsFetchClient,\n type FetchClient as SubscriptionsFetchClient,\n} from \"@fluid-app/subscriptions-api-client\";\nimport {\n createFetchClient as createFluidPayFetchClient,\n type FetchClient as FluidPayFetchClient,\n} from \"@fluid-app/fluid-pay-api-client\";\nimport {\n createFetchClient as createCoreFetchClient,\n type FetchClient as CoreFetchClient,\n} from \"@fluid-app/api-client-core\";\nimport { useFluidContext } from \"../providers/FluidProvider\";\nimport { useFluidAuth } from \"../hooks/use-fluid-auth\";\n\n/** API version prefix for versioned endpoints (e.g. points ledger) */\nexport const API_VERSION = \"/v202506\";\n\n/**\n * Ensures baseUrl ends with /api.\n * Domain-specific API clients (orders, subscriptions, fluid-pay) use endpoint\n * paths without /api (e.g. /fluid_pay/me, /subscriptions), matching fluid-admin's\n * NEXT_PUBLIC_API_URL convention. The portal SDK's config.baseUrl is the domain\n * root (e.g. https://api.fluid.app), so we append /api here.\n */\nfunction withApiPrefix(baseUrl: string): string {\n const base = baseUrl.replace(/\\/+$/, \"\");\n return base.endsWith(\"/api\") ? base : `${base}/api`;\n}\n\nexport function useOrdersClient(): OrdersFetchClient {\n const { config } = useFluidContext();\n const { token } = useFluidAuth();\n\n return useMemo(\n () =>\n createOrdersFetchClient({\n baseUrl: withApiPrefix(config.baseUrl),\n getAuthToken: () => token,\n onAuthError: config.onAuthError,\n }),\n [config.baseUrl, config.onAuthError, token],\n );\n}\n\nexport function useSubscriptionsClient(): SubscriptionsFetchClient {\n const { config } = useFluidContext();\n const { token } = useFluidAuth();\n\n return useMemo(\n () =>\n createSubscriptionsFetchClient({\n baseUrl: withApiPrefix(config.baseUrl),\n getAuthToken: () => token,\n onAuthError: config.onAuthError,\n }),\n [config.baseUrl, config.onAuthError, token],\n );\n}\n\nexport function useFluidPayClient(): FluidPayFetchClient {\n const { config } = useFluidContext();\n const { token } = useFluidAuth();\n\n return useMemo(\n () =>\n createFluidPayFetchClient({\n baseUrl: withApiPrefix(config.baseUrl),\n getAuthToken: () => token,\n onAuthError: config.onAuthError,\n }),\n [config.baseUrl, config.onAuthError, token],\n );\n}\n\n/**\n * Generic SDK fetch client for endpoints not covered by domain-specific clients\n * (e.g. /countries, /v202506/customers/:id/points_ledgers).\n * Uses the same auth/baseUrl/error handling as the domain clients.\n */\nexport function useSdkClient(): CoreFetchClient {\n const { config } = useFluidContext();\n const { token } = useFluidAuth();\n\n return useMemo(\n () =>\n createCoreFetchClient({\n baseUrl: withApiPrefix(config.baseUrl),\n getAuthToken: () => token,\n onAuthError: config.onAuthError,\n }),\n [config.baseUrl, config.onAuthError, token],\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,SAAgB,eAAsC;AACpD,QAAO,qBAAqB;;;;;ACpB9B,MAAa,cAAc;;;;;;;;AAS3B,SAAS,cAAc,SAAyB;CAC9C,MAAM,OAAO,QAAQ,QAAQ,QAAQ,GAAG;AACxC,QAAO,KAAK,SAAS,OAAO,GAAG,OAAO,GAAG,KAAK;;AAGhD,SAAgB,kBAAqC;CACnD,MAAM,EAAE,WAAW,iBAAiB;CACpC,MAAM,EAAE,UAAU,cAAc;AAEhC,QAAO,cAEHA,kBAAwB;EACtB,SAAS,cAAc,OAAO,QAAQ;EACtC,oBAAoB;EACpB,aAAa,OAAO;EACrB,CAAC,EACJ;EAAC,OAAO;EAAS,OAAO;EAAa;EAAM,CAC5C;;AAGH,SAAgB,yBAAmD;CACjE,MAAM,EAAE,WAAW,iBAAiB;CACpC,MAAM,EAAE,UAAU,cAAc;AAEhC,QAAO,cAEHC,kBAA+B;EAC7B,SAAS,cAAc,OAAO,QAAQ;EACtC,oBAAoB;EACpB,aAAa,OAAO;EACrB,CAAC,EACJ;EAAC,OAAO;EAAS,OAAO;EAAa;EAAM,CAC5C;;AAGH,SAAgB,oBAAyC;CACvD,MAAM,EAAE,WAAW,iBAAiB;CACpC,MAAM,EAAE,UAAU,cAAc;AAEhC,QAAO,cAEHC,kBAA0B;EACxB,SAAS,cAAc,OAAO,QAAQ;EACtC,oBAAoB;EACpB,aAAa,OAAO;EACrB,CAAC,EACJ;EAAC,OAAO;EAAS,OAAO;EAAa;EAAM,CAC5C;;;;;;;AAQH,SAAgB,eAAgC;CAC9C,MAAM,EAAE,WAAW,iBAAiB;CACpC,MAAM,EAAE,UAAU,cAAc;AAEhC,QAAO,cAEHC,kBAAsB;EACpB,SAAS,cAAc,OAAO,QAAQ;EACtC,oBAAoB;EACpB,aAAa,OAAO;EACrB,CAAC,EACJ;EAAC,OAAO;EAAS,OAAO;EAAa;EAAM,CAC5C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require("./chunk-DAgNkxik.cjs");
|
|
2
|
-
const require_FluidProvider = require("./FluidProvider-
|
|
3
|
-
const require_use_account_clients = require("./use-account-clients-
|
|
2
|
+
const require_FluidProvider = require("./FluidProvider-CfnQ1hQi.cjs");
|
|
3
|
+
const require_use_account_clients = require("./use-account-clients-D3Eawm5e.cjs");
|
|
4
4
|
let _tanstack_react_query = require("@tanstack/react-query");
|
|
5
5
|
//#region src/account/use-customer-account.ts
|
|
6
6
|
function useCustomerAccount({ enabled = true } = {}) {
|
|
@@ -26,4 +26,4 @@ Object.defineProperty(exports, "useCustomerAccount", {
|
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
-
//# sourceMappingURL=use-customer-account-
|
|
29
|
+
//# sourceMappingURL=use-customer-account-BFRo6FiF.cjs.map
|
package/dist/{use-customer-account-DXKadeJo.cjs.map → use-customer-account-BFRo6FiF.cjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-customer-account-
|
|
1
|
+
{"version":3,"file":"use-customer-account-BFRo6FiF.cjs","names":["useFluidAuth","useFluidPayClient"],"sources":["../src/account/use-customer-account.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { customersApi } from \"@fluid-app/fluid-pay-api-client\";\nimport { useFluidAuth } from \"../hooks/use-fluid-auth\";\nimport { useFluidPayClient } from \"./use-account-clients\";\n\nexport function useCustomerAccount({\n enabled = true,\n}: { enabled?: boolean } = {}) {\n const { token, user } = useFluidAuth();\n const fluidPayClient = useFluidPayClient();\n const jwt = token ?? \"\";\n\n const query = useQuery({\n queryKey: [\"fluidPayAccount\", user?.id],\n queryFn: () => customersApi.fetchCustomerAccount(fluidPayClient, jwt),\n enabled: !!jwt && enabled,\n });\n\n return {\n customerId: query.data?.customer?.id,\n isLoadingCustomer: query.isLoading,\n isCustomerError: query.isError,\n };\n}\n"],"mappings":";;;;;AAKA,SAAgB,mBAAmB,EACjC,UAAU,SACe,EAAE,EAAE;CAC7B,MAAM,EAAE,OAAO,SAASA,4BAAAA,cAAc;CACtC,MAAM,iBAAiBC,4BAAAA,mBAAmB;CAC1C,MAAM,MAAM,SAAS;CAErB,MAAM,SAAA,GAAA,sBAAA,UAAiB;EACrB,UAAU,CAAC,mBAAmB,MAAM,GAAG;EACvC,eAAA,sBAAA,qBAAiD,gBAAgB,IAAI;EACrE,SAAS,CAAC,CAAC,OAAO;EACnB,CAAC;AAEF,QAAO;EACL,YAAY,MAAM,MAAM,UAAU;EAClC,mBAAmB,MAAM;EACzB,iBAAiB,MAAM;EACxB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { G as fetchCustomerAccount } from "./FluidProvider-
|
|
2
|
-
import { n as useFluidPayClient, o as useFluidAuth } from "./use-account-clients-
|
|
1
|
+
import { G as fetchCustomerAccount } from "./FluidProvider-DxTCeF37.mjs";
|
|
2
|
+
import { n as useFluidPayClient, o as useFluidAuth } from "./use-account-clients-zeybRls8.mjs";
|
|
3
3
|
import { useQuery } from "@tanstack/react-query";
|
|
4
4
|
//#region src/account/use-customer-account.ts
|
|
5
5
|
function useCustomerAccount({ enabled = true } = {}) {
|
|
@@ -20,4 +20,4 @@ function useCustomerAccount({ enabled = true } = {}) {
|
|
|
20
20
|
//#endregion
|
|
21
21
|
export { useCustomerAccount as t };
|
|
22
22
|
|
|
23
|
-
//# sourceMappingURL=use-customer-account-
|
|
23
|
+
//# sourceMappingURL=use-customer-account-CZYDqBtL.mjs.map
|
package/dist/{use-customer-account-DGbCAfxl.mjs.map → use-customer-account-CZYDqBtL.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-customer-account-
|
|
1
|
+
{"version":3,"file":"use-customer-account-CZYDqBtL.mjs","names":["customersApi.fetchCustomerAccount"],"sources":["../src/account/use-customer-account.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { customersApi } from \"@fluid-app/fluid-pay-api-client\";\nimport { useFluidAuth } from \"../hooks/use-fluid-auth\";\nimport { useFluidPayClient } from \"./use-account-clients\";\n\nexport function useCustomerAccount({\n enabled = true,\n}: { enabled?: boolean } = {}) {\n const { token, user } = useFluidAuth();\n const fluidPayClient = useFluidPayClient();\n const jwt = token ?? \"\";\n\n const query = useQuery({\n queryKey: [\"fluidPayAccount\", user?.id],\n queryFn: () => customersApi.fetchCustomerAccount(fluidPayClient, jwt),\n enabled: !!jwt && enabled,\n });\n\n return {\n customerId: query.data?.customer?.id,\n isLoadingCustomer: query.isLoading,\n isCustomerError: query.isError,\n };\n}\n"],"mappings":";;;;AAKA,SAAgB,mBAAmB,EACjC,UAAU,SACe,EAAE,EAAE;CAC7B,MAAM,EAAE,OAAO,SAAS,cAAc;CACtC,MAAM,iBAAiB,mBAAmB;CAC1C,MAAM,MAAM,SAAS;CAErB,MAAM,QAAQ,SAAS;EACrB,UAAU,CAAC,mBAAmB,MAAM,GAAG;EACvC,eAAeA,qBAAkC,gBAAgB,IAAI;EACrE,SAAS,CAAC,CAAC,OAAO;EACnB,CAAC;AAEF,QAAO;EACL,YAAY,MAAM,MAAM,UAAU;EAClC,mBAAmB,MAAM;EACzB,iBAAiB,MAAM;EACxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as useFluidContext } from "./FluidProvider-
|
|
1
|
+
import { n as useFluidContext } from "./FluidProvider-DxTCeF37.mjs";
|
|
2
2
|
//#region src/hooks/use-fluid-api.ts
|
|
3
3
|
/**
|
|
4
4
|
* Hook to access the Fluid API client
|
|
@@ -24,4 +24,4 @@ function useFluidApi() {
|
|
|
24
24
|
//#endregion
|
|
25
25
|
export { useFluidApi as t };
|
|
26
26
|
|
|
27
|
-
//# sourceMappingURL=use-fluid-api-
|
|
27
|
+
//# sourceMappingURL=use-fluid-api-BpRkXNaT.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-fluid-api-
|
|
1
|
+
{"version":3,"file":"use-fluid-api-BpRkXNaT.mjs","names":[],"sources":["../src/hooks/use-fluid-api.ts"],"sourcesContent":["import { useFluidContext } from \"../providers/FluidProvider\";\nimport type { FluidClient } from \"../client/fluid-client\";\n\n/**\n * Hook to access the Fluid API client\n *\n * @example\n * ```tsx\n * function ProductList() {\n * const api = useFluidApi();\n *\n * const { data: products } = useQuery({\n * queryKey: [\"products\"],\n * queryFn: () => api.products.list(),\n * });\n *\n * return <ul>{products?.map(p => <li key={p.id}>{p.name}</li>)}</ul>;\n * }\n * ```\n */\nexport function useFluidApi(): FluidClient {\n const { client } = useFluidContext();\n return client;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,cAA2B;CACzC,MAAM,EAAE,WAAW,iBAAiB;AACpC,QAAO"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_FluidProvider = require("./FluidProvider-
|
|
1
|
+
const require_FluidProvider = require("./FluidProvider-CfnQ1hQi.cjs");
|
|
2
2
|
//#region src/hooks/use-fluid-api.ts
|
|
3
3
|
/**
|
|
4
4
|
* Hook to access the Fluid API client
|
|
@@ -29,4 +29,4 @@ Object.defineProperty(exports, "useFluidApi", {
|
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
-
//# sourceMappingURL=use-fluid-api-
|
|
32
|
+
//# sourceMappingURL=use-fluid-api-Df5mIIBE.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-fluid-api-
|
|
1
|
+
{"version":3,"file":"use-fluid-api-Df5mIIBE.cjs","names":["useFluidContext"],"sources":["../src/hooks/use-fluid-api.ts"],"sourcesContent":["import { useFluidContext } from \"../providers/FluidProvider\";\nimport type { FluidClient } from \"../client/fluid-client\";\n\n/**\n * Hook to access the Fluid API client\n *\n * @example\n * ```tsx\n * function ProductList() {\n * const api = useFluidApi();\n *\n * const { data: products } = useQuery({\n * queryKey: [\"products\"],\n * queryFn: () => api.products.list(),\n * });\n *\n * return <ul>{products?.map(p => <li key={p.id}>{p.name}</li>)}</ul>;\n * }\n * ```\n */\nexport function useFluidApi(): FluidClient {\n const { client } = useFluidContext();\n return client;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,cAA2B;CACzC,MAAM,EAAE,WAAWA,sBAAAA,iBAAiB;AACpC,QAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluid-app/portal-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.52",
|
|
4
4
|
"description": "SDK for building custom Fluid portals",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -63,36 +63,36 @@
|
|
|
63
63
|
"typescript": "^5",
|
|
64
64
|
"zod": "4.3.5",
|
|
65
65
|
"@fluid-app/api-client-core": "0.1.0",
|
|
66
|
-
"@fluid-app/auth": "0.1.0",
|
|
67
66
|
"@fluid-app/company-switcher-core": "0.1.0",
|
|
67
|
+
"@fluid-app/auth": "0.1.0",
|
|
68
68
|
"@fluid-app/company-switcher-ui": "0.1.0",
|
|
69
|
+
"@fluid-app/file-picker-api-client": "0.1.0",
|
|
69
70
|
"@fluid-app/contacts-ui": "0.1.0",
|
|
70
71
|
"@fluid-app/fluid-pay-api-client": "0.1.0",
|
|
71
72
|
"@fluid-app/fluidos-api-client": "0.1.0",
|
|
72
|
-
"@fluid-app/messaging-core": "0.1.0",
|
|
73
73
|
"@fluid-app/messaging-api-client": "0.1.0",
|
|
74
|
-
"@fluid-app/file-picker-api-client": "0.1.0",
|
|
75
74
|
"@fluid-app/messaging-ui": "0.1.0",
|
|
76
|
-
"@fluid-app/orders-core": "0.1.0",
|
|
77
75
|
"@fluid-app/mysite-ui": "0.1.0",
|
|
76
|
+
"@fluid-app/messaging-core": "0.1.0",
|
|
78
77
|
"@fluid-app/orders-api-client": "0.1.0",
|
|
78
|
+
"@fluid-app/orders-core": "0.1.0",
|
|
79
79
|
"@fluid-app/orders-ui": "0.1.0",
|
|
80
80
|
"@fluid-app/permissions": "0.1.0",
|
|
81
81
|
"@fluid-app/portal-core": "0.1.23",
|
|
82
82
|
"@fluid-app/portal-react": "0.1.0",
|
|
83
|
+
"@fluid-app/portal-widgets": "0.1.22",
|
|
83
84
|
"@fluid-app/products-api-client": "0.1.0",
|
|
84
85
|
"@fluid-app/products-core": "0.1.0",
|
|
85
|
-
"@fluid-app/portal-widgets": "0.1.22",
|
|
86
86
|
"@fluid-app/profile-core": "0.1.0",
|
|
87
87
|
"@fluid-app/profile-ui": "0.1.0",
|
|
88
88
|
"@fluid-app/query-persister": "0.1.0",
|
|
89
89
|
"@fluid-app/shareables-api-client": "0.1.0",
|
|
90
|
-
"@fluid-app/shareables-ui": "0.1.0",
|
|
91
90
|
"@fluid-app/shareables-core": "0.1.0",
|
|
91
|
+
"@fluid-app/shareables-ui": "0.1.0",
|
|
92
92
|
"@fluid-app/shop-ui": "0.1.0",
|
|
93
93
|
"@fluid-app/subscriptions-api-client": "0.1.0",
|
|
94
|
-
"@fluid-app/subscriptions-ui": "0.1.0",
|
|
95
94
|
"@fluid-app/subscriptions-core": "0.1.0",
|
|
95
|
+
"@fluid-app/subscriptions-ui": "0.1.0",
|
|
96
96
|
"@fluid-app/typescript-config": "0.0.0",
|
|
97
97
|
"@fluid-app/ui-primitives": "0.1.13",
|
|
98
98
|
"@fluid-app/user-contacts-api-client": "0.1.0",
|
package/styles/globals.css
CHANGED
|
@@ -1,187 +1,185 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Portal SDK –
|
|
3
|
-
* and messaging custom utilities.
|
|
2
|
+
* Portal SDK – automatically imports and sets up all fluid required CSS.
|
|
4
3
|
*
|
|
5
4
|
* Import this in your app's main CSS file:
|
|
6
5
|
* @import "@fluid-app/portal-sdk/globals.css";
|
|
7
6
|
*/
|
|
8
7
|
|
|
9
|
-
/* ──
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@
|
|
15
|
-
@
|
|
16
|
-
@
|
|
17
|
-
@
|
|
18
|
-
@
|
|
19
|
-
@
|
|
20
|
-
@
|
|
21
|
-
@
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
@source
|
|
25
|
-
|
|
26
|
-
@source
|
|
27
|
-
@source inline("aspect-{square,video}");
|
|
28
|
-
@source inline("@md:grid-cols-{2,3}");
|
|
29
|
-
@source inline("@md:grid-cols-[{1,2,3}fr_{1,2,3}fr]");
|
|
30
|
-
@source inline("@md:grid-cols-[1fr_2fr_1fr]");
|
|
31
|
-
|
|
32
|
-
/* ── Animations ──────────────────────────────────────────────────────────── */
|
|
33
|
-
@import "tw-animate-css";
|
|
34
|
-
|
|
35
|
-
/* ── Messaging custom utilities ──────────────────────────────────────────── */
|
|
36
|
-
|
|
37
|
-
@utility text-messaging-1 {
|
|
38
|
-
font-size: 1.25rem;
|
|
39
|
-
font-weight: 500;
|
|
40
|
-
line-height: 1.4;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
@utility text-messaging-2 {
|
|
44
|
-
font-size: 0.8125rem;
|
|
45
|
-
font-weight: 600;
|
|
46
|
-
line-height: 1.53846;
|
|
47
|
-
}
|
|
8
|
+
/* ── Package CSS imports ─────────────────────────────────────────────────── */
|
|
9
|
+
@import "@fluid-app/company-switcher-ui/styles/company-switcher.css";
|
|
10
|
+
@import "@fluid-app/contacts-ui/styles/contacts.css";
|
|
11
|
+
@import "@fluid-app/messaging-ui/styles/messaging.css";
|
|
12
|
+
@import "@fluid-app/orders-ui/styles/orders.css";
|
|
13
|
+
@import "@fluid-app/shop-ui/styles/shop.css";
|
|
14
|
+
@import "@fluid-app/profile-ui/styles/profile.css";
|
|
15
|
+
@import "@fluid-app/shareables-ui/styles/shareables.css";
|
|
16
|
+
@import "@fluid-app/subscriptions-ui/styles/subscriptions.css";
|
|
17
|
+
@import "@fluid-app/mysite-ui/styles/mysite.css";
|
|
18
|
+
@import "@fluid-app/ui-primitives/styles/ui-primitives.css";
|
|
19
|
+
@import "@fluid-app/portal-widgets/globals.css";
|
|
20
|
+
@import "@fluid-app/portal-react/globals.css";
|
|
21
|
+
|
|
22
|
+
/* ── Source ──────────────────────────────────────────────────────────────── */
|
|
23
|
+
@source "../src/**/*.{ts,tsx}";
|
|
24
|
+
/* This is required for the published version */
|
|
25
|
+
@source "../dist/**/*.{js,mjs}";
|
|
48
26
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
@
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
#304054 88.17%,
|
|
85
|
-
#314155 91.67%
|
|
86
|
-
);
|
|
87
|
-
background: linear-gradient(
|
|
88
|
-
27deg,
|
|
89
|
-
color(display-p3 0.0772 0.1087 0.1529) 8.33%,
|
|
90
|
-
color(display-p3 0.1164 0.1572 0.2162) 25.04%,
|
|
91
|
-
color(display-p3 0.2007 0.2475 0.3221) 88.17%,
|
|
92
|
-
color(display-p3 0.2053 0.2525 0.328) 91.67%
|
|
93
|
-
);
|
|
27
|
+
/*
|
|
28
|
+
* Register CSS variables as Tailwind theme values.
|
|
29
|
+
* `inline` means Tailwind won't emit its own --color-* declarations —
|
|
30
|
+
* we define them ourselves in :root below (and the theme engine overrides
|
|
31
|
+
* them at runtime via [data-theme="..."]).
|
|
32
|
+
*/
|
|
33
|
+
@theme inline {
|
|
34
|
+
--color-background: var(--background);
|
|
35
|
+
--color-foreground: var(--foreground);
|
|
36
|
+
--color-primary: var(--primary);
|
|
37
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
38
|
+
--color-secondary: var(--secondary);
|
|
39
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
40
|
+
--color-muted: var(--muted);
|
|
41
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
42
|
+
--color-accent: var(--accent);
|
|
43
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
44
|
+
--color-destructive: var(--destructive);
|
|
45
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
46
|
+
--color-border: var(--border);
|
|
47
|
+
--color-input: var(--input);
|
|
48
|
+
--color-ring: var(--ring);
|
|
49
|
+
--color-popover: var(--popover);
|
|
50
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
51
|
+
--color-card: var(--card);
|
|
52
|
+
--color-card-foreground: var(--card-foreground);
|
|
53
|
+
--color-sidebar: var(--sidebar);
|
|
54
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
55
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
56
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
57
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
58
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
59
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
60
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
61
|
+
--radius: var(--radius);
|
|
94
62
|
}
|
|
95
63
|
|
|
96
|
-
|
|
97
|
-
|
|
64
|
+
/* Light mode fallback tokens (OKLCH format) */
|
|
65
|
+
:root {
|
|
66
|
+
--color-background: oklch(1 0 0);
|
|
67
|
+
--color-foreground: oklch(0.145 0 0);
|
|
68
|
+
--color-primary: oklch(0.205 0 0);
|
|
69
|
+
--color-primary-foreground: oklch(0.985 0 0);
|
|
70
|
+
--color-secondary: oklch(0.97 0 0);
|
|
71
|
+
--color-secondary-foreground: oklch(0.205 0 0);
|
|
72
|
+
--color-muted: oklch(0.97 0 0);
|
|
73
|
+
--color-muted-foreground: oklch(0.556 0 0);
|
|
74
|
+
--color-accent: oklch(0.97 0 0);
|
|
75
|
+
--color-accent-foreground: oklch(0.205 0 0);
|
|
76
|
+
--color-destructive: oklch(0.577 0.245 27.325);
|
|
77
|
+
--color-destructive-foreground: oklch(0.985 0 0);
|
|
78
|
+
--color-border: oklch(0.922 0 0);
|
|
79
|
+
|
|
80
|
+
/* Short-name aliases (match css-generator globalCSSOverride) */
|
|
81
|
+
--background: var(--color-background);
|
|
82
|
+
--foreground: var(--color-foreground);
|
|
83
|
+
--primary: var(--color-primary);
|
|
84
|
+
--primary-foreground: var(--color-primary-foreground);
|
|
85
|
+
--secondary: var(--color-secondary);
|
|
86
|
+
--secondary-foreground: var(--color-secondary-foreground);
|
|
87
|
+
--muted: var(--color-muted);
|
|
88
|
+
--muted-foreground: var(--color-muted-foreground);
|
|
89
|
+
--accent: var(--color-accent);
|
|
90
|
+
--accent-foreground: var(--color-accent-foreground);
|
|
91
|
+
--destructive: var(--color-destructive);
|
|
92
|
+
--destructive-foreground: var(--color-destructive-foreground);
|
|
93
|
+
--border: var(--color-border);
|
|
94
|
+
--input: var(--color-border);
|
|
95
|
+
--ring: var(--color-primary);
|
|
96
|
+
--radius: 0.625rem;
|
|
97
|
+
|
|
98
|
+
/* Popover / Card aliases */
|
|
99
|
+
--popover: var(--color-background);
|
|
100
|
+
--popover-foreground: var(--color-foreground);
|
|
101
|
+
--card: var(--color-background);
|
|
102
|
+
--card-foreground: var(--color-foreground);
|
|
103
|
+
|
|
104
|
+
/* Sidebar aliases */
|
|
105
|
+
--sidebar: var(--color-muted);
|
|
106
|
+
--sidebar-foreground: var(--color-muted-foreground);
|
|
107
|
+
--sidebar-primary: var(--color-primary);
|
|
108
|
+
--sidebar-primary-foreground: var(--color-primary-foreground);
|
|
109
|
+
--sidebar-accent: var(--color-accent);
|
|
110
|
+
--sidebar-accent-foreground: var(--color-accent-foreground);
|
|
111
|
+
--sidebar-border: var(--color-border);
|
|
112
|
+
--sidebar-ring: var(--color-primary);
|
|
98
113
|
}
|
|
99
114
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
115
|
+
/*
|
|
116
|
+
* Dark-mode fallback tokens.
|
|
117
|
+
* Applied when the user toggles dark mode but no API theme is loaded.
|
|
118
|
+
* The theme engine will override these with richer palette-derived values
|
|
119
|
+
* once a theme is fetched from the API.
|
|
120
|
+
*/
|
|
121
|
+
[data-theme-mode="dark"] {
|
|
122
|
+
--color-background: oklch(0.145 0 0);
|
|
123
|
+
--color-foreground: oklch(0.985 0 0);
|
|
124
|
+
--color-primary: oklch(0.985 0 0);
|
|
125
|
+
--color-primary-foreground: oklch(0.205 0 0);
|
|
126
|
+
--color-secondary: oklch(0.215 0 0);
|
|
127
|
+
--color-secondary-foreground: oklch(0.985 0 0);
|
|
128
|
+
--color-muted: oklch(0.215 0 0);
|
|
129
|
+
--color-muted-foreground: oklch(0.708 0 0);
|
|
130
|
+
--color-accent: oklch(0.215 0 0);
|
|
131
|
+
--color-accent-foreground: oklch(0.985 0 0);
|
|
132
|
+
--color-destructive: oklch(0.577 0.245 27.325);
|
|
133
|
+
--color-destructive-foreground: oklch(0.985 0 0);
|
|
134
|
+
--color-border: oklch(0.3 0 0);
|
|
135
|
+
|
|
136
|
+
--background: var(--color-background);
|
|
137
|
+
--foreground: var(--color-foreground);
|
|
138
|
+
--primary: var(--color-primary);
|
|
139
|
+
--primary-foreground: var(--color-primary-foreground);
|
|
140
|
+
--secondary: var(--color-secondary);
|
|
141
|
+
--secondary-foreground: var(--color-secondary-foreground);
|
|
142
|
+
--muted: var(--color-muted);
|
|
143
|
+
--muted-foreground: var(--color-muted-foreground);
|
|
144
|
+
--accent: var(--color-accent);
|
|
145
|
+
--accent-foreground: var(--color-accent-foreground);
|
|
146
|
+
--destructive: var(--color-destructive);
|
|
147
|
+
--destructive-foreground: var(--color-destructive-foreground);
|
|
148
|
+
--border: var(--color-border);
|
|
149
|
+
--input: var(--color-border);
|
|
150
|
+
--ring: var(--color-primary);
|
|
151
|
+
|
|
152
|
+
--popover: var(--color-background);
|
|
153
|
+
--popover-foreground: var(--color-foreground);
|
|
154
|
+
--card: var(--color-background);
|
|
155
|
+
--card-foreground: var(--color-foreground);
|
|
156
|
+
|
|
157
|
+
--sidebar: var(--color-muted);
|
|
158
|
+
--sidebar-foreground: var(--color-muted-foreground);
|
|
159
|
+
--sidebar-primary: var(--color-primary);
|
|
160
|
+
--sidebar-primary-foreground: var(--color-primary-foreground);
|
|
161
|
+
--sidebar-accent: var(--color-accent);
|
|
162
|
+
--sidebar-accent-foreground: var(--color-accent-foreground);
|
|
163
|
+
--sidebar-border: var(--color-border);
|
|
164
|
+
--sidebar-ring: var(--color-primary);
|
|
136
165
|
}
|
|
137
166
|
|
|
138
|
-
@
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
& & {
|
|
142
|
-
list-style-type: circle;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
& & & {
|
|
146
|
-
list-style-type: square;
|
|
167
|
+
@layer base {
|
|
168
|
+
* {
|
|
169
|
+
@apply border-border;
|
|
147
170
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
list-style-type: disc;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
& & & & & {
|
|
154
|
-
list-style-type: circle;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
& & & & & & {
|
|
158
|
-
list-style-type: square;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
& & & & & & & {
|
|
162
|
-
list-style-type: disc;
|
|
163
|
-
|
|
164
|
-
& & {
|
|
165
|
-
padding-left: 0;
|
|
166
|
-
}
|
|
171
|
+
body {
|
|
172
|
+
@apply bg-background text-foreground;
|
|
167
173
|
}
|
|
168
174
|
}
|
|
169
175
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
176
|
+
/* Hide scrollbars while preserving scroll functionality */
|
|
177
|
+
@layer utilities {
|
|
178
|
+
.scrollbar-none {
|
|
179
|
+
-ms-overflow-style: none;
|
|
180
|
+
scrollbar-width: none;
|
|
175
181
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
@utility content-auto {
|
|
179
|
-
content-visibility: auto;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
@utility hide-date-picker {
|
|
183
|
-
&::-webkit-calendar-picker-indicator {
|
|
182
|
+
.scrollbar-none::-webkit-scrollbar {
|
|
184
183
|
display: none;
|
|
185
|
-
-webkit-appearance: none;
|
|
186
184
|
}
|
|
187
185
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LinkWidget-BIGRdkyq.mjs","names":[],"sources":["../../widgets/src/widgets/LinkWidget.tsx"],"sourcesContent":["import type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport { Button } from \"@fluid-app/ui-primitives\";\nimport {\n getBorderRadiusCompositeField,\n getBorderWidthField,\n getBorderColorField,\n borderWidthClasses,\n borderColorClasses,\n getButtonSizeField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport type {\n BorderRadiusOptions,\n BorderWidthOptions,\n ButtonSizeOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\n\ntype LinkVariant =\n | \"default\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"destructive\";\n\nconst borderRadiusTLClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-tl-none\",\n sm: \"rounded-tl-sm\",\n md: \"rounded-tl-md\",\n lg: \"rounded-tl-lg\",\n xl: \"rounded-tl-xl\",\n full: \"rounded-tl-full\",\n};\n\nconst borderRadiusTRClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-tr-none\",\n sm: \"rounded-tr-sm\",\n md: \"rounded-tr-md\",\n lg: \"rounded-tr-lg\",\n xl: \"rounded-tr-xl\",\n full: \"rounded-tr-full\",\n};\n\nconst borderRadiusBLClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-bl-none\",\n sm: \"rounded-bl-sm\",\n md: \"rounded-bl-md\",\n lg: \"rounded-bl-lg\",\n xl: \"rounded-bl-xl\",\n full: \"rounded-bl-full\",\n};\n\nconst borderRadiusBRClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-br-none\",\n sm: \"rounded-br-sm\",\n md: \"rounded-br-md\",\n lg: \"rounded-br-lg\",\n xl: \"rounded-br-xl\",\n full: \"rounded-br-full\",\n};\n\nfunction sanitizeHref(url: string): string | undefined {\n if (!url) return undefined;\n if (/^(https?:|mailto:|tel:|\\/)/i.test(url)) return url;\n return undefined;\n}\n\ntype LinkWidgetProps = ComponentProps<\"div\"> & {\n text?: string;\n href?: string;\n openInNewTab?: boolean;\n variant?: LinkVariant;\n size?: ButtonSizeOptions;\n fontSize?: FontSizeOptions;\n alignment?: \"left\" | \"center\" | \"right\";\n fullWidth?: boolean;\n padding?: PaddingOptions;\n /** @deprecated Use per-corner props instead */\n borderRadius?: BorderRadiusOptions;\n borderRadiusTL?: BorderRadiusOptions;\n borderRadiusTR?: BorderRadiusOptions;\n borderRadiusBL?: BorderRadiusOptions;\n borderRadiusBR?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n previewMode?: boolean;\n editMode?: boolean;\n};\n\nconst alignmentClasses = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n} as const;\n\nexport function LinkWidget({\n text = \"Click Here\",\n href = \"\",\n openInNewTab = true,\n variant = \"default\",\n size = \"default\",\n fontSize = \"sm\",\n alignment = \"center\",\n fullWidth = false,\n padding = 0,\n borderRadius,\n borderRadiusTL,\n borderRadiusTR,\n borderRadiusBL,\n borderRadiusBR,\n borderWidth = \"none\",\n borderColor = \"muted\",\n previewMode = false,\n editMode = false,\n className,\n ...props\n}: LinkWidgetProps): React.JSX.Element {\n if (previewMode) {\n return (\n <div className={`flex justify-center p-4 ${className ?? \"\"}`} {...props}>\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"36px\",\n padding: \"0 16px\",\n borderRadius: \"6px\",\n backgroundColor: \"#18181b\",\n color: \"#ffffff\",\n fontSize: \"14px\",\n fontWeight: 500,\n }}\n >\n {text}\n </span>\n </div>\n );\n }\n\n const fallback = borderRadius ?? \"md\";\n const tl = borderRadiusTL ?? fallback;\n const tr = borderRadiusTR ?? fallback;\n const bl = borderRadiusBL ?? fallback;\n const br = borderRadiusBR ?? fallback;\n const borderRadiusClasses = `rounded-none ${borderRadiusTLClasses[tl]} ${borderRadiusTRClasses[tr]} ${borderRadiusBLClasses[bl]} ${borderRadiusBRClasses[br]}`;\n const buttonClasses = `text-${fontSize} ${borderRadiusClasses} ${fullWidth ? \"w-full\" : \"\"}`;\n\n return (\n <div\n className={`flex ${alignmentClasses[alignment]} p-${padding} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} ${className ?? \"\"}`}\n {...props}\n >\n <Button asChild variant={variant} size={size} className={buttonClasses}>\n {editMode ? (\n <span className=\"cursor-default\">{text}</span>\n ) : (\n <a\n href={sanitizeHref(href)}\n {...(openInNewTab\n ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n : {})}\n >\n {text}\n </a>\n )}\n </Button>\n </div>\n );\n}\n\nexport const linkWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"LinkWidget\",\n displayName: \"Link Button\",\n fields: [\n // Link Group\n {\n key: \"text\",\n label: \"Text\",\n type: \"text\",\n description: \"The button label text\",\n defaultValue: \"Click Here\",\n group: \"Link\",\n },\n {\n key: \"href\",\n label: \"URL\",\n type: \"text\",\n description: \"The destination URL\",\n defaultValue: \"\",\n group: \"Link\",\n },\n {\n key: \"openInNewTab\",\n label: \"Open in New Tab\",\n type: \"boolean\",\n description: \"Whether to open the link in a new tab\",\n defaultValue: true,\n group: \"Link\",\n },\n // Button Style Group\n {\n key: \"variant\",\n label: \"Variant\",\n type: \"select\",\n description: \"The visual style of the button\",\n options: [\n { label: \"Default\", value: \"default\" },\n { label: \"Outline\", value: \"outline\" },\n { label: \"Secondary\", value: \"secondary\" },\n { label: \"Ghost\", value: \"ghost\" },\n { label: \"Destructive\", value: \"destructive\" },\n ],\n defaultValue: \"default\",\n group: \"Button Style\",\n },\n getButtonSizeField({\n key: \"size\",\n label: \"Size\",\n description: \"The size of the button\",\n defaultValue: \"default\",\n group: \"Button Style\",\n }),\n getFontSizeField({\n key: \"fontSize\",\n label: \"Text Size\",\n description: \"The font size of the button text\",\n defaultValue: \"sm\",\n group: \"Button Style\",\n }),\n // Layout Group\n {\n key: \"alignment\",\n label: \"Alignment\",\n type: \"buttonGroup\",\n description: \"Horizontal alignment of the button\",\n options: [\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n { label: \"Right\", value: \"right\" },\n ],\n defaultValue: \"center\",\n group: \"Layout\",\n },\n {\n key: \"fullWidth\",\n label: \"Full Width\",\n type: \"boolean\",\n description: \"Makes the button stretch to full container width\",\n defaultValue: false,\n group: \"Layout\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Outer container padding\",\n defaultValue: 0,\n group: \"Layout\",\n }),\n // Design Group\n getBorderRadiusCompositeField({\n key: \"borderRadiusGroup\",\n label: \"Border Radius\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n ],\n};\n"],"mappings":"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"}
|