@rock.star/ui 1.0.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.js +7 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +43 -0
- package/dist/index.js +8551 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/index.d.ts +12 -4
- package/dist/lib/index.js +2 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/styles.css +240 -0
- package/dist/ui/index.d.ts +99 -10
- package/dist/ui/index.js +1097 -423
- package/dist/ui/index.js.map +1 -1
- package/dist/utils-Cbsgs0XP.d.ts +5 -0
- package/package.json +8 -3
package/dist/lib/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { OpenAI } from 'openai';
|
|
2
2
|
import * as nuqs_server from 'nuqs/server';
|
|
3
|
-
|
|
3
|
+
export { c as cn } from '../utils-Cbsgs0XP.js';
|
|
4
|
+
import 'clsx';
|
|
4
5
|
|
|
5
6
|
type PluginListenerHandle = {
|
|
6
7
|
remove: () => Promise<void>;
|
|
@@ -207,6 +208,10 @@ declare function getOpenAI(): OpenAI;
|
|
|
207
208
|
|
|
208
209
|
type SearchParamSource = Pick<URLSearchParams, "has" | "toString">;
|
|
209
210
|
declare const searchParams: {
|
|
211
|
+
tab: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
|
|
212
|
+
readonly defaultValue: string;
|
|
213
|
+
parseServerSide(value: string | string[] | undefined): string;
|
|
214
|
+
};
|
|
210
215
|
query: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
|
|
211
216
|
readonly defaultValue: string;
|
|
212
217
|
parseServerSide(value: string | string[] | undefined): string;
|
|
@@ -245,6 +250,7 @@ declare const searchParams: {
|
|
|
245
250
|
};
|
|
246
251
|
};
|
|
247
252
|
declare const searchParamKeys: {
|
|
253
|
+
tab: string;
|
|
248
254
|
query: string;
|
|
249
255
|
category: string;
|
|
250
256
|
productStatus: string;
|
|
@@ -256,6 +262,10 @@ declare const searchParamKeys: {
|
|
|
256
262
|
notification: string;
|
|
257
263
|
};
|
|
258
264
|
declare const SearchParams: nuqs_server.LoaderFunction<{
|
|
265
|
+
tab: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
|
|
266
|
+
readonly defaultValue: string;
|
|
267
|
+
parseServerSide(value: string | string[] | undefined): string;
|
|
268
|
+
};
|
|
259
269
|
query: Omit<nuqs_server.SingleParserBuilder<string>, "parseServerSide"> & {
|
|
260
270
|
readonly defaultValue: string;
|
|
261
271
|
parseServerSide(value: string | string[] | undefined): string;
|
|
@@ -296,6 +306,4 @@ declare const SearchParams: nuqs_server.LoaderFunction<{
|
|
|
296
306
|
declare function hasFlagSearchParam(searchParams: SearchParamSource, key: "cart" | "notification"): boolean;
|
|
297
307
|
declare function buildFlagSearchParamHref(pathname: string, searchParams: SearchParamSource, key: "cart" | "notification", enabled: boolean): string;
|
|
298
308
|
|
|
299
|
-
|
|
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 };
|
|
309
|
+
export { type NativeSharePayload, type NativeSharedFile, type NativeUpdateInfo, type NativeUpdateState, SearchParams, buildFlagSearchParamHref, 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 };
|
package/dist/lib/index.js
CHANGED
|
@@ -304,6 +304,7 @@ var parseAsFlag = createParser({
|
|
|
304
304
|
}
|
|
305
305
|
});
|
|
306
306
|
var searchParams = {
|
|
307
|
+
tab: parseAsString.withDefault(""),
|
|
307
308
|
query: parseAsString.withDefault(""),
|
|
308
309
|
category: parseAsString.withDefault(""),
|
|
309
310
|
productStatus: parseAsStringLiteral([
|
|
@@ -319,6 +320,7 @@ var searchParams = {
|
|
|
319
320
|
notification: parseAsFlag.withDefault(false)
|
|
320
321
|
};
|
|
321
322
|
var searchParamKeys = {
|
|
323
|
+
tab: "tab",
|
|
322
324
|
query: "q",
|
|
323
325
|
category: "c",
|
|
324
326
|
productStatus: "status",
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/capacitor.ts","../../src/lib/fonts.ts","../../src/lib/utils.ts","../../src/lib/openai.ts","../../src/lib/parms.ts"],"sourcesContent":["type PluginListenerHandle = {\n remove: () => Promise<void>\n}\n\ntype AppUrlOpenEvent = {\n url: string\n}\n\ntype AppPlugin = {\n addListener?: (\n eventName: \"appUrlOpen\",\n listener: (event: AppUrlOpenEvent) => void\n ) => PluginListenerHandle | Promise<PluginListenerHandle>\n}\n\ntype StatusBarStyle = \"DARK\" | \"LIGHT\" | \"DEFAULT\"\n\ntype StatusBarPlugin = {\n setBackgroundColor?: (options: { color: string }) => Promise<void>\n setStyle?: (options: { style: StatusBarStyle }) => Promise<void>\n}\n\ntype BrowserPlugin = {\n open?: (options: { url: string }) => Promise<void>\n}\n\ntype NativeSharePlugin = {\n share?: (options: {\n title?: string\n text?: string\n url?: string\n files?: string[]\n dialogTitle?: string\n }) => Promise<void>\n}\n\ntype NativeThemePlugin = {\n setStyle?: (options: { style: \"dark\" | \"light\" | \"system\" }) => Promise<void>\n}\n\ntype NativePaymentPlugin = {\n openUpiUrl?: (options: {\n url: string\n title?: string\n }) => Promise<{ opened: boolean }>\n}\n\nexport type NativeSharedFile = {\n name: string\n type: string\n size: number\n data: string\n}\n\ntype NativeImagePickerPlugin = {\n pickImages?: (options: {\n limit?: number\n title?: string\n }) => Promise<{ files: NativeSharedFile[] }>\n}\n\nexport type NativeSharePayload = {\n id: string\n title?: string | null\n text?: string | null\n files: NativeSharedFile[]\n}\n\ntype NativeShareTargetPlugin = {\n addListener?: (\n eventName: \"shareReceived\",\n listener: (event: NativeSharePayload) => void\n ) => PluginListenerHandle | Promise<PluginListenerHandle>\n getPendingShare?: () => Promise<{ share: NativeSharePayload | null }>\n clearPendingShare?: () => Promise<void>\n}\n\ntype NativeAppSettingsPlugin = {\n openAppSettings?: () => Promise<void>\n}\n\nexport type NativeUpdateState = {\n status: \"downloading\" | \"downloaded\" | \"installing\" | \"installed\" | \"failed\" | \"canceled\" | \"unknown\"\n bytesDownloaded: number\n totalBytesToDownload: number\n}\n\nexport type NativeUpdateInfo = NativeUpdateState & {\n available: boolean\n inProgress: boolean\n availableVersionCode: number\n installStatus: NativeUpdateState[\"status\"]\n}\n\ntype NativeInAppUpdatePlugin = {\n checkForUpdate?: () => Promise<NativeUpdateInfo>\n startUpdate?: () => Promise<void>\n completeUpdate?: () => Promise<void>\n addListener?: (\n eventName: \"updateStateChanged\",\n listener: (state: NativeUpdateState) => void\n ) => PluginListenerHandle | Promise<PluginListenerHandle>\n}\n\ntype NativeShareFilePlugin = {\n saveImage?: (options: {\n data: string\n fileName?: string\n }) => Promise<{ path?: string }>\n}\n\ntype CameraPhoto = {\n format?: string\n path?: string\n webPath?: string\n}\n\ntype CameraPlugin = {\n getPhoto?: (options: {\n allowEditing?: boolean\n quality?: number\n resultType: \"uri\"\n source?: \"PROMPT\" | \"CAMERA\" | \"PHOTOS\"\n }) => Promise<CameraPhoto>\n pickImages?: (options: {\n limit?: number\n quality?: number\n }) => Promise<{ photos: CameraPhoto[] }>\n}\n\ntype CapacitorRuntime = {\n isNativePlatform?: () => boolean\n getPlatform?: () => string\n Plugins?: {\n App?: AppPlugin\n Browser?: BrowserPlugin\n Camera?: CameraPlugin\n NativeAppSettings?: NativeAppSettingsPlugin\n NativeInAppUpdate?: NativeInAppUpdatePlugin\n NativeImagePicker?: NativeImagePickerPlugin\n NativeShareFile?: NativeShareFilePlugin\n NativePayment?: NativePaymentPlugin\n NativeTheme?: NativeThemePlugin\n NativeShareTarget?: NativeShareTargetPlugin\n Share?: NativeSharePlugin\n StatusBar?: StatusBarPlugin\n }\n}\n\ndeclare global {\n interface Window {\n Capacitor?: CapacitorRuntime\n }\n}\n\nexport function isNativeApp() {\n if (typeof window === \"undefined\") return false\n\n return window.Capacitor?.isNativePlatform?.() === true\n}\n\nexport function getNativePlatform() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.getPlatform?.() ?? null\n}\n\nexport function getNativeAppPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.App ?? null\n}\n\nexport function getNativeStatusBarPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.StatusBar ?? null\n}\n\nexport function getNativeBrowserPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.Browser ?? null\n}\n\nexport function getNativeSharePlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.Share ?? null\n}\n\nexport function getNativeCameraPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.Camera ?? null\n}\n\nexport function getNativeImagePickerPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeImagePicker ?? null\n}\n\nexport function getNativeShareFilePlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeShareFile ?? null\n}\n\nexport function getNativeThemePlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeTheme ?? null\n}\n\nexport function getNativePaymentPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativePayment ?? null\n}\n\nexport function getNativeShareTargetPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeShareTarget ?? null\n}\n\nexport function getNativeAppSettingsPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeAppSettings ?? null\n}\n\nexport function getNativeInAppUpdatePlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeInAppUpdate ?? null\n}\n\n/** Opens the OS App Info page. Returns false when unavailable (web or old shell). */\nexport async function openNativeAppSettings() {\n const settings = getNativeAppSettingsPlugin()\n\n if (!settings?.openAppSettings) return false\n\n try {\n await settings.openAppSettings()\n return true\n } catch {\n return false\n }\n}\n\nexport async function openUpiPaymentUrl(\n url: string,\n options: {\n isNative?: boolean\n title?: string\n } = {}\n) {\n if (typeof window === \"undefined\") return false\n\n if (options.isNative ?? isNativeApp()) {\n const payment = getNativePaymentPlugin()\n\n if (payment?.openUpiUrl) {\n const result = await payment.openUpiUrl({\n url,\n title: options.title,\n })\n\n return result.opened\n }\n }\n\n window.location.href = url\n return true\n}\n\nexport async function openExternalUrl(\n url: string,\n options: {\n isNative?: boolean\n target?: string\n features?: string\n } = {}\n) {\n if (typeof window === \"undefined\") return false\n\n if (options.isNative ?? isNativeApp()) {\n const browser = getNativeBrowserPlugin()\n\n if (browser?.open) {\n await browser.open({ url })\n return true\n }\n }\n\n const opened = window.open(\n url,\n options.target ?? \"_blank\",\n options.features ?? \"noopener,noreferrer\"\n )\n\n return opened != null\n}\n\n/**\n * Saves base64 image bytes into app-private storage and returns a file:// URL\n * that @capacitor/share can attach. Returns null outside the native app or\n * when the save fails, so callers can fall back to a text-only share.\n */\nexport async function saveNativeShareImage(\n dataUrl: string,\n options: {\n fileName?: string\n isNative?: boolean\n } = {}\n) {\n if (!(options.isNative ?? isNativeApp())) return null\n\n const plugin = getNativeShareFilePlugin()\n\n if (!plugin?.saveImage) return null\n\n try {\n const result = await plugin.saveImage({\n data: dataUrl,\n fileName: options.fileName,\n })\n\n return result.path ?? null\n } catch {\n return null\n }\n}\n\nexport async function shareNativeOrWeb(\n data: {\n title?: string\n text?: string\n url?: string\n files?: string[]\n dialogTitle?: string\n },\n options: {\n isNative?: boolean\n } = {}\n) {\n if (typeof window === \"undefined\") return false\n\n if (options.isNative ?? isNativeApp()) {\n const share = getNativeSharePlugin()\n\n if (share?.share) {\n await share.share(data)\n return true\n }\n }\n\n // Web Share only accepts File objects, not file:// URL strings.\n const { files: _files, ...webData } = data\n\n if (typeof navigator.share === \"function\") {\n await navigator.share(webData)\n return true\n }\n\n return false\n}\n\nfunction isNativePickerCancel(error: unknown) {\n if (!(error instanceof Error)) return false\n\n const message = error.message.toLowerCase()\n\n return (\n message.includes(\"cancel\") ||\n message.includes(\"dismiss\") ||\n message.includes(\"no image\") ||\n message.includes(\"user denied\")\n )\n}\n\nfunction imageTypeFromFormat(format: string | undefined, fallback: string) {\n if (!format) return fallback\n\n const normalized = format.toLowerCase()\n\n if (normalized === \"jpg\") return \"image/jpeg\"\n if (normalized === \"jpeg\") return \"image/jpeg\"\n if (normalized === \"png\") return \"image/png\"\n if (normalized === \"webp\") return \"image/webp\"\n if (normalized === \"heic\") return \"image/heic\"\n if (normalized === \"heif\") return \"image/heif\"\n\n return fallback\n}\n\nfunction imageExtensionFromType(type: string) {\n if (type.includes(\"png\")) return \"png\"\n if (type.includes(\"webp\")) return \"webp\"\n if (type.includes(\"heic\")) return \"heic\"\n if (type.includes(\"heif\")) return \"heif\"\n\n return \"jpg\"\n}\n\nexport function nativeSharedFileToFile(\n sharedFile: NativeSharedFile,\n fallbackName = \"native-image.jpg\"\n) {\n const binary = atob(sharedFile.data)\n const bytes = new Uint8Array(binary.length)\n\n for (let index = 0; index < binary.length; index++) {\n bytes[index] = binary.charCodeAt(index)\n }\n\n return new File([bytes], sharedFile.name || fallbackName, {\n type: sharedFile.type || \"image/jpeg\",\n lastModified: Date.now(),\n })\n}\n\nasync function nativePhotoToFile(\n photo: CameraPhoto,\n index: number,\n prefix: string\n) {\n const src = photo.webPath ?? photo.path\n\n if (!src) {\n throw new Error(\"Unable to read selected image.\")\n }\n\n const response = await fetch(src)\n\n if (!response.ok) {\n throw new Error(\"Unable to read selected image.\")\n }\n\n const blob = await response.blob()\n const type = blob.type || imageTypeFromFormat(photo.format, \"image/jpeg\")\n const extension = imageExtensionFromType(type)\n\n return new File([blob], `${prefix}-${Date.now()}-${index}.${extension}`, {\n type,\n lastModified: Date.now(),\n })\n}\n\nexport async function pickNativeImageFiles({\n isNative,\n multiple = false,\n limit = multiple ? 10 : 1,\n quality = 85,\n prefix = \"image\",\n}: {\n isNative?: boolean\n multiple?: boolean\n limit?: number\n quality?: number\n prefix?: string\n}) {\n if (!(isNative ?? isNativeApp())) return null\n\n const camera = getNativeCameraPlugin()\n\n if (!camera) return null\n\n try {\n const photos =\n multiple && camera.pickImages\n ? (await camera.pickImages({ limit, quality })).photos\n : [\n await camera.getPhoto?.({\n allowEditing: false,\n quality,\n resultType: \"uri\",\n source: \"PROMPT\",\n }),\n ].filter((photo): photo is CameraPhoto => Boolean(photo))\n\n return Promise.all(\n photos\n .slice(0, limit)\n .map((photo, index) => nativePhotoToFile(photo, index, prefix))\n )\n } catch (error) {\n if (isNativePickerCancel(error)) return []\n throw error\n }\n}\n\nexport async function pickNativeChooserImageFiles({\n isNative,\n limit = 1,\n title = \"Select image\",\n}: {\n isNative?: boolean\n limit?: number\n title?: string\n}) {\n if (!(isNative ?? isNativeApp())) return null\n\n const picker = getNativeImagePickerPlugin()\n\n if (!picker?.pickImages) return null\n\n try {\n const result = await picker.pickImages({\n limit,\n title,\n })\n\n return (result.files ?? [])\n .filter((file) => file.type?.startsWith(\"image/\"))\n .slice(0, limit)\n .map((file) => nativeSharedFileToFile(file))\n } catch (error) {\n if (isNativePickerCancel(error)) return []\n throw error\n }\n}\n","import {\n Geist_Mono as FontMono,\n Noto_Sans_Arabic as FontNotoSansArabic,\n Noto_Sans_Hebrew as FontNotoSansHebrew,\n Geist as FontSans,\n} from \"next/font/google\"\n\nimport { cn } from \"./utils\"\n\nconst fontSans = FontSans({\n subsets: [\"latin\"],\n variable: \"--font-sans\",\n})\n\nconst fontHeading = FontSans({\n subsets: [\"latin\"],\n variable: \"--font-heading\",\n})\n\nconst fontMono = FontMono({\n subsets: [\"latin\"],\n variable: \"--font-mono\",\n weight: [\"400\"],\n})\n\nconst fontNotoSansArabic = FontNotoSansArabic({\n subsets: [\"latin\"],\n variable: \"--font-ar\",\n})\n\nconst fontNotoSansHebrew = FontNotoSansHebrew({\n subsets: [\"latin\"],\n variable: \"--font-he\",\n})\n\nexport const fontVariables = cn(\n fontSans.variable,\n fontHeading.variable,\n fontMono.variable,\n fontNotoSansArabic.variable,\n fontNotoSansHebrew.variable\n)\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { OpenAI as AI } from \"openai\"\n\nlet client: AI | undefined\n\nexport function getOpenAI() {\n const apiKey = process.env.OPENAI_API_KEY\n\n if (!apiKey) {\n throw new Error(\"OPENAI_API_KEY is not configured\")\n }\n\n client ??= new AI({ apiKey })\n\n return client\n}\n","import {\n createLoader,\n createParser,\n parseAsString,\n parseAsStringLiteral,\n type UrlKeys,\n} from \"nuqs/server\"\n\ntype SearchParamSource = Pick<URLSearchParams, \"has\" | \"toString\">\n\nconst parseAsPage = createParser({\n parse(value) {\n const page = Number(value)\n return Number.isInteger(page) && page > 0 ? page : null\n },\n serialize: String,\n}).withDefault(1)\n\nconst parseAsFlag = createParser<boolean>({\n parse(value) {\n return value === \"\" || value === \"1\" || value === \"true\" ? true : null\n },\n serialize(value) {\n return value ? \"1\" : \"\"\n },\n})\n\nexport const searchParams = {\n query: parseAsString.withDefault(\"\"),\n category: parseAsString.withDefault(\"\"),\n productStatus: parseAsStringLiteral([\n \"active\",\n \"draft\",\n \"archived\",\n ]).withDefault(\"active\"),\n user: parseAsString.withDefault(\"\"),\n transaction: parseAsString.withDefault(\"\"),\n page: parseAsPage,\n transactionPage: parseAsPage,\n cart: parseAsFlag.withDefault(false),\n notification: parseAsFlag.withDefault(false),\n}\n\nexport const searchParamKeys = {\n query: \"q\",\n category: \"c\",\n productStatus: \"status\",\n user: \"u\",\n transaction: \"id\",\n page: \"page\",\n transactionPage: \"tp\",\n cart: \"cart\",\n notification: \"notification\",\n} satisfies UrlKeys<typeof searchParams>\n\nexport const SearchParams = createLoader(searchParams, {\n urlKeys: searchParamKeys,\n})\n\nexport function hasFlagSearchParam(\n searchParams: SearchParamSource,\n key: \"cart\" | \"notification\"\n) {\n return searchParams.has(searchParamKeys[key])\n}\n\nexport function buildFlagSearchParamHref(\n pathname: string,\n searchParams: SearchParamSource,\n key: \"cart\" | \"notification\",\n enabled: boolean\n) {\n const searchKey = searchParamKeys[key]\n const nextParams = new URLSearchParams(searchParams.toString())\n\n nextParams.delete(searchKey)\n\n const query = nextParams.toString()\n if (enabled) {\n return query\n ? `${pathname}?${searchKey}&${query}`\n : `${pathname}?${searchKey}`\n }\n\n return query ? `${pathname}?${query}` : pathname\n}\n"],"mappings":"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","names":["searchParams"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/capacitor.ts","../../src/lib/fonts.ts","../../src/lib/utils.ts","../../src/lib/openai.ts","../../src/lib/parms.ts"],"sourcesContent":["type PluginListenerHandle = {\n remove: () => Promise<void>\n}\n\ntype AppUrlOpenEvent = {\n url: string\n}\n\ntype AppPlugin = {\n addListener?: (\n eventName: \"appUrlOpen\",\n listener: (event: AppUrlOpenEvent) => void\n ) => PluginListenerHandle | Promise<PluginListenerHandle>\n}\n\ntype StatusBarStyle = \"DARK\" | \"LIGHT\" | \"DEFAULT\"\n\ntype StatusBarPlugin = {\n setBackgroundColor?: (options: { color: string }) => Promise<void>\n setStyle?: (options: { style: StatusBarStyle }) => Promise<void>\n}\n\ntype BrowserPlugin = {\n open?: (options: { url: string }) => Promise<void>\n}\n\ntype NativeSharePlugin = {\n share?: (options: {\n title?: string\n text?: string\n url?: string\n files?: string[]\n dialogTitle?: string\n }) => Promise<void>\n}\n\ntype NativeThemePlugin = {\n setStyle?: (options: { style: \"dark\" | \"light\" | \"system\" }) => Promise<void>\n}\n\ntype NativePaymentPlugin = {\n openUpiUrl?: (options: {\n url: string\n title?: string\n }) => Promise<{ opened: boolean }>\n}\n\nexport type NativeSharedFile = {\n name: string\n type: string\n size: number\n data: string\n}\n\ntype NativeImagePickerPlugin = {\n pickImages?: (options: {\n limit?: number\n title?: string\n }) => Promise<{ files: NativeSharedFile[] }>\n}\n\nexport type NativeSharePayload = {\n id: string\n title?: string | null\n text?: string | null\n files: NativeSharedFile[]\n}\n\ntype NativeShareTargetPlugin = {\n addListener?: (\n eventName: \"shareReceived\",\n listener: (event: NativeSharePayload) => void\n ) => PluginListenerHandle | Promise<PluginListenerHandle>\n getPendingShare?: () => Promise<{ share: NativeSharePayload | null }>\n clearPendingShare?: () => Promise<void>\n}\n\ntype NativeAppSettingsPlugin = {\n openAppSettings?: () => Promise<void>\n}\n\nexport type NativeUpdateState = {\n status: \"downloading\" | \"downloaded\" | \"installing\" | \"installed\" | \"failed\" | \"canceled\" | \"unknown\"\n bytesDownloaded: number\n totalBytesToDownload: number\n}\n\nexport type NativeUpdateInfo = NativeUpdateState & {\n available: boolean\n inProgress: boolean\n availableVersionCode: number\n installStatus: NativeUpdateState[\"status\"]\n}\n\ntype NativeInAppUpdatePlugin = {\n checkForUpdate?: () => Promise<NativeUpdateInfo>\n startUpdate?: () => Promise<void>\n completeUpdate?: () => Promise<void>\n addListener?: (\n eventName: \"updateStateChanged\",\n listener: (state: NativeUpdateState) => void\n ) => PluginListenerHandle | Promise<PluginListenerHandle>\n}\n\ntype NativeShareFilePlugin = {\n saveImage?: (options: {\n data: string\n fileName?: string\n }) => Promise<{ path?: string }>\n}\n\ntype CameraPhoto = {\n format?: string\n path?: string\n webPath?: string\n}\n\ntype CameraPlugin = {\n getPhoto?: (options: {\n allowEditing?: boolean\n quality?: number\n resultType: \"uri\"\n source?: \"PROMPT\" | \"CAMERA\" | \"PHOTOS\"\n }) => Promise<CameraPhoto>\n pickImages?: (options: {\n limit?: number\n quality?: number\n }) => Promise<{ photos: CameraPhoto[] }>\n}\n\ntype CapacitorRuntime = {\n isNativePlatform?: () => boolean\n getPlatform?: () => string\n Plugins?: {\n App?: AppPlugin\n Browser?: BrowserPlugin\n Camera?: CameraPlugin\n NativeAppSettings?: NativeAppSettingsPlugin\n NativeInAppUpdate?: NativeInAppUpdatePlugin\n NativeImagePicker?: NativeImagePickerPlugin\n NativeShareFile?: NativeShareFilePlugin\n NativePayment?: NativePaymentPlugin\n NativeTheme?: NativeThemePlugin\n NativeShareTarget?: NativeShareTargetPlugin\n Share?: NativeSharePlugin\n StatusBar?: StatusBarPlugin\n }\n}\n\ndeclare global {\n interface Window {\n Capacitor?: CapacitorRuntime\n }\n}\n\nexport function isNativeApp() {\n if (typeof window === \"undefined\") return false\n\n return window.Capacitor?.isNativePlatform?.() === true\n}\n\nexport function getNativePlatform() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.getPlatform?.() ?? null\n}\n\nexport function getNativeAppPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.App ?? null\n}\n\nexport function getNativeStatusBarPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.StatusBar ?? null\n}\n\nexport function getNativeBrowserPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.Browser ?? null\n}\n\nexport function getNativeSharePlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.Share ?? null\n}\n\nexport function getNativeCameraPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.Camera ?? null\n}\n\nexport function getNativeImagePickerPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeImagePicker ?? null\n}\n\nexport function getNativeShareFilePlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeShareFile ?? null\n}\n\nexport function getNativeThemePlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeTheme ?? null\n}\n\nexport function getNativePaymentPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativePayment ?? null\n}\n\nexport function getNativeShareTargetPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeShareTarget ?? null\n}\n\nexport function getNativeAppSettingsPlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeAppSettings ?? null\n}\n\nexport function getNativeInAppUpdatePlugin() {\n if (!isNativeApp()) return null\n\n return window.Capacitor?.Plugins?.NativeInAppUpdate ?? null\n}\n\n/** Opens the OS App Info page. Returns false when unavailable (web or old shell). */\nexport async function openNativeAppSettings() {\n const settings = getNativeAppSettingsPlugin()\n\n if (!settings?.openAppSettings) return false\n\n try {\n await settings.openAppSettings()\n return true\n } catch {\n return false\n }\n}\n\nexport async function openUpiPaymentUrl(\n url: string,\n options: {\n isNative?: boolean\n title?: string\n } = {}\n) {\n if (typeof window === \"undefined\") return false\n\n if (options.isNative ?? isNativeApp()) {\n const payment = getNativePaymentPlugin()\n\n if (payment?.openUpiUrl) {\n const result = await payment.openUpiUrl({\n url,\n title: options.title,\n })\n\n return result.opened\n }\n }\n\n window.location.href = url\n return true\n}\n\nexport async function openExternalUrl(\n url: string,\n options: {\n isNative?: boolean\n target?: string\n features?: string\n } = {}\n) {\n if (typeof window === \"undefined\") return false\n\n if (options.isNative ?? isNativeApp()) {\n const browser = getNativeBrowserPlugin()\n\n if (browser?.open) {\n await browser.open({ url })\n return true\n }\n }\n\n const opened = window.open(\n url,\n options.target ?? \"_blank\",\n options.features ?? \"noopener,noreferrer\"\n )\n\n return opened != null\n}\n\n/**\n * Saves base64 image bytes into app-private storage and returns a file:// URL\n * that @capacitor/share can attach. Returns null outside the native app or\n * when the save fails, so callers can fall back to a text-only share.\n */\nexport async function saveNativeShareImage(\n dataUrl: string,\n options: {\n fileName?: string\n isNative?: boolean\n } = {}\n) {\n if (!(options.isNative ?? isNativeApp())) return null\n\n const plugin = getNativeShareFilePlugin()\n\n if (!plugin?.saveImage) return null\n\n try {\n const result = await plugin.saveImage({\n data: dataUrl,\n fileName: options.fileName,\n })\n\n return result.path ?? null\n } catch {\n return null\n }\n}\n\nexport async function shareNativeOrWeb(\n data: {\n title?: string\n text?: string\n url?: string\n files?: string[]\n dialogTitle?: string\n },\n options: {\n isNative?: boolean\n } = {}\n) {\n if (typeof window === \"undefined\") return false\n\n if (options.isNative ?? isNativeApp()) {\n const share = getNativeSharePlugin()\n\n if (share?.share) {\n await share.share(data)\n return true\n }\n }\n\n // Web Share only accepts File objects, not file:// URL strings.\n const { files: _files, ...webData } = data\n\n if (typeof navigator.share === \"function\") {\n await navigator.share(webData)\n return true\n }\n\n return false\n}\n\nfunction isNativePickerCancel(error: unknown) {\n if (!(error instanceof Error)) return false\n\n const message = error.message.toLowerCase()\n\n return (\n message.includes(\"cancel\") ||\n message.includes(\"dismiss\") ||\n message.includes(\"no image\") ||\n message.includes(\"user denied\")\n )\n}\n\nfunction imageTypeFromFormat(format: string | undefined, fallback: string) {\n if (!format) return fallback\n\n const normalized = format.toLowerCase()\n\n if (normalized === \"jpg\") return \"image/jpeg\"\n if (normalized === \"jpeg\") return \"image/jpeg\"\n if (normalized === \"png\") return \"image/png\"\n if (normalized === \"webp\") return \"image/webp\"\n if (normalized === \"heic\") return \"image/heic\"\n if (normalized === \"heif\") return \"image/heif\"\n\n return fallback\n}\n\nfunction imageExtensionFromType(type: string) {\n if (type.includes(\"png\")) return \"png\"\n if (type.includes(\"webp\")) return \"webp\"\n if (type.includes(\"heic\")) return \"heic\"\n if (type.includes(\"heif\")) return \"heif\"\n\n return \"jpg\"\n}\n\nexport function nativeSharedFileToFile(\n sharedFile: NativeSharedFile,\n fallbackName = \"native-image.jpg\"\n) {\n const binary = atob(sharedFile.data)\n const bytes = new Uint8Array(binary.length)\n\n for (let index = 0; index < binary.length; index++) {\n bytes[index] = binary.charCodeAt(index)\n }\n\n return new File([bytes], sharedFile.name || fallbackName, {\n type: sharedFile.type || \"image/jpeg\",\n lastModified: Date.now(),\n })\n}\n\nasync function nativePhotoToFile(\n photo: CameraPhoto,\n index: number,\n prefix: string\n) {\n const src = photo.webPath ?? photo.path\n\n if (!src) {\n throw new Error(\"Unable to read selected image.\")\n }\n\n const response = await fetch(src)\n\n if (!response.ok) {\n throw new Error(\"Unable to read selected image.\")\n }\n\n const blob = await response.blob()\n const type = blob.type || imageTypeFromFormat(photo.format, \"image/jpeg\")\n const extension = imageExtensionFromType(type)\n\n return new File([blob], `${prefix}-${Date.now()}-${index}.${extension}`, {\n type,\n lastModified: Date.now(),\n })\n}\n\nexport async function pickNativeImageFiles({\n isNative,\n multiple = false,\n limit = multiple ? 10 : 1,\n quality = 85,\n prefix = \"image\",\n}: {\n isNative?: boolean\n multiple?: boolean\n limit?: number\n quality?: number\n prefix?: string\n}) {\n if (!(isNative ?? isNativeApp())) return null\n\n const camera = getNativeCameraPlugin()\n\n if (!camera) return null\n\n try {\n const photos =\n multiple && camera.pickImages\n ? (await camera.pickImages({ limit, quality })).photos\n : [\n await camera.getPhoto?.({\n allowEditing: false,\n quality,\n resultType: \"uri\",\n source: \"PROMPT\",\n }),\n ].filter((photo): photo is CameraPhoto => Boolean(photo))\n\n return Promise.all(\n photos\n .slice(0, limit)\n .map((photo, index) => nativePhotoToFile(photo, index, prefix))\n )\n } catch (error) {\n if (isNativePickerCancel(error)) return []\n throw error\n }\n}\n\nexport async function pickNativeChooserImageFiles({\n isNative,\n limit = 1,\n title = \"Select image\",\n}: {\n isNative?: boolean\n limit?: number\n title?: string\n}) {\n if (!(isNative ?? isNativeApp())) return null\n\n const picker = getNativeImagePickerPlugin()\n\n if (!picker?.pickImages) return null\n\n try {\n const result = await picker.pickImages({\n limit,\n title,\n })\n\n return (result.files ?? [])\n .filter((file) => file.type?.startsWith(\"image/\"))\n .slice(0, limit)\n .map((file) => nativeSharedFileToFile(file))\n } catch (error) {\n if (isNativePickerCancel(error)) return []\n throw error\n }\n}\n","import {\n Geist_Mono as FontMono,\n Noto_Sans_Arabic as FontNotoSansArabic,\n Noto_Sans_Hebrew as FontNotoSansHebrew,\n Geist as FontSans,\n} from \"next/font/google\"\n\nimport { cn } from \"./utils\"\n\nconst fontSans = FontSans({\n subsets: [\"latin\"],\n variable: \"--font-sans\",\n})\n\nconst fontHeading = FontSans({\n subsets: [\"latin\"],\n variable: \"--font-heading\",\n})\n\nconst fontMono = FontMono({\n subsets: [\"latin\"],\n variable: \"--font-mono\",\n weight: [\"400\"],\n})\n\nconst fontNotoSansArabic = FontNotoSansArabic({\n subsets: [\"latin\"],\n variable: \"--font-ar\",\n})\n\nconst fontNotoSansHebrew = FontNotoSansHebrew({\n subsets: [\"latin\"],\n variable: \"--font-he\",\n})\n\nexport const fontVariables = cn(\n fontSans.variable,\n fontHeading.variable,\n fontMono.variable,\n fontNotoSansArabic.variable,\n fontNotoSansHebrew.variable\n)\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { OpenAI as AI } from \"openai\"\n\nlet client: AI | undefined\n\nexport function getOpenAI() {\n const apiKey = process.env.OPENAI_API_KEY\n\n if (!apiKey) {\n throw new Error(\"OPENAI_API_KEY is not configured\")\n }\n\n client ??= new AI({ apiKey })\n\n return client\n}\n","import {\n createLoader,\n createParser,\n parseAsString,\n parseAsStringLiteral,\n type UrlKeys,\n} from \"nuqs/server\"\n\ntype SearchParamSource = Pick<URLSearchParams, \"has\" | \"toString\">\n\nconst parseAsPage = createParser({\n parse(value) {\n const page = Number(value)\n return Number.isInteger(page) && page > 0 ? page : null\n },\n serialize: String,\n}).withDefault(1)\n\nconst parseAsFlag = createParser<boolean>({\n parse(value) {\n return value === \"\" || value === \"1\" || value === \"true\" ? true : null\n },\n serialize(value) {\n return value ? \"1\" : \"\"\n },\n})\n\nexport const searchParams = {\n tab: parseAsString.withDefault(\"\"),\n query: parseAsString.withDefault(\"\"),\n category: parseAsString.withDefault(\"\"),\n productStatus: parseAsStringLiteral([\n \"active\",\n \"draft\",\n \"archived\",\n ]).withDefault(\"active\"),\n user: parseAsString.withDefault(\"\"),\n transaction: parseAsString.withDefault(\"\"),\n page: parseAsPage,\n transactionPage: parseAsPage,\n cart: parseAsFlag.withDefault(false),\n notification: parseAsFlag.withDefault(false),\n}\n\nexport const searchParamKeys = {\n tab: \"tab\",\n query: \"q\",\n category: \"c\",\n productStatus: \"status\",\n user: \"u\",\n transaction: \"id\",\n page: \"page\",\n transactionPage: \"tp\",\n cart: \"cart\",\n notification: \"notification\",\n} satisfies UrlKeys<typeof searchParams>\n\nexport const SearchParams = createLoader(searchParams, {\n urlKeys: searchParamKeys,\n})\n\nexport function hasFlagSearchParam(\n searchParams: SearchParamSource,\n key: \"cart\" | \"notification\"\n) {\n return searchParams.has(searchParamKeys[key])\n}\n\nexport function buildFlagSearchParamHref(\n pathname: string,\n searchParams: SearchParamSource,\n key: \"cart\" | \"notification\",\n enabled: boolean\n) {\n const searchKey = searchParamKeys[key]\n const nextParams = new URLSearchParams(searchParams.toString())\n\n nextParams.delete(searchKey)\n\n const query = nextParams.toString()\n if (enabled) {\n return query\n ? `${pathname}?${searchKey}&${query}`\n : `${pathname}?${searchKey}`\n }\n\n return query ? `${pathname}?${query}` : pathname\n}\n"],"mappings":"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","names":["searchParams"]}
|
package/dist/styles.css
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
@import "tw-animate-css";
|
|
3
3
|
@import "shadcn/tailwind.css";
|
|
4
4
|
@import "goey-toast/styles.css";
|
|
5
|
+
@import "feral-blob/blob.css";
|
|
5
6
|
@import "./loader.css";
|
|
6
7
|
|
|
7
8
|
@custom-variant dark (&:is(.dark *));
|
|
@@ -104,6 +105,10 @@
|
|
|
104
105
|
:root {
|
|
105
106
|
--brand: #f4511e;
|
|
106
107
|
--app-safe-top: var(--safe-area-inset-top, env(safe-area-inset-top, 0px));
|
|
108
|
+
--app-safe-bottom: var(
|
|
109
|
+
--safe-area-inset-bottom,
|
|
110
|
+
env(safe-area-inset-bottom, 0px)
|
|
111
|
+
);
|
|
107
112
|
--ease-out: cubic-bezier(0.23, 1, 0.32, 1);
|
|
108
113
|
--ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
|
|
109
114
|
--ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
|
|
@@ -292,11 +297,16 @@
|
|
|
292
297
|
@media (display-mode: standalone) {
|
|
293
298
|
:root {
|
|
294
299
|
--app-safe-top: env(safe-area-inset-top, 0px);
|
|
300
|
+
--app-safe-bottom: env(safe-area-inset-bottom, 0px);
|
|
295
301
|
}
|
|
296
302
|
}
|
|
297
303
|
|
|
298
304
|
html[data-native-app="true"] {
|
|
299
305
|
--app-safe-top: var(--safe-area-inset-top, env(safe-area-inset-top, 0px));
|
|
306
|
+
--app-safe-bottom: var(
|
|
307
|
+
--safe-area-inset-bottom,
|
|
308
|
+
env(safe-area-inset-bottom, 0px)
|
|
309
|
+
);
|
|
300
310
|
}
|
|
301
311
|
|
|
302
312
|
/* iOS apps running on macOS expose the title-bar inset as a safe area even
|
|
@@ -507,3 +517,233 @@ select:-webkit-autofill {
|
|
|
507
517
|
@apply border-input! ring-0! ring-offset-0! outline-none!;
|
|
508
518
|
}
|
|
509
519
|
}
|
|
520
|
+
:root {
|
|
521
|
+
--navigation-progress-color: var(--primary);
|
|
522
|
+
--navigation-progress-glow: color-mix(
|
|
523
|
+
in oklab,
|
|
524
|
+
var(--primary) 70%,
|
|
525
|
+
transparent
|
|
526
|
+
);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
:root[data-accent="slate"] {
|
|
530
|
+
--navigation-progress-color: #f4511e;
|
|
531
|
+
--navigation-progress-glow: #f4511e;
|
|
532
|
+
--jelly-body-top: #ffad74;
|
|
533
|
+
--jelly-body-mid: #f67e45;
|
|
534
|
+
--jelly-body-deep: #d95c2e;
|
|
535
|
+
--jelly-body-rim: #ffc396;
|
|
536
|
+
--jelly-outline: #b74527;
|
|
537
|
+
--jelly-outline-light: #e96b3b;
|
|
538
|
+
--jelly-arm-light: #ffc18d;
|
|
539
|
+
--jelly-arm-mid: #ef8049;
|
|
540
|
+
--jelly-arm-deep: #ca542c;
|
|
541
|
+
--jelly-cheek-light: #ffd1aa;
|
|
542
|
+
--jelly-cheek: #f99e70;
|
|
543
|
+
--jelly-cheek-deep: #e77b50;
|
|
544
|
+
--jelly-eye-light: #4d2415;
|
|
545
|
+
--jelly-eye: #241006;
|
|
546
|
+
--jelly-eye-deep: #120803;
|
|
547
|
+
--jelly-face-ink: #241006;
|
|
548
|
+
--jelly-face-soft: #4d2415;
|
|
549
|
+
--jelly-belly-glow: #ffba83;
|
|
550
|
+
--jelly-eye-sparkle: #e97844;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
:root[data-accent="violet"] {
|
|
554
|
+
--navigation-progress-color: #a855f7;
|
|
555
|
+
--navigation-progress-glow: #c084fc;
|
|
556
|
+
--primary: oklch(0.58 0.2 300);
|
|
557
|
+
--primary-foreground: oklch(0.985 0 0);
|
|
558
|
+
--ring: oklch(0.62 0.2 300);
|
|
559
|
+
--nucleo-gradient-1-color-1: #c084fc;
|
|
560
|
+
--nucleo-gradient-1-color-2: #6d28d9;
|
|
561
|
+
--jelly-body-top: #d8b4fe;
|
|
562
|
+
--jelly-body-mid: #a855f7;
|
|
563
|
+
--jelly-body-deep: #6d28d9;
|
|
564
|
+
--jelly-body-rim: #e9d5ff;
|
|
565
|
+
--jelly-outline: #581c87;
|
|
566
|
+
--jelly-outline-light: #9333ea;
|
|
567
|
+
--jelly-arm-light: #e9d5ff;
|
|
568
|
+
--jelly-arm-mid: #c084fc;
|
|
569
|
+
--jelly-arm-deep: #7e22ce;
|
|
570
|
+
--jelly-cheek-light: #f3e8ff;
|
|
571
|
+
--jelly-cheek: #d8b4fe;
|
|
572
|
+
--jelly-cheek-deep: #a855f7;
|
|
573
|
+
--jelly-eye-light: #2e1065;
|
|
574
|
+
--jelly-eye: #180b31;
|
|
575
|
+
--jelly-eye-deep: #0f071c;
|
|
576
|
+
--jelly-face-ink: #180b31;
|
|
577
|
+
--jelly-face-soft: #2e1065;
|
|
578
|
+
--jelly-belly-glow: #e9d5ff;
|
|
579
|
+
--jelly-eye-sparkle: #c084fc;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
.dark[data-accent="slate"] {
|
|
583
|
+
--navigation-progress-color: #ff7a00;
|
|
584
|
+
--navigation-progress-glow: #ffb38a;
|
|
585
|
+
--jelly-body-top: #ffb38a;
|
|
586
|
+
--jelly-body-mid: #f9824d;
|
|
587
|
+
--jelly-body-deep: #c84b25;
|
|
588
|
+
--jelly-body-rim: #ffd0a8;
|
|
589
|
+
--jelly-outline: #8f321d;
|
|
590
|
+
--jelly-outline-light: #e45c31;
|
|
591
|
+
--jelly-arm-light: #ffd0a8;
|
|
592
|
+
--jelly-arm-mid: #f28a52;
|
|
593
|
+
--jelly-arm-deep: #b84020;
|
|
594
|
+
--jelly-cheek-light: #ffe0c2;
|
|
595
|
+
--jelly-cheek: #ffab7d;
|
|
596
|
+
--jelly-cheek-deep: #e97849;
|
|
597
|
+
--jelly-eye-light: #4d2415;
|
|
598
|
+
--jelly-eye: #241006;
|
|
599
|
+
--jelly-eye-deep: #120803;
|
|
600
|
+
--jelly-face-ink: #241006;
|
|
601
|
+
--jelly-face-soft: #4d2415;
|
|
602
|
+
--jelly-belly-glow: #ffc18d;
|
|
603
|
+
--jelly-eye-sparkle: #f08a52;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
:root[data-accent="mint"] {
|
|
607
|
+
--navigation-progress-color: #0f766e;
|
|
608
|
+
--navigation-progress-glow: #5eead4;
|
|
609
|
+
--primary: oklch(0.58 0.17 165);
|
|
610
|
+
--primary-foreground: oklch(0.985 0 0);
|
|
611
|
+
--ring: oklch(0.62 0.17 165);
|
|
612
|
+
--nucleo-gradient-1-color-1: #6ee7b7;
|
|
613
|
+
--nucleo-gradient-1-color-2: #0f766e;
|
|
614
|
+
--jelly-body-top: #99f6e4;
|
|
615
|
+
--jelly-body-mid: #2dd4bf;
|
|
616
|
+
--jelly-body-deep: #0f766e;
|
|
617
|
+
--jelly-body-rim: #ccfbf1;
|
|
618
|
+
--jelly-outline: #115e59;
|
|
619
|
+
--jelly-outline-light: #0d9488;
|
|
620
|
+
--jelly-arm-light: #ccfbf1;
|
|
621
|
+
--jelly-arm-mid: #5eead4;
|
|
622
|
+
--jelly-arm-deep: #0f766e;
|
|
623
|
+
--jelly-cheek-light: #ecfeff;
|
|
624
|
+
--jelly-cheek: #99f6e4;
|
|
625
|
+
--jelly-cheek-deep: #2dd4bf;
|
|
626
|
+
--jelly-eye-light: #134e4a;
|
|
627
|
+
--jelly-eye: #082f2c;
|
|
628
|
+
--jelly-eye-deep: #05201e;
|
|
629
|
+
--jelly-face-ink: #082f2c;
|
|
630
|
+
--jelly-face-soft: #134e4a;
|
|
631
|
+
--jelly-belly-glow: #ccfbf1;
|
|
632
|
+
--jelly-eye-sparkle: #5eead4;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
:root[data-accent="gold"] {
|
|
636
|
+
--navigation-progress-color: #d97706;
|
|
637
|
+
--navigation-progress-glow: #facc15;
|
|
638
|
+
--primary: oklch(0.68 0.16 85);
|
|
639
|
+
--primary-foreground: oklch(0.985 0 0);
|
|
640
|
+
--ring: oklch(0.72 0.16 85);
|
|
641
|
+
--nucleo-gradient-1-color-1: #facc15;
|
|
642
|
+
--nucleo-gradient-1-color-2: #b45309;
|
|
643
|
+
--jelly-body-top: #fde68a;
|
|
644
|
+
--jelly-body-mid: #f59e0b;
|
|
645
|
+
--jelly-body-deep: #b45309;
|
|
646
|
+
--jelly-body-rim: #fef3c7;
|
|
647
|
+
--jelly-outline: #78350f;
|
|
648
|
+
--jelly-outline-light: #d97706;
|
|
649
|
+
--jelly-arm-light: #fef3c7;
|
|
650
|
+
--jelly-arm-mid: #fbbf24;
|
|
651
|
+
--jelly-arm-deep: #b45309;
|
|
652
|
+
--jelly-cheek-light: #fffbeb;
|
|
653
|
+
--jelly-cheek: #fde68a;
|
|
654
|
+
--jelly-cheek-deep: #f59e0b;
|
|
655
|
+
--jelly-eye-light: #451a03;
|
|
656
|
+
--jelly-eye: #271002;
|
|
657
|
+
--jelly-eye-deep: #180a01;
|
|
658
|
+
--jelly-face-ink: #271002;
|
|
659
|
+
--jelly-face-soft: #451a03;
|
|
660
|
+
--jelly-belly-glow: #fef3c7;
|
|
661
|
+
--jelly-eye-sparkle: #fbbf24;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
.dark[data-accent="violet"] {
|
|
665
|
+
--navigation-progress-color: #8b5cf6;
|
|
666
|
+
--navigation-progress-glow: #d8b4fe;
|
|
667
|
+
--primary: oklch(0.72 0.15 300);
|
|
668
|
+
--primary-foreground: oklch(0.16 0.02 300);
|
|
669
|
+
--ring: oklch(0.72 0.15 300);
|
|
670
|
+
--nucleo-gradient-1-color-1: #d8b4fe;
|
|
671
|
+
--nucleo-gradient-1-color-2: #8b5cf6;
|
|
672
|
+
--jelly-body-top: #c084fc;
|
|
673
|
+
--jelly-body-mid: #8b5cf6;
|
|
674
|
+
--jelly-body-deep: #5b21b6;
|
|
675
|
+
--jelly-body-rim: #e9d5ff;
|
|
676
|
+
--jelly-outline: #3b0764;
|
|
677
|
+
--jelly-outline-light: #7e22ce;
|
|
678
|
+
--jelly-arm-light: #e9d5ff;
|
|
679
|
+
--jelly-arm-mid: #a78bfa;
|
|
680
|
+
--jelly-arm-deep: #6d28d9;
|
|
681
|
+
--jelly-cheek-light: #f3e8ff;
|
|
682
|
+
--jelly-cheek: #c084fc;
|
|
683
|
+
--jelly-cheek-deep: #8b5cf6;
|
|
684
|
+
--jelly-eye-light: #1e0a3c;
|
|
685
|
+
--jelly-eye: #0f0620;
|
|
686
|
+
--jelly-eye-deep: #080310;
|
|
687
|
+
--jelly-face-ink: #0f0620;
|
|
688
|
+
--jelly-face-soft: #1e0a3c;
|
|
689
|
+
--jelly-belly-glow: #ddd6fe;
|
|
690
|
+
--jelly-eye-sparkle: #a78bfa;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.dark[data-accent="mint"] {
|
|
694
|
+
--navigation-progress-color: #14b8a6;
|
|
695
|
+
--navigation-progress-glow: #a7f3d0;
|
|
696
|
+
--primary: oklch(0.74 0.15 165);
|
|
697
|
+
--primary-foreground: oklch(0.15 0.03 165);
|
|
698
|
+
--ring: oklch(0.74 0.15 165);
|
|
699
|
+
--nucleo-gradient-1-color-1: #a7f3d0;
|
|
700
|
+
--nucleo-gradient-1-color-2: #14b8a6;
|
|
701
|
+
--jelly-body-top: #99f6e4;
|
|
702
|
+
--jelly-body-mid: #2dd4bf;
|
|
703
|
+
--jelly-body-deep: #0f766e;
|
|
704
|
+
--jelly-body-rim: #ccfbf1;
|
|
705
|
+
--jelly-outline: #134e4a;
|
|
706
|
+
--jelly-outline-light: #0d9488;
|
|
707
|
+
--jelly-arm-light: #ccfbf1;
|
|
708
|
+
--jelly-arm-mid: #5eead4;
|
|
709
|
+
--jelly-arm-deep: #0f766e;
|
|
710
|
+
--jelly-cheek-light: #ecfeff;
|
|
711
|
+
--jelly-cheek: #99f6e4;
|
|
712
|
+
--jelly-cheek-deep: #2dd4bf;
|
|
713
|
+
--jelly-eye-light: #042f2e;
|
|
714
|
+
--jelly-eye: #021c1b;
|
|
715
|
+
--jelly-eye-deep: #011211;
|
|
716
|
+
--jelly-face-ink: #021c1b;
|
|
717
|
+
--jelly-face-soft: #042f2e;
|
|
718
|
+
--jelly-belly-glow: #a7f3d0;
|
|
719
|
+
--jelly-eye-sparkle: #5eead4;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.dark[data-accent="gold"] {
|
|
723
|
+
--navigation-progress-color: #d97706;
|
|
724
|
+
--navigation-progress-glow: #fde68a;
|
|
725
|
+
--primary: oklch(0.78 0.15 85);
|
|
726
|
+
--primary-foreground: oklch(0.18 0.03 85);
|
|
727
|
+
--ring: oklch(0.78 0.15 85);
|
|
728
|
+
--nucleo-gradient-1-color-1: #fde68a;
|
|
729
|
+
--nucleo-gradient-1-color-2: #d97706;
|
|
730
|
+
--jelly-body-top: #fde68a;
|
|
731
|
+
--jelly-body-mid: #f59e0b;
|
|
732
|
+
--jelly-body-deep: #b45309;
|
|
733
|
+
--jelly-body-rim: #fef3c7;
|
|
734
|
+
--jelly-outline: #78350f;
|
|
735
|
+
--jelly-outline-light: #d97706;
|
|
736
|
+
--jelly-arm-light: #fef3c7;
|
|
737
|
+
--jelly-arm-mid: #fbbf24;
|
|
738
|
+
--jelly-arm-deep: #b45309;
|
|
739
|
+
--jelly-cheek-light: #fffbeb;
|
|
740
|
+
--jelly-cheek: #fde68a;
|
|
741
|
+
--jelly-cheek-deep: #f59e0b;
|
|
742
|
+
--jelly-eye-light: #451a03;
|
|
743
|
+
--jelly-eye: #271002;
|
|
744
|
+
--jelly-eye-deep: #180a01;
|
|
745
|
+
--jelly-face-ink: #271002;
|
|
746
|
+
--jelly-face-soft: #451a03;
|
|
747
|
+
--jelly-belly-glow: #fef3c7;
|
|
748
|
+
--jelly-eye-sparkle: #fbbf24;
|
|
749
|
+
}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ import { AlertDialog as AlertDialog$1 } from '@base-ui/react/alert-dialog';
|
|
|
5
5
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
6
6
|
import { Button as Button$1 } from '@base-ui/react/button';
|
|
7
7
|
import { VariantProps } from 'class-variance-authority';
|
|
8
|
+
import * as react from '@ariakit/react';
|
|
9
|
+
export { react as Ariakit };
|
|
8
10
|
import { Autocomplete as Autocomplete$1 } from '@base-ui/react/autocomplete';
|
|
9
11
|
export { Autocomplete as AutocompletePrimitive } from '@base-ui/react/autocomplete';
|
|
10
12
|
import { Avatar as Avatar$1 } from '@base-ui/react/avatar';
|
|
@@ -13,6 +15,8 @@ import { Separator as Separator$1 } from '@base-ui/react/separator';
|
|
|
13
15
|
import useEmblaCarousel, { UseEmblaCarouselType } from 'embla-carousel-react';
|
|
14
16
|
import * as RechartsPrimitive from 'recharts';
|
|
15
17
|
import { TooltipValueType } from 'recharts';
|
|
18
|
+
import { Checkbox as Checkbox$1 } from '@base-ui/react/checkbox';
|
|
19
|
+
import * as _base_ui_react from '@base-ui/react';
|
|
16
20
|
import { Combobox as Combobox$1 } from '@base-ui/react';
|
|
17
21
|
import { Command as Command$1 } from 'cmdk';
|
|
18
22
|
import { Dialog as Dialog$1 } from '@base-ui/react/dialog';
|
|
@@ -22,18 +26,18 @@ import { Menu } from '@base-ui/react/menu';
|
|
|
22
26
|
import { MotionProps, Variants } from 'motion/react';
|
|
23
27
|
import { ImageProps as ImageProps$1 } from 'next/image';
|
|
24
28
|
import { OTPInput as OTPInput$1 } from 'input-otp';
|
|
25
|
-
import {
|
|
26
|
-
export { BlobSpeech, JellyBlobMascot, JellyBlobMascotProps, JellyBlobMood } from 'feral-blob';
|
|
29
|
+
import { JellyBlobMood, JellyBlobMascotProps } from 'feral-blob';
|
|
30
|
+
export { BlobSpeech, BlobSpeechProps, JellyBlobEyeStyle, JellyBlobMascot, JellyBlobMascotDemo, JellyBlobMascotProps, JellyBlobMood } from 'feral-blob';
|
|
27
31
|
import { MessageScroller as MessageScroller$1 } from '@shadcn/react/message-scroller';
|
|
28
32
|
export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from '@shadcn/react/message-scroller';
|
|
29
|
-
import { ClassValue } from 'clsx';
|
|
30
33
|
import { Popover as Popover$1 } from '@base-ui/react/popover';
|
|
31
|
-
import { NumberField } from '@base-ui/react/number-field';
|
|
32
34
|
import { Radio } from '@base-ui/react/radio';
|
|
33
35
|
import { RadioGroup as RadioGroup$1 } from '@base-ui/react/radio-group';
|
|
34
36
|
import { ScrollArea as ScrollArea$1 } from '@base-ui/react/scroll-area';
|
|
35
37
|
import { Select as Select$1 } from '@base-ui/react/select';
|
|
36
38
|
import { GooeyToasterProps } from 'goey-toast';
|
|
39
|
+
import { DndContextProps, UniqueIdentifier, DragEndEvent, DragOverlay } from '@dnd-kit/core';
|
|
40
|
+
import { SortableContextProps } from '@dnd-kit/sortable';
|
|
37
41
|
import { Switch as Switch$1 } from '@base-ui/react/switch';
|
|
38
42
|
import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
|
|
39
43
|
|
|
@@ -137,9 +141,9 @@ declare function ButtonGroup({ className, orientation, ...props }: React.Compone
|
|
|
137
141
|
declare function ButtonGroupText({ className, render, ...props }: useRender.ComponentProps<"div">): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
|
|
138
142
|
declare function ButtonGroupSeparator({ className, orientation, ...props }: React.ComponentProps<typeof Separator>): React$1.JSX.Element;
|
|
139
143
|
|
|
140
|
-
declare
|
|
144
|
+
declare const Card: React$1.ForwardRefExoticComponent<Omit<React$1.ClassAttributes<HTMLDivElement> & React$1.HTMLAttributes<HTMLDivElement> & {
|
|
141
145
|
size?: "default" | "sm";
|
|
142
|
-
}
|
|
146
|
+
}, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
143
147
|
declare function CardHeader({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
|
|
144
148
|
declare function CardTitle({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
|
|
145
149
|
declare function CardDescription({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
|
|
@@ -213,6 +217,8 @@ declare function ChartLegendContent({ className, hideIcon, payload, verticalAlig
|
|
|
213
217
|
nameKey?: string;
|
|
214
218
|
} & RechartsPrimitive.DefaultLegendContentProps): React$1.JSX.Element | null;
|
|
215
219
|
|
|
220
|
+
declare function Checkbox({ className, children, ...props }: Checkbox$1.Root.Props): React$1.JSX.Element;
|
|
221
|
+
|
|
216
222
|
declare const Combobox: typeof Combobox$1.Root;
|
|
217
223
|
declare function ComboboxValue({ ...props }: Combobox$1.Value.Props): React$1.JSX.Element;
|
|
218
224
|
declare function ComboboxTrigger({ className, children, ...props }: Combobox$1.Trigger.Props): React$1.JSX.Element;
|
|
@@ -459,10 +465,52 @@ declare function ItemHeader({ className, ...props }: React$1.ComponentProps<"div
|
|
|
459
465
|
declare function ItemFooter({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
|
|
460
466
|
|
|
461
467
|
declare function JellyBlob({ ...props }: JellyBlobMascotProps): React$1.JSX.Element;
|
|
462
|
-
declare function JellyMini({ mood, className, }: {
|
|
468
|
+
declare function JellyMini({ mood, gaze, className, ...props }: Omit<JellyBlobMascotProps, "className"> & {
|
|
469
|
+
className?: string;
|
|
470
|
+
}): React$1.JSX.Element;
|
|
471
|
+
/** Returns mood-preview handlers for controls near a Jelly mascot. */
|
|
472
|
+
declare function useJellyMood(): (mood?: JellyBlobMood) => {
|
|
473
|
+
onPointerEnter?: undefined;
|
|
474
|
+
onFocus?: undefined;
|
|
475
|
+
onPointerLeave?: undefined;
|
|
476
|
+
onBlur?: undefined;
|
|
477
|
+
} | {
|
|
478
|
+
onPointerEnter: () => void;
|
|
479
|
+
onFocus: () => void;
|
|
480
|
+
onPointerLeave: () => void;
|
|
481
|
+
onBlur: () => void;
|
|
482
|
+
};
|
|
483
|
+
type JellyPreviewProps = {
|
|
463
484
|
mood?: JellyBlobMood;
|
|
485
|
+
onPointerEnter?: React$1.PointerEventHandler<HTMLElement>;
|
|
486
|
+
onPointerLeave?: React$1.PointerEventHandler<HTMLElement>;
|
|
487
|
+
onFocus?: React$1.FocusEventHandler<HTMLElement>;
|
|
488
|
+
onBlur?: React$1.FocusEventHandler<HTMLElement>;
|
|
489
|
+
};
|
|
490
|
+
declare function JellyAction({ mood, ...props }: JellyPreviewProps & React$1.ComponentProps<typeof Button>): React$1.JSX.Element;
|
|
491
|
+
declare function JellyLink({ mood, ...props }: JellyPreviewProps & React$1.ComponentProps<"a">): React$1.JSX.Element;
|
|
492
|
+
type JellyMascotConfig = Omit<JellyBlobMascotProps, "className" | "mood"> & {
|
|
493
|
+
mood?: JellyBlobMood;
|
|
494
|
+
/** Optional single-line copy rendered in the speech bubble. */
|
|
495
|
+
speech?: string;
|
|
496
|
+
};
|
|
497
|
+
type JellySize = "sm" | "md" | "lg" | "auto";
|
|
498
|
+
declare function JellyMascot({ size, className, ...config }: JellyMascotConfig & {
|
|
499
|
+
size?: JellySize;
|
|
464
500
|
className?: string;
|
|
465
501
|
}): React$1.JSX.Element;
|
|
502
|
+
declare function JellyGroup({ children, ...config }: JellyMascotConfig & {
|
|
503
|
+
children: React$1.ReactNode;
|
|
504
|
+
}): React$1.JSX.Element;
|
|
505
|
+
type JellyEmptyProps = JellyMascotConfig & {
|
|
506
|
+
title?: React$1.ReactNode;
|
|
507
|
+
description?: React$1.ReactNode;
|
|
508
|
+
actions?: React$1.ReactNode;
|
|
509
|
+
size?: JellySize;
|
|
510
|
+
className?: string;
|
|
511
|
+
};
|
|
512
|
+
/** Empty-state layout with no built-in copy; callers provide all content. */
|
|
513
|
+
declare function JellyEmpty({ title, description, actions, size, className, ...config }: JellyEmptyProps): React$1.JSX.Element;
|
|
466
514
|
|
|
467
515
|
declare function Kbd({ className, ...props }: React.ComponentProps<"kbd">): React$1.JSX.Element;
|
|
468
516
|
declare function KbdGroup({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
|
|
@@ -516,7 +564,6 @@ declare const SPRING_MOUSE: {
|
|
|
516
564
|
readonly damping: 15;
|
|
517
565
|
readonly mass: 0.3;
|
|
518
566
|
};
|
|
519
|
-
declare function cn(...inputs: ClassValue[]): string;
|
|
520
567
|
type OTPStatus = "idle" | "error" | "success";
|
|
521
568
|
interface OTPInputProps {
|
|
522
569
|
length?: number;
|
|
@@ -545,7 +592,7 @@ declare function PopoverHeader({ className, ...props }: React$1.ComponentProps<"
|
|
|
545
592
|
declare function PopoverTitle({ className, ...props }: Popover$1.Title.Props): React$1.JSX.Element;
|
|
546
593
|
declare function PopoverDescription({ className, ...props }: Popover$1.Description.Props): React$1.JSX.Element;
|
|
547
594
|
|
|
548
|
-
declare
|
|
595
|
+
declare const QuantityInput: React$1.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.NumberFieldRootProps, "ref"> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
|
|
549
596
|
|
|
550
597
|
declare function RadioGroup({ className, ...props }: RadioGroup$1.Props): React$1.JSX.Element;
|
|
551
598
|
declare function RadioGroupItem({ className, ...props }: Radio.Root.Props): React$1.JSX.Element;
|
|
@@ -780,6 +827,48 @@ declare const ShimmerSkeleton: React$1.ForwardRefExoticComponent<SkeletonProps &
|
|
|
780
827
|
|
|
781
828
|
declare const Toaster: ({ closeButton, ...props }: GooeyToasterProps) => React$1.JSX.Element;
|
|
782
829
|
|
|
830
|
+
interface GetItemValue<T> {
|
|
831
|
+
/**
|
|
832
|
+
* Callback that returns a unique identifier for each sortable item. Required for array of objects.
|
|
833
|
+
* @example getItemValue={(item) => item.id}
|
|
834
|
+
*/
|
|
835
|
+
getItemValue: (item: T) => UniqueIdentifier;
|
|
836
|
+
}
|
|
837
|
+
type SortableProps<T> = DndContextProps & (T extends object ? GetItemValue<T> : Partial<GetItemValue<T>>) & {
|
|
838
|
+
value: T[];
|
|
839
|
+
onValueChange?: (items: T[]) => void;
|
|
840
|
+
onMove?: (event: DragEndEvent & {
|
|
841
|
+
activeIndex: number;
|
|
842
|
+
overIndex: number;
|
|
843
|
+
}) => void;
|
|
844
|
+
strategy?: SortableContextProps["strategy"];
|
|
845
|
+
orientation?: "vertical" | "horizontal" | "mixed";
|
|
846
|
+
flatCursor?: boolean;
|
|
847
|
+
};
|
|
848
|
+
declare function Sortable<T>(props: SortableProps<T>): React$1.JSX.Element;
|
|
849
|
+
interface SortableContentProps extends React$1.ComponentProps<"div">, useRender.ComponentProps<"div"> {
|
|
850
|
+
strategy?: SortableContextProps["strategy"];
|
|
851
|
+
children: React$1.ReactNode;
|
|
852
|
+
withoutSlot?: boolean;
|
|
853
|
+
}
|
|
854
|
+
declare function SortableContent(props: SortableContentProps): React$1.JSX.Element;
|
|
855
|
+
interface SortableItemProps extends React$1.ComponentProps<"div">, useRender.ComponentProps<"div"> {
|
|
856
|
+
value: UniqueIdentifier;
|
|
857
|
+
asHandle?: boolean;
|
|
858
|
+
disabled?: boolean;
|
|
859
|
+
}
|
|
860
|
+
declare function SortableItem(props: SortableItemProps): React$1.JSX.Element;
|
|
861
|
+
interface SortableItemHandleProps extends React$1.ComponentProps<"button">, useRender.ComponentProps<"button"> {
|
|
862
|
+
}
|
|
863
|
+
declare function SortableItemHandle(props: SortableItemHandleProps): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
|
|
864
|
+
interface SortableOverlayProps extends Omit<React$1.ComponentProps<typeof DragOverlay>, "children"> {
|
|
865
|
+
container?: Element | DocumentFragment | null;
|
|
866
|
+
children?: ((params: {
|
|
867
|
+
value: UniqueIdentifier;
|
|
868
|
+
}) => React$1.ReactNode) | React$1.ReactNode;
|
|
869
|
+
}
|
|
870
|
+
declare function SortableOverlay(props: SortableOverlayProps): React$1.ReactPortal | null;
|
|
871
|
+
|
|
783
872
|
declare function Switch({ className, size, ...props }: Switch$1.Root.Props & {
|
|
784
873
|
size?: "sm" | "default";
|
|
785
874
|
}): React$1.JSX.Element;
|
|
@@ -791,4 +880,4 @@ declare function Tooltip({ ...props }: Tooltip$1.Root.Props): React$1.JSX.Elemen
|
|
|
791
880
|
declare function TooltipTrigger({ ...props }: Tooltip$1.Trigger.Props): React$1.JSX.Element;
|
|
792
881
|
declare function TooltipContent({ className, side, sideOffset, align, alignOffset, children, ...props }: Tooltip$1.Popup.Props & Pick<Tooltip$1.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): React$1.JSX.Element;
|
|
793
882
|
|
|
794
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AnimatedTAGProps, Apple, Autocomplete, AutocompleteClear, AutocompleteCollection, AutocompleteEmpty, AutocompleteGroup, AutocompleteGroupLabel, AutocompleteInput, AutocompleteItem, AutocompleteList, AutocompletePopup, AutocompleteRow, AutocompleteSeparator, AutocompleteStatus, AutocompleteTrigger, AutocompleteValue, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BlogCardAnimation, Bottom, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, type CustomRendererProps, DEFAULT_I18N, DEFAULT_OPERATORS, DashedSeparator, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Dock, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EASE_DRAWER, EASE_IN_OUT, EASE_OUT, EASE_OUT_CSS, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, FadeContainer, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, type Filter, type FilterFieldConfig, type FilterFieldGroup, type FilterFieldsConfig, type FilterGroup, type FilterI18nConfig, type FilterOperator, type FilterOption, type FilterOptionListRenderProps, Filters, FiltersContent, Image, type ImageProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, JellyBlob, JellyMini, Kbd, KbdGroup, Label, ListItemVariant, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, NativeAppBridge, OTPInput, type OTPInputProps, type OTPStatus, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, QuantityInput, RadioGroup, RadioGroupItem, SPRING_LAYOUT, SPRING_MOUSE, SPRING_PANEL, SPRING_PRESS, SPRING_SWAP, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShimmerSkeleton, type SkeletonProps as ShimmerSkeletonProps, Skeleton, SkeletonAvatar, SkeletonButton, type SkeletonProps, type SkeletonRounded, SkeletonText, type SkeletonVariant, Switch, Textarea, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Top, activityItemAnimation, badgeVariants, buttonGroupVariants, buttonVariants,
|
|
883
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AnimatedTAGProps, Apple, Autocomplete, AutocompleteClear, AutocompleteCollection, AutocompleteEmpty, AutocompleteGroup, AutocompleteGroupLabel, AutocompleteInput, AutocompleteItem, AutocompleteList, AutocompletePopup, AutocompleteRow, AutocompleteSeparator, AutocompleteStatus, AutocompleteTrigger, AutocompleteValue, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BlogCardAnimation, Bottom, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, type CustomRendererProps, DEFAULT_I18N, DEFAULT_OPERATORS, DashedSeparator, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Dock, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EASE_DRAWER, EASE_IN_OUT, EASE_OUT, EASE_OUT_CSS, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, FadeContainer, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, type Filter, type FilterFieldConfig, type FilterFieldGroup, type FilterFieldsConfig, type FilterGroup, type FilterI18nConfig, type FilterOperator, type FilterOption, type FilterOptionListRenderProps, Filters, FiltersContent, Image, type ImageProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, JellyAction, JellyBlob, JellyEmpty, type JellyEmptyProps, JellyGroup, JellyLink, JellyMascot, type JellyMascotConfig, JellyMini, type JellySize, Kbd, KbdGroup, Label, ListItemVariant, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, NativeAppBridge, OTPInput, type OTPInputProps, type OTPStatus, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, QuantityInput, RadioGroup, RadioGroupItem, SPRING_LAYOUT, SPRING_MOUSE, SPRING_PANEL, SPRING_PRESS, SPRING_SWAP, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShimmerSkeleton, type SkeletonProps as ShimmerSkeletonProps, Skeleton, SkeletonAvatar, SkeletonButton, type SkeletonProps, type SkeletonRounded, SkeletonText, type SkeletonVariant, Sortable, SortableContent, SortableItem, SortableItemHandle, SortableOverlay, type SortableProps, Switch, Textarea, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Top, activityItemAnimation, badgeVariants, buttonGroupVariants, buttonVariants, createFilter, createFilterGroup, fromLeftChildren, fromLeftVariant, fromRightVariant, fromTopVariant, getSkeletonVariantDuration, hamFastFadeContainer, headingFromLeft, kanbanOrderCardAnimation, kanbanOrderCardLayoutTransition, kanbanOrderCardReducedMotionAnimation, mobileNavItemSideways, opacityVariant, popUp, popUpFromBottomForText, resolveSkeletonA11yProps, searchBarSlideAnimation, skeletonRoundedClasses, skeletonVariantDefaultDuration, svgVariant, useAutocompleteFilter, useCarousel, useComboboxAnchor, useJellyMood };
|