@nozle-js/react 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1009 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +150 -0
- package/dist/index.d.ts +150 -0
- package/dist/index.js +997 -0
- package/dist/index.js.map +1 -0
- package/dist/styles/preset.cjs +77 -0
- package/dist/styles/preset.cjs.map +1 -0
- package/dist/styles/preset.d.cts +18 -0
- package/dist/styles/preset.d.ts +18 -0
- package/dist/styles/preset.js +75 -0
- package/dist/styles/preset.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/store.ts","../src/centrifugo.ts","../src/provider.tsx","../src/hooks/use-can.ts","../src/hooks/use-usage.ts","../src/hooks/use-plan.ts","../src/hooks/use-checkout.ts","../src/hooks/use-subscribe.ts","../src/hooks/use-plans.ts","../src/components/usage-meter.tsx","../src/components/plan-badge.tsx","../src/components/upgrade-prompt.tsx"],"names":["useSyncExternalStore","useState","useCallback","useEffect","jsx","labelStyle","fontFamily","skeletonStyleInjected","ensureKeyframes","dotStyle","jsxs","msgStyle","btnStyle"],"mappings":"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","file":"index.js","sourcesContent":["import type { BillingState } from \"./types\";\n\nexport class BillingStore {\n readonly baseUrl: string;\n readonly apiKey: string;\n readonly customerId: string;\n\n private state: BillingState = {\n entitlements: null,\n credits: null,\n usage: {},\n connectionState: \"connecting\",\n error: null,\n };\n\n private listeners = new Set<() => void>();\n\n constructor(baseUrl: string, apiKey: string, customerId: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n this.customerId = customerId;\n }\n\n getSnapshot = (): BillingState => this.state;\n getServerSnapshot = (): BillingState => this.state;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n };\n\n private emit(): void {\n for (const listener of this.listeners) {\n listener();\n }\n }\n\n setConnectionState(state: BillingState[\"connectionState\"]): void {\n this.state = { ...this.state, connectionState: state };\n this.emit();\n }\n\n setError(error: Error | null): void {\n this.state = { ...this.state, error };\n this.emit();\n }\n\n updateUsage(metric: string, used: number, limit: number, remaining: number): void {\n this.state = {\n ...this.state,\n usage: {\n ...this.state.usage,\n [metric]: { used, limit, remaining },\n },\n };\n this.emit();\n }\n\n async fetchUsage(feature: string): Promise<void> {\n try {\n const res = await fetch(\n `${this.baseUrl}/v1/can?customer_id=${this.customerId}&feature=${feature}`,\n { headers: { Authorization: `Bearer ${this.apiKey}` } }\n );\n if (!res.ok) return;\n const data = await res.json();\n this.updateUsage(feature, data.used, data.limit, data.remaining);\n\n this.state = {\n ...this.state,\n entitlements: {\n plan_slug: \"pro\",\n subscription_status: \"active\",\n features: { [feature]: { enabled: data.allowed } },\n limits: { [feature]: { limit: data.limit, used: data.used, source: \"entitlement\" } },\n },\n };\n this.emit();\n } catch (err) {\n this.state = {\n ...this.state,\n error: err instanceof Error ? err : new Error(String(err)),\n };\n this.emit();\n }\n }\n\n async fetchCheckoutSecret(planCode: string, successUrl?: string): Promise<string> {\n const res = await fetch(`${this.baseUrl}/v1/checkout`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n plan_code: planCode,\n customer_id: this.customerId,\n success_url: successUrl || `${window.location.origin}/checkout/complete?session_id={CHECKOUT_SESSION_ID}`,\n }),\n });\n if (!res.ok) throw new Error(\"Failed to create checkout session\");\n const data = await res.json();\n return data.client_secret;\n }\n\n async fetchPlans(): Promise<Array<{ code: string; name: string; amount_cents: number; amount_currency: string; interval: string }>> {\n const res = await fetch(`${this.baseUrl}/v1/plans`, {\n headers: { Authorization: `Bearer ${this.apiKey}` },\n });\n if (!res.ok) return [];\n const data = await res.json();\n return data.plans || [];\n }\n\n handleEvent(event: { type: string; [key: string]: unknown }): void {\n if (event.type === \"usage.updated\") {\n const metric = event.metric as string;\n const used = event.used as number;\n const limit = event.limit as number;\n const remaining = event.remaining as number;\n this.updateUsage(metric, used, limit, remaining);\n }\n }\n}\n","import { Centrifuge, type Subscription } from \"centrifuge\";\nimport type { BillingStore } from \"./store\";\n\nexport interface CentrifugoConnection {\n disconnect: () => void;\n}\n\nexport function connectCentrifugo(\n store: BillingStore,\n customerId: string,\n wsUrl: string\n): CentrifugoConnection {\n const centrifuge = new Centrifuge(wsUrl, {});\n\n const sub: Subscription = centrifuge.newSubscription(\n `customer:${customerId}`\n );\n\n sub.on(\"publication\", (ctx) => {\n store.handleEvent(\n ctx.data as { type: string; [key: string]: unknown }\n );\n });\n\n sub.on(\"subscribed\", () => {\n store.setConnectionState(\"connected\");\n });\n\n centrifuge.on(\"connected\", () => {\n store.setConnectionState(\"connected\");\n });\n\n centrifuge.on(\"disconnected\", () => {\n store.setConnectionState(\"disconnected\");\n });\n\n sub.subscribe();\n centrifuge.connect();\n store.setConnectionState(\"connecting\");\n\n return {\n disconnect: () => {\n sub.unsubscribe();\n centrifuge.disconnect();\n },\n };\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type ReactNode,\n} from \"react\";\nimport { loadStripe, type Stripe } from \"@stripe/stripe-js\";\nimport { BillingStore } from \"./store\";\nimport { connectCentrifugo, type CentrifugoConnection } from \"./centrifugo\";\n\ninterface BillingContextValue {\n store: BillingStore;\n stripePromise: Promise<Stripe | null> | null;\n}\n\nconst BillingContext = createContext<BillingContextValue | null>(null);\n\ninterface BillingProviderProps {\n apiKey: string;\n customerId: string;\n baseUrl?: string;\n wsUrl?: string;\n stripeKey?: string;\n features?: string[];\n children: ReactNode;\n}\n\nexport function BillingProvider({\n apiKey,\n customerId,\n baseUrl = \"http://localhost:8080\",\n wsUrl = \"ws://localhost:8001/connection/websocket\",\n stripeKey,\n features = [],\n children,\n}: BillingProviderProps) {\n const storeRef = useRef<BillingStore>(null!);\n\n if (!storeRef.current) {\n storeRef.current = new BillingStore(baseUrl, apiKey, customerId);\n }\n\n const stripePromise = useMemo(\n () => (stripeKey ? loadStripe(stripeKey) : null),\n [stripeKey]\n );\n\n useEffect(() => {\n const store = storeRef.current!;\n\n for (const feature of features) {\n store.fetchUsage(feature);\n }\n\n const connection: CentrifugoConnection = connectCentrifugo(\n store,\n customerId,\n wsUrl\n );\n\n return () => {\n connection.disconnect();\n };\n }, [apiKey, customerId, baseUrl, wsUrl, features]);\n\n return (\n <BillingContext.Provider value={{ store: storeRef.current, stripePromise }}>\n {children}\n </BillingContext.Provider>\n );\n}\n\nexport function useBillingContext(): BillingContextValue {\n const ctx = useContext(BillingContext);\n if (!ctx) {\n throw new Error(\"useBillingContext must be used within a BillingProvider\");\n }\n return ctx;\n}\n","import { useSyncExternalStore } from \"react\";\nimport { useBillingContext } from \"../provider\";\nimport type { UseCanResult } from \"../types\";\n\nexport function useCan(feature: string): UseCanResult {\n const { store } = useBillingContext();\n const state = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot\n );\n\n if (state.error) {\n return { allowed: false, isLoading: false, error: state.error };\n }\n if (state.entitlements === null) {\n return { allowed: false, isLoading: true, error: null };\n }\n\n const featureState = state.entitlements.features[feature];\n return {\n allowed: featureState?.enabled ?? false,\n isLoading: false,\n error: null,\n };\n}\n","import { useSyncExternalStore } from \"react\";\nimport { useBillingContext } from \"../provider\";\nimport type { UseUsageResult } from \"../types\";\n\nexport function useUsage(metric: string): UseUsageResult {\n const { store } = useBillingContext();\n const state = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot\n );\n\n if (state.error) {\n return { data: null, isLoading: false, error: state.error };\n }\n if (state.entitlements === null) {\n return { data: null, isLoading: true, error: null };\n }\n\n const usage = state.usage[metric] ?? null;\n return { data: usage, isLoading: false, error: null };\n}\n","import { useSyncExternalStore } from \"react\";\nimport { useBillingContext } from \"../provider\";\nimport type { UsePlanResult } from \"../types\";\n\nexport function usePlan(): UsePlanResult {\n const { store } = useBillingContext();\n const state = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot\n );\n\n if (state.error) {\n return { data: null, isLoading: false, error: state.error };\n }\n if (state.entitlements === null) {\n return { data: null, isLoading: true, error: null };\n }\n\n return {\n data: {\n plan_slug: state.entitlements.plan_slug,\n subscription_status: state.entitlements.subscription_status,\n },\n isLoading: false,\n error: null,\n };\n}\n","import { useCallback, useState } from \"react\";\nimport { useBillingContext } from \"../provider\";\n\nexport interface UseCheckoutResult {\n fetchClientSecret: (planCode: string, successUrl?: string) => Promise<string>;\n stripePromise: ReturnType<typeof import(\"@stripe/stripe-js\").loadStripe> | null;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useCheckout(): UseCheckoutResult {\n const { store, stripePromise } = useBillingContext();\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchClientSecret = useCallback(\n async (planCode: string, successUrl?: string): Promise<string> => {\n setIsLoading(true);\n setError(null);\n try {\n return await store.fetchCheckoutSecret(planCode, successUrl);\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setIsLoading(false);\n }\n },\n [store]\n );\n\n return { fetchClientSecret, stripePromise, isLoading, error };\n}\n","import { useCallback, useState } from \"react\";\nimport { useBillingContext } from \"../provider\";\n\nexport interface UseSubscribeResult {\n subscribe: (planCode: string) => Promise<any>;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useSubscribe(): UseSubscribeResult {\n const { store } = useBillingContext();\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const subscribe = useCallback(\n async (planCode: string) => {\n setIsLoading(true);\n setError(null);\n try {\n const res = await fetch(`${store.baseUrl}/v1/subscribe`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${store.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n plan_code: planCode,\n customer_id: store.customerId,\n }),\n });\n if (!res.ok) throw new Error(\"Failed to create subscription\");\n return await res.json();\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setIsLoading(false);\n }\n },\n [store]\n );\n\n return { subscribe, isLoading, error };\n}\n","import { useEffect, useState } from \"react\";\nimport { useBillingContext } from \"../provider\";\n\nexport interface Plan {\n code: string;\n name: string;\n amount_cents: number;\n amount_currency: string;\n interval: string;\n}\n\nexport function usePlans() {\n const { store } = useBillingContext();\n const [plans, setPlans] = useState<Plan[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n store\n .fetchPlans()\n .then(setPlans)\n .finally(() => setIsLoading(false));\n }, [store]);\n\n return { plans, isLoading };\n}\n","import { useUsage } from \"../hooks/use-usage\";\nimport type { CSSProperties } from \"react\";\nimport type { UsageMeterProps } from \"./types\";\n\nconst fontFamily =\n 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif';\n\nconst levelColors: Record<string, { fg: string; bg: string; trackBg: string }> =\n {\n normal: {\n fg: \"#6366f1\",\n bg: \"rgba(99, 102, 241, 0.08)\",\n trackBg: \"#e5e7eb\",\n },\n warning: {\n fg: \"#f59e0b\",\n bg: \"rgba(245, 158, 11, 0.08)\",\n trackBg: \"#e5e7eb\",\n },\n critical: {\n fg: \"#ef4444\",\n bg: \"rgba(239, 68, 68, 0.08)\",\n trackBg: \"#e5e7eb\",\n },\n };\n\nlet skeletonStyleInjected = false;\nfunction ensureKeyframes() {\n if (skeletonStyleInjected || typeof document === \"undefined\") return;\n const sheet = document.createElement(\"style\");\n sheet.textContent = `@keyframes nozle-pulse{0%,100%{opacity:1}50%{opacity:.4}}`;\n document.head.appendChild(sheet);\n skeletonStyleInjected = true;\n}\n\nexport function UsageMeter({\n metric,\n variant = \"bar\",\n className,\n style,\n ...props\n}: UsageMeterProps) {\n const { data, isLoading, error } = useUsage(metric);\n\n if (isLoading) {\n ensureKeyframes();\n if (variant === \"minimal\") {\n return (\n <span\n data-nozle=\"usage-meter\"\n data-variant=\"minimal\"\n className={className}\n style={{\n display: \"inline-block\",\n width: 80,\n height: 16,\n borderRadius: 4,\n background: \"#e5e7eb\",\n animation: \"nozle-pulse 1.5s ease-in-out infinite\",\n ...style,\n }}\n {...props}\n />\n );\n }\n if (variant === \"ring\") {\n return (\n <div\n data-nozle=\"usage-meter\"\n data-variant=\"ring\"\n className={className}\n style={{\n width: 96,\n height: 96,\n borderRadius: \"50%\",\n background: \"#e5e7eb\",\n animation: \"nozle-pulse 1.5s ease-in-out infinite\",\n ...style,\n }}\n {...props}\n />\n );\n }\n return (\n <div\n data-nozle=\"usage-meter\"\n data-variant=\"bar\"\n className={className}\n style={{\n maxWidth: 360,\n fontFamily,\n ...style,\n }}\n {...props}\n >\n <div\n style={{\n height: 8,\n borderRadius: 4,\n background: \"#e5e7eb\",\n animation: \"nozle-pulse 1.5s ease-in-out infinite\",\n }}\n />\n </div>\n );\n }\n\n if (error || !data) return null;\n\n const percent =\n data.limit > 0 ? Math.round((data.used / data.limit) * 100) : 0;\n const level =\n percent >= 90 ? \"critical\" : percent >= 75 ? \"warning\" : \"normal\";\n const colors = levelColors[level];\n\n if (variant === \"minimal\") {\n const minimalStyle: CSSProperties = {\n fontFamily,\n fontSize: 13,\n fontWeight: 500,\n color: colors.fg,\n background: colors.bg,\n padding: \"3px 8px\",\n borderRadius: 6,\n whiteSpace: \"nowrap\",\n ...style,\n };\n return (\n <span\n data-nozle=\"usage-meter\"\n data-variant=\"minimal\"\n data-level={level}\n className={className}\n style={minimalStyle}\n {...props}\n >\n {data.used.toLocaleString()}/{data.limit.toLocaleString()}\n </span>\n );\n }\n\n if (variant === \"ring\") {\n const size = 96;\n const strokeWidth = 7;\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percent / 100) * circumference;\n\n const containerStyle: CSSProperties = {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: size,\n height: size,\n fontFamily,\n ...style,\n };\n\n const labelStyle: CSSProperties = {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 700,\n fontSize: 20,\n lineHeight: 1,\n color: colors.fg,\n };\n\n return (\n <div\n data-nozle=\"usage-meter\"\n data-variant=\"ring\"\n data-level={level}\n className={className}\n style={containerStyle}\n {...props}\n >\n <svg\n viewBox={`0 0 ${size} ${size}`}\n width={size}\n height={size}\n style={{ display: \"block\", transform: \"rotate(-90deg)\" }}\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke={colors.trackBg}\n strokeWidth={strokeWidth}\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke={colors.fg}\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n style={{ transition: \"stroke-dashoffset 0.4s ease\" }}\n />\n </svg>\n <span data-nozle=\"usage-meter-label\" style={labelStyle}>\n <span>{percent}%</span>\n <span\n style={{\n fontSize: 10,\n fontWeight: 400,\n color: \"#6b7280\",\n marginTop: 2,\n }}\n >\n used\n </span>\n </span>\n </div>\n );\n }\n\n const cardStyle: CSSProperties = {\n fontFamily,\n maxWidth: 360,\n background: \"#ffffff\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 12,\n padding: \"16px 20px\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.02)\",\n ...style,\n };\n\n const headerStyle: CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"baseline\",\n marginBottom: 10,\n };\n\n const labelStyle: CSSProperties = {\n fontSize: 13,\n fontWeight: 500,\n color: \"#374151\",\n };\n\n const valueStyle: CSSProperties = {\n fontSize: 13,\n fontWeight: 600,\n color: colors.fg,\n };\n\n const trackStyle: CSSProperties = {\n height: 8,\n borderRadius: 4,\n background: colors.trackBg,\n overflow: \"hidden\",\n };\n\n const fillStyle: CSSProperties = {\n height: \"100%\",\n borderRadius: 4,\n background: colors.fg,\n width: `${Math.min(percent, 100)}%`,\n transition: \"width 0.4s ease\",\n };\n\n return (\n <div\n data-nozle=\"usage-meter\"\n data-variant=\"bar\"\n data-level={level}\n className={className}\n style={cardStyle}\n {...props}\n >\n <div style={headerStyle}>\n <span data-nozle=\"usage-meter-label\" style={labelStyle}>\n {data.used.toLocaleString()} / {data.limit.toLocaleString()}\n </span>\n <span style={valueStyle}>{percent}%</span>\n </div>\n <div data-nozle=\"usage-meter-track\" style={trackStyle}>\n <div data-nozle=\"usage-meter-fill\" style={fillStyle} />\n </div>\n </div>\n );\n}\n","import { usePlan } from \"../hooks/use-plan\";\nimport type { CSSProperties } from \"react\";\nimport type { PlanBadgeProps } from \"./types\";\n\nconst fontFamily =\n 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif';\n\nconst statusColorMap: Record<string, { dot: string; bg: string; text: string }> = {\n active: { dot: \"#22c55e\", bg: \"rgba(34, 197, 94, 0.08)\", text: \"#15803d\" },\n trialing: { dot: \"#6366f1\", bg: \"rgba(99, 102, 241, 0.08)\", text: \"#4f46e5\" },\n past_due: { dot: \"#f59e0b\", bg: \"rgba(245, 158, 11, 0.08)\", text: \"#b45309\" },\n canceled: { dot: \"#6b7280\", bg: \"rgba(107, 114, 128, 0.08)\", text: \"#4b5563\" },\n unpaid: { dot: \"#ef4444\", bg: \"rgba(239, 68, 68, 0.08)\", text: \"#dc2626\" },\n incomplete: { dot: \"#f59e0b\", bg: \"rgba(245, 158, 11, 0.08)\", text: \"#b45309\" },\n};\nconst defaultStatusColors = { dot: \"#6366f1\", bg: \"rgba(99, 102, 241, 0.08)\", text: \"#4f46e5\" };\n\nfunction getStatusColors(status: string) {\n return statusColorMap[status] ?? defaultStatusColors;\n}\n\nlet skeletonStyleInjected = false;\nfunction ensureKeyframes() {\n if (skeletonStyleInjected || typeof document === \"undefined\") return;\n const sheet = document.createElement(\"style\");\n sheet.textContent = `@keyframes nozle-pulse{0%,100%{opacity:1}50%{opacity:.4}}`;\n document.head.appendChild(sheet);\n skeletonStyleInjected = true;\n}\n\nexport function PlanBadge({\n variant = \"pill\",\n className,\n style,\n ...props\n}: PlanBadgeProps) {\n const { data, isLoading, error } = usePlan();\n\n if (isLoading) {\n ensureKeyframes();\n if (variant === \"icon\") {\n return (\n <span\n data-nozle=\"plan-badge\"\n data-variant=\"icon\"\n className={className}\n style={{\n display: \"inline-block\",\n width: 32,\n height: 32,\n borderRadius: \"50%\",\n background: \"#e5e7eb\",\n animation: \"nozle-pulse 1.5s ease-in-out infinite\",\n ...style,\n }}\n {...props}\n />\n );\n }\n return (\n <span\n data-nozle=\"plan-badge\"\n data-variant={variant}\n className={className}\n style={{\n display: \"inline-block\",\n width: 72,\n height: 22,\n borderRadius: variant === \"pill\" ? 999 : 4,\n background: \"#e5e7eb\",\n animation: \"nozle-pulse 1.5s ease-in-out infinite\",\n ...style,\n }}\n {...props}\n />\n );\n }\n\n if (error || !data) return null;\n\n const statusLabel = data.subscription_status.replace(/_/g, \" \");\n const colors = getStatusColors(data.subscription_status);\n const planName = data.plan_slug;\n\n if (variant === \"text\") {\n const textStyle: CSSProperties = {\n fontFamily,\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontSize: 14,\n fontWeight: 500,\n color: \"#111827\",\n ...style,\n };\n const dotStyle: CSSProperties = {\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: colors.dot,\n flexShrink: 0,\n };\n return (\n <span\n data-nozle=\"plan-badge\"\n data-variant=\"text\"\n data-status={data.subscription_status}\n className={className}\n style={textStyle}\n {...props}\n >\n <span style={dotStyle} aria-hidden=\"true\" />\n {planName}\n </span>\n );\n }\n\n if (variant === \"icon\") {\n const iconStyle: CSSProperties = {\n fontFamily,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 32,\n height: 32,\n borderRadius: \"50%\",\n background: colors.bg,\n color: colors.text,\n fontSize: 14,\n fontWeight: 700,\n lineHeight: 1,\n flexShrink: 0,\n ...style,\n };\n return (\n <span\n data-nozle=\"plan-badge\"\n data-variant=\"icon\"\n data-status={data.subscription_status}\n className={className}\n style={iconStyle}\n title={`${planName} (${statusLabel})`}\n {...props}\n >\n {planName.charAt(0).toUpperCase()}\n </span>\n );\n }\n\n const pillStyle: CSSProperties = {\n fontFamily,\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontSize: 12,\n fontWeight: 600,\n lineHeight: 1.4,\n color: colors.text,\n background: colors.bg,\n padding: \"4px 12px\",\n borderRadius: 999,\n whiteSpace: \"nowrap\",\n ...style,\n };\n const dotStyle: CSSProperties = {\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: colors.dot,\n flexShrink: 0,\n };\n\n return (\n <span\n data-nozle=\"plan-badge\"\n data-variant=\"pill\"\n data-status={data.subscription_status}\n className={className}\n style={pillStyle}\n {...props}\n >\n <span style={dotStyle} aria-hidden=\"true\" />\n {planName}\n </span>\n );\n}\n","import { useCan } from \"../hooks/use-can\";\nimport type { CSSProperties } from \"react\";\nimport type { UpgradePromptProps } from \"./types\";\n\nconst fontFamily =\n 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif';\n\nconst primaryColor = \"#6366f1\";\nconst primaryHover = \"#4f46e5\";\n\nexport function UpgradePrompt({\n feature,\n variant = \"card\",\n upgradeUrl = \"/upgrade\",\n message = \"Upgrade your plan to unlock this feature\",\n className,\n style,\n ...props\n}: UpgradePromptProps) {\n const { allowed, isLoading } = useCan(feature ?? \"\");\n\n if (isLoading || allowed || !feature) return null;\n\n if (variant === \"inline\") {\n const inlineStyle: CSSProperties = {\n fontFamily,\n fontSize: 13,\n color: \"#6b7280\",\n ...style,\n };\n const linkStyle: CSSProperties = {\n color: primaryColor,\n fontWeight: 600,\n textDecoration: \"none\",\n marginLeft: 4,\n };\n return (\n <span\n data-nozle=\"upgrade-prompt\"\n data-variant=\"inline\"\n className={className}\n style={inlineStyle}\n {...props}\n >\n {message}\n <a\n href={upgradeUrl}\n data-nozle=\"upgrade-prompt-link\"\n style={linkStyle}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLAnchorElement).style.textDecoration = \"underline\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLAnchorElement).style.textDecoration = \"none\";\n }}\n >\n Upgrade\n </a>\n </span>\n );\n }\n\n if (variant === \"banner\") {\n const bannerStyle: CSSProperties = {\n fontFamily,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 16,\n background: \"rgba(99, 102, 241, 0.06)\",\n border: \"1px solid rgba(99, 102, 241, 0.15)\",\n borderRadius: 10,\n padding: \"12px 20px\",\n ...style,\n };\n const msgStyle: CSSProperties = {\n fontSize: 14,\n fontWeight: 500,\n color: \"#374151\",\n flex: 1,\n };\n const btnStyle: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 13,\n fontWeight: 600,\n color: \"#ffffff\",\n background: primaryColor,\n border: \"none\",\n borderRadius: 8,\n padding: \"8px 18px\",\n textDecoration: \"none\",\n cursor: \"pointer\",\n whiteSpace: \"nowrap\",\n transition: \"background 0.15s ease\",\n };\n return (\n <div\n data-nozle=\"upgrade-prompt\"\n data-variant=\"banner\"\n className={className}\n style={bannerStyle}\n {...props}\n >\n <span data-nozle=\"upgrade-prompt-message\" style={msgStyle}>\n {message}\n </span>\n <a\n href={upgradeUrl}\n data-nozle=\"upgrade-prompt-action\"\n style={btnStyle}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLAnchorElement).style.background = primaryHover;\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLAnchorElement).style.background = primaryColor;\n }}\n >\n Upgrade\n </a>\n </div>\n );\n }\n\n const cardStyle: CSSProperties = {\n fontFamily,\n maxWidth: 400,\n background: \"#ffffff\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 16,\n padding: 24,\n boxShadow: \"0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.02)\",\n textAlign: \"center\",\n ...style,\n };\n\n const iconWrapStyle: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 48,\n height: 48,\n borderRadius: 12,\n background: \"rgba(99, 102, 241, 0.08)\",\n marginBottom: 16,\n };\n\n const msgStyle: CSSProperties = {\n fontSize: 15,\n fontWeight: 500,\n color: \"#374151\",\n lineHeight: 1.5,\n margin: 0,\n marginBottom: 20,\n };\n\n const btnStyle: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 14,\n fontWeight: 600,\n color: \"#ffffff\",\n background: primaryColor,\n border: \"none\",\n borderRadius: 10,\n padding: \"10px 24px\",\n textDecoration: \"none\",\n cursor: \"pointer\",\n transition: \"background 0.15s ease\",\n width: \"100%\",\n };\n\n return (\n <div\n data-nozle=\"upgrade-prompt\"\n data-variant=\"card\"\n className={className}\n style={cardStyle}\n {...props}\n >\n <div data-nozle=\"upgrade-prompt-content\">\n <div style={iconWrapStyle}>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={primaryColor}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\" />\n </svg>\n </div>\n <p data-nozle=\"upgrade-prompt-message\" style={msgStyle}>\n {message}\n </p>\n </div>\n <a\n href={upgradeUrl}\n data-nozle=\"upgrade-prompt-action\"\n style={btnStyle}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLAnchorElement).style.background = primaryHover;\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLAnchorElement).style.background = primaryColor;\n }}\n >\n Upgrade Now\n </a>\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/styles/preset.ts
|
|
4
|
+
var nozlePreset = {
|
|
5
|
+
theme: {
|
|
6
|
+
extend: {
|
|
7
|
+
colors: {
|
|
8
|
+
nozle: {
|
|
9
|
+
normal: "#22c55e",
|
|
10
|
+
warning: "#f59e0b",
|
|
11
|
+
critical: "#ef4444"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
plugins: [
|
|
17
|
+
function nozlePlugin({
|
|
18
|
+
addComponents
|
|
19
|
+
}) {
|
|
20
|
+
addComponents({
|
|
21
|
+
'[data-nozle="usage-meter"][data-variant="bar"]': {
|
|
22
|
+
display: "flex",
|
|
23
|
+
flexDirection: "column",
|
|
24
|
+
gap: "0.25rem"
|
|
25
|
+
},
|
|
26
|
+
'[data-nozle="usage-meter-track"]': {
|
|
27
|
+
height: "0.5rem",
|
|
28
|
+
borderRadius: "9999px",
|
|
29
|
+
backgroundColor: "#e5e7eb",
|
|
30
|
+
overflow: "hidden"
|
|
31
|
+
},
|
|
32
|
+
'[data-nozle="usage-meter-fill"]': {
|
|
33
|
+
height: "100%",
|
|
34
|
+
borderRadius: "9999px",
|
|
35
|
+
transition: "width 300ms ease"
|
|
36
|
+
},
|
|
37
|
+
'[data-nozle="usage-meter"][data-level="normal"] [data-nozle="usage-meter-fill"]': {
|
|
38
|
+
backgroundColor: "#22c55e"
|
|
39
|
+
},
|
|
40
|
+
'[data-nozle="usage-meter"][data-level="warning"] [data-nozle="usage-meter-fill"]': {
|
|
41
|
+
backgroundColor: "#f59e0b"
|
|
42
|
+
},
|
|
43
|
+
'[data-nozle="usage-meter"][data-level="critical"] [data-nozle="usage-meter-fill"]': {
|
|
44
|
+
backgroundColor: "#ef4444"
|
|
45
|
+
},
|
|
46
|
+
'[data-nozle="plan-badge"][data-variant="pill"]': {
|
|
47
|
+
display: "inline-flex",
|
|
48
|
+
alignItems: "center",
|
|
49
|
+
padding: "0.125rem 0.5rem",
|
|
50
|
+
borderRadius: "9999px",
|
|
51
|
+
fontSize: "0.75rem",
|
|
52
|
+
fontWeight: "500",
|
|
53
|
+
backgroundColor: "#e0f2fe",
|
|
54
|
+
color: "#0369a1"
|
|
55
|
+
},
|
|
56
|
+
'[data-nozle="upgrade-prompt"][data-variant="card"]': {
|
|
57
|
+
padding: "1rem",
|
|
58
|
+
borderRadius: "0.5rem",
|
|
59
|
+
border: "1px solid #e5e7eb",
|
|
60
|
+
backgroundColor: "#fefce8"
|
|
61
|
+
},
|
|
62
|
+
'[data-nozle="upgrade-prompt"][data-variant="banner"]': {
|
|
63
|
+
display: "flex",
|
|
64
|
+
alignItems: "center",
|
|
65
|
+
justifyContent: "space-between",
|
|
66
|
+
padding: "0.75rem 1rem",
|
|
67
|
+
backgroundColor: "#fef3c7",
|
|
68
|
+
borderRadius: "0.375rem"
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
exports.nozlePreset = nozlePreset;
|
|
76
|
+
//# sourceMappingURL=preset.cjs.map
|
|
77
|
+
//# sourceMappingURL=preset.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/styles/preset.ts"],"names":[],"mappings":";;;AAAO,IAAM,WAAA,GAAc;AAAA,EACzB,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS,SAAA;AAAA,UACT,QAAA,EAAU;AAAA;AACZ;AACF;AACF,GACF;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAS,WAAA,CAAY;AAAA,MACnB;AAAA,KACF,EAIG;AACD,MAAA,aAAA,CAAc;AAAA,QACZ,gDAAA,EAAkD;AAAA,UAChD,OAAA,EAAS,MAAA;AAAA,UACT,aAAA,EAAe,QAAA;AAAA,UACf,GAAA,EAAK;AAAA,SACP;AAAA,QACA,kCAAA,EAAoC;AAAA,UAClC,MAAA,EAAQ,QAAA;AAAA,UACR,YAAA,EAAc,QAAA;AAAA,UACd,eAAA,EAAiB,SAAA;AAAA,UACjB,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,iCAAA,EAAmC;AAAA,UACjC,MAAA,EAAQ,MAAA;AAAA,UACR,YAAA,EAAc,QAAA;AAAA,UACd,UAAA,EAAY;AAAA,SACd;AAAA,QACA,iFAAA,EACE;AAAA,UACE,eAAA,EAAiB;AAAA,SACnB;AAAA,QACF,kFAAA,EACE;AAAA,UACE,eAAA,EAAiB;AAAA,SACnB;AAAA,QACF,mFAAA,EACE;AAAA,UACE,eAAA,EAAiB;AAAA,SACnB;AAAA,QACF,gDAAA,EAAkD;AAAA,UAChD,OAAA,EAAS,aAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,OAAA,EAAS,iBAAA;AAAA,UACT,YAAA,EAAc,QAAA;AAAA,UACd,QAAA,EAAU,SAAA;AAAA,UACV,UAAA,EAAY,KAAA;AAAA,UACZ,eAAA,EAAiB,SAAA;AAAA,UACjB,KAAA,EAAO;AAAA,SACT;AAAA,QACA,oDAAA,EAAsD;AAAA,UACpD,OAAA,EAAS,MAAA;AAAA,UACT,YAAA,EAAc,QAAA;AAAA,UACd,MAAA,EAAQ,mBAAA;AAAA,UACR,eAAA,EAAiB;AAAA,SACnB;AAAA,QACA,sDAAA,EAAwD;AAAA,UACtD,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,eAAA;AAAA,UAChB,OAAA,EAAS,cAAA;AAAA,UACT,eAAA,EAAiB,SAAA;AAAA,UACjB,YAAA,EAAc;AAAA;AAChB,OACD,CAAA;AAAA,IACH;AAAA;AAEJ","file":"preset.cjs","sourcesContent":["export const nozlePreset = {\n theme: {\n extend: {\n colors: {\n nozle: {\n normal: \"#22c55e\",\n warning: \"#f59e0b\",\n critical: \"#ef4444\",\n },\n },\n },\n },\n plugins: [\n function nozlePlugin({\n addComponents,\n }: {\n addComponents: (\n components: Record<string, Record<string, string>>\n ) => void;\n }) {\n addComponents({\n '[data-nozle=\"usage-meter\"][data-variant=\"bar\"]': {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.25rem\",\n },\n '[data-nozle=\"usage-meter-track\"]': {\n height: \"0.5rem\",\n borderRadius: \"9999px\",\n backgroundColor: \"#e5e7eb\",\n overflow: \"hidden\",\n },\n '[data-nozle=\"usage-meter-fill\"]': {\n height: \"100%\",\n borderRadius: \"9999px\",\n transition: \"width 300ms ease\",\n },\n '[data-nozle=\"usage-meter\"][data-level=\"normal\"] [data-nozle=\"usage-meter-fill\"]':\n {\n backgroundColor: \"#22c55e\",\n },\n '[data-nozle=\"usage-meter\"][data-level=\"warning\"] [data-nozle=\"usage-meter-fill\"]':\n {\n backgroundColor: \"#f59e0b\",\n },\n '[data-nozle=\"usage-meter\"][data-level=\"critical\"] [data-nozle=\"usage-meter-fill\"]':\n {\n backgroundColor: \"#ef4444\",\n },\n '[data-nozle=\"plan-badge\"][data-variant=\"pill\"]': {\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"0.125rem 0.5rem\",\n borderRadius: \"9999px\",\n fontSize: \"0.75rem\",\n fontWeight: \"500\",\n backgroundColor: \"#e0f2fe\",\n color: \"#0369a1\",\n },\n '[data-nozle=\"upgrade-prompt\"][data-variant=\"card\"]': {\n padding: \"1rem\",\n borderRadius: \"0.5rem\",\n border: \"1px solid #e5e7eb\",\n backgroundColor: \"#fefce8\",\n },\n '[data-nozle=\"upgrade-prompt\"][data-variant=\"banner\"]': {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"0.75rem 1rem\",\n backgroundColor: \"#fef3c7\",\n borderRadius: \"0.375rem\",\n },\n });\n },\n ],\n};\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const nozlePreset: {
|
|
2
|
+
theme: {
|
|
3
|
+
extend: {
|
|
4
|
+
colors: {
|
|
5
|
+
nozle: {
|
|
6
|
+
normal: string;
|
|
7
|
+
warning: string;
|
|
8
|
+
critical: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
plugins: (({ addComponents, }: {
|
|
14
|
+
addComponents: (components: Record<string, Record<string, string>>) => void;
|
|
15
|
+
}) => void)[];
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { nozlePreset };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const nozlePreset: {
|
|
2
|
+
theme: {
|
|
3
|
+
extend: {
|
|
4
|
+
colors: {
|
|
5
|
+
nozle: {
|
|
6
|
+
normal: string;
|
|
7
|
+
warning: string;
|
|
8
|
+
critical: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
plugins: (({ addComponents, }: {
|
|
14
|
+
addComponents: (components: Record<string, Record<string, string>>) => void;
|
|
15
|
+
}) => void)[];
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { nozlePreset };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// src/styles/preset.ts
|
|
2
|
+
var nozlePreset = {
|
|
3
|
+
theme: {
|
|
4
|
+
extend: {
|
|
5
|
+
colors: {
|
|
6
|
+
nozle: {
|
|
7
|
+
normal: "#22c55e",
|
|
8
|
+
warning: "#f59e0b",
|
|
9
|
+
critical: "#ef4444"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
plugins: [
|
|
15
|
+
function nozlePlugin({
|
|
16
|
+
addComponents
|
|
17
|
+
}) {
|
|
18
|
+
addComponents({
|
|
19
|
+
'[data-nozle="usage-meter"][data-variant="bar"]': {
|
|
20
|
+
display: "flex",
|
|
21
|
+
flexDirection: "column",
|
|
22
|
+
gap: "0.25rem"
|
|
23
|
+
},
|
|
24
|
+
'[data-nozle="usage-meter-track"]': {
|
|
25
|
+
height: "0.5rem",
|
|
26
|
+
borderRadius: "9999px",
|
|
27
|
+
backgroundColor: "#e5e7eb",
|
|
28
|
+
overflow: "hidden"
|
|
29
|
+
},
|
|
30
|
+
'[data-nozle="usage-meter-fill"]': {
|
|
31
|
+
height: "100%",
|
|
32
|
+
borderRadius: "9999px",
|
|
33
|
+
transition: "width 300ms ease"
|
|
34
|
+
},
|
|
35
|
+
'[data-nozle="usage-meter"][data-level="normal"] [data-nozle="usage-meter-fill"]': {
|
|
36
|
+
backgroundColor: "#22c55e"
|
|
37
|
+
},
|
|
38
|
+
'[data-nozle="usage-meter"][data-level="warning"] [data-nozle="usage-meter-fill"]': {
|
|
39
|
+
backgroundColor: "#f59e0b"
|
|
40
|
+
},
|
|
41
|
+
'[data-nozle="usage-meter"][data-level="critical"] [data-nozle="usage-meter-fill"]': {
|
|
42
|
+
backgroundColor: "#ef4444"
|
|
43
|
+
},
|
|
44
|
+
'[data-nozle="plan-badge"][data-variant="pill"]': {
|
|
45
|
+
display: "inline-flex",
|
|
46
|
+
alignItems: "center",
|
|
47
|
+
padding: "0.125rem 0.5rem",
|
|
48
|
+
borderRadius: "9999px",
|
|
49
|
+
fontSize: "0.75rem",
|
|
50
|
+
fontWeight: "500",
|
|
51
|
+
backgroundColor: "#e0f2fe",
|
|
52
|
+
color: "#0369a1"
|
|
53
|
+
},
|
|
54
|
+
'[data-nozle="upgrade-prompt"][data-variant="card"]': {
|
|
55
|
+
padding: "1rem",
|
|
56
|
+
borderRadius: "0.5rem",
|
|
57
|
+
border: "1px solid #e5e7eb",
|
|
58
|
+
backgroundColor: "#fefce8"
|
|
59
|
+
},
|
|
60
|
+
'[data-nozle="upgrade-prompt"][data-variant="banner"]': {
|
|
61
|
+
display: "flex",
|
|
62
|
+
alignItems: "center",
|
|
63
|
+
justifyContent: "space-between",
|
|
64
|
+
padding: "0.75rem 1rem",
|
|
65
|
+
backgroundColor: "#fef3c7",
|
|
66
|
+
borderRadius: "0.375rem"
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export { nozlePreset };
|
|
74
|
+
//# sourceMappingURL=preset.js.map
|
|
75
|
+
//# sourceMappingURL=preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/styles/preset.ts"],"names":[],"mappings":";AAAO,IAAM,WAAA,GAAc;AAAA,EACzB,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS,SAAA;AAAA,UACT,QAAA,EAAU;AAAA;AACZ;AACF;AACF,GACF;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAS,WAAA,CAAY;AAAA,MACnB;AAAA,KACF,EAIG;AACD,MAAA,aAAA,CAAc;AAAA,QACZ,gDAAA,EAAkD;AAAA,UAChD,OAAA,EAAS,MAAA;AAAA,UACT,aAAA,EAAe,QAAA;AAAA,UACf,GAAA,EAAK;AAAA,SACP;AAAA,QACA,kCAAA,EAAoC;AAAA,UAClC,MAAA,EAAQ,QAAA;AAAA,UACR,YAAA,EAAc,QAAA;AAAA,UACd,eAAA,EAAiB,SAAA;AAAA,UACjB,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,iCAAA,EAAmC;AAAA,UACjC,MAAA,EAAQ,MAAA;AAAA,UACR,YAAA,EAAc,QAAA;AAAA,UACd,UAAA,EAAY;AAAA,SACd;AAAA,QACA,iFAAA,EACE;AAAA,UACE,eAAA,EAAiB;AAAA,SACnB;AAAA,QACF,kFAAA,EACE;AAAA,UACE,eAAA,EAAiB;AAAA,SACnB;AAAA,QACF,mFAAA,EACE;AAAA,UACE,eAAA,EAAiB;AAAA,SACnB;AAAA,QACF,gDAAA,EAAkD;AAAA,UAChD,OAAA,EAAS,aAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,OAAA,EAAS,iBAAA;AAAA,UACT,YAAA,EAAc,QAAA;AAAA,UACd,QAAA,EAAU,SAAA;AAAA,UACV,UAAA,EAAY,KAAA;AAAA,UACZ,eAAA,EAAiB,SAAA;AAAA,UACjB,KAAA,EAAO;AAAA,SACT;AAAA,QACA,oDAAA,EAAsD;AAAA,UACpD,OAAA,EAAS,MAAA;AAAA,UACT,YAAA,EAAc,QAAA;AAAA,UACd,MAAA,EAAQ,mBAAA;AAAA,UACR,eAAA,EAAiB;AAAA,SACnB;AAAA,QACA,sDAAA,EAAwD;AAAA,UACtD,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,eAAA;AAAA,UAChB,OAAA,EAAS,cAAA;AAAA,UACT,eAAA,EAAiB,SAAA;AAAA,UACjB,YAAA,EAAc;AAAA;AAChB,OACD,CAAA;AAAA,IACH;AAAA;AAEJ","file":"preset.js","sourcesContent":["export const nozlePreset = {\n theme: {\n extend: {\n colors: {\n nozle: {\n normal: \"#22c55e\",\n warning: \"#f59e0b\",\n critical: \"#ef4444\",\n },\n },\n },\n },\n plugins: [\n function nozlePlugin({\n addComponents,\n }: {\n addComponents: (\n components: Record<string, Record<string, string>>\n ) => void;\n }) {\n addComponents({\n '[data-nozle=\"usage-meter\"][data-variant=\"bar\"]': {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.25rem\",\n },\n '[data-nozle=\"usage-meter-track\"]': {\n height: \"0.5rem\",\n borderRadius: \"9999px\",\n backgroundColor: \"#e5e7eb\",\n overflow: \"hidden\",\n },\n '[data-nozle=\"usage-meter-fill\"]': {\n height: \"100%\",\n borderRadius: \"9999px\",\n transition: \"width 300ms ease\",\n },\n '[data-nozle=\"usage-meter\"][data-level=\"normal\"] [data-nozle=\"usage-meter-fill\"]':\n {\n backgroundColor: \"#22c55e\",\n },\n '[data-nozle=\"usage-meter\"][data-level=\"warning\"] [data-nozle=\"usage-meter-fill\"]':\n {\n backgroundColor: \"#f59e0b\",\n },\n '[data-nozle=\"usage-meter\"][data-level=\"critical\"] [data-nozle=\"usage-meter-fill\"]':\n {\n backgroundColor: \"#ef4444\",\n },\n '[data-nozle=\"plan-badge\"][data-variant=\"pill\"]': {\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"0.125rem 0.5rem\",\n borderRadius: \"9999px\",\n fontSize: \"0.75rem\",\n fontWeight: \"500\",\n backgroundColor: \"#e0f2fe\",\n color: \"#0369a1\",\n },\n '[data-nozle=\"upgrade-prompt\"][data-variant=\"card\"]': {\n padding: \"1rem\",\n borderRadius: \"0.5rem\",\n border: \"1px solid #e5e7eb\",\n backgroundColor: \"#fefce8\",\n },\n '[data-nozle=\"upgrade-prompt\"][data-variant=\"banner\"]': {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"0.75rem 1rem\",\n backgroundColor: \"#fef3c7\",\n borderRadius: \"0.375rem\",\n },\n });\n },\n ],\n};\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nozle-js/react",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.cjs",
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": { "types": "./dist/index.d.ts", "default": "./dist/index.js" },
|
|
11
|
+
"require": { "types": "./dist/index.d.cts", "default": "./dist/index.cjs" }
|
|
12
|
+
},
|
|
13
|
+
"./styles/preset": {
|
|
14
|
+
"import": { "types": "./dist/styles/preset.d.ts", "default": "./dist/styles/preset.js" },
|
|
15
|
+
"require": { "types": "./dist/styles/preset.d.cts", "default": "./dist/styles/preset.cjs" }
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": ["dist"],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsup",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"typecheck": "tsc --noEmit"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"centrifuge": "^5.5.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"tsup": "^8.4.0",
|
|
29
|
+
"typescript": "^5.8.0",
|
|
30
|
+
"vitest": "^3.1.0"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"react": ">=18.0.0",
|
|
34
|
+
"react-dom": ">=18.0.0",
|
|
35
|
+
"@stripe/stripe-js": ">=5.0.0",
|
|
36
|
+
"@stripe/react-stripe-js": ">=3.0.0"
|
|
37
|
+
}
|
|
38
|
+
}
|