@rock.star/ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,205 @@
1
+ // src/lib/utils.ts
2
+ import { clsx } from "clsx";
3
+ import { twMerge } from "tailwind-merge";
4
+ function cn(...inputs) {
5
+ return twMerge(clsx(inputs));
6
+ }
7
+
8
+ // src/icon/bell.tsx
9
+ import {
10
+ LazyMotion,
11
+ domMin,
12
+ m,
13
+ useAnimation,
14
+ useReducedMotion
15
+ } from "motion/react";
16
+ import {
17
+ forwardRef,
18
+ useCallback,
19
+ useEffect,
20
+ useImperativeHandle,
21
+ useRef,
22
+ useState
23
+ } from "react";
24
+ import { jsx, jsxs } from "react/jsx-runtime";
25
+ var BellIcon = forwardRef(
26
+ ({
27
+ onMouseEnter,
28
+ onMouseLeave,
29
+ className,
30
+ size = 24,
31
+ duration = 1,
32
+ isAnimated = true,
33
+ color,
34
+ ...props
35
+ }, ref) => {
36
+ const controls = useAnimation();
37
+ const reduced = useReducedMotion();
38
+ const [ringing, setRinging] = useState(false);
39
+ const ringingRef = useRef(false);
40
+ const ringTimer = useRef(null);
41
+ const stopRing = useCallback(() => {
42
+ ringingRef.current = false;
43
+ setRinging(false);
44
+ controls.start("normal");
45
+ if (ringTimer.current) {
46
+ clearTimeout(ringTimer.current);
47
+ ringTimer.current = null;
48
+ }
49
+ }, [controls]);
50
+ const startRing = useCallback(() => {
51
+ if (reduced) {
52
+ stopRing();
53
+ return;
54
+ }
55
+ if (ringingRef.current) return;
56
+ ringingRef.current = true;
57
+ setRinging(true);
58
+ ringTimer.current = setTimeout(stopRing, 140);
59
+ }, [reduced, stopRing]);
60
+ useEffect(
61
+ () => () => {
62
+ if (ringTimer.current) clearTimeout(ringTimer.current);
63
+ },
64
+ []
65
+ );
66
+ useImperativeHandle(ref, () => {
67
+ return {
68
+ startAnimation: startRing,
69
+ stopAnimation: stopRing
70
+ };
71
+ }, [startRing, stopRing]);
72
+ const handleEnter = useCallback(
73
+ (e) => {
74
+ if (!isAnimated || reduced) return;
75
+ controls.start("animate");
76
+ onMouseEnter?.(e);
77
+ },
78
+ [controls, reduced, isAnimated, onMouseEnter]
79
+ );
80
+ const handleLeave = useCallback(
81
+ (e) => {
82
+ controls.start("normal");
83
+ onMouseLeave?.(e);
84
+ },
85
+ [controls, onMouseLeave]
86
+ );
87
+ const bellVariants = {
88
+ normal: { transform: "rotate(0deg)" },
89
+ ring: {
90
+ transform: "rotate(8deg)",
91
+ transition: {
92
+ duration: 0.14,
93
+ ease: [0.77, 0, 0.175, 1]
94
+ }
95
+ },
96
+ animate: {
97
+ rotate: [0, 7, -18, 14, -9, 5, -2, 0],
98
+ transition: {
99
+ duration: 1.3 * duration,
100
+ ease: "easeInOut",
101
+ times: [0, 0.09, 0.26, 0.45, 0.62, 0.78, 0.9, 1]
102
+ }
103
+ }
104
+ };
105
+ const clapperVariants = {
106
+ normal: { transform: "translateX(0px)" },
107
+ ring: {
108
+ transform: "translateX(1px)",
109
+ transition: {
110
+ duration: 0.14,
111
+ ease: [0.77, 0, 0.175, 1]
112
+ }
113
+ },
114
+ animate: {
115
+ x: [0, 1.5, -5, 4, -2.5, 1.5, -1, 0],
116
+ transition: {
117
+ duration: 1.3 * duration,
118
+ ease: "easeInOut",
119
+ times: [0, 0.09, 0.26, 0.45, 0.62, 0.78, 0.9, 1],
120
+ delay: 0.05 * duration
121
+ }
122
+ }
123
+ };
124
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMin, strict: true, children: /* @__PURE__ */ jsx(
125
+ m.div,
126
+ {
127
+ className: cn("relative inline-flex", className),
128
+ onMouseEnter: handleEnter,
129
+ onMouseLeave: handleLeave,
130
+ ...props,
131
+ style: { color, ...props.style },
132
+ children: /* @__PURE__ */ jsxs(
133
+ m.svg,
134
+ {
135
+ xmlns: "http://www.w3.org/2000/svg",
136
+ width: size,
137
+ height: size,
138
+ viewBox: "0 0 24 24",
139
+ fill: "none",
140
+ stroke: "currentColor",
141
+ strokeWidth: "2",
142
+ strokeLinecap: "round",
143
+ strokeLinejoin: "round",
144
+ animate: ringing ? "ring" : controls,
145
+ initial: "normal",
146
+ variants: bellVariants,
147
+ style: { transformOrigin: "top center" },
148
+ children: [
149
+ /* @__PURE__ */ jsx(m.path, { d: "M10.268 21a2 2 0 0 0 3.464 0", variants: clapperVariants }),
150
+ /* @__PURE__ */ jsx("path", { d: "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" })
151
+ ]
152
+ }
153
+ )
154
+ }
155
+ ) });
156
+ }
157
+ );
158
+ BellIcon.displayName = "BellIcon";
159
+
160
+ // src/icon/icon-swap.tsx
161
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
162
+ function IconSwap({ active, first, second, className }) {
163
+ return /* @__PURE__ */ jsxs2(
164
+ "span",
165
+ {
166
+ "aria-hidden": "true",
167
+ className: cn("t-icon-swap", className),
168
+ "data-state": active ? "b" : "a",
169
+ children: [
170
+ /* @__PURE__ */ jsx2("span", { className: "t-icon", "data-icon": "a", children: first }),
171
+ /* @__PURE__ */ jsx2("span", { className: "t-icon", "data-icon": "b", children: second })
172
+ ]
173
+ }
174
+ );
175
+ }
176
+
177
+ // src/icon/loader.tsx
178
+ import React from "react";
179
+ import { jsx as jsx3 } from "react/jsx-runtime";
180
+ var Loader = React.forwardRef(
181
+ ({ className, size = 16, color = "currentColor", style, ...props }, ref) => {
182
+ const bars = Array(12).fill(0);
183
+ return /* @__PURE__ */ jsx3(
184
+ "div",
185
+ {
186
+ ref,
187
+ className: cn("loader-wrapper", className),
188
+ style: {
189
+ "--spinner-size": `${size}px`,
190
+ "--spinner-color": color,
191
+ ...style
192
+ },
193
+ ...props,
194
+ children: /* @__PURE__ */ jsx3("div", { className: "loader-spinner", children: bars.map((_, i) => /* @__PURE__ */ jsx3("div", { className: "loader-bar" }, `spinner-bar-${i}`)) })
195
+ }
196
+ );
197
+ }
198
+ );
199
+ Loader.displayName = "SpellUI.Loader";
200
+ export {
201
+ BellIcon,
202
+ IconSwap,
203
+ Loader
204
+ };
205
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/icon/bell.tsx","../../src/icon/icon-swap.tsx","../../src/icon/loader.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\";\n\nimport { cn } from \"#lib/utils\";\nimport type { Variants } from \"motion/react\";\nimport {\n LazyMotion,\n domMin,\n m,\n useAnimation,\n useReducedMotion,\n} from \"motion/react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n} from \"react\";\nexport interface BellIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface BellIconProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n | \"color\"\n | \"onDrag\"\n | \"onDragStart\"\n | \"onDragEnd\"\n | \"onAnimationStart\"\n | \"onAnimationEnd\"\n | \"onAnimationIteration\"\n> {\n size?: number;\n duration?: number;\n isAnimated?: boolean;\n color?: string;\n}\n\nconst BellIcon = forwardRef<BellIconHandle, BellIconProps>(\n (\n {\n onMouseEnter,\n onMouseLeave,\n className,\n size = 24,\n duration = 1,\n isAnimated = true,\n color,\n ...props\n },\n ref,\n ) => {\n const controls = useAnimation();\n const reduced = useReducedMotion();\n const [ringing, setRinging] = useState(false);\n const ringingRef = useRef(false);\n const ringTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const stopRing = useCallback(() => {\n ringingRef.current = false;\n setRinging(false);\n controls.start(\"normal\");\n if (ringTimer.current) {\n clearTimeout(ringTimer.current);\n ringTimer.current = null;\n }\n }, [controls]);\n\n const startRing = useCallback(() => {\n if (reduced) {\n stopRing();\n return;\n }\n if (ringingRef.current) return;\n\n ringingRef.current = true;\n setRinging(true);\n ringTimer.current = setTimeout(stopRing, 140);\n }, [reduced, stopRing]);\n\n useEffect(\n () => () => {\n if (ringTimer.current) clearTimeout(ringTimer.current);\n },\n [],\n );\n\n useImperativeHandle(ref, () => {\n return {\n startAnimation: startRing,\n stopAnimation: stopRing,\n };\n }, [startRing, stopRing]);\n\n const handleEnter = useCallback(\n (e?: React.MouseEvent<HTMLDivElement>) => {\n if (!isAnimated || reduced) return;\n controls.start(\"animate\");\n onMouseEnter?.(e as any);\n },\n [controls, reduced, isAnimated, onMouseEnter],\n );\n\n const handleLeave = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n controls.start(\"normal\");\n onMouseLeave?.(e as any);\n },\n [controls, onMouseLeave],\n );\n\n const bellVariants: Variants = {\n normal: { transform: \"rotate(0deg)\" },\n ring: {\n transform: \"rotate(8deg)\",\n transition: {\n duration: 0.14,\n ease: [0.77, 0, 0.175, 1],\n },\n },\n animate: {\n rotate: [0, 7, -18, 14, -9, 5, -2, 0],\n transition: {\n duration: 1.3 * duration,\n ease: \"easeInOut\",\n times: [0, 0.09, 0.26, 0.45, 0.62, 0.78, 0.9, 1],\n },\n },\n };\n\n const clapperVariants: Variants = {\n normal: { transform: \"translateX(0px)\" },\n ring: {\n transform: \"translateX(1px)\",\n transition: {\n duration: 0.14,\n ease: [0.77, 0, 0.175, 1],\n },\n },\n animate: {\n x: [0, 1.5, -5, 4, -2.5, 1.5, -1, 0],\n transition: {\n duration: 1.3 * duration,\n ease: \"easeInOut\",\n times: [0, 0.09, 0.26, 0.45, 0.62, 0.78, 0.9, 1],\n delay: 0.05 * duration,\n },\n },\n };\n\n return (\n <LazyMotion features={domMin} strict>\n <m.div\n className={cn(\"relative inline-flex\", className)}\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n {...props}\n style={{ color, ...props.style }}\n >\n <m.svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n animate={ringing ? \"ring\" : controls}\n initial=\"normal\"\n variants={bellVariants}\n style={{ transformOrigin: \"top center\" }}\n >\n <m.path d=\"M10.268 21a2 2 0 0 0 3.464 0\" variants={clapperVariants} />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n </m.svg>\n </m.div>\n </LazyMotion>\n );\n },\n);\n\nBellIcon.displayName = \"BellIcon\";\nexport { BellIcon };\n","import * as React from \"react\"\n\nimport { cn } from \"#lib/utils\"\n\ntype IconSwapProps = {\n active: boolean\n first: React.ReactNode\n second: React.ReactNode\n className?: string\n}\n\nexport function IconSwap({ active, first, second, className }: IconSwapProps) {\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\"t-icon-swap\", className)}\n data-state={active ? \"b\" : \"a\"}\n >\n <span className=\"t-icon\" data-icon=\"a\">\n {first}\n </span>\n <span className=\"t-icon\" data-icon=\"b\">\n {second}\n </span>\n </span>\n )\n}\n","\"use client\"\n\nimport { cn } from \"#lib/utils\"\nimport React from \"react\"\n\ninterface LoaderProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: number\n color?: string\n}\n\nexport const Loader = React.forwardRef<HTMLDivElement, LoaderProps>(\n ({ className, size = 16, color = \"currentColor\", style, ...props }, ref) => {\n const bars = Array(12).fill(0)\n\n return (\n <div\n ref={ref}\n className={cn(\"loader-wrapper\", className)}\n style={\n {\n \"--spinner-size\": `${size}px`,\n \"--spinner-color\": color,\n ...style,\n } as React.CSSProperties\n }\n {...props}\n >\n <div className=\"loader-spinner\">\n {bars.map((_, i) => (\n <div className=\"loader-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n )\n }\n)\n\nLoader.displayName = \"SpellUI.Loader\"\n\nexport type { LoaderProps }\n"],"mappings":"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","names":["jsx","jsxs","jsx"]}
@@ -0,0 +1,301 @@
1
+ import { OpenAI } from 'openai';
2
+ import * as nuqs_server from 'nuqs/server';
3
+ import { ClassValue } from 'clsx';
4
+
5
+ type PluginListenerHandle = {
6
+ remove: () => Promise<void>;
7
+ };
8
+ type AppUrlOpenEvent = {
9
+ url: string;
10
+ };
11
+ type AppPlugin = {
12
+ addListener?: (eventName: "appUrlOpen", listener: (event: AppUrlOpenEvent) => void) => PluginListenerHandle | Promise<PluginListenerHandle>;
13
+ };
14
+ type StatusBarStyle = "DARK" | "LIGHT" | "DEFAULT";
15
+ type StatusBarPlugin = {
16
+ setBackgroundColor?: (options: {
17
+ color: string;
18
+ }) => Promise<void>;
19
+ setStyle?: (options: {
20
+ style: StatusBarStyle;
21
+ }) => Promise<void>;
22
+ };
23
+ type BrowserPlugin = {
24
+ open?: (options: {
25
+ url: string;
26
+ }) => Promise<void>;
27
+ };
28
+ type NativeSharePlugin = {
29
+ share?: (options: {
30
+ title?: string;
31
+ text?: string;
32
+ url?: string;
33
+ files?: string[];
34
+ dialogTitle?: string;
35
+ }) => Promise<void>;
36
+ };
37
+ type NativeThemePlugin = {
38
+ setStyle?: (options: {
39
+ style: "dark" | "light" | "system";
40
+ }) => Promise<void>;
41
+ };
42
+ type NativePaymentPlugin = {
43
+ openUpiUrl?: (options: {
44
+ url: string;
45
+ title?: string;
46
+ }) => Promise<{
47
+ opened: boolean;
48
+ }>;
49
+ };
50
+ type NativeSharedFile = {
51
+ name: string;
52
+ type: string;
53
+ size: number;
54
+ data: string;
55
+ };
56
+ type NativeImagePickerPlugin = {
57
+ pickImages?: (options: {
58
+ limit?: number;
59
+ title?: string;
60
+ }) => Promise<{
61
+ files: NativeSharedFile[];
62
+ }>;
63
+ };
64
+ type NativeSharePayload = {
65
+ id: string;
66
+ title?: string | null;
67
+ text?: string | null;
68
+ files: NativeSharedFile[];
69
+ };
70
+ type NativeShareTargetPlugin = {
71
+ addListener?: (eventName: "shareReceived", listener: (event: NativeSharePayload) => void) => PluginListenerHandle | Promise<PluginListenerHandle>;
72
+ getPendingShare?: () => Promise<{
73
+ share: NativeSharePayload | null;
74
+ }>;
75
+ clearPendingShare?: () => Promise<void>;
76
+ };
77
+ type NativeAppSettingsPlugin = {
78
+ openAppSettings?: () => Promise<void>;
79
+ };
80
+ type NativeUpdateState = {
81
+ status: "downloading" | "downloaded" | "installing" | "installed" | "failed" | "canceled" | "unknown";
82
+ bytesDownloaded: number;
83
+ totalBytesToDownload: number;
84
+ };
85
+ type NativeUpdateInfo = NativeUpdateState & {
86
+ available: boolean;
87
+ inProgress: boolean;
88
+ availableVersionCode: number;
89
+ installStatus: NativeUpdateState["status"];
90
+ };
91
+ type NativeInAppUpdatePlugin = {
92
+ checkForUpdate?: () => Promise<NativeUpdateInfo>;
93
+ startUpdate?: () => Promise<void>;
94
+ completeUpdate?: () => Promise<void>;
95
+ addListener?: (eventName: "updateStateChanged", listener: (state: NativeUpdateState) => void) => PluginListenerHandle | Promise<PluginListenerHandle>;
96
+ };
97
+ type NativeShareFilePlugin = {
98
+ saveImage?: (options: {
99
+ data: string;
100
+ fileName?: string;
101
+ }) => Promise<{
102
+ path?: string;
103
+ }>;
104
+ };
105
+ type CameraPhoto = {
106
+ format?: string;
107
+ path?: string;
108
+ webPath?: string;
109
+ };
110
+ type CameraPlugin = {
111
+ getPhoto?: (options: {
112
+ allowEditing?: boolean;
113
+ quality?: number;
114
+ resultType: "uri";
115
+ source?: "PROMPT" | "CAMERA" | "PHOTOS";
116
+ }) => Promise<CameraPhoto>;
117
+ pickImages?: (options: {
118
+ limit?: number;
119
+ quality?: number;
120
+ }) => Promise<{
121
+ photos: CameraPhoto[];
122
+ }>;
123
+ };
124
+ type CapacitorRuntime = {
125
+ isNativePlatform?: () => boolean;
126
+ getPlatform?: () => string;
127
+ Plugins?: {
128
+ App?: AppPlugin;
129
+ Browser?: BrowserPlugin;
130
+ Camera?: CameraPlugin;
131
+ NativeAppSettings?: NativeAppSettingsPlugin;
132
+ NativeInAppUpdate?: NativeInAppUpdatePlugin;
133
+ NativeImagePicker?: NativeImagePickerPlugin;
134
+ NativeShareFile?: NativeShareFilePlugin;
135
+ NativePayment?: NativePaymentPlugin;
136
+ NativeTheme?: NativeThemePlugin;
137
+ NativeShareTarget?: NativeShareTargetPlugin;
138
+ Share?: NativeSharePlugin;
139
+ StatusBar?: StatusBarPlugin;
140
+ };
141
+ };
142
+ declare global {
143
+ interface Window {
144
+ Capacitor?: CapacitorRuntime;
145
+ }
146
+ }
147
+ declare function isNativeApp(): boolean;
148
+ declare function getNativePlatform(): string | null;
149
+ declare function getNativeAppPlugin(): AppPlugin | null;
150
+ declare function getNativeStatusBarPlugin(): StatusBarPlugin | null;
151
+ declare function getNativeBrowserPlugin(): BrowserPlugin | null;
152
+ declare function getNativeSharePlugin(): NativeSharePlugin | null;
153
+ declare function getNativeCameraPlugin(): CameraPlugin | null;
154
+ declare function getNativeImagePickerPlugin(): NativeImagePickerPlugin | null;
155
+ declare function getNativeShareFilePlugin(): NativeShareFilePlugin | null;
156
+ declare function getNativeThemePlugin(): NativeThemePlugin | null;
157
+ declare function getNativePaymentPlugin(): NativePaymentPlugin | null;
158
+ declare function getNativeShareTargetPlugin(): NativeShareTargetPlugin | null;
159
+ declare function getNativeAppSettingsPlugin(): NativeAppSettingsPlugin | null;
160
+ declare function getNativeInAppUpdatePlugin(): NativeInAppUpdatePlugin | null;
161
+ /** Opens the OS App Info page. Returns false when unavailable (web or old shell). */
162
+ declare function openNativeAppSettings(): Promise<boolean>;
163
+ declare function openUpiPaymentUrl(url: string, options?: {
164
+ isNative?: boolean;
165
+ title?: string;
166
+ }): Promise<boolean>;
167
+ declare function openExternalUrl(url: string, options?: {
168
+ isNative?: boolean;
169
+ target?: string;
170
+ features?: string;
171
+ }): Promise<boolean>;
172
+ /**
173
+ * Saves base64 image bytes into app-private storage and returns a file:// URL
174
+ * that @capacitor/share can attach. Returns null outside the native app or
175
+ * when the save fails, so callers can fall back to a text-only share.
176
+ */
177
+ declare function saveNativeShareImage(dataUrl: string, options?: {
178
+ fileName?: string;
179
+ isNative?: boolean;
180
+ }): Promise<string | null>;
181
+ declare function shareNativeOrWeb(data: {
182
+ title?: string;
183
+ text?: string;
184
+ url?: string;
185
+ files?: string[];
186
+ dialogTitle?: string;
187
+ }, options?: {
188
+ isNative?: boolean;
189
+ }): Promise<boolean>;
190
+ declare function nativeSharedFileToFile(sharedFile: NativeSharedFile, fallbackName?: string): File;
191
+ declare function pickNativeImageFiles({ isNative, multiple, limit, quality, prefix, }: {
192
+ isNative?: boolean;
193
+ multiple?: boolean;
194
+ limit?: number;
195
+ quality?: number;
196
+ prefix?: string;
197
+ }): Promise<File[] | null>;
198
+ declare function pickNativeChooserImageFiles({ isNative, limit, title, }: {
199
+ isNative?: boolean;
200
+ limit?: number;
201
+ title?: string;
202
+ }): Promise<File[] | null>;
203
+
204
+ declare const fontVariables: string;
205
+
206
+ declare function getOpenAI(): OpenAI;
207
+
208
+ type SearchParamSource = Pick<URLSearchParams, "has" | "toString">;
209
+ declare const searchParams: {
210
+ query: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
211
+ readonly defaultValue: string;
212
+ parseServerSide(value: string | string[] | undefined): string;
213
+ };
214
+ category: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
215
+ readonly defaultValue: string;
216
+ parseServerSide(value: string | string[] | undefined): string;
217
+ };
218
+ productStatus: Omit<nuqs_server.SingleParserBuilder<"active" | "draft" | "archived">, "parseServerSide"> & {
219
+ readonly defaultValue: NonNullable<"active" | "draft" | "archived">;
220
+ parseServerSide(value: string | string[] | undefined): NonNullable<"active" | "draft" | "archived">;
221
+ };
222
+ user: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
223
+ readonly defaultValue: string;
224
+ parseServerSide(value: string | string[] | undefined): string;
225
+ };
226
+ transaction: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
227
+ readonly defaultValue: string;
228
+ parseServerSide(value: string | string[] | undefined): string;
229
+ };
230
+ page: Omit<nuqs_server.SingleParserBuilder<number>, "parseServerSide"> & {
231
+ readonly defaultValue: number;
232
+ parseServerSide(value: string | string[] | undefined): number;
233
+ };
234
+ transactionPage: Omit<nuqs_server.SingleParserBuilder<number>, "parseServerSide"> & {
235
+ readonly defaultValue: number;
236
+ parseServerSide(value: string | string[] | undefined): number;
237
+ };
238
+ cart: Omit<nuqs_server.SingleParserBuilder<boolean>, "parseServerSide"> & {
239
+ readonly defaultValue: boolean;
240
+ parseServerSide(value: string | string[] | undefined): boolean;
241
+ };
242
+ notification: Omit<nuqs_server.SingleParserBuilder<boolean>, "parseServerSide"> & {
243
+ readonly defaultValue: boolean;
244
+ parseServerSide(value: string | string[] | undefined): boolean;
245
+ };
246
+ };
247
+ declare const searchParamKeys: {
248
+ query: string;
249
+ category: string;
250
+ productStatus: string;
251
+ user: string;
252
+ transaction: string;
253
+ page: string;
254
+ transactionPage: string;
255
+ cart: string;
256
+ notification: string;
257
+ };
258
+ declare const SearchParams: nuqs_server.LoaderFunction<{
259
+ query: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
260
+ readonly defaultValue: string;
261
+ parseServerSide(value: string | string[] | undefined): string;
262
+ };
263
+ category: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
264
+ readonly defaultValue: string;
265
+ parseServerSide(value: string | string[] | undefined): string;
266
+ };
267
+ productStatus: Omit<nuqs_server.SingleParserBuilder<"active" | "draft" | "archived">, "parseServerSide"> & {
268
+ readonly defaultValue: NonNullable<"active" | "draft" | "archived">;
269
+ parseServerSide(value: string | string[] | undefined): NonNullable<"active" | "draft" | "archived">;
270
+ };
271
+ user: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
272
+ readonly defaultValue: string;
273
+ parseServerSide(value: string | string[] | undefined): string;
274
+ };
275
+ transaction: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
276
+ readonly defaultValue: string;
277
+ parseServerSide(value: string | string[] | undefined): string;
278
+ };
279
+ page: Omit<nuqs_server.SingleParserBuilder<number>, "parseServerSide"> & {
280
+ readonly defaultValue: number;
281
+ parseServerSide(value: string | string[] | undefined): number;
282
+ };
283
+ transactionPage: Omit<nuqs_server.SingleParserBuilder<number>, "parseServerSide"> & {
284
+ readonly defaultValue: number;
285
+ parseServerSide(value: string | string[] | undefined): number;
286
+ };
287
+ cart: Omit<nuqs_server.SingleParserBuilder<boolean>, "parseServerSide"> & {
288
+ readonly defaultValue: boolean;
289
+ parseServerSide(value: string | string[] | undefined): boolean;
290
+ };
291
+ notification: Omit<nuqs_server.SingleParserBuilder<boolean>, "parseServerSide"> & {
292
+ readonly defaultValue: boolean;
293
+ parseServerSide(value: string | string[] | undefined): boolean;
294
+ };
295
+ }>;
296
+ declare function hasFlagSearchParam(searchParams: SearchParamSource, key: "cart" | "notification"): boolean;
297
+ declare function buildFlagSearchParamHref(pathname: string, searchParams: SearchParamSource, key: "cart" | "notification", enabled: boolean): string;
298
+
299
+ declare function cn(...inputs: ClassValue[]): string;
300
+
301
+ export { type NativeSharePayload, type NativeSharedFile, type NativeUpdateInfo, type NativeUpdateState, SearchParams, buildFlagSearchParamHref, cn, fontVariables, getNativeAppPlugin, getNativeAppSettingsPlugin, getNativeBrowserPlugin, getNativeCameraPlugin, getNativeImagePickerPlugin, getNativeInAppUpdatePlugin, getNativePaymentPlugin, getNativePlatform, getNativeShareFilePlugin, getNativeSharePlugin, getNativeShareTargetPlugin, getNativeStatusBarPlugin, getNativeThemePlugin, getOpenAI, hasFlagSearchParam, isNativeApp, nativeSharedFileToFile, openExternalUrl, openNativeAppSettings, openUpiPaymentUrl, pickNativeChooserImageFiles, pickNativeImageFiles, saveNativeShareImage, searchParamKeys, searchParams, shareNativeOrWeb };