@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/README.md
CHANGED
|
@@ -12,9 +12,9 @@ bun add @rock.star/ui
|
|
|
12
12
|
|
|
13
13
|
```tsx
|
|
14
14
|
import { Button } from "@rock.star/ui"
|
|
15
|
-
import { Loader } from "@rock.star/ui
|
|
16
|
-
import { useMounted } from "@rock.star/ui
|
|
17
|
-
import { cn } from "@rock.star/ui
|
|
15
|
+
import { Loader } from "@rock.star/ui"
|
|
16
|
+
import { useMounted } from "@rock.star/ui"
|
|
17
|
+
import { cn } from "@rock.star/ui"
|
|
18
18
|
import "@rock.star/ui/styles.css"
|
|
19
19
|
```
|
|
20
20
|
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -39,6 +39,8 @@ declare function useSearchParams(): {
|
|
|
39
39
|
isQueryPending: boolean;
|
|
40
40
|
isCategoryPending: boolean;
|
|
41
41
|
isUserPending: boolean;
|
|
42
|
+
setTab: (value: string) => void;
|
|
43
|
+
tab: string;
|
|
42
44
|
query: string;
|
|
43
45
|
category: string;
|
|
44
46
|
productStatus: NonNullable<"active" | "draft" | "archived" | null>;
|
package/dist/hooks/index.js
CHANGED
|
@@ -53,6 +53,7 @@ var parseAsFlag = createParser({
|
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
55
|
var searchParams = {
|
|
56
|
+
tab: parseAsString.withDefault(""),
|
|
56
57
|
query: parseAsString.withDefault(""),
|
|
57
58
|
category: parseAsString.withDefault(""),
|
|
58
59
|
productStatus: parseAsStringLiteral([
|
|
@@ -68,6 +69,7 @@ var searchParams = {
|
|
|
68
69
|
notification: parseAsFlag.withDefault(false)
|
|
69
70
|
};
|
|
70
71
|
var searchParamKeys = {
|
|
72
|
+
tab: "tab",
|
|
71
73
|
query: "q",
|
|
72
74
|
category: "c",
|
|
73
75
|
productStatus: "status",
|
|
@@ -337,7 +339,11 @@ function useSearchParams() {
|
|
|
337
339
|
clearAll,
|
|
338
340
|
isQueryPending: isPending,
|
|
339
341
|
isCategoryPending: isPending,
|
|
340
|
-
isUserPending: isPending
|
|
342
|
+
isUserPending: isPending,
|
|
343
|
+
setTab: (value) => updateParams(
|
|
344
|
+
{ tab: value },
|
|
345
|
+
{ history: "replace", shallow: false, scroll: false }
|
|
346
|
+
)
|
|
341
347
|
};
|
|
342
348
|
}
|
|
343
349
|
export {
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useMediaQuery.ts","../../src/hooks/useMounted.ts","../../src/lib/capacitor.ts","../../src/lib/parms.ts","../../src/hooks/useNative.ts","../../src/hooks/useSearchParams.ts"],"sourcesContent":["import { useEffect, useState } from \"react\"\n\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(false)\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(query)\n const handleChange = () => setMatches(mediaQuery.matches)\n\n handleChange()\n mediaQuery.addEventListener(\"change\", handleChange)\n\n return () => mediaQuery.removeEventListener(\"change\", handleChange)\n }, [query])\n\n return matches\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useMounted() {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n return { mounted }\n}\n","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 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","import { isNativeApp } from \"#lib/index\"\nimport { useEffect, useState } from \"react\"\n\nexport function useNative() {\n const [native, setNative] = useState<boolean | undefined>(undefined)\n\n useEffect(() => {\n setNative(isNativeApp())\n }, [])\n\n return native\n}\n","\"use client\"\n\nimport {\n usePathname,\n useRouter,\n useSearchParams as useNextSearchParams,\n} from \"next/navigation\"\nimport {\n debounce,\n useQueryStates,\n type Options as QueryStateOptions,\n} from \"nuqs\"\nimport { NuqsAdapter } from \"nuqs/adapters/next/app\"\nimport * as React from \"react\"\n\nimport {\n buildFlagSearchParamHref,\n hasFlagSearchParam,\n searchParamKeys,\n searchParams,\n} from \"../lib/parms\"\n\nexport { NuqsAdapter }\n\nconst SEARCH_DELAY = 500\nconst PRODUCT_SEARCH_DELAY = 800\n\nfunction isSearchPath(pathname: string) {\n return (\n pathname === \"/\" ||\n pathname === \"/pos\" ||\n pathname === \"/orders\" ||\n pathname.startsWith(\"/pos/\") ||\n pathname.startsWith(\"/orders/\")\n )\n}\n\nlet pendingSearchFocus = false\n\nexport function searchFocus() {\n if (!pendingSearchFocus) return false\n pendingSearchFocus = false\n return true\n}\n\nfunction searchHref(query: string) {\n const params = new URLSearchParams()\n if (query) params.set(searchParamKeys.query, query)\n const search = params.toString()\n return search ? `/?${search}` : \"/\"\n}\n\nexport function useSearchParams() {\n const pathname = usePathname()\n const router = useRouter()\n const nativeSearchParams = useNextSearchParams()\n const [isPending, startTransition] = React.useTransition()\n const [params, setParams] = useQueryStates(searchParams, {\n urlKeys: searchParamKeys,\n history: \"replace\",\n shallow: false,\n scroll: false,\n startTransition,\n })\n const productQueryRef = React.useRef(params.query)\n const productNavigationQueuedRef = React.useRef(false)\n const onSearchPath = isSearchPath(pathname)\n const cart = hasFlagSearchParam(nativeSearchParams, \"cart\")\n const notification = hasFlagSearchParam(nativeSearchParams, \"notification\")\n\n const updateParams = React.useCallback(\n (values: Parameters<typeof setParams>[0], options?: QueryStateOptions) => {\n void setParams(values, options)\n },\n [setParams]\n )\n\n const setQuery = React.useCallback(\n (value: string) => {\n const update = setParams(\n { query: value, page: 1 },\n {\n history: \"replace\",\n scroll: false,\n shallow: !onSearchPath,\n limitUrlUpdates: debounce(\n onSearchPath ? SEARCH_DELAY : PRODUCT_SEARCH_DELAY\n ),\n }\n )\n\n if (onSearchPath) return\n\n productQueryRef.current = value\n if (productNavigationQueuedRef.current) return\n productNavigationQueuedRef.current = true\n\n void update.then(() => {\n productNavigationQueuedRef.current = false\n const query = productQueryRef.current.trim()\n if (!query) return\n pendingSearchFocus = true\n router.push(searchHref(query), { scroll: true })\n })\n },\n [onSearchPath, router, setParams]\n )\n\n const commitQuery = React.useCallback(() => {\n const query = params.query.trim()\n if (!query || onSearchPath) return\n pendingSearchFocus = true\n router.push(searchHref(query), { scroll: true })\n }, [onSearchPath, params.query, router])\n\n const setCategory = React.useCallback(\n (value: string) => {\n updateParams(\n { category: value, page: 1 },\n { history: \"push\", shallow: false, scroll: true }\n )\n },\n [updateParams]\n )\n\n const setProductStatus = React.useCallback(\n (value: \"active\" | \"draft\" | \"archived\") => {\n updateParams(\n { productStatus: value, page: 1 },\n { history: \"push\", shallow: false, scroll: true }\n )\n },\n [updateParams]\n )\n\n const setUser = React.useCallback(\n (value: string) => {\n updateParams(\n { user: value },\n {\n history: \"replace\",\n shallow: false,\n scroll: false,\n limitUrlUpdates: debounce(SEARCH_DELAY),\n }\n )\n },\n [updateParams]\n )\n\n const setPage = React.useCallback(\n (value: number) => {\n updateParams(\n { page: value },\n { history: \"replace\", shallow: true, scroll: false }\n )\n },\n [updateParams]\n )\n\n const setUserTransaction = React.useCallback(\n (value: string) => {\n updateParams(\n { user: value, transaction: \"\", transactionPage: 1 },\n { history: \"replace\", shallow: false, scroll: false }\n )\n },\n [updateParams]\n )\n\n const setTransactionDetail = React.useCallback(\n (value: string) => {\n updateParams(\n { transaction: value },\n { history: \"replace\", shallow: false, scroll: false }\n )\n },\n [updateParams]\n )\n\n const clearTransactionDetail = React.useCallback(() => {\n updateParams(\n { transaction: \"\" },\n { history: \"replace\", shallow: false, scroll: false }\n )\n }, [updateParams])\n\n const clearUserTransaction = React.useCallback(() => {\n updateParams(\n { user: \"\", transaction: \"\", transactionPage: 1 },\n { history: \"replace\", shallow: false, scroll: false }\n )\n }, [updateParams])\n\n const clearAll = React.useCallback(() => {\n updateParams(\n {\n query: \"\",\n category: \"\",\n productStatus: \"active\",\n user: \"\",\n transaction: \"\",\n page: 1,\n transactionPage: 1,\n },\n {\n history: \"replace\",\n shallow: false,\n scroll: true,\n }\n )\n }, [updateParams])\n\n const setCart = React.useCallback(\n (value: boolean) => {\n // Shallow URL update (Next.js Native History API): keeps useSearchParams\n // in sync without an RSC navigation, so the cart opens/closes instantly.\n window.history.replaceState(\n null,\n \"\",\n buildFlagSearchParamHref(pathname, nativeSearchParams, \"cart\", value)\n )\n },\n [nativeSearchParams, pathname]\n )\n\n const toggleCart = React.useCallback(() => {\n setCart(!cart)\n }, [cart, setCart])\n\n const setNotification = React.useCallback(\n (value: boolean) => {\n // Shallow URL update (Next.js Native History API): keeps useSearchParams\n // in sync without an RSC navigation, so the drawer opens/closes instantly.\n window.history.replaceState(\n null,\n \"\",\n buildFlagSearchParamHref(\n pathname,\n nativeSearchParams,\n \"notification\",\n value\n )\n )\n },\n [nativeSearchParams, pathname]\n )\n\n return {\n ...params,\n cart,\n setCart,\n openCart: () => setCart(true),\n closeCart: () => setCart(false),\n toggleCart,\n notification,\n setNotification,\n openNotification: () => setNotification(true),\n closeNotification: () => setNotification(false),\n toggleNotification: () => setNotification(!notification),\n setQuery,\n setCategory,\n setProductStatus,\n setUser,\n setPage,\n setUserTransaction,\n setTransactionDetail,\n commitQuery,\n clearQuery: () => setQuery(\"\"),\n clearCategory: () => setCategory(\"\"),\n clearProductStatus: () => setProductStatus(\"active\"),\n clearUser: () => setUser(\"\"),\n clearTransactionDetail,\n clearUserTransaction,\n clearPage: () => setPage(1),\n clearAll,\n isQueryPending: isPending,\n isCategoryPending: isPending,\n isUserPending: isPending,\n }\n}\n"],"mappings":"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","names":["useEffect","useState","searchParams","useEffect","useState"]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useMediaQuery.ts","../../src/hooks/useMounted.ts","../../src/lib/capacitor.ts","../../src/lib/parms.ts","../../src/hooks/useNative.ts","../../src/hooks/useSearchParams.ts"],"sourcesContent":["import { useEffect, useState } from \"react\"\n\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(false)\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(query)\n const handleChange = () => setMatches(mediaQuery.matches)\n\n handleChange()\n mediaQuery.addEventListener(\"change\", handleChange)\n\n return () => mediaQuery.removeEventListener(\"change\", handleChange)\n }, [query])\n\n return matches\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useMounted() {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n return { mounted }\n}\n","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 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","import { isNativeApp } from \"#lib/index\"\nimport { useEffect, useState } from \"react\"\n\nexport function useNative() {\n const [native, setNative] = useState<boolean | undefined>(undefined)\n\n useEffect(() => {\n setNative(isNativeApp())\n }, [])\n\n return native\n}\n","\"use client\"\n\nimport {\n usePathname,\n useRouter,\n useSearchParams as useNextSearchParams,\n} from \"next/navigation\"\nimport {\n debounce,\n useQueryStates,\n type Options as QueryStateOptions,\n} from \"nuqs\"\nimport { NuqsAdapter } from \"nuqs/adapters/next/app\"\nimport * as React from \"react\"\n\nimport {\n buildFlagSearchParamHref,\n hasFlagSearchParam,\n searchParamKeys,\n searchParams,\n} from \"../lib/parms\"\n\nexport { NuqsAdapter }\n\nconst SEARCH_DELAY = 500\nconst PRODUCT_SEARCH_DELAY = 800\n\nfunction isSearchPath(pathname: string) {\n return (\n pathname === \"/\" ||\n pathname === \"/pos\" ||\n pathname === \"/orders\" ||\n pathname.startsWith(\"/pos/\") ||\n pathname.startsWith(\"/orders/\")\n )\n}\n\nlet pendingSearchFocus = false\n\nexport function searchFocus() {\n if (!pendingSearchFocus) return false\n pendingSearchFocus = false\n return true\n}\n\nfunction searchHref(query: string) {\n const params = new URLSearchParams()\n if (query) params.set(searchParamKeys.query, query)\n const search = params.toString()\n return search ? `/?${search}` : \"/\"\n}\n\nexport function useSearchParams() {\n const pathname = usePathname()\n const router = useRouter()\n const nativeSearchParams = useNextSearchParams()\n const [isPending, startTransition] = React.useTransition()\n const [params, setParams] = useQueryStates(searchParams, {\n urlKeys: searchParamKeys,\n history: \"replace\",\n shallow: false,\n scroll: false,\n startTransition,\n })\n const productQueryRef = React.useRef(params.query)\n const productNavigationQueuedRef = React.useRef(false)\n const onSearchPath = isSearchPath(pathname)\n const cart = hasFlagSearchParam(nativeSearchParams, \"cart\")\n const notification = hasFlagSearchParam(nativeSearchParams, \"notification\")\n\n const updateParams = React.useCallback(\n (values: Parameters<typeof setParams>[0], options?: QueryStateOptions) => {\n void setParams(values, options)\n },\n [setParams]\n )\n\n const setQuery = React.useCallback(\n (value: string) => {\n const update = setParams(\n { query: value, page: 1 },\n {\n history: \"replace\",\n scroll: false,\n shallow: !onSearchPath,\n limitUrlUpdates: debounce(\n onSearchPath ? SEARCH_DELAY : PRODUCT_SEARCH_DELAY\n ),\n }\n )\n\n if (onSearchPath) return\n\n productQueryRef.current = value\n if (productNavigationQueuedRef.current) return\n productNavigationQueuedRef.current = true\n\n void update.then(() => {\n productNavigationQueuedRef.current = false\n const query = productQueryRef.current.trim()\n if (!query) return\n pendingSearchFocus = true\n router.push(searchHref(query), { scroll: true })\n })\n },\n [onSearchPath, router, setParams]\n )\n\n const commitQuery = React.useCallback(() => {\n const query = params.query.trim()\n if (!query || onSearchPath) return\n pendingSearchFocus = true\n router.push(searchHref(query), { scroll: true })\n }, [onSearchPath, params.query, router])\n\n const setCategory = React.useCallback(\n (value: string) => {\n updateParams(\n { category: value, page: 1 },\n { history: \"push\", shallow: false, scroll: true }\n )\n },\n [updateParams]\n )\n\n const setProductStatus = React.useCallback(\n (value: \"active\" | \"draft\" | \"archived\") => {\n updateParams(\n { productStatus: value, page: 1 },\n { history: \"push\", shallow: false, scroll: true }\n )\n },\n [updateParams]\n )\n\n const setUser = React.useCallback(\n (value: string) => {\n updateParams(\n { user: value },\n {\n history: \"replace\",\n shallow: false,\n scroll: false,\n limitUrlUpdates: debounce(SEARCH_DELAY),\n }\n )\n },\n [updateParams]\n )\n\n const setPage = React.useCallback(\n (value: number) => {\n updateParams(\n { page: value },\n { history: \"replace\", shallow: true, scroll: false }\n )\n },\n [updateParams]\n )\n\n const setUserTransaction = React.useCallback(\n (value: string) => {\n updateParams(\n { user: value, transaction: \"\", transactionPage: 1 },\n { history: \"replace\", shallow: false, scroll: false }\n )\n },\n [updateParams]\n )\n\n const setTransactionDetail = React.useCallback(\n (value: string) => {\n updateParams(\n { transaction: value },\n { history: \"replace\", shallow: false, scroll: false }\n )\n },\n [updateParams]\n )\n\n const clearTransactionDetail = React.useCallback(() => {\n updateParams(\n { transaction: \"\" },\n { history: \"replace\", shallow: false, scroll: false }\n )\n }, [updateParams])\n\n const clearUserTransaction = React.useCallback(() => {\n updateParams(\n { user: \"\", transaction: \"\", transactionPage: 1 },\n { history: \"replace\", shallow: false, scroll: false }\n )\n }, [updateParams])\n\n const clearAll = React.useCallback(() => {\n updateParams(\n {\n query: \"\",\n category: \"\",\n productStatus: \"active\",\n user: \"\",\n transaction: \"\",\n page: 1,\n transactionPage: 1,\n },\n {\n history: \"replace\",\n shallow: false,\n scroll: true,\n }\n )\n }, [updateParams])\n\n const setCart = React.useCallback(\n (value: boolean) => {\n // Shallow URL update (Next.js Native History API): keeps useSearchParams\n // in sync without an RSC navigation, so the cart opens/closes instantly.\n window.history.replaceState(\n null,\n \"\",\n buildFlagSearchParamHref(pathname, nativeSearchParams, \"cart\", value)\n )\n },\n [nativeSearchParams, pathname]\n )\n\n const toggleCart = React.useCallback(() => {\n setCart(!cart)\n }, [cart, setCart])\n\n const setNotification = React.useCallback(\n (value: boolean) => {\n // Shallow URL update (Next.js Native History API): keeps useSearchParams\n // in sync without an RSC navigation, so the drawer opens/closes instantly.\n window.history.replaceState(\n null,\n \"\",\n buildFlagSearchParamHref(\n pathname,\n nativeSearchParams,\n \"notification\",\n value\n )\n )\n },\n [nativeSearchParams, pathname]\n )\n\n return {\n ...params,\n cart,\n setCart,\n openCart: () => setCart(true),\n closeCart: () => setCart(false),\n toggleCart,\n notification,\n setNotification,\n openNotification: () => setNotification(true),\n closeNotification: () => setNotification(false),\n toggleNotification: () => setNotification(!notification),\n setQuery,\n setCategory,\n setProductStatus,\n setUser,\n setPage,\n setUserTransaction,\n setTransactionDetail,\n commitQuery,\n clearQuery: () => setQuery(\"\"),\n clearCategory: () => setCategory(\"\"),\n clearProductStatus: () => setProductStatus(\"active\"),\n clearUser: () => setUser(\"\"),\n clearTransactionDetail,\n clearUserTransaction,\n clearPage: () => setPage(1),\n clearAll,\n isQueryPending: isPending,\n isCategoryPending: isPending,\n isUserPending: isPending,\n setTab: (value: string) =>\n updateParams(\n { tab: value },\n { history: \"replace\", shallow: false, scroll: false }\n ),\n }\n}\n"],"mappings":"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","names":["useEffect","useState","searchParams","useEffect","useState"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, 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, CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, 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, 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, Filter, FilterFieldConfig, FilterFieldGroup, FilterFieldsConfig, FilterGroup, FilterI18nConfig, FilterOperator, FilterOption, FilterOptionListRenderProps, Filters, FiltersContent, Image, 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, JellyEmptyProps, JellyGroup, JellyLink, JellyMascot, JellyMascotConfig, JellyMini, JellySize, Kbd, KbdGroup, Label, ListItemVariant, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, NativeAppBridge, OTPInput, OTPInputProps, 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, ShimmerSkeletonProps, Skeleton, SkeletonAvatar, SkeletonButton, ShimmerSkeletonProps as SkeletonProps, SkeletonRounded, SkeletonText, SkeletonVariant, Sortable, SortableContent, SortableItem, SortableItemHandle, SortableOverlay, 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 } from './ui/index.js';
|
|
2
|
+
import * as react from '@ariakit/react';
|
|
3
|
+
export { react as Ariakit };
|
|
4
|
+
export { BellIcon, BellIconHandle, IconSwap, Loader, LoaderProps } from './icon/index.js';
|
|
5
|
+
export { searchFocus, useMediaQuery, useMounted, useNative, useSearchParams } from './hooks/index.js';
|
|
6
|
+
export { c as cn } from './utils-Cbsgs0XP.js';
|
|
7
|
+
export { getCountryFlagUrl } from './utils/index.js';
|
|
8
|
+
export { Autocomplete as AutocompletePrimitive } from '@base-ui/react/autocomplete';
|
|
9
|
+
export { BlobSpeech, BlobSpeechProps, JellyBlobEyeStyle, JellyBlobMascot, JellyBlobMascotDemo, JellyBlobMascotProps, JellyBlobMood } from 'feral-blob';
|
|
10
|
+
export { NuqsAdapter } from 'nuqs/adapters/next/app';
|
|
11
|
+
export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from '@shadcn/react/message-scroller';
|
|
12
|
+
import '@base-ui/react/accordion';
|
|
13
|
+
import 'react';
|
|
14
|
+
import '@base-ui/react/alert-dialog';
|
|
15
|
+
import 'class-variance-authority/types';
|
|
16
|
+
import '@base-ui/react/button';
|
|
17
|
+
import 'class-variance-authority';
|
|
18
|
+
import '@base-ui/react/avatar';
|
|
19
|
+
import '@base-ui/react/use-render';
|
|
20
|
+
import '@base-ui/react/separator';
|
|
21
|
+
import 'embla-carousel-react';
|
|
22
|
+
import 'recharts';
|
|
23
|
+
import '@base-ui/react/checkbox';
|
|
24
|
+
import '@base-ui/react';
|
|
25
|
+
import 'cmdk';
|
|
26
|
+
import '@base-ui/react/dialog';
|
|
27
|
+
import 'lucide-react';
|
|
28
|
+
import '@base-ui/react/drawer';
|
|
29
|
+
import '@base-ui/react/menu';
|
|
30
|
+
import 'motion/react';
|
|
31
|
+
import 'next/image';
|
|
32
|
+
import 'input-otp';
|
|
33
|
+
import '@base-ui/react/popover';
|
|
34
|
+
import '@base-ui/react/radio';
|
|
35
|
+
import '@base-ui/react/radio-group';
|
|
36
|
+
import '@base-ui/react/scroll-area';
|
|
37
|
+
import '@base-ui/react/select';
|
|
38
|
+
import 'goey-toast';
|
|
39
|
+
import '@dnd-kit/core';
|
|
40
|
+
import '@dnd-kit/sortable';
|
|
41
|
+
import '@base-ui/react/switch';
|
|
42
|
+
import '@base-ui/react/tooltip';
|
|
43
|
+
import 'clsx';
|