revine 1.1.3 → 1.2.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/client.d.ts CHANGED
@@ -1,9 +1,11 @@
1
- export { Outlet, RouterProvider, useLocation, useNavigate, useParams, useSearchParams } from "react-router-dom";
2
- export type { NavLinkProps } from "./components/NavLink.js";
1
+ export { Outlet, RouterProvider, useLocation, useNavigate, useParams, useSearchParams, } from "react-router-dom";
2
+ export { Image } from "./components/Image.js";
3
+ export type { ImageProps } from "./components/Image.js";
3
4
  export { Link } from "./components/Link.js";
5
+ export type { LinkProps } from "./components/Link.js";
4
6
  export { NavLink } from "./components/NavLink.js";
7
+ export type { NavLinkProps } from "./components/NavLink.js";
5
8
  export { defineConfig } from "./runtime/defineConfig.js";
6
- export type { LayoutProps } from "./runtime/types.js";
7
- export type { LinkProps } from "./components/Link.js";
8
9
  export { env, envAll } from "./runtime/env.js";
10
+ export type { LayoutProps } from "./runtime/types.js";
9
11
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/client.js CHANGED
@@ -1,4 +1,5 @@
1
- export { Outlet, RouterProvider, useLocation, useNavigate, useParams, useSearchParams } from "react-router-dom";
1
+ export { Outlet, RouterProvider, useLocation, useNavigate, useParams, useSearchParams, } from "react-router-dom";
2
+ export { Image } from "./components/Image.js";
2
3
  export { Link } from "./components/Link.js";
3
4
  export { NavLink } from "./components/NavLink.js";
4
5
  export { defineConfig } from "./runtime/defineConfig.js";
@@ -0,0 +1,42 @@
1
+ import { type ImgHTMLAttributes } from "react";
2
+ type ObjectFit = "contain" | "cover" | "fill" | "none" | "scale-down";
3
+ export interface ImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, "src" | "width" | "height" | "placeholder"> {
4
+ /** Image source URL or import (e.g. import logo from './logo.png') */
5
+ src: string;
6
+ /** Alt text — required for accessibility */
7
+ alt: string;
8
+ /** Intrinsic width in px. Required unless fill={true} */
9
+ width?: number;
10
+ /** Intrinsic height in px. Required unless fill={true} */
11
+ height?: number;
12
+ /**
13
+ * Stretch the image to fill its parent container (parent must be position:relative).
14
+ * When true, width/height are not required.
15
+ */
16
+ fill?: boolean;
17
+ /** CSS object-fit when fill is true. Defaults to "cover" */
18
+ objectFit?: ObjectFit;
19
+ /** CSS object-position when fill is true. Defaults to "center" */
20
+ objectPosition?: string;
21
+ /**
22
+ * Eagerly load the image and skip lazy loading.
23
+ * Use for above-the-fold images (hero, LCP element).
24
+ */
25
+ priority?: boolean;
26
+ /**
27
+ * Show a blurred low-quality placeholder while the image loads.
28
+ * Pass a base64 data URL or a solid color string like "#e5e7eb".
29
+ * Defaults to a subtle gray shimmer if not provided.
30
+ */
31
+ placeholder?: string;
32
+ /** Called when the image fails to load */
33
+ onError?: () => void;
34
+ /** Custom fallback element shown on error */
35
+ fallback?: React.ReactNode;
36
+ className?: string;
37
+ style?: React.CSSProperties;
38
+ quality?: never;
39
+ }
40
+ export declare function Image({ src, alt, width, height, fill, objectFit, objectPosition, priority, placeholder, onError, fallback, className, style, ...rest }: ImageProps): import("react/jsx-runtime").JSX.Element;
41
+ export {};
42
+ //# sourceMappingURL=Image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/components/Image.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE5E,KAAK,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAEtE,MAAM,WAAW,UAAW,SAAQ,IAAI,CACtC,iBAAiB,CAAC,gBAAgB,CAAC,EACnC,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,CAC3C;IACC,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4DAA4D;IAC5D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAeD,wBAAgB,KAAK,CAAC,EACpB,GAAG,EACH,GAAG,EACH,KAAK,EACL,MAAM,EACN,IAAY,EACZ,SAAmB,EACnB,cAAyB,EACzB,QAAgB,EAChB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,UAAU,2CAmJZ"}
@@ -0,0 +1,106 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ const shimmerBase64 = "data:image/svg+xml;base64," +
4
+ btoa(`<svg xmlns='http://www.w3.org/2000/svg' width='400' height='300'>
5
+ <defs>
6
+ <linearGradient id='g' x1='0%' y1='0%' x2='100%' y2='0%'>
7
+ <stop offset='0%' stop-color='#e8e8e8'/>
8
+ <stop offset='50%' stop-color='#f0f0f0'/>
9
+ <stop offset='100%' stop-color='#e8e8e8'/>
10
+ </linearGradient>
11
+ </defs>
12
+ <rect width='400' height='300' fill='url(#g)'/>
13
+ </svg>`);
14
+ export function Image({ src, alt, width, height, fill = false, objectFit = "cover", objectPosition = "center", priority = false, placeholder, onError, fallback, className, style, ...rest }) {
15
+ const [loaded, setLoaded] = useState(false);
16
+ const [errored, setErrored] = useState(false);
17
+ const imgRef = useRef(null);
18
+ // If image is already cached (e.g. browser back-nav), mark loaded immediately
19
+ useEffect(() => {
20
+ if (imgRef.current?.complete && imgRef.current.naturalWidth > 0) {
21
+ setLoaded(true);
22
+ }
23
+ }, []);
24
+ const handleError = () => {
25
+ setErrored(true);
26
+ onError?.();
27
+ };
28
+ const placeholderSrc = placeholder ?? shimmerBase64;
29
+ // ── Fill mode: stretch to parent container
30
+ if (fill) {
31
+ return (_jsxs("span", { style: {
32
+ position: "absolute",
33
+ inset: 0,
34
+ display: "block",
35
+ overflow: "hidden",
36
+ }, children: [!loaded && !errored && (_jsx("span", { "aria-hidden": "true", style: {
37
+ position: "absolute",
38
+ inset: 0,
39
+ backgroundImage: placeholder
40
+ ? `url(${placeholderSrc})`
41
+ : undefined,
42
+ backgroundColor: placeholder ? undefined : "#e8e8e8",
43
+ backgroundSize: "cover",
44
+ backgroundPosition: "center",
45
+ filter: placeholder ? "blur(8px)" : undefined,
46
+ transform: "scale(1.05)",
47
+ } })), !errored ? (_jsx("img", { ref: imgRef, src: src, alt: alt, loading: priority ? "eager" : "lazy", decoding: priority ? "sync" : "async", fetchPriority: priority ? "high" : "auto", onLoad: () => setLoaded(true), onError: handleError, className: className, style: {
48
+ position: "absolute",
49
+ inset: 0,
50
+ width: "100%",
51
+ height: "100%",
52
+ objectFit,
53
+ objectPosition,
54
+ opacity: loaded ? 1 : 0,
55
+ transition: "opacity 300ms ease",
56
+ ...style,
57
+ }, ...rest })) : fallback ? (_jsx(_Fragment, { children: fallback })) : (_jsx(DefaultFallback, { fill: true }))] }));
58
+ }
59
+ // ── Fixed size mode
60
+ if (!width || !height) {
61
+ console.warn("[Revine <Image>] `width` and `height` are required when `fill` is not set. " +
62
+ `Missing on: ${src}`);
63
+ }
64
+ return (_jsxs("span", { style: {
65
+ display: "inline-block",
66
+ position: "relative",
67
+ width: width ? `${width}px` : undefined,
68
+ height: height ? `${height}px` : undefined,
69
+ overflow: "hidden",
70
+ flexShrink: 0,
71
+ }, children: [!loaded && !errored && (_jsx("span", { "aria-hidden": "true", style: {
72
+ position: "absolute",
73
+ inset: 0,
74
+ backgroundImage: placeholder ? `url(${placeholderSrc})` : undefined,
75
+ backgroundColor: placeholder ? undefined : "#e8e8e8",
76
+ backgroundSize: "cover",
77
+ backgroundPosition: "center",
78
+ filter: placeholder ? "blur(8px)" : undefined,
79
+ transform: "scale(1.05)",
80
+ } })), !errored ? (_jsx("img", { ref: imgRef, src: src, alt: alt, width: width, height: height, loading: priority ? "eager" : "lazy", decoding: priority ? "sync" : "async", fetchPriority: priority ? "high" : "auto", onLoad: () => setLoaded(true), onError: handleError, className: className, style: {
81
+ display: "block",
82
+ width: "100%",
83
+ height: "100%",
84
+ objectFit: "cover",
85
+ opacity: loaded ? 1 : 0,
86
+ transition: "opacity 300ms ease",
87
+ ...style,
88
+ }, ...rest })) : fallback ? (_jsx(_Fragment, { children: fallback })) : (_jsx(DefaultFallback, { width: width, height: height }))] }));
89
+ }
90
+ function DefaultFallback({ width, height, fill, }) {
91
+ return (_jsxs("span", { role: "img", "aria-label": "Image failed to load", style: {
92
+ position: fill ? "absolute" : "relative",
93
+ inset: fill ? 0 : undefined,
94
+ display: "flex",
95
+ alignItems: "center",
96
+ justifyContent: "center",
97
+ width: fill ? "100%" : width ? `${width}px` : "100%",
98
+ height: fill ? "100%" : height ? `${height}px` : "100%",
99
+ background: "#f3f4f6",
100
+ color: "#9ca3af",
101
+ fontSize: "12px",
102
+ fontFamily: "system-ui, sans-serif",
103
+ gap: "6px",
104
+ flexDirection: "column",
105
+ }, children: [_jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }), _jsx("circle", { cx: "8.5", cy: "8.5", r: "1.5" }), _jsx("polyline", { points: "21 15 16 10 5 21" })] }), _jsx("span", { children: "Failed to load" })] }));
106
+ }
@@ -0,0 +1,2 @@
1
+ export declare const errorBoundaryComponent = "\nfunction RevineErrorDialog() {\n const error = useRouteError();\n const [expanded, setExpanded] = React.useState(false);\n\n const message = error?.message || String(error) || \"An unexpected error occurred.\";\n const stack = error?.stack || \"\";\n // Pull only the first meaningful line from the stack (skip the error message repeat)\n const stackLines = stack\n .split(\"\\n\")\n .filter((l) => l.trim().startsWith(\"at \"))\n .slice(0, 8);\n\n return React.createElement(\n \"div\",\n { style: overlayStyle },\n React.createElement(\n \"div\",\n { style: dialogStyle },\n // Header\n React.createElement(\n \"div\",\n { style: headerStyle },\n React.createElement(\"span\", { style: iconStyle }, \"\u2715\"),\n React.createElement(\"span\", { style: titleStyle }, \"Application Error\")\n ),\n // Message\n React.createElement(\"p\", { style: messageStyle }, message),\n // Stack toggle\n stackLines.length > 0 &&\n React.createElement(\n \"div\",\n null,\n React.createElement(\n \"button\",\n { onClick: () => setExpanded((v) => !v), style: toggleBtnStyle },\n expanded ? \"\u25B2 Hide stack trace\" : \"\u25BC Show stack trace\"\n ),\n expanded &&\n React.createElement(\n \"pre\",\n { style: stackStyle },\n stackLines.join(\"\\n\")\n )\n ),\n // Actions\n React.createElement(\n \"div\",\n { style: actionsStyle },\n React.createElement(\n \"button\",\n { onClick: () => window.location.reload(), style: primaryBtnStyle },\n \"Reload page\"\n ),\n React.createElement(\n \"button\",\n { onClick: () => (window.location.href = \"/\"), style: secondaryBtnStyle },\n \"Go to home\"\n )\n )\n )\n );\n}\n\nconst overlayStyle = {\n position: \"fixed\", inset: 0, background: \"rgba(0,0,0,0.65)\",\n backdropFilter: \"blur(4px)\", display: \"flex\",\n alignItems: \"center\", justifyContent: \"center\",\n zIndex: 9999, fontFamily: \"ui-monospace, 'Cascadia Code', monospace\",\n};\nconst dialogStyle = {\n background: \"#1a1a1a\", border: \"1px solid #ff4d4f55\",\n borderRadius: \"10px\", padding: \"28px 32px\",\n maxWidth: \"560px\", width: \"90%\", boxShadow: \"0 24px 64px rgba(0,0,0,0.6)\",\n color: \"#e5e5e5\",\n};\nconst headerStyle = {\n display: \"flex\", alignItems: \"center\", gap: \"10px\",\n marginBottom: \"14px\",\n};\nconst iconStyle = {\n display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\",\n width: \"26px\", height: \"26px\", borderRadius: \"50%\",\n background: \"#ff4d4f22\", color: \"#ff4d4f\", fontSize: \"13px\", fontWeight: 700,\n};\nconst titleStyle = {\n fontFamily: \"system-ui, sans-serif\",\n fontSize: \"16px\", fontWeight: 600, color: \"#fff\",\n};\nconst messageStyle = {\n fontFamily: \"ui-monospace, monospace\",\n fontSize: \"13px\", color: \"#ff7875\",\n background: \"#ff4d4f0f\", border: \"1px solid #ff4d4f22\",\n borderRadius: \"6px\", padding: \"10px 14px\",\n marginBottom: \"16px\", wordBreak: \"break-word\", lineHeight: 1.6,\n};\nconst toggleBtnStyle = {\n background: \"none\", border: \"none\", cursor: \"pointer\",\n color: \"#888\", fontSize: \"12px\", padding: \"0 0 10px 0\",\n fontFamily: \"system-ui, sans-serif\",\n};\nconst stackStyle = {\n background: \"#111\", borderRadius: \"6px\", padding: \"12px 14px\",\n fontSize: \"11px\", color: \"#aaa\", overflowX: \"auto\",\n lineHeight: 1.7, marginBottom: \"16px\",\n border: \"1px solid #2a2a2a\",\n};\nconst actionsStyle = {\n display: \"flex\", gap: \"10px\", marginTop: \"6px\",\n};\nconst primaryBtnStyle = {\n flex: 1, padding: \"9px 0\", borderRadius: \"6px\", border: \"none\",\n background: \"#ff4d4f\", color: \"#fff\", fontWeight: 600,\n fontSize: \"13px\", cursor: \"pointer\", fontFamily: \"system-ui, sans-serif\",\n};\nconst secondaryBtnStyle = {\n flex: 1, padding: \"9px 0\", borderRadius: \"6px\",\n border: \"1px solid #333\", background: \"transparent\",\n color: \"#aaa\", fontSize: \"13px\", cursor: \"pointer\",\n fontFamily: \"system-ui, sans-serif\",\n};\n";
2
+ //# sourceMappingURL=errorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorBoundary.d.ts","sourceRoot":"","sources":["../../../src/runtime/bundler/errorBoundary.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,suIAyHlC,CAAC"}
@@ -0,0 +1,122 @@
1
+ export const errorBoundaryComponent = `
2
+ function RevineErrorDialog() {
3
+ const error = useRouteError();
4
+ const [expanded, setExpanded] = React.useState(false);
5
+
6
+ const message = error?.message || String(error) || "An unexpected error occurred.";
7
+ const stack = error?.stack || "";
8
+ // Pull only the first meaningful line from the stack (skip the error message repeat)
9
+ const stackLines = stack
10
+ .split("\\n")
11
+ .filter((l) => l.trim().startsWith("at "))
12
+ .slice(0, 8);
13
+
14
+ return React.createElement(
15
+ "div",
16
+ { style: overlayStyle },
17
+ React.createElement(
18
+ "div",
19
+ { style: dialogStyle },
20
+ // Header
21
+ React.createElement(
22
+ "div",
23
+ { style: headerStyle },
24
+ React.createElement("span", { style: iconStyle }, "✕"),
25
+ React.createElement("span", { style: titleStyle }, "Application Error")
26
+ ),
27
+ // Message
28
+ React.createElement("p", { style: messageStyle }, message),
29
+ // Stack toggle
30
+ stackLines.length > 0 &&
31
+ React.createElement(
32
+ "div",
33
+ null,
34
+ React.createElement(
35
+ "button",
36
+ { onClick: () => setExpanded((v) => !v), style: toggleBtnStyle },
37
+ expanded ? "▲ Hide stack trace" : "▼ Show stack trace"
38
+ ),
39
+ expanded &&
40
+ React.createElement(
41
+ "pre",
42
+ { style: stackStyle },
43
+ stackLines.join("\\n")
44
+ )
45
+ ),
46
+ // Actions
47
+ React.createElement(
48
+ "div",
49
+ { style: actionsStyle },
50
+ React.createElement(
51
+ "button",
52
+ { onClick: () => window.location.reload(), style: primaryBtnStyle },
53
+ "Reload page"
54
+ ),
55
+ React.createElement(
56
+ "button",
57
+ { onClick: () => (window.location.href = "/"), style: secondaryBtnStyle },
58
+ "Go to home"
59
+ )
60
+ )
61
+ )
62
+ );
63
+ }
64
+
65
+ const overlayStyle = {
66
+ position: "fixed", inset: 0, background: "rgba(0,0,0,0.65)",
67
+ backdropFilter: "blur(4px)", display: "flex",
68
+ alignItems: "center", justifyContent: "center",
69
+ zIndex: 9999, fontFamily: "ui-monospace, 'Cascadia Code', monospace",
70
+ };
71
+ const dialogStyle = {
72
+ background: "#1a1a1a", border: "1px solid #ff4d4f55",
73
+ borderRadius: "10px", padding: "28px 32px",
74
+ maxWidth: "560px", width: "90%", boxShadow: "0 24px 64px rgba(0,0,0,0.6)",
75
+ color: "#e5e5e5",
76
+ };
77
+ const headerStyle = {
78
+ display: "flex", alignItems: "center", gap: "10px",
79
+ marginBottom: "14px",
80
+ };
81
+ const iconStyle = {
82
+ display: "inline-flex", alignItems: "center", justifyContent: "center",
83
+ width: "26px", height: "26px", borderRadius: "50%",
84
+ background: "#ff4d4f22", color: "#ff4d4f", fontSize: "13px", fontWeight: 700,
85
+ };
86
+ const titleStyle = {
87
+ fontFamily: "system-ui, sans-serif",
88
+ fontSize: "16px", fontWeight: 600, color: "#fff",
89
+ };
90
+ const messageStyle = {
91
+ fontFamily: "ui-monospace, monospace",
92
+ fontSize: "13px", color: "#ff7875",
93
+ background: "#ff4d4f0f", border: "1px solid #ff4d4f22",
94
+ borderRadius: "6px", padding: "10px 14px",
95
+ marginBottom: "16px", wordBreak: "break-word", lineHeight: 1.6,
96
+ };
97
+ const toggleBtnStyle = {
98
+ background: "none", border: "none", cursor: "pointer",
99
+ color: "#888", fontSize: "12px", padding: "0 0 10px 0",
100
+ fontFamily: "system-ui, sans-serif",
101
+ };
102
+ const stackStyle = {
103
+ background: "#111", borderRadius: "6px", padding: "12px 14px",
104
+ fontSize: "11px", color: "#aaa", overflowX: "auto",
105
+ lineHeight: 1.7, marginBottom: "16px",
106
+ border: "1px solid #2a2a2a",
107
+ };
108
+ const actionsStyle = {
109
+ display: "flex", gap: "10px", marginTop: "6px",
110
+ };
111
+ const primaryBtnStyle = {
112
+ flex: 1, padding: "9px 0", borderRadius: "6px", border: "none",
113
+ background: "#ff4d4f", color: "#fff", fontWeight: 600,
114
+ fontSize: "13px", cursor: "pointer", fontFamily: "system-ui, sans-serif",
115
+ };
116
+ const secondaryBtnStyle = {
117
+ flex: 1, padding: "9px 0", borderRadius: "6px",
118
+ border: "1px solid #333", background: "transparent",
119
+ color: "#aaa", fontSize: "13px", cursor: "pointer",
120
+ fontFamily: "system-ui, sans-serif",
121
+ };
122
+ `;
@@ -1 +1 @@
1
- {"version":3,"file":"revinePlugin.d.ts","sourceRoot":"","sources":["../../../src/runtime/bundler/revinePlugin.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,IAAI,GAAG,CA8GlC"}
1
+ {"version":3,"file":"revinePlugin.d.ts","sourceRoot":"","sources":["../../../src/runtime/bundler/revinePlugin.ts"],"names":[],"mappings":"AA2VA,wBAAgB,YAAY,IAAI,GAAG,CAwIlC"}