@medialane/ui 0.298.0 → 0.299.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/badge.d.cts +1 -1
- package/dist/components/badge.d.ts +1 -1
- package/dist/components/button.d.cts +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/nav-command-menu.cjs +8 -1
- package/dist/components/nav-command-menu.cjs.map +1 -1
- package/dist/components/nav-command-menu.d.cts +1 -0
- package/dist/components/nav-command-menu.d.ts +1 -0
- package/dist/components/nav-command-menu.js +8 -1
- package/dist/components/nav-command-menu.js.map +1 -1
- package/dist/data/nav-commands.cjs +1 -1
- package/dist/data/nav-commands.cjs.map +1 -1
- package/dist/data/nav-commands.d.cts +1 -0
- package/dist/data/nav-commands.d.ts +1 -0
- package/dist/data/nav-commands.js +1 -1
- package/dist/data/nav-commands.js.map +1 -1
- package/dist/utils/media-wallet/use-erc20-balance.d.cts +1 -1
- package/dist/utils/media-wallet/use-erc20-balance.d.ts +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
6
|
declare const badgeVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
7
|
+
variant?: "default" | "secondary" | "outline" | "destructive" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
10
10
|
}
|
|
@@ -4,7 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
6
|
declare const badgeVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
7
|
+
variant?: "default" | "secondary" | "outline" | "destructive" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
10
10
|
}
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const buttonVariants: (props?: ({
|
|
6
|
-
variant?: "
|
|
6
|
+
variant?: "link" | "default" | "secondary" | "outline" | "destructive" | "ghost" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
|
|
7
7
|
size?: "default" | "icon" | "sm" | "lg" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const buttonVariants: (props?: ({
|
|
6
|
-
variant?: "
|
|
6
|
+
variant?: "link" | "default" | "secondary" | "outline" | "destructive" | "ghost" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
|
|
7
7
|
size?: "default" | "icon" | "sm" | "lg" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
@@ -189,7 +189,14 @@ function CommandRow({ item, primary, onSelect }) {
|
|
|
189
189
|
primary ? "px-2.5 py-2.5" : "px-2.5 py-2"
|
|
190
190
|
),
|
|
191
191
|
children: [
|
|
192
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
192
|
+
item.iconSrc ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
193
|
+
"img",
|
|
194
|
+
{
|
|
195
|
+
src: item.iconSrc,
|
|
196
|
+
alt: "",
|
|
197
|
+
className: (0, import_cn.cn)("shrink-0 rounded-lg", primary ? "h-9 w-9" : "h-8 w-8")
|
|
198
|
+
}
|
|
199
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
193
200
|
"span",
|
|
194
201
|
{
|
|
195
202
|
className: (0, import_cn.cn)(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/nav-command-menu.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Command, defaultFilter } from \"cmdk\";\nimport { assetHref, collectionHref, profileHref } from \"@medialane/sdk\";\nimport { useRouter } from \"./router.js\";\nimport { Search, X, ArrowRight, Loader2 } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"../utils/cn.js\";\nimport { profileIdentity } from \"../utils/profile-identity.js\";\nimport { useSearch, SEARCH_MIN_LENGTH } from \"../utils/use-search.js\";\nimport { ResultThumbnail } from \"./result-thumbnail.js\";\n\nexport interface NavCommand {\n id: string;\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n href?: string;\n action?: () => void;\n\n keywords?: string[];\n\n description?: string;\n}\n\nexport interface NavCommandGroup {\n\n heading?: string;\n items: NavCommand[];\n}\n\nexport interface NavCommandMenuProps {\n commands: NavCommandGroup[];\n\n trigger?: React.ReactNode;\n\n accountSlot?: React.ReactNode;\n\n footerSlot?: React.ReactNode;\n\n showKeyboardHints?: boolean;\n\n brandSlot?: React.ReactNode;\n\n search?: boolean;\n}\n\nconst ML_NAV_OPEN = \"ml:nav-open\";\nconst ML_NAV_CLOSE = \"ml:nav-close\";\n\nexport function useNavCommandMenu() {\n return {\n open: () => document.dispatchEvent(new CustomEvent(ML_NAV_OPEN)),\n close: () => document.dispatchEvent(new CustomEvent(ML_NAV_CLOSE)),\n };\n}\n\nfunction Kbd({ children, className }: { children: React.ReactNode; className?: string }) {\n return (\n <kbd\n className={cn(\n \"inline-flex min-w-[18px] items-center justify-center rounded-md bg-muted/60 px-1.5 py-0.5\",\n \"font-sans text-2xs leading-none text-muted-foreground\",\n className\n )}\n >\n {children}\n </kbd>\n );\n}\n\nconst RELEVANCE_FLOOR = 0.2;\n\nexport function relevanceFilter(value: string, search: string, keywords?: string[]): number {\n const score = defaultFilter(value, search, keywords);\n return score >= RELEVANCE_FLOOR ? score : 0;\n}\n\nfunction commandValue(item: NavCommand) {\n return [item.label, ...(item.keywords ?? [])].join(\" \");\n}\n\nexport function matchCommands(commands: NavCommandGroup[], query: string): NavCommand[] {\n const q = query.trim();\n if (!q) return [];\n return commands\n .flatMap((group) => group.items)\n .map((item) => ({ item, score: relevanceFilter(commandValue(item), q) }))\n .filter(({ score }) => score > 0)\n .sort((a, b) => b.score - a.score)\n .map(({ item }) => item);\n}\n\nconst SEARCH_DEBOUNCE_MS = 250;\nconst SEARCH_LIMIT = 4;\n\nfunction useDebouncedQuery(query: string) {\n const [debounced, setDebounced] = React.useState(query);\n React.useEffect(() => {\n if (!query.trim()) {\n setDebounced(query);\n return;\n }\n const t = setTimeout(() => setDebounced(query), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(t);\n }, [query]);\n return debounced;\n}\n\nfunction useMenuSearch(query: string) {\n return useSearch(query, { limit: SEARCH_LIMIT, keepPrevious: true });\n}\n\nfunction SearchIcon({ query, active }: { query: string; active: boolean }) {\n const { isLoading } = useMenuSearch(query);\n return isLoading ? (\n <Loader2 className=\"h-[18px] w-[18px] shrink-0 animate-spin text-primary\" />\n ) : (\n <Search className={cn(\"h-[18px] w-[18px] shrink-0 transition-colors\", active ? \"text-primary\" : \"text-muted-foreground\")} />\n );\n}\n\nfunction ResultRow({ value, label, description, leading, onSelect }: {\n value: string;\n label: string;\n description?: string | null;\n leading: React.ReactNode;\n onSelect: () => void;\n}) {\n return (\n <Command.Item\n value={value}\n onSelect={onSelect}\n className=\"group/item flex cursor-pointer items-center gap-3 rounded-xl px-2.5 py-2 transition-colors duration-150 aria-selected:bg-primary/10\"\n >\n {leading}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm leading-tight\">{label}</span>\n {description && (\n <span className=\"mt-0.5 block truncate text-[11.5px] leading-tight text-muted-foreground\">{description}</span>\n )}\n </span>\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/30 transition-colors group-aria-selected/item:text-primary/70\" />\n </Command.Item>\n );\n}\n\nfunction SearchResults({ query, debouncedQuery, onNavigate }: {\n query: string;\n debouncedQuery: string;\n onNavigate: (href: string) => void;\n}) {\n const { results } = useMenuSearch(debouncedQuery);\n const creators = results?.creators ?? [];\n const collections = results?.collections ?? [];\n const tokens = results?.tokens ?? [];\n const q = query.trim();\n\n return (\n <>\n {creators.length > 0 && (\n <Command.Group heading=\"Creators\" className={GROUP_HEADING_CLASSES}>\n {creators.map((creator) => {\n const { identity, name } = profileIdentity(creator);\n return (\n <ResultRow\n key={creator.walletAddress}\n value={`creator:${creator.walletAddress}`}\n label={identity}\n description={name}\n leading={<ResultThumbnail src={creator.avatarImage} label={identity} round />}\n onSelect={() => onNavigate(profileHref({ username: creator.username, address: creator.walletAddress }))}\n />\n );\n })}\n </Command.Group>\n )}\n {collections.length > 0 && (\n <Command.Group heading=\"Collections\" className={GROUP_HEADING_CLASSES}>\n {collections.map((col) => {\n const label = col.name ?? \"Untitled\";\n return (\n <ResultRow\n key={col.contractAddress}\n value={`collection:${col.contractAddress}`}\n label={label}\n leading={<ResultThumbnail src={col.image} label={label} />}\n onSelect={() => onNavigate(collectionHref(\"STARKNET\", col.contractAddress))}\n />\n );\n })}\n </Command.Group>\n )}\n {tokens.length > 0 && (\n <Command.Group heading=\"Assets\" className={GROUP_HEADING_CLASSES}>\n {tokens.map((token) => {\n const label = token.name ?? `#${token.tokenId}`;\n return (\n <ResultRow\n key={`${token.contractAddress}-${token.tokenId}`}\n value={`asset:${token.contractAddress}:${token.tokenId}`}\n label={label}\n leading={<ResultThumbnail src={token.image} label={label} />}\n onSelect={() => onNavigate(assetHref(\"STARKNET\", token.contractAddress, token.tokenId))}\n />\n );\n })}\n </Command.Group>\n )}\n <Command.Group className={GROUP_HEADING_CLASSES}>\n <ResultRow\n value=\"search:all\"\n label={`All results for \"${q}\"`}\n leading={\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-muted/50 group-aria-selected/item:bg-primary/15\">\n <Search className=\"h-4 w-4 text-foreground/80 transition-colors group-aria-selected/item:text-primary\" />\n </span>\n }\n onSelect={() => onNavigate(`/search?q=${encodeURIComponent(q)}`)}\n />\n </Command.Group>\n </>\n );\n}\n\nfunction CommandRow({ item, primary, onSelect }: { item: NavCommand; primary: boolean; onSelect: () => void }) {\n return (\n <Command.Item\n value={commandValue(item)}\n onSelect={onSelect}\n className={cn(\n \"group/item flex cursor-pointer items-center gap-3 rounded-xl\",\n \"transition-colors duration-150 aria-selected:bg-primary/10\",\n primary ? \"px-2.5 py-2.5\" : \"px-2.5 py-2\"\n )}\n >\n <span\n className={cn(\n \"flex shrink-0 items-center justify-center rounded-lg transition-colors\",\n \"bg-muted/50 group-aria-selected/item:bg-primary/15\",\n primary ? \"h-9 w-9\" : \"h-8 w-8\"\n )}\n >\n <item.icon\n className={cn(\n \"text-foreground/80 transition-colors group-aria-selected/item:text-primary\",\n primary ? \"h-[18px] w-[18px]\" : \"h-4 w-4\"\n )}\n />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\n \"block truncate leading-tight\",\n primary ? \"text-base font-medium\" : \"text-sm\"\n )}\n >\n {item.label}\n </span>\n {item.description && (\n <span className=\"mt-0.5 block truncate text-[11.5px] leading-tight text-muted-foreground\">\n {item.description}\n </span>\n )}\n </span>\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/30 transition-colors group-aria-selected/item:text-primary/70\" />\n </Command.Item>\n );\n}\n\nconst GROUP_HEADING_CLASSES = cn(\n \"[&_[cmdk-group-heading]]:px-2.5\",\n \"[&_[cmdk-group-heading]]:pt-2\",\n \"[&_[cmdk-group-heading]]:pb-1\",\n \"[&_[cmdk-group-heading]]:text-[10.5px]\",\n \"[&_[cmdk-group-heading]]:font-semibold\",\n \"[&_[cmdk-group-heading]]:uppercase\",\n \"[&_[cmdk-group-heading]]:tracking-[0.08em]\",\n \"[&_[cmdk-group-heading]]:text-muted-foreground/60\"\n);\n\nexport function NavCommandMenu({\n commands,\n trigger,\n accountSlot,\n footerSlot,\n showKeyboardHints = true,\n brandSlot,\n search = false,\n}: NavCommandMenuProps) {\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState(\"\");\n const debouncedQuery = useDebouncedQuery(query);\n const searching = query.trim().length > 0;\n const searchingContent = search && query.trim().length >= SEARCH_MIN_LENGTH;\n const matches = React.useMemo(() => matchCommands(commands, query), [commands, query]);\n const router = useRouter();\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (!open) return;\n setQuery(\"\");\n const t = setTimeout(() => inputRef.current?.focus(), 60);\n return () => clearTimeout(t);\n }, [open]);\n\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"k\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n if (e.key === \"Escape\") setOpen(false);\n };\n const onOpen = () => setOpen(true);\n const onClose = () => setOpen(false);\n\n document.addEventListener(\"keydown\", onKey);\n document.addEventListener(ML_NAV_OPEN, onOpen);\n document.addEventListener(ML_NAV_CLOSE, onClose);\n return () => {\n document.removeEventListener(\"keydown\", onKey);\n document.removeEventListener(ML_NAV_OPEN, onOpen);\n document.removeEventListener(ML_NAV_CLOSE, onClose);\n };\n }, []);\n\n const navigate = React.useCallback(\n (href: string) => {\n setOpen(false);\n router.push(href);\n },\n [router]\n );\n\n const runCommand = React.useCallback(\n (cmd: NavCommand) => {\n if (cmd.href) return navigate(cmd.href);\n setOpen(false);\n cmd.action?.();\n },\n [navigate]\n );\n\n return (\n <>\n {trigger}\n\n <AnimatePresence>\n {open && (\n <>\n\n <motion.div\n className=\"nav-canvas-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n onClick={() => setOpen(false)}\n />\n\n <motion.div\n className=\"fixed inset-0 z-[101] flex items-end justify-center p-3 pb-[calc(1rem+env(safe-area-inset-bottom))] sm:items-center sm:p-4\"\n initial={{ opacity: 0, y: 24, scale: 1 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 24 }}\n transition={{ duration: 0.18, ease: \"easeOut\" }}\n onClick={() => setOpen(false)}\n >\n <div\n className={cn(\n \"flex w-full max-h-[85dvh] flex-col overflow-hidden rounded-[20px] sm:max-h-[min(680px,88dvh)] sm:max-w-[620px]\",\n \"bg-background/90 backdrop-blur-2xl backdrop-saturate-150\"\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <Command shouldFilter={false} label=\"Medialane navigation\" className=\"flex min-h-0 flex-1 flex-col\">\n\n <div className=\"flex justify-center pt-2.5 sm:hidden\" aria-hidden=\"true\">\n <span className=\"h-1 w-9 rounded-full bg-muted-foreground/30\" />\n </div>\n\n <div className=\"flex items-center gap-3 border-b border-border/40 px-4 py-3.5\">\n {search ? (\n <SearchIcon query={debouncedQuery} active={Boolean(query)} />\n ) : (\n <Search\n className={cn(\n \"h-[18px] w-[18px] shrink-0 transition-colors\",\n query ? \"text-primary\" : \"text-muted-foreground\"\n )}\n />\n )}\n <Command.Input\n ref={inputRef}\n value={query}\n onValueChange={setQuery}\n placeholder=\"Search or run a command…\"\n className=\"flex-1 bg-transparent text-base outline-none placeholder:text-muted-foreground\"\n />\n <Kbd className=\"hidden sm:inline-flex\">esc</Kbd>\n <button\n onClick={() => setOpen(false)}\n className=\"rounded-md p-1 transition-colors hover:bg-muted/50 sm:hidden\"\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </div>\n\n <Command.List className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain p-2\">\n <Command.Empty className=\"py-8 text-center text-sm text-muted-foreground\">\n No results found.\n </Command.Empty>\n\n {searching ? (\n <>\n {matches.length > 0 && (\n <Command.Group className={GROUP_HEADING_CLASSES}>\n {matches.map((item) => (\n <CommandRow\n key={item.id}\n item={item}\n primary={false}\n onSelect={() => runCommand(item)}\n />\n ))}\n </Command.Group>\n )}\n {searchingContent && (\n <SearchResults query={query} debouncedQuery={debouncedQuery} onNavigate={navigate} />\n )}\n </>\n ) : (\n commands.map((group, i) => {\n const primary = !group.heading;\n return (\n <React.Fragment key={group.heading ?? `__primary-${i}`}>\n {i > 0 && (\n <Command.Separator className=\"my-1.5 h-px bg-border/40\" />\n )}\n <Command.Group heading={group.heading} className={GROUP_HEADING_CLASSES}>\n {group.items.map((item) => (\n <CommandRow\n key={item.id}\n item={item}\n primary={primary}\n onSelect={() => runCommand(item)}\n />\n ))}\n </Command.Group>\n </React.Fragment>\n );\n })\n )}\n </Command.List>\n\n {accountSlot && (\n <div className=\"border-t border-border/40 bg-muted/20 px-3 py-3\">\n {accountSlot}\n </div>\n )}\n\n <div className=\"flex items-center justify-between gap-3 border-t border-border/40 bg-muted/20 px-3 py-2\">\n <div className=\"flex items-center gap-3\">\n {footerSlot}\n {showKeyboardHints && (\n <span className=\"hidden items-center gap-3 text-[10.5px] text-muted-foreground/70 sm:flex\">\n <span className=\"flex items-center gap-1\"><Kbd>↑</Kbd><Kbd>↓</Kbd> Navigate</span>\n <span className=\"flex items-center gap-1\"><Kbd>↵</Kbd> Open</span>\n </span>\n )}\n </div>\n {brandSlot ?? (\n <span className=\"flex shrink-0 items-center gap-2 text-2xs text-muted-foreground/50\">\n medialane\n <Kbd className=\"hidden sm:inline-flex\">⌘K</Kbd>\n </span>\n )}\n </div>\n </Command>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/nav-command-menu.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Command, defaultFilter } from \"cmdk\";\nimport { assetHref, collectionHref, profileHref } from \"@medialane/sdk\";\nimport { useRouter } from \"./router.js\";\nimport { Search, X, ArrowRight, Loader2 } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"../utils/cn.js\";\nimport { profileIdentity } from \"../utils/profile-identity.js\";\nimport { useSearch, SEARCH_MIN_LENGTH } from \"../utils/use-search.js\";\nimport { ResultThumbnail } from \"./result-thumbnail.js\";\n\nexport interface NavCommand {\n id: string;\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n iconSrc?: string;\n href?: string;\n action?: () => void;\n\n keywords?: string[];\n\n description?: string;\n}\n\nexport interface NavCommandGroup {\n\n heading?: string;\n items: NavCommand[];\n}\n\nexport interface NavCommandMenuProps {\n commands: NavCommandGroup[];\n\n trigger?: React.ReactNode;\n\n accountSlot?: React.ReactNode;\n\n footerSlot?: React.ReactNode;\n\n showKeyboardHints?: boolean;\n\n brandSlot?: React.ReactNode;\n\n search?: boolean;\n}\n\nconst ML_NAV_OPEN = \"ml:nav-open\";\nconst ML_NAV_CLOSE = \"ml:nav-close\";\n\nexport function useNavCommandMenu() {\n return {\n open: () => document.dispatchEvent(new CustomEvent(ML_NAV_OPEN)),\n close: () => document.dispatchEvent(new CustomEvent(ML_NAV_CLOSE)),\n };\n}\n\nfunction Kbd({ children, className }: { children: React.ReactNode; className?: string }) {\n return (\n <kbd\n className={cn(\n \"inline-flex min-w-[18px] items-center justify-center rounded-md bg-muted/60 px-1.5 py-0.5\",\n \"font-sans text-2xs leading-none text-muted-foreground\",\n className\n )}\n >\n {children}\n </kbd>\n );\n}\n\nconst RELEVANCE_FLOOR = 0.2;\n\nexport function relevanceFilter(value: string, search: string, keywords?: string[]): number {\n const score = defaultFilter(value, search, keywords);\n return score >= RELEVANCE_FLOOR ? score : 0;\n}\n\nfunction commandValue(item: NavCommand) {\n return [item.label, ...(item.keywords ?? [])].join(\" \");\n}\n\nexport function matchCommands(commands: NavCommandGroup[], query: string): NavCommand[] {\n const q = query.trim();\n if (!q) return [];\n return commands\n .flatMap((group) => group.items)\n .map((item) => ({ item, score: relevanceFilter(commandValue(item), q) }))\n .filter(({ score }) => score > 0)\n .sort((a, b) => b.score - a.score)\n .map(({ item }) => item);\n}\n\nconst SEARCH_DEBOUNCE_MS = 250;\nconst SEARCH_LIMIT = 4;\n\nfunction useDebouncedQuery(query: string) {\n const [debounced, setDebounced] = React.useState(query);\n React.useEffect(() => {\n if (!query.trim()) {\n setDebounced(query);\n return;\n }\n const t = setTimeout(() => setDebounced(query), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(t);\n }, [query]);\n return debounced;\n}\n\nfunction useMenuSearch(query: string) {\n return useSearch(query, { limit: SEARCH_LIMIT, keepPrevious: true });\n}\n\nfunction SearchIcon({ query, active }: { query: string; active: boolean }) {\n const { isLoading } = useMenuSearch(query);\n return isLoading ? (\n <Loader2 className=\"h-[18px] w-[18px] shrink-0 animate-spin text-primary\" />\n ) : (\n <Search className={cn(\"h-[18px] w-[18px] shrink-0 transition-colors\", active ? \"text-primary\" : \"text-muted-foreground\")} />\n );\n}\n\nfunction ResultRow({ value, label, description, leading, onSelect }: {\n value: string;\n label: string;\n description?: string | null;\n leading: React.ReactNode;\n onSelect: () => void;\n}) {\n return (\n <Command.Item\n value={value}\n onSelect={onSelect}\n className=\"group/item flex cursor-pointer items-center gap-3 rounded-xl px-2.5 py-2 transition-colors duration-150 aria-selected:bg-primary/10\"\n >\n {leading}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm leading-tight\">{label}</span>\n {description && (\n <span className=\"mt-0.5 block truncate text-[11.5px] leading-tight text-muted-foreground\">{description}</span>\n )}\n </span>\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/30 transition-colors group-aria-selected/item:text-primary/70\" />\n </Command.Item>\n );\n}\n\nfunction SearchResults({ query, debouncedQuery, onNavigate }: {\n query: string;\n debouncedQuery: string;\n onNavigate: (href: string) => void;\n}) {\n const { results } = useMenuSearch(debouncedQuery);\n const creators = results?.creators ?? [];\n const collections = results?.collections ?? [];\n const tokens = results?.tokens ?? [];\n const q = query.trim();\n\n return (\n <>\n {creators.length > 0 && (\n <Command.Group heading=\"Creators\" className={GROUP_HEADING_CLASSES}>\n {creators.map((creator) => {\n const { identity, name } = profileIdentity(creator);\n return (\n <ResultRow\n key={creator.walletAddress}\n value={`creator:${creator.walletAddress}`}\n label={identity}\n description={name}\n leading={<ResultThumbnail src={creator.avatarImage} label={identity} round />}\n onSelect={() => onNavigate(profileHref({ username: creator.username, address: creator.walletAddress }))}\n />\n );\n })}\n </Command.Group>\n )}\n {collections.length > 0 && (\n <Command.Group heading=\"Collections\" className={GROUP_HEADING_CLASSES}>\n {collections.map((col) => {\n const label = col.name ?? \"Untitled\";\n return (\n <ResultRow\n key={col.contractAddress}\n value={`collection:${col.contractAddress}`}\n label={label}\n leading={<ResultThumbnail src={col.image} label={label} />}\n onSelect={() => onNavigate(collectionHref(\"STARKNET\", col.contractAddress))}\n />\n );\n })}\n </Command.Group>\n )}\n {tokens.length > 0 && (\n <Command.Group heading=\"Assets\" className={GROUP_HEADING_CLASSES}>\n {tokens.map((token) => {\n const label = token.name ?? `#${token.tokenId}`;\n return (\n <ResultRow\n key={`${token.contractAddress}-${token.tokenId}`}\n value={`asset:${token.contractAddress}:${token.tokenId}`}\n label={label}\n leading={<ResultThumbnail src={token.image} label={label} />}\n onSelect={() => onNavigate(assetHref(\"STARKNET\", token.contractAddress, token.tokenId))}\n />\n );\n })}\n </Command.Group>\n )}\n <Command.Group className={GROUP_HEADING_CLASSES}>\n <ResultRow\n value=\"search:all\"\n label={`All results for \"${q}\"`}\n leading={\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-muted/50 group-aria-selected/item:bg-primary/15\">\n <Search className=\"h-4 w-4 text-foreground/80 transition-colors group-aria-selected/item:text-primary\" />\n </span>\n }\n onSelect={() => onNavigate(`/search?q=${encodeURIComponent(q)}`)}\n />\n </Command.Group>\n </>\n );\n}\n\nfunction CommandRow({ item, primary, onSelect }: { item: NavCommand; primary: boolean; onSelect: () => void }) {\n return (\n <Command.Item\n value={commandValue(item)}\n onSelect={onSelect}\n className={cn(\n \"group/item flex cursor-pointer items-center gap-3 rounded-xl\",\n \"transition-colors duration-150 aria-selected:bg-primary/10\",\n primary ? \"px-2.5 py-2.5\" : \"px-2.5 py-2\"\n )}\n >\n {item.iconSrc ? (\n <img\n src={item.iconSrc}\n alt=\"\"\n className={cn(\"shrink-0 rounded-lg\", primary ? \"h-9 w-9\" : \"h-8 w-8\")}\n />\n ) : (\n <span\n className={cn(\n \"flex shrink-0 items-center justify-center rounded-lg transition-colors\",\n \"bg-muted/50 group-aria-selected/item:bg-primary/15\",\n primary ? \"h-9 w-9\" : \"h-8 w-8\"\n )}\n >\n <item.icon\n className={cn(\n \"text-foreground/80 transition-colors group-aria-selected/item:text-primary\",\n primary ? \"h-[18px] w-[18px]\" : \"h-4 w-4\"\n )}\n />\n </span>\n )}\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\n \"block truncate leading-tight\",\n primary ? \"text-base font-medium\" : \"text-sm\"\n )}\n >\n {item.label}\n </span>\n {item.description && (\n <span className=\"mt-0.5 block truncate text-[11.5px] leading-tight text-muted-foreground\">\n {item.description}\n </span>\n )}\n </span>\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/30 transition-colors group-aria-selected/item:text-primary/70\" />\n </Command.Item>\n );\n}\n\nconst GROUP_HEADING_CLASSES = cn(\n \"[&_[cmdk-group-heading]]:px-2.5\",\n \"[&_[cmdk-group-heading]]:pt-2\",\n \"[&_[cmdk-group-heading]]:pb-1\",\n \"[&_[cmdk-group-heading]]:text-[10.5px]\",\n \"[&_[cmdk-group-heading]]:font-semibold\",\n \"[&_[cmdk-group-heading]]:uppercase\",\n \"[&_[cmdk-group-heading]]:tracking-[0.08em]\",\n \"[&_[cmdk-group-heading]]:text-muted-foreground/60\"\n);\n\nexport function NavCommandMenu({\n commands,\n trigger,\n accountSlot,\n footerSlot,\n showKeyboardHints = true,\n brandSlot,\n search = false,\n}: NavCommandMenuProps) {\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState(\"\");\n const debouncedQuery = useDebouncedQuery(query);\n const searching = query.trim().length > 0;\n const searchingContent = search && query.trim().length >= SEARCH_MIN_LENGTH;\n const matches = React.useMemo(() => matchCommands(commands, query), [commands, query]);\n const router = useRouter();\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (!open) return;\n setQuery(\"\");\n const t = setTimeout(() => inputRef.current?.focus(), 60);\n return () => clearTimeout(t);\n }, [open]);\n\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"k\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n if (e.key === \"Escape\") setOpen(false);\n };\n const onOpen = () => setOpen(true);\n const onClose = () => setOpen(false);\n\n document.addEventListener(\"keydown\", onKey);\n document.addEventListener(ML_NAV_OPEN, onOpen);\n document.addEventListener(ML_NAV_CLOSE, onClose);\n return () => {\n document.removeEventListener(\"keydown\", onKey);\n document.removeEventListener(ML_NAV_OPEN, onOpen);\n document.removeEventListener(ML_NAV_CLOSE, onClose);\n };\n }, []);\n\n const navigate = React.useCallback(\n (href: string) => {\n setOpen(false);\n router.push(href);\n },\n [router]\n );\n\n const runCommand = React.useCallback(\n (cmd: NavCommand) => {\n if (cmd.href) return navigate(cmd.href);\n setOpen(false);\n cmd.action?.();\n },\n [navigate]\n );\n\n return (\n <>\n {trigger}\n\n <AnimatePresence>\n {open && (\n <>\n\n <motion.div\n className=\"nav-canvas-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n onClick={() => setOpen(false)}\n />\n\n <motion.div\n className=\"fixed inset-0 z-[101] flex items-end justify-center p-3 pb-[calc(1rem+env(safe-area-inset-bottom))] sm:items-center sm:p-4\"\n initial={{ opacity: 0, y: 24, scale: 1 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 24 }}\n transition={{ duration: 0.18, ease: \"easeOut\" }}\n onClick={() => setOpen(false)}\n >\n <div\n className={cn(\n \"flex w-full max-h-[85dvh] flex-col overflow-hidden rounded-[20px] sm:max-h-[min(680px,88dvh)] sm:max-w-[620px]\",\n \"bg-background/90 backdrop-blur-2xl backdrop-saturate-150\"\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <Command shouldFilter={false} label=\"Medialane navigation\" className=\"flex min-h-0 flex-1 flex-col\">\n\n <div className=\"flex justify-center pt-2.5 sm:hidden\" aria-hidden=\"true\">\n <span className=\"h-1 w-9 rounded-full bg-muted-foreground/30\" />\n </div>\n\n <div className=\"flex items-center gap-3 border-b border-border/40 px-4 py-3.5\">\n {search ? (\n <SearchIcon query={debouncedQuery} active={Boolean(query)} />\n ) : (\n <Search\n className={cn(\n \"h-[18px] w-[18px] shrink-0 transition-colors\",\n query ? \"text-primary\" : \"text-muted-foreground\"\n )}\n />\n )}\n <Command.Input\n ref={inputRef}\n value={query}\n onValueChange={setQuery}\n placeholder=\"Search or run a command…\"\n className=\"flex-1 bg-transparent text-base outline-none placeholder:text-muted-foreground\"\n />\n <Kbd className=\"hidden sm:inline-flex\">esc</Kbd>\n <button\n onClick={() => setOpen(false)}\n className=\"rounded-md p-1 transition-colors hover:bg-muted/50 sm:hidden\"\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </div>\n\n <Command.List className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain p-2\">\n <Command.Empty className=\"py-8 text-center text-sm text-muted-foreground\">\n No results found.\n </Command.Empty>\n\n {searching ? (\n <>\n {matches.length > 0 && (\n <Command.Group className={GROUP_HEADING_CLASSES}>\n {matches.map((item) => (\n <CommandRow\n key={item.id}\n item={item}\n primary={false}\n onSelect={() => runCommand(item)}\n />\n ))}\n </Command.Group>\n )}\n {searchingContent && (\n <SearchResults query={query} debouncedQuery={debouncedQuery} onNavigate={navigate} />\n )}\n </>\n ) : (\n commands.map((group, i) => {\n const primary = !group.heading;\n return (\n <React.Fragment key={group.heading ?? `__primary-${i}`}>\n {i > 0 && (\n <Command.Separator className=\"my-1.5 h-px bg-border/40\" />\n )}\n <Command.Group heading={group.heading} className={GROUP_HEADING_CLASSES}>\n {group.items.map((item) => (\n <CommandRow\n key={item.id}\n item={item}\n primary={primary}\n onSelect={() => runCommand(item)}\n />\n ))}\n </Command.Group>\n </React.Fragment>\n );\n })\n )}\n </Command.List>\n\n {accountSlot && (\n <div className=\"border-t border-border/40 bg-muted/20 px-3 py-3\">\n {accountSlot}\n </div>\n )}\n\n <div className=\"flex items-center justify-between gap-3 border-t border-border/40 bg-muted/20 px-3 py-2\">\n <div className=\"flex items-center gap-3\">\n {footerSlot}\n {showKeyboardHints && (\n <span className=\"hidden items-center gap-3 text-[10.5px] text-muted-foreground/70 sm:flex\">\n <span className=\"flex items-center gap-1\"><Kbd>↑</Kbd><Kbd>↓</Kbd> Navigate</span>\n <span className=\"flex items-center gap-1\"><Kbd>↵</Kbd> Open</span>\n </span>\n )}\n </div>\n {brandSlot ?? (\n <span className=\"flex shrink-0 items-center gap-2 text-2xs text-muted-foreground/50\">\n medialane\n <Kbd className=\"hidden sm:inline-flex\">⌘K</Kbd>\n </span>\n )}\n </div>\n </Command>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -153,7 +153,14 @@ function CommandRow({ item, primary, onSelect }) {
|
|
|
153
153
|
primary ? "px-2.5 py-2.5" : "px-2.5 py-2"
|
|
154
154
|
),
|
|
155
155
|
children: [
|
|
156
|
-
/* @__PURE__ */ jsx(
|
|
156
|
+
item.iconSrc ? /* @__PURE__ */ jsx(
|
|
157
|
+
"img",
|
|
158
|
+
{
|
|
159
|
+
src: item.iconSrc,
|
|
160
|
+
alt: "",
|
|
161
|
+
className: cn("shrink-0 rounded-lg", primary ? "h-9 w-9" : "h-8 w-8")
|
|
162
|
+
}
|
|
163
|
+
) : /* @__PURE__ */ jsx(
|
|
157
164
|
"span",
|
|
158
165
|
{
|
|
159
166
|
className: cn(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/nav-command-menu.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Command, defaultFilter } from \"cmdk\";\nimport { assetHref, collectionHref, profileHref } from \"@medialane/sdk\";\nimport { useRouter } from \"./router.js\";\nimport { Search, X, ArrowRight, Loader2 } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"../utils/cn.js\";\nimport { profileIdentity } from \"../utils/profile-identity.js\";\nimport { useSearch, SEARCH_MIN_LENGTH } from \"../utils/use-search.js\";\nimport { ResultThumbnail } from \"./result-thumbnail.js\";\n\nexport interface NavCommand {\n id: string;\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n href?: string;\n action?: () => void;\n\n keywords?: string[];\n\n description?: string;\n}\n\nexport interface NavCommandGroup {\n\n heading?: string;\n items: NavCommand[];\n}\n\nexport interface NavCommandMenuProps {\n commands: NavCommandGroup[];\n\n trigger?: React.ReactNode;\n\n accountSlot?: React.ReactNode;\n\n footerSlot?: React.ReactNode;\n\n showKeyboardHints?: boolean;\n\n brandSlot?: React.ReactNode;\n\n search?: boolean;\n}\n\nconst ML_NAV_OPEN = \"ml:nav-open\";\nconst ML_NAV_CLOSE = \"ml:nav-close\";\n\nexport function useNavCommandMenu() {\n return {\n open: () => document.dispatchEvent(new CustomEvent(ML_NAV_OPEN)),\n close: () => document.dispatchEvent(new CustomEvent(ML_NAV_CLOSE)),\n };\n}\n\nfunction Kbd({ children, className }: { children: React.ReactNode; className?: string }) {\n return (\n <kbd\n className={cn(\n \"inline-flex min-w-[18px] items-center justify-center rounded-md bg-muted/60 px-1.5 py-0.5\",\n \"font-sans text-2xs leading-none text-muted-foreground\",\n className\n )}\n >\n {children}\n </kbd>\n );\n}\n\nconst RELEVANCE_FLOOR = 0.2;\n\nexport function relevanceFilter(value: string, search: string, keywords?: string[]): number {\n const score = defaultFilter(value, search, keywords);\n return score >= RELEVANCE_FLOOR ? score : 0;\n}\n\nfunction commandValue(item: NavCommand) {\n return [item.label, ...(item.keywords ?? [])].join(\" \");\n}\n\nexport function matchCommands(commands: NavCommandGroup[], query: string): NavCommand[] {\n const q = query.trim();\n if (!q) return [];\n return commands\n .flatMap((group) => group.items)\n .map((item) => ({ item, score: relevanceFilter(commandValue(item), q) }))\n .filter(({ score }) => score > 0)\n .sort((a, b) => b.score - a.score)\n .map(({ item }) => item);\n}\n\nconst SEARCH_DEBOUNCE_MS = 250;\nconst SEARCH_LIMIT = 4;\n\nfunction useDebouncedQuery(query: string) {\n const [debounced, setDebounced] = React.useState(query);\n React.useEffect(() => {\n if (!query.trim()) {\n setDebounced(query);\n return;\n }\n const t = setTimeout(() => setDebounced(query), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(t);\n }, [query]);\n return debounced;\n}\n\nfunction useMenuSearch(query: string) {\n return useSearch(query, { limit: SEARCH_LIMIT, keepPrevious: true });\n}\n\nfunction SearchIcon({ query, active }: { query: string; active: boolean }) {\n const { isLoading } = useMenuSearch(query);\n return isLoading ? (\n <Loader2 className=\"h-[18px] w-[18px] shrink-0 animate-spin text-primary\" />\n ) : (\n <Search className={cn(\"h-[18px] w-[18px] shrink-0 transition-colors\", active ? \"text-primary\" : \"text-muted-foreground\")} />\n );\n}\n\nfunction ResultRow({ value, label, description, leading, onSelect }: {\n value: string;\n label: string;\n description?: string | null;\n leading: React.ReactNode;\n onSelect: () => void;\n}) {\n return (\n <Command.Item\n value={value}\n onSelect={onSelect}\n className=\"group/item flex cursor-pointer items-center gap-3 rounded-xl px-2.5 py-2 transition-colors duration-150 aria-selected:bg-primary/10\"\n >\n {leading}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm leading-tight\">{label}</span>\n {description && (\n <span className=\"mt-0.5 block truncate text-[11.5px] leading-tight text-muted-foreground\">{description}</span>\n )}\n </span>\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/30 transition-colors group-aria-selected/item:text-primary/70\" />\n </Command.Item>\n );\n}\n\nfunction SearchResults({ query, debouncedQuery, onNavigate }: {\n query: string;\n debouncedQuery: string;\n onNavigate: (href: string) => void;\n}) {\n const { results } = useMenuSearch(debouncedQuery);\n const creators = results?.creators ?? [];\n const collections = results?.collections ?? [];\n const tokens = results?.tokens ?? [];\n const q = query.trim();\n\n return (\n <>\n {creators.length > 0 && (\n <Command.Group heading=\"Creators\" className={GROUP_HEADING_CLASSES}>\n {creators.map((creator) => {\n const { identity, name } = profileIdentity(creator);\n return (\n <ResultRow\n key={creator.walletAddress}\n value={`creator:${creator.walletAddress}`}\n label={identity}\n description={name}\n leading={<ResultThumbnail src={creator.avatarImage} label={identity} round />}\n onSelect={() => onNavigate(profileHref({ username: creator.username, address: creator.walletAddress }))}\n />\n );\n })}\n </Command.Group>\n )}\n {collections.length > 0 && (\n <Command.Group heading=\"Collections\" className={GROUP_HEADING_CLASSES}>\n {collections.map((col) => {\n const label = col.name ?? \"Untitled\";\n return (\n <ResultRow\n key={col.contractAddress}\n value={`collection:${col.contractAddress}`}\n label={label}\n leading={<ResultThumbnail src={col.image} label={label} />}\n onSelect={() => onNavigate(collectionHref(\"STARKNET\", col.contractAddress))}\n />\n );\n })}\n </Command.Group>\n )}\n {tokens.length > 0 && (\n <Command.Group heading=\"Assets\" className={GROUP_HEADING_CLASSES}>\n {tokens.map((token) => {\n const label = token.name ?? `#${token.tokenId}`;\n return (\n <ResultRow\n key={`${token.contractAddress}-${token.tokenId}`}\n value={`asset:${token.contractAddress}:${token.tokenId}`}\n label={label}\n leading={<ResultThumbnail src={token.image} label={label} />}\n onSelect={() => onNavigate(assetHref(\"STARKNET\", token.contractAddress, token.tokenId))}\n />\n );\n })}\n </Command.Group>\n )}\n <Command.Group className={GROUP_HEADING_CLASSES}>\n <ResultRow\n value=\"search:all\"\n label={`All results for \"${q}\"`}\n leading={\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-muted/50 group-aria-selected/item:bg-primary/15\">\n <Search className=\"h-4 w-4 text-foreground/80 transition-colors group-aria-selected/item:text-primary\" />\n </span>\n }\n onSelect={() => onNavigate(`/search?q=${encodeURIComponent(q)}`)}\n />\n </Command.Group>\n </>\n );\n}\n\nfunction CommandRow({ item, primary, onSelect }: { item: NavCommand; primary: boolean; onSelect: () => void }) {\n return (\n <Command.Item\n value={commandValue(item)}\n onSelect={onSelect}\n className={cn(\n \"group/item flex cursor-pointer items-center gap-3 rounded-xl\",\n \"transition-colors duration-150 aria-selected:bg-primary/10\",\n primary ? \"px-2.5 py-2.5\" : \"px-2.5 py-2\"\n )}\n >\n <span\n className={cn(\n \"flex shrink-0 items-center justify-center rounded-lg transition-colors\",\n \"bg-muted/50 group-aria-selected/item:bg-primary/15\",\n primary ? \"h-9 w-9\" : \"h-8 w-8\"\n )}\n >\n <item.icon\n className={cn(\n \"text-foreground/80 transition-colors group-aria-selected/item:text-primary\",\n primary ? \"h-[18px] w-[18px]\" : \"h-4 w-4\"\n )}\n />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\n \"block truncate leading-tight\",\n primary ? \"text-base font-medium\" : \"text-sm\"\n )}\n >\n {item.label}\n </span>\n {item.description && (\n <span className=\"mt-0.5 block truncate text-[11.5px] leading-tight text-muted-foreground\">\n {item.description}\n </span>\n )}\n </span>\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/30 transition-colors group-aria-selected/item:text-primary/70\" />\n </Command.Item>\n );\n}\n\nconst GROUP_HEADING_CLASSES = cn(\n \"[&_[cmdk-group-heading]]:px-2.5\",\n \"[&_[cmdk-group-heading]]:pt-2\",\n \"[&_[cmdk-group-heading]]:pb-1\",\n \"[&_[cmdk-group-heading]]:text-[10.5px]\",\n \"[&_[cmdk-group-heading]]:font-semibold\",\n \"[&_[cmdk-group-heading]]:uppercase\",\n \"[&_[cmdk-group-heading]]:tracking-[0.08em]\",\n \"[&_[cmdk-group-heading]]:text-muted-foreground/60\"\n);\n\nexport function NavCommandMenu({\n commands,\n trigger,\n accountSlot,\n footerSlot,\n showKeyboardHints = true,\n brandSlot,\n search = false,\n}: NavCommandMenuProps) {\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState(\"\");\n const debouncedQuery = useDebouncedQuery(query);\n const searching = query.trim().length > 0;\n const searchingContent = search && query.trim().length >= SEARCH_MIN_LENGTH;\n const matches = React.useMemo(() => matchCommands(commands, query), [commands, query]);\n const router = useRouter();\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (!open) return;\n setQuery(\"\");\n const t = setTimeout(() => inputRef.current?.focus(), 60);\n return () => clearTimeout(t);\n }, [open]);\n\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"k\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n if (e.key === \"Escape\") setOpen(false);\n };\n const onOpen = () => setOpen(true);\n const onClose = () => setOpen(false);\n\n document.addEventListener(\"keydown\", onKey);\n document.addEventListener(ML_NAV_OPEN, onOpen);\n document.addEventListener(ML_NAV_CLOSE, onClose);\n return () => {\n document.removeEventListener(\"keydown\", onKey);\n document.removeEventListener(ML_NAV_OPEN, onOpen);\n document.removeEventListener(ML_NAV_CLOSE, onClose);\n };\n }, []);\n\n const navigate = React.useCallback(\n (href: string) => {\n setOpen(false);\n router.push(href);\n },\n [router]\n );\n\n const runCommand = React.useCallback(\n (cmd: NavCommand) => {\n if (cmd.href) return navigate(cmd.href);\n setOpen(false);\n cmd.action?.();\n },\n [navigate]\n );\n\n return (\n <>\n {trigger}\n\n <AnimatePresence>\n {open && (\n <>\n\n <motion.div\n className=\"nav-canvas-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n onClick={() => setOpen(false)}\n />\n\n <motion.div\n className=\"fixed inset-0 z-[101] flex items-end justify-center p-3 pb-[calc(1rem+env(safe-area-inset-bottom))] sm:items-center sm:p-4\"\n initial={{ opacity: 0, y: 24, scale: 1 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 24 }}\n transition={{ duration: 0.18, ease: \"easeOut\" }}\n onClick={() => setOpen(false)}\n >\n <div\n className={cn(\n \"flex w-full max-h-[85dvh] flex-col overflow-hidden rounded-[20px] sm:max-h-[min(680px,88dvh)] sm:max-w-[620px]\",\n \"bg-background/90 backdrop-blur-2xl backdrop-saturate-150\"\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <Command shouldFilter={false} label=\"Medialane navigation\" className=\"flex min-h-0 flex-1 flex-col\">\n\n <div className=\"flex justify-center pt-2.5 sm:hidden\" aria-hidden=\"true\">\n <span className=\"h-1 w-9 rounded-full bg-muted-foreground/30\" />\n </div>\n\n <div className=\"flex items-center gap-3 border-b border-border/40 px-4 py-3.5\">\n {search ? (\n <SearchIcon query={debouncedQuery} active={Boolean(query)} />\n ) : (\n <Search\n className={cn(\n \"h-[18px] w-[18px] shrink-0 transition-colors\",\n query ? \"text-primary\" : \"text-muted-foreground\"\n )}\n />\n )}\n <Command.Input\n ref={inputRef}\n value={query}\n onValueChange={setQuery}\n placeholder=\"Search or run a command…\"\n className=\"flex-1 bg-transparent text-base outline-none placeholder:text-muted-foreground\"\n />\n <Kbd className=\"hidden sm:inline-flex\">esc</Kbd>\n <button\n onClick={() => setOpen(false)}\n className=\"rounded-md p-1 transition-colors hover:bg-muted/50 sm:hidden\"\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </div>\n\n <Command.List className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain p-2\">\n <Command.Empty className=\"py-8 text-center text-sm text-muted-foreground\">\n No results found.\n </Command.Empty>\n\n {searching ? (\n <>\n {matches.length > 0 && (\n <Command.Group className={GROUP_HEADING_CLASSES}>\n {matches.map((item) => (\n <CommandRow\n key={item.id}\n item={item}\n primary={false}\n onSelect={() => runCommand(item)}\n />\n ))}\n </Command.Group>\n )}\n {searchingContent && (\n <SearchResults query={query} debouncedQuery={debouncedQuery} onNavigate={navigate} />\n )}\n </>\n ) : (\n commands.map((group, i) => {\n const primary = !group.heading;\n return (\n <React.Fragment key={group.heading ?? `__primary-${i}`}>\n {i > 0 && (\n <Command.Separator className=\"my-1.5 h-px bg-border/40\" />\n )}\n <Command.Group heading={group.heading} className={GROUP_HEADING_CLASSES}>\n {group.items.map((item) => (\n <CommandRow\n key={item.id}\n item={item}\n primary={primary}\n onSelect={() => runCommand(item)}\n />\n ))}\n </Command.Group>\n </React.Fragment>\n );\n })\n )}\n </Command.List>\n\n {accountSlot && (\n <div className=\"border-t border-border/40 bg-muted/20 px-3 py-3\">\n {accountSlot}\n </div>\n )}\n\n <div className=\"flex items-center justify-between gap-3 border-t border-border/40 bg-muted/20 px-3 py-2\">\n <div className=\"flex items-center gap-3\">\n {footerSlot}\n {showKeyboardHints && (\n <span className=\"hidden items-center gap-3 text-[10.5px] text-muted-foreground/70 sm:flex\">\n <span className=\"flex items-center gap-1\"><Kbd>↑</Kbd><Kbd>↓</Kbd> Navigate</span>\n <span className=\"flex items-center gap-1\"><Kbd>↵</Kbd> Open</span>\n </span>\n )}\n </div>\n {brandSlot ?? (\n <span className=\"flex shrink-0 items-center gap-2 text-2xs text-muted-foreground/50\">\n medialane\n <Kbd className=\"hidden sm:inline-flex\">⌘K</Kbd>\n </span>\n )}\n </div>\n </Command>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/nav-command-menu.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Command, defaultFilter } from \"cmdk\";\nimport { assetHref, collectionHref, profileHref } from \"@medialane/sdk\";\nimport { useRouter } from \"./router.js\";\nimport { Search, X, ArrowRight, Loader2 } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"../utils/cn.js\";\nimport { profileIdentity } from \"../utils/profile-identity.js\";\nimport { useSearch, SEARCH_MIN_LENGTH } from \"../utils/use-search.js\";\nimport { ResultThumbnail } from \"./result-thumbnail.js\";\n\nexport interface NavCommand {\n id: string;\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n iconSrc?: string;\n href?: string;\n action?: () => void;\n\n keywords?: string[];\n\n description?: string;\n}\n\nexport interface NavCommandGroup {\n\n heading?: string;\n items: NavCommand[];\n}\n\nexport interface NavCommandMenuProps {\n commands: NavCommandGroup[];\n\n trigger?: React.ReactNode;\n\n accountSlot?: React.ReactNode;\n\n footerSlot?: React.ReactNode;\n\n showKeyboardHints?: boolean;\n\n brandSlot?: React.ReactNode;\n\n search?: boolean;\n}\n\nconst ML_NAV_OPEN = \"ml:nav-open\";\nconst ML_NAV_CLOSE = \"ml:nav-close\";\n\nexport function useNavCommandMenu() {\n return {\n open: () => document.dispatchEvent(new CustomEvent(ML_NAV_OPEN)),\n close: () => document.dispatchEvent(new CustomEvent(ML_NAV_CLOSE)),\n };\n}\n\nfunction Kbd({ children, className }: { children: React.ReactNode; className?: string }) {\n return (\n <kbd\n className={cn(\n \"inline-flex min-w-[18px] items-center justify-center rounded-md bg-muted/60 px-1.5 py-0.5\",\n \"font-sans text-2xs leading-none text-muted-foreground\",\n className\n )}\n >\n {children}\n </kbd>\n );\n}\n\nconst RELEVANCE_FLOOR = 0.2;\n\nexport function relevanceFilter(value: string, search: string, keywords?: string[]): number {\n const score = defaultFilter(value, search, keywords);\n return score >= RELEVANCE_FLOOR ? score : 0;\n}\n\nfunction commandValue(item: NavCommand) {\n return [item.label, ...(item.keywords ?? [])].join(\" \");\n}\n\nexport function matchCommands(commands: NavCommandGroup[], query: string): NavCommand[] {\n const q = query.trim();\n if (!q) return [];\n return commands\n .flatMap((group) => group.items)\n .map((item) => ({ item, score: relevanceFilter(commandValue(item), q) }))\n .filter(({ score }) => score > 0)\n .sort((a, b) => b.score - a.score)\n .map(({ item }) => item);\n}\n\nconst SEARCH_DEBOUNCE_MS = 250;\nconst SEARCH_LIMIT = 4;\n\nfunction useDebouncedQuery(query: string) {\n const [debounced, setDebounced] = React.useState(query);\n React.useEffect(() => {\n if (!query.trim()) {\n setDebounced(query);\n return;\n }\n const t = setTimeout(() => setDebounced(query), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(t);\n }, [query]);\n return debounced;\n}\n\nfunction useMenuSearch(query: string) {\n return useSearch(query, { limit: SEARCH_LIMIT, keepPrevious: true });\n}\n\nfunction SearchIcon({ query, active }: { query: string; active: boolean }) {\n const { isLoading } = useMenuSearch(query);\n return isLoading ? (\n <Loader2 className=\"h-[18px] w-[18px] shrink-0 animate-spin text-primary\" />\n ) : (\n <Search className={cn(\"h-[18px] w-[18px] shrink-0 transition-colors\", active ? \"text-primary\" : \"text-muted-foreground\")} />\n );\n}\n\nfunction ResultRow({ value, label, description, leading, onSelect }: {\n value: string;\n label: string;\n description?: string | null;\n leading: React.ReactNode;\n onSelect: () => void;\n}) {\n return (\n <Command.Item\n value={value}\n onSelect={onSelect}\n className=\"group/item flex cursor-pointer items-center gap-3 rounded-xl px-2.5 py-2 transition-colors duration-150 aria-selected:bg-primary/10\"\n >\n {leading}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm leading-tight\">{label}</span>\n {description && (\n <span className=\"mt-0.5 block truncate text-[11.5px] leading-tight text-muted-foreground\">{description}</span>\n )}\n </span>\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/30 transition-colors group-aria-selected/item:text-primary/70\" />\n </Command.Item>\n );\n}\n\nfunction SearchResults({ query, debouncedQuery, onNavigate }: {\n query: string;\n debouncedQuery: string;\n onNavigate: (href: string) => void;\n}) {\n const { results } = useMenuSearch(debouncedQuery);\n const creators = results?.creators ?? [];\n const collections = results?.collections ?? [];\n const tokens = results?.tokens ?? [];\n const q = query.trim();\n\n return (\n <>\n {creators.length > 0 && (\n <Command.Group heading=\"Creators\" className={GROUP_HEADING_CLASSES}>\n {creators.map((creator) => {\n const { identity, name } = profileIdentity(creator);\n return (\n <ResultRow\n key={creator.walletAddress}\n value={`creator:${creator.walletAddress}`}\n label={identity}\n description={name}\n leading={<ResultThumbnail src={creator.avatarImage} label={identity} round />}\n onSelect={() => onNavigate(profileHref({ username: creator.username, address: creator.walletAddress }))}\n />\n );\n })}\n </Command.Group>\n )}\n {collections.length > 0 && (\n <Command.Group heading=\"Collections\" className={GROUP_HEADING_CLASSES}>\n {collections.map((col) => {\n const label = col.name ?? \"Untitled\";\n return (\n <ResultRow\n key={col.contractAddress}\n value={`collection:${col.contractAddress}`}\n label={label}\n leading={<ResultThumbnail src={col.image} label={label} />}\n onSelect={() => onNavigate(collectionHref(\"STARKNET\", col.contractAddress))}\n />\n );\n })}\n </Command.Group>\n )}\n {tokens.length > 0 && (\n <Command.Group heading=\"Assets\" className={GROUP_HEADING_CLASSES}>\n {tokens.map((token) => {\n const label = token.name ?? `#${token.tokenId}`;\n return (\n <ResultRow\n key={`${token.contractAddress}-${token.tokenId}`}\n value={`asset:${token.contractAddress}:${token.tokenId}`}\n label={label}\n leading={<ResultThumbnail src={token.image} label={label} />}\n onSelect={() => onNavigate(assetHref(\"STARKNET\", token.contractAddress, token.tokenId))}\n />\n );\n })}\n </Command.Group>\n )}\n <Command.Group className={GROUP_HEADING_CLASSES}>\n <ResultRow\n value=\"search:all\"\n label={`All results for \"${q}\"`}\n leading={\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-muted/50 group-aria-selected/item:bg-primary/15\">\n <Search className=\"h-4 w-4 text-foreground/80 transition-colors group-aria-selected/item:text-primary\" />\n </span>\n }\n onSelect={() => onNavigate(`/search?q=${encodeURIComponent(q)}`)}\n />\n </Command.Group>\n </>\n );\n}\n\nfunction CommandRow({ item, primary, onSelect }: { item: NavCommand; primary: boolean; onSelect: () => void }) {\n return (\n <Command.Item\n value={commandValue(item)}\n onSelect={onSelect}\n className={cn(\n \"group/item flex cursor-pointer items-center gap-3 rounded-xl\",\n \"transition-colors duration-150 aria-selected:bg-primary/10\",\n primary ? \"px-2.5 py-2.5\" : \"px-2.5 py-2\"\n )}\n >\n {item.iconSrc ? (\n <img\n src={item.iconSrc}\n alt=\"\"\n className={cn(\"shrink-0 rounded-lg\", primary ? \"h-9 w-9\" : \"h-8 w-8\")}\n />\n ) : (\n <span\n className={cn(\n \"flex shrink-0 items-center justify-center rounded-lg transition-colors\",\n \"bg-muted/50 group-aria-selected/item:bg-primary/15\",\n primary ? \"h-9 w-9\" : \"h-8 w-8\"\n )}\n >\n <item.icon\n className={cn(\n \"text-foreground/80 transition-colors group-aria-selected/item:text-primary\",\n primary ? \"h-[18px] w-[18px]\" : \"h-4 w-4\"\n )}\n />\n </span>\n )}\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\n \"block truncate leading-tight\",\n primary ? \"text-base font-medium\" : \"text-sm\"\n )}\n >\n {item.label}\n </span>\n {item.description && (\n <span className=\"mt-0.5 block truncate text-[11.5px] leading-tight text-muted-foreground\">\n {item.description}\n </span>\n )}\n </span>\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/30 transition-colors group-aria-selected/item:text-primary/70\" />\n </Command.Item>\n );\n}\n\nconst GROUP_HEADING_CLASSES = cn(\n \"[&_[cmdk-group-heading]]:px-2.5\",\n \"[&_[cmdk-group-heading]]:pt-2\",\n \"[&_[cmdk-group-heading]]:pb-1\",\n \"[&_[cmdk-group-heading]]:text-[10.5px]\",\n \"[&_[cmdk-group-heading]]:font-semibold\",\n \"[&_[cmdk-group-heading]]:uppercase\",\n \"[&_[cmdk-group-heading]]:tracking-[0.08em]\",\n \"[&_[cmdk-group-heading]]:text-muted-foreground/60\"\n);\n\nexport function NavCommandMenu({\n commands,\n trigger,\n accountSlot,\n footerSlot,\n showKeyboardHints = true,\n brandSlot,\n search = false,\n}: NavCommandMenuProps) {\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState(\"\");\n const debouncedQuery = useDebouncedQuery(query);\n const searching = query.trim().length > 0;\n const searchingContent = search && query.trim().length >= SEARCH_MIN_LENGTH;\n const matches = React.useMemo(() => matchCommands(commands, query), [commands, query]);\n const router = useRouter();\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (!open) return;\n setQuery(\"\");\n const t = setTimeout(() => inputRef.current?.focus(), 60);\n return () => clearTimeout(t);\n }, [open]);\n\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"k\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n if (e.key === \"Escape\") setOpen(false);\n };\n const onOpen = () => setOpen(true);\n const onClose = () => setOpen(false);\n\n document.addEventListener(\"keydown\", onKey);\n document.addEventListener(ML_NAV_OPEN, onOpen);\n document.addEventListener(ML_NAV_CLOSE, onClose);\n return () => {\n document.removeEventListener(\"keydown\", onKey);\n document.removeEventListener(ML_NAV_OPEN, onOpen);\n document.removeEventListener(ML_NAV_CLOSE, onClose);\n };\n }, []);\n\n const navigate = React.useCallback(\n (href: string) => {\n setOpen(false);\n router.push(href);\n },\n [router]\n );\n\n const runCommand = React.useCallback(\n (cmd: NavCommand) => {\n if (cmd.href) return navigate(cmd.href);\n setOpen(false);\n cmd.action?.();\n },\n [navigate]\n );\n\n return (\n <>\n {trigger}\n\n <AnimatePresence>\n {open && (\n <>\n\n <motion.div\n className=\"nav-canvas-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n onClick={() => setOpen(false)}\n />\n\n <motion.div\n className=\"fixed inset-0 z-[101] flex items-end justify-center p-3 pb-[calc(1rem+env(safe-area-inset-bottom))] sm:items-center sm:p-4\"\n initial={{ opacity: 0, y: 24, scale: 1 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 24 }}\n transition={{ duration: 0.18, ease: \"easeOut\" }}\n onClick={() => setOpen(false)}\n >\n <div\n className={cn(\n \"flex w-full max-h-[85dvh] flex-col overflow-hidden rounded-[20px] sm:max-h-[min(680px,88dvh)] sm:max-w-[620px]\",\n \"bg-background/90 backdrop-blur-2xl backdrop-saturate-150\"\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <Command shouldFilter={false} label=\"Medialane navigation\" className=\"flex min-h-0 flex-1 flex-col\">\n\n <div className=\"flex justify-center pt-2.5 sm:hidden\" aria-hidden=\"true\">\n <span className=\"h-1 w-9 rounded-full bg-muted-foreground/30\" />\n </div>\n\n <div className=\"flex items-center gap-3 border-b border-border/40 px-4 py-3.5\">\n {search ? (\n <SearchIcon query={debouncedQuery} active={Boolean(query)} />\n ) : (\n <Search\n className={cn(\n \"h-[18px] w-[18px] shrink-0 transition-colors\",\n query ? \"text-primary\" : \"text-muted-foreground\"\n )}\n />\n )}\n <Command.Input\n ref={inputRef}\n value={query}\n onValueChange={setQuery}\n placeholder=\"Search or run a command…\"\n className=\"flex-1 bg-transparent text-base outline-none placeholder:text-muted-foreground\"\n />\n <Kbd className=\"hidden sm:inline-flex\">esc</Kbd>\n <button\n onClick={() => setOpen(false)}\n className=\"rounded-md p-1 transition-colors hover:bg-muted/50 sm:hidden\"\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </div>\n\n <Command.List className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain p-2\">\n <Command.Empty className=\"py-8 text-center text-sm text-muted-foreground\">\n No results found.\n </Command.Empty>\n\n {searching ? (\n <>\n {matches.length > 0 && (\n <Command.Group className={GROUP_HEADING_CLASSES}>\n {matches.map((item) => (\n <CommandRow\n key={item.id}\n item={item}\n primary={false}\n onSelect={() => runCommand(item)}\n />\n ))}\n </Command.Group>\n )}\n {searchingContent && (\n <SearchResults query={query} debouncedQuery={debouncedQuery} onNavigate={navigate} />\n )}\n </>\n ) : (\n commands.map((group, i) => {\n const primary = !group.heading;\n return (\n <React.Fragment key={group.heading ?? `__primary-${i}`}>\n {i > 0 && (\n <Command.Separator className=\"my-1.5 h-px bg-border/40\" />\n )}\n <Command.Group heading={group.heading} className={GROUP_HEADING_CLASSES}>\n {group.items.map((item) => (\n <CommandRow\n key={item.id}\n item={item}\n primary={primary}\n onSelect={() => runCommand(item)}\n />\n ))}\n </Command.Group>\n </React.Fragment>\n );\n })\n )}\n </Command.List>\n\n {accountSlot && (\n <div className=\"border-t border-border/40 bg-muted/20 px-3 py-3\">\n {accountSlot}\n </div>\n )}\n\n <div className=\"flex items-center justify-between gap-3 border-t border-border/40 bg-muted/20 px-3 py-2\">\n <div className=\"flex items-center gap-3\">\n {footerSlot}\n {showKeyboardHints && (\n <span className=\"hidden items-center gap-3 text-[10.5px] text-muted-foreground/70 sm:flex\">\n <span className=\"flex items-center gap-1\"><Kbd>↑</Kbd><Kbd>↓</Kbd> Navigate</span>\n <span className=\"flex items-center gap-1\"><Kbd>↵</Kbd> Open</span>\n </span>\n )}\n </div>\n {brandSlot ?? (\n <span className=\"flex shrink-0 items-center gap-2 text-2xs text-muted-foreground/50\">\n medialane\n <Kbd className=\"hidden sm:inline-flex\">⌘K</Kbd>\n </span>\n )}\n </div>\n </Command>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -24,7 +24,7 @@ __export(nav_commands_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(nav_commands_exports);
|
|
25
25
|
var import_lucide_react = require("lucide-react");
|
|
26
26
|
const NAV_ITEMS = {
|
|
27
|
-
home: { id: "home", label: "Medialane", icon: import_lucide_react.Home, href: "/", keywords: ["home", "frontpage", "start", "homepage", "main"], description: "Start here" },
|
|
27
|
+
home: { id: "home", label: "Medialane", icon: import_lucide_react.Home, iconSrc: "/icon.png", href: "/", keywords: ["home", "frontpage", "start", "homepage", "main"], description: "Start here" },
|
|
28
28
|
discover: { id: "discover", label: "Discover", icon: import_lucide_react.Telescope, href: "/discover", keywords: ["feed", "explore", "trending"], description: "Feeds, collections & creators" },
|
|
29
29
|
marketplace: { id: "marketplace", label: "Marketplace", icon: import_lucide_react.Store, href: "/marketplace", keywords: ["buy", "sell", "trade", "listings", "browse"], description: "Buy, sell & make offers" },
|
|
30
30
|
launchpad: { id: "launchpad", label: "Launchpad", icon: import_lucide_react.Zap, href: "/launchpad", keywords: ["start", "launch", "creator", "mint", "create"], description: "Create, mint & launch" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/data/nav-commands.ts"],"sourcesContent":["import {\n Activity, BookOpen, Briefcase, Camera, Coins, FileText, Film, Gem, Gift, Handshake, Home, Layers, LayoutGrid, List, Music, Palette, Plus, Repeat2, ScrollText, Settings, ShieldCheck, Store, Tag, Telescope, Ticket, Trophy, Users, Zap,\n} from \"lucide-react\";\nimport type { NavCommand, NavCommandGroup } from \"../components/nav-command-menu.js\";\n\nexport const NAV_ITEMS = {\n home: { id: \"home\", label: \"Medialane\", icon: Home, href: \"/\", keywords: [\"home\", \"frontpage\", \"start\", \"homepage\", \"main\"], description: \"Start here\" },\n discover: { id: \"discover\", label: \"Discover\", icon: Telescope, href: \"/discover\", keywords: [\"feed\", \"explore\", \"trending\"], description: \"Feeds, collections & creators\" },\n marketplace: { id: \"marketplace\", label: \"Marketplace\", icon: Store, href: \"/marketplace\", keywords: [\"buy\", \"sell\", \"trade\", \"listings\", \"browse\"], description: \"Buy, sell & make offers\" },\n launchpad: { id: \"launchpad\", label: \"Launchpad\", icon: Zap, href: \"/launchpad\", keywords: [\"start\", \"launch\", \"creator\", \"mint\", \"create\"], description: \"Create, mint & launch\" },\n portfolio: { id: \"portfolio\", label: \"Portfolio\", icon: Briefcase, href: \"/portfolio\", keywords: [\"owned\", \"my nfts\", \"wallet\", \"account\"], description: \"Your assets & activity\" },\n collections: { id: \"collections\", label: \"Collections\", icon: LayoutGrid, href: \"/collections\", keywords: [\"nft\", \"drops\", \"browse\"] },\n coins: { id: \"coins\", label: \"Coins\", icon: Coins, href: \"/coins\", keywords: [\"token\", \"creator coin\", \"memecoin\", \"discover\", \"trade\", \"swap\"] },\n creators: { id: \"creators\", label: \"Creators\", icon: Users, href: \"/creators\", keywords: [\"artists\", \"profile\", \"profiles\", \"community\"] },\n activities: { id: \"activities\", label: \"Activity\", icon: Activity, href: \"/activities\", keywords: [\"history\", \"transactions\", \"feed\", \"events\"] },\n rewards: { id: \"rewards\", label: \"Rewards\", icon: Trophy, href: \"/rewards\", keywords: [\"xp\", \"points\", \"scoreboard\", \"leaderboard\", \"badges\", \"rank\"] },\n airdrop: { id: \"airdrop\", label: \"Airdrop\", icon: Gift, href: \"/airdrop\", keywords: [\"claim\", \"free\", \"drop\", \"genesis\", \"creator's fund\"] },\n settings: { id: \"settings\", label: \"Account Settings\", icon: Settings, href: \"/settings\", keywords: [\"profile\", \"username\", \"preferences\", \"account\"] },\n \"mint-ip-asset\": { id: \"mint-ip-asset\", label: \"Mint Unique NFT\", icon: Plus, href: \"/launchpad/single-editions\", keywords: [\"mint\", \"upload\", \"publish\", \"token\", \"erc721\", \"singular\", \"unique\", \"original\"] },\n \"create-collection\": { id: \"create-collection\", label: \"Create NFT Collection\", icon: LayoutGrid, href: \"/launchpad/single-editions/collection\", keywords: [\"deploy\", \"series\", \"erc721\", \"collection\", \"branded\"] },\n \"mint-editions\": { id: \"mint-editions\", label: \"Mint Limited Edition\", icon: Layers, href: \"/launchpad/nfteditions\", keywords: [\"mint\", \"edition\", \"erc1155\", \"multi\", \"copies\", \"limited\"] },\n \"create-1155\": { id: \"create-1155\", label: \"Create Limited Edition Contract\", icon: Layers, href: \"/launchpad/nfteditions/create\", keywords: [\"deploy\", \"erc1155\", \"edition\", \"contract\", \"limited\", \"multi-edition\"] },\n \"collection-drop\": { id: \"collection-drop\", label: \"Launch Collection Drop\", icon: Gift, href: \"/launchpad/drop/create\", keywords: [\"drop\", \"timed\", \"fixed supply\", \"release\", \"erc721\"] },\n \"browse-drops\": { id: \"browse-drops\", label: \"Browse Drops\", icon: Store, href: \"/launchpad/drop\", keywords: [\"drop\", \"browse\", \"active\"] },\n \"pop-create\": { id: \"pop-create\", label: \"Create POP Event\", icon: Ticket, href: \"/launchpad/pop/create\", keywords: [\"pop\", \"proof of participation\", \"event\", \"community\", \"soulbound\"] },\n \"pop-browse\": { id: \"pop-browse\", label: \"Browse POP Events\", icon: Ticket, href: \"/launchpad/pop\", keywords: [\"pop\", \"events\", \"proof of participation\"] },\n \"tickets-create\": { id: \"tickets-create\", label: \"Create IP Tickets\", icon: Ticket, href: \"/launchpad/tickets/create\", keywords: [\"tickets\", \"event\", \"verifiable\", \"attendee\", \"pass\"] },\n \"tickets-browse\": { id: \"tickets-browse\", label: \"Browse IP Tickets\", icon: Ticket, href: \"/launchpad/tickets\", keywords: [\"tickets\", \"browse\", \"events\"] },\n \"club-create\": { id: \"club-create\", label: \"Create IP Club\", icon: Users, href: \"/launchpad/club/create\", keywords: [\"club\", \"membership\", \"tiers\", \"community\", \"fans\"] },\n \"club-browse\": { id: \"club-browse\", label: \"Browse IP Clubs\", icon: Users, href: \"/launchpad/club\", keywords: [\"club\", \"membership\", \"browse\"] },\n \"sponsorship-create\": { id: \"sponsorship-create\", label: \"Create IP Sponsorship\", icon: Handshake, href: \"/launchpad/sponsorship/create\", keywords: [\"sponsorship\", \"sponsor\", \"license\", \"offer\", \"deal\"] },\n \"sponsorship-browse\": { id: \"sponsorship-browse\", label: \"Browse IP Sponsorship\", icon: Handshake, href: \"/launchpad/sponsorship\", keywords: [\"sponsorship\", \"browse\", \"offers\"] },\n \"launch-coin\": { id: \"launch-coin\", label: \"Launch a Creator Coin\", icon: Coins, href: \"/launchpad/coin/create\", keywords: [\"coin\", \"creator coin\", \"erc20\", \"token\", \"ekubo\", \"liquidity\", \"launch\"] },\n remix: { id: \"remix\", label: \"Remix an Asset\", icon: Repeat2, href: \"/marketplace\", keywords: [\"remix\", \"derivative\", \"attribution\", \"fork\"] },\n \"portfolio-collections\": { id: \"portfolio-collections\",label: \"My Collections\", icon: LayoutGrid, href: \"/portfolio/collections\", keywords: [\"deployed\", \"created\", \"my contracts\", \"claim\", \"import\"] },\n \"portfolio-assets\": { id: \"portfolio-assets\", label: \"My Assets\", icon: Gem, href: \"/portfolio/assets\", keywords: [\"owned\", \"nfts\", \"tokens\", \"collected\"] },\n \"portfolio-listings\": { id: \"portfolio-listings\", label: \"My Listings\", icon: Tag, href: \"/portfolio/listings\", keywords: [\"sell\", \"listed\", \"active listings\"] },\n \"portfolio-offers\": { id: \"portfolio-offers\", label: \"My Offers\", icon: List, href: \"/portfolio/offers\", keywords: [\"bids\", \"made\", \"sent offers\"] },\n \"portfolio-received\": { id: \"portfolio-received\", label: \"Received Offers\", icon: ScrollText, href: \"/portfolio/received\", keywords: [\"incoming\", \"bids\", \"offers received\"] },\n \"portfolio-activity\": { id: \"portfolio-activity\", label: \"My Activity\", icon: Activity, href: \"/portfolio/activity\", keywords: [\"history\", \"transactions\", \"events\"] },\n audio: { id: \"audio\", label: \"Audio\", icon: Music, href: \"/audio\", keywords: [\"music\", \"sound\", \"track\", \"podcast\"] },\n art: { id: \"art\", label: \"Art\", icon: Palette, href: \"/art\", keywords: [\"illustration\", \"drawing\", \"painting\", \"digital art\"] },\n video: { id: \"video\", label: \"Video\", icon: Film, href: \"/video\", keywords: [\"film\", \"clip\", \"animation\", \"short\"] },\n photography: { id: \"photography\", label: \"Photography\", icon: Camera, href: \"/photography\", keywords: [\"photo\", \"image\", \"picture\", \"shot\"] },\n publications: { id: \"publications\", label: \"Publications\", icon: BookOpen, href: \"/publications\", keywords: [\"article\", \"articles\", \"blog\", \"news\", \"writing\", \"book\", \"journal\"] },\n nft: { id: \"nft\", label: \"NFT\", icon: Gem, href: \"/nft\", keywords: [\"collectible\", \"token\", \"generative\"] },\n docs: { id: \"docs\", label: \"Docs — Overview\", icon: BookOpen, action: () => window.open(\"https://docs.medialane.io\", \"_blank\"), keywords: [\"docs\", \"help\", \"guide\", \"documentation\"] },\n \"docs-market\": { id: \"docs-market\", label: \"Docs — Marketplace\", icon: Store, action: () => window.open(\"https://docs.medialane.io/marketplace\", \"_blank\"), keywords: [\"docs\", \"buy\", \"sell\", \"orders\", \"guide\"] },\n \"docs-launchpad\": { id: \"docs-launchpad\",label: \"Docs — Launchpad\", icon: Zap, action: () => window.open(\"https://docs.medialane.io/launchpad\", \"_blank\"), keywords: [\"docs\", \"creator\", \"mint\", \"deploy\", \"guide\"] },\n \"docs-ip\": { id: \"docs-ip\", label: \"Docs — IP & Licensing\", icon: ShieldCheck, action: () => window.open(\"https://docs.medialane.io/ip-licensing\", \"_blank\"), keywords: [\"docs\", \"license\", \"ip\", \"rights\", \"royalty\"] },\n \"docs-sdk\": { id: \"docs-sdk\", label: \"Docs — SDK & API\", icon: FileText, action: () => window.open(\"https://docs.medialane.io/sdk\", \"_blank\"), keywords: [\"docs\", \"developer\", \"api\", \"sdk\", \"integration\"] },\n \"docs-terms\": { id: \"docs-terms\", label: \"Terms of Service\", icon: FileText, action: () => window.open(\"https://docs.medialane.io/guidelines/terms\", \"_blank\"), keywords: [\"legal\", \"terms\", \"tos\"] },\n \"docs-privacy\": { id: \"docs-privacy\", label: \"Privacy Policy\", icon: ShieldCheck, action: () => window.open(\"https://docs.medialane.io/guidelines/privacy\", \"_blank\"), keywords: [\"privacy\", \"data\", \"gdpr\"] },\n} satisfies Record<string, NavCommand>;\n\nexport type NavItemId = keyof typeof NAV_ITEMS;\n\nexport interface NavGroupSpec {\n heading?: string;\n items: (NavItemId | NavCommand)[];\n}\n\nexport function navGroups(groups: NavGroupSpec[]): NavCommandGroup[] {\n return groups.map(({ heading, items }) => ({\n heading,\n items: items.map((item) => (typeof item === \"string\" ? NAV_ITEMS[item] : item)),\n }));\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/data/nav-commands.ts"],"sourcesContent":["import {\n Activity, BookOpen, Briefcase, Camera, Coins, FileText, Film, Gem, Gift, Handshake, Home, Layers, LayoutGrid, List, Music, Palette, Plus, Repeat2, ScrollText, Settings, ShieldCheck, Store, Tag, Telescope, Ticket, Trophy, Users, Zap,\n} from \"lucide-react\";\nimport type { NavCommand, NavCommandGroup } from \"../components/nav-command-menu.js\";\n\nexport const NAV_ITEMS = {\n home: { id: \"home\", label: \"Medialane\", icon: Home, iconSrc: \"/icon.png\", href: \"/\", keywords: [\"home\", \"frontpage\", \"start\", \"homepage\", \"main\"], description: \"Start here\" },\n discover: { id: \"discover\", label: \"Discover\", icon: Telescope, href: \"/discover\", keywords: [\"feed\", \"explore\", \"trending\"], description: \"Feeds, collections & creators\" },\n marketplace: { id: \"marketplace\", label: \"Marketplace\", icon: Store, href: \"/marketplace\", keywords: [\"buy\", \"sell\", \"trade\", \"listings\", \"browse\"], description: \"Buy, sell & make offers\" },\n launchpad: { id: \"launchpad\", label: \"Launchpad\", icon: Zap, href: \"/launchpad\", keywords: [\"start\", \"launch\", \"creator\", \"mint\", \"create\"], description: \"Create, mint & launch\" },\n portfolio: { id: \"portfolio\", label: \"Portfolio\", icon: Briefcase, href: \"/portfolio\", keywords: [\"owned\", \"my nfts\", \"wallet\", \"account\"], description: \"Your assets & activity\" },\n collections: { id: \"collections\", label: \"Collections\", icon: LayoutGrid, href: \"/collections\", keywords: [\"nft\", \"drops\", \"browse\"] },\n coins: { id: \"coins\", label: \"Coins\", icon: Coins, href: \"/coins\", keywords: [\"token\", \"creator coin\", \"memecoin\", \"discover\", \"trade\", \"swap\"] },\n creators: { id: \"creators\", label: \"Creators\", icon: Users, href: \"/creators\", keywords: [\"artists\", \"profile\", \"profiles\", \"community\"] },\n activities: { id: \"activities\", label: \"Activity\", icon: Activity, href: \"/activities\", keywords: [\"history\", \"transactions\", \"feed\", \"events\"] },\n rewards: { id: \"rewards\", label: \"Rewards\", icon: Trophy, href: \"/rewards\", keywords: [\"xp\", \"points\", \"scoreboard\", \"leaderboard\", \"badges\", \"rank\"] },\n airdrop: { id: \"airdrop\", label: \"Airdrop\", icon: Gift, href: \"/airdrop\", keywords: [\"claim\", \"free\", \"drop\", \"genesis\", \"creator's fund\"] },\n settings: { id: \"settings\", label: \"Account Settings\", icon: Settings, href: \"/settings\", keywords: [\"profile\", \"username\", \"preferences\", \"account\"] },\n \"mint-ip-asset\": { id: \"mint-ip-asset\", label: \"Mint Unique NFT\", icon: Plus, href: \"/launchpad/single-editions\", keywords: [\"mint\", \"upload\", \"publish\", \"token\", \"erc721\", \"singular\", \"unique\", \"original\"] },\n \"create-collection\": { id: \"create-collection\", label: \"Create NFT Collection\", icon: LayoutGrid, href: \"/launchpad/single-editions/collection\", keywords: [\"deploy\", \"series\", \"erc721\", \"collection\", \"branded\"] },\n \"mint-editions\": { id: \"mint-editions\", label: \"Mint Limited Edition\", icon: Layers, href: \"/launchpad/nfteditions\", keywords: [\"mint\", \"edition\", \"erc1155\", \"multi\", \"copies\", \"limited\"] },\n \"create-1155\": { id: \"create-1155\", label: \"Create Limited Edition Contract\", icon: Layers, href: \"/launchpad/nfteditions/create\", keywords: [\"deploy\", \"erc1155\", \"edition\", \"contract\", \"limited\", \"multi-edition\"] },\n \"collection-drop\": { id: \"collection-drop\", label: \"Launch Collection Drop\", icon: Gift, href: \"/launchpad/drop/create\", keywords: [\"drop\", \"timed\", \"fixed supply\", \"release\", \"erc721\"] },\n \"browse-drops\": { id: \"browse-drops\", label: \"Browse Drops\", icon: Store, href: \"/launchpad/drop\", keywords: [\"drop\", \"browse\", \"active\"] },\n \"pop-create\": { id: \"pop-create\", label: \"Create POP Event\", icon: Ticket, href: \"/launchpad/pop/create\", keywords: [\"pop\", \"proof of participation\", \"event\", \"community\", \"soulbound\"] },\n \"pop-browse\": { id: \"pop-browse\", label: \"Browse POP Events\", icon: Ticket, href: \"/launchpad/pop\", keywords: [\"pop\", \"events\", \"proof of participation\"] },\n \"tickets-create\": { id: \"tickets-create\", label: \"Create IP Tickets\", icon: Ticket, href: \"/launchpad/tickets/create\", keywords: [\"tickets\", \"event\", \"verifiable\", \"attendee\", \"pass\"] },\n \"tickets-browse\": { id: \"tickets-browse\", label: \"Browse IP Tickets\", icon: Ticket, href: \"/launchpad/tickets\", keywords: [\"tickets\", \"browse\", \"events\"] },\n \"club-create\": { id: \"club-create\", label: \"Create IP Club\", icon: Users, href: \"/launchpad/club/create\", keywords: [\"club\", \"membership\", \"tiers\", \"community\", \"fans\"] },\n \"club-browse\": { id: \"club-browse\", label: \"Browse IP Clubs\", icon: Users, href: \"/launchpad/club\", keywords: [\"club\", \"membership\", \"browse\"] },\n \"sponsorship-create\": { id: \"sponsorship-create\", label: \"Create IP Sponsorship\", icon: Handshake, href: \"/launchpad/sponsorship/create\", keywords: [\"sponsorship\", \"sponsor\", \"license\", \"offer\", \"deal\"] },\n \"sponsorship-browse\": { id: \"sponsorship-browse\", label: \"Browse IP Sponsorship\", icon: Handshake, href: \"/launchpad/sponsorship\", keywords: [\"sponsorship\", \"browse\", \"offers\"] },\n \"launch-coin\": { id: \"launch-coin\", label: \"Launch a Creator Coin\", icon: Coins, href: \"/launchpad/coin/create\", keywords: [\"coin\", \"creator coin\", \"erc20\", \"token\", \"ekubo\", \"liquidity\", \"launch\"] },\n remix: { id: \"remix\", label: \"Remix an Asset\", icon: Repeat2, href: \"/marketplace\", keywords: [\"remix\", \"derivative\", \"attribution\", \"fork\"] },\n \"portfolio-collections\": { id: \"portfolio-collections\",label: \"My Collections\", icon: LayoutGrid, href: \"/portfolio/collections\", keywords: [\"deployed\", \"created\", \"my contracts\", \"claim\", \"import\"] },\n \"portfolio-assets\": { id: \"portfolio-assets\", label: \"My Assets\", icon: Gem, href: \"/portfolio/assets\", keywords: [\"owned\", \"nfts\", \"tokens\", \"collected\"] },\n \"portfolio-listings\": { id: \"portfolio-listings\", label: \"My Listings\", icon: Tag, href: \"/portfolio/listings\", keywords: [\"sell\", \"listed\", \"active listings\"] },\n \"portfolio-offers\": { id: \"portfolio-offers\", label: \"My Offers\", icon: List, href: \"/portfolio/offers\", keywords: [\"bids\", \"made\", \"sent offers\"] },\n \"portfolio-received\": { id: \"portfolio-received\", label: \"Received Offers\", icon: ScrollText, href: \"/portfolio/received\", keywords: [\"incoming\", \"bids\", \"offers received\"] },\n \"portfolio-activity\": { id: \"portfolio-activity\", label: \"My Activity\", icon: Activity, href: \"/portfolio/activity\", keywords: [\"history\", \"transactions\", \"events\"] },\n audio: { id: \"audio\", label: \"Audio\", icon: Music, href: \"/audio\", keywords: [\"music\", \"sound\", \"track\", \"podcast\"] },\n art: { id: \"art\", label: \"Art\", icon: Palette, href: \"/art\", keywords: [\"illustration\", \"drawing\", \"painting\", \"digital art\"] },\n video: { id: \"video\", label: \"Video\", icon: Film, href: \"/video\", keywords: [\"film\", \"clip\", \"animation\", \"short\"] },\n photography: { id: \"photography\", label: \"Photography\", icon: Camera, href: \"/photography\", keywords: [\"photo\", \"image\", \"picture\", \"shot\"] },\n publications: { id: \"publications\", label: \"Publications\", icon: BookOpen, href: \"/publications\", keywords: [\"article\", \"articles\", \"blog\", \"news\", \"writing\", \"book\", \"journal\"] },\n nft: { id: \"nft\", label: \"NFT\", icon: Gem, href: \"/nft\", keywords: [\"collectible\", \"token\", \"generative\"] },\n docs: { id: \"docs\", label: \"Docs — Overview\", icon: BookOpen, action: () => window.open(\"https://docs.medialane.io\", \"_blank\"), keywords: [\"docs\", \"help\", \"guide\", \"documentation\"] },\n \"docs-market\": { id: \"docs-market\", label: \"Docs — Marketplace\", icon: Store, action: () => window.open(\"https://docs.medialane.io/marketplace\", \"_blank\"), keywords: [\"docs\", \"buy\", \"sell\", \"orders\", \"guide\"] },\n \"docs-launchpad\": { id: \"docs-launchpad\",label: \"Docs — Launchpad\", icon: Zap, action: () => window.open(\"https://docs.medialane.io/launchpad\", \"_blank\"), keywords: [\"docs\", \"creator\", \"mint\", \"deploy\", \"guide\"] },\n \"docs-ip\": { id: \"docs-ip\", label: \"Docs — IP & Licensing\", icon: ShieldCheck, action: () => window.open(\"https://docs.medialane.io/ip-licensing\", \"_blank\"), keywords: [\"docs\", \"license\", \"ip\", \"rights\", \"royalty\"] },\n \"docs-sdk\": { id: \"docs-sdk\", label: \"Docs — SDK & API\", icon: FileText, action: () => window.open(\"https://docs.medialane.io/sdk\", \"_blank\"), keywords: [\"docs\", \"developer\", \"api\", \"sdk\", \"integration\"] },\n \"docs-terms\": { id: \"docs-terms\", label: \"Terms of Service\", icon: FileText, action: () => window.open(\"https://docs.medialane.io/guidelines/terms\", \"_blank\"), keywords: [\"legal\", \"terms\", \"tos\"] },\n \"docs-privacy\": { id: \"docs-privacy\", label: \"Privacy Policy\", icon: ShieldCheck, action: () => window.open(\"https://docs.medialane.io/guidelines/privacy\", \"_blank\"), keywords: [\"privacy\", \"data\", \"gdpr\"] },\n} satisfies Record<string, NavCommand>;\n\nexport type NavItemId = keyof typeof NAV_ITEMS;\n\nexport interface NavGroupSpec {\n heading?: string;\n items: (NavItemId | NavCommand)[];\n}\n\nexport function navGroups(groups: NavGroupSpec[]): NavCommandGroup[] {\n return groups.map(({ heading, items }) => ({\n heading,\n items: items.map((item) => (typeof item === \"string\" ? NAV_ITEMS[item] : item)),\n }));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
Zap
|
|
30
30
|
} from "lucide-react";
|
|
31
31
|
const NAV_ITEMS = {
|
|
32
|
-
home: { id: "home", label: "Medialane", icon: Home, href: "/", keywords: ["home", "frontpage", "start", "homepage", "main"], description: "Start here" },
|
|
32
|
+
home: { id: "home", label: "Medialane", icon: Home, iconSrc: "/icon.png", href: "/", keywords: ["home", "frontpage", "start", "homepage", "main"], description: "Start here" },
|
|
33
33
|
discover: { id: "discover", label: "Discover", icon: Telescope, href: "/discover", keywords: ["feed", "explore", "trending"], description: "Feeds, collections & creators" },
|
|
34
34
|
marketplace: { id: "marketplace", label: "Marketplace", icon: Store, href: "/marketplace", keywords: ["buy", "sell", "trade", "listings", "browse"], description: "Buy, sell & make offers" },
|
|
35
35
|
launchpad: { id: "launchpad", label: "Launchpad", icon: Zap, href: "/launchpad", keywords: ["start", "launch", "creator", "mint", "create"], description: "Create, mint & launch" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/data/nav-commands.ts"],"sourcesContent":["import {\n Activity, BookOpen, Briefcase, Camera, Coins, FileText, Film, Gem, Gift, Handshake, Home, Layers, LayoutGrid, List, Music, Palette, Plus, Repeat2, ScrollText, Settings, ShieldCheck, Store, Tag, Telescope, Ticket, Trophy, Users, Zap,\n} from \"lucide-react\";\nimport type { NavCommand, NavCommandGroup } from \"../components/nav-command-menu.js\";\n\nexport const NAV_ITEMS = {\n home: { id: \"home\", label: \"Medialane\", icon: Home, href: \"/\", keywords: [\"home\", \"frontpage\", \"start\", \"homepage\", \"main\"], description: \"Start here\" },\n discover: { id: \"discover\", label: \"Discover\", icon: Telescope, href: \"/discover\", keywords: [\"feed\", \"explore\", \"trending\"], description: \"Feeds, collections & creators\" },\n marketplace: { id: \"marketplace\", label: \"Marketplace\", icon: Store, href: \"/marketplace\", keywords: [\"buy\", \"sell\", \"trade\", \"listings\", \"browse\"], description: \"Buy, sell & make offers\" },\n launchpad: { id: \"launchpad\", label: \"Launchpad\", icon: Zap, href: \"/launchpad\", keywords: [\"start\", \"launch\", \"creator\", \"mint\", \"create\"], description: \"Create, mint & launch\" },\n portfolio: { id: \"portfolio\", label: \"Portfolio\", icon: Briefcase, href: \"/portfolio\", keywords: [\"owned\", \"my nfts\", \"wallet\", \"account\"], description: \"Your assets & activity\" },\n collections: { id: \"collections\", label: \"Collections\", icon: LayoutGrid, href: \"/collections\", keywords: [\"nft\", \"drops\", \"browse\"] },\n coins: { id: \"coins\", label: \"Coins\", icon: Coins, href: \"/coins\", keywords: [\"token\", \"creator coin\", \"memecoin\", \"discover\", \"trade\", \"swap\"] },\n creators: { id: \"creators\", label: \"Creators\", icon: Users, href: \"/creators\", keywords: [\"artists\", \"profile\", \"profiles\", \"community\"] },\n activities: { id: \"activities\", label: \"Activity\", icon: Activity, href: \"/activities\", keywords: [\"history\", \"transactions\", \"feed\", \"events\"] },\n rewards: { id: \"rewards\", label: \"Rewards\", icon: Trophy, href: \"/rewards\", keywords: [\"xp\", \"points\", \"scoreboard\", \"leaderboard\", \"badges\", \"rank\"] },\n airdrop: { id: \"airdrop\", label: \"Airdrop\", icon: Gift, href: \"/airdrop\", keywords: [\"claim\", \"free\", \"drop\", \"genesis\", \"creator's fund\"] },\n settings: { id: \"settings\", label: \"Account Settings\", icon: Settings, href: \"/settings\", keywords: [\"profile\", \"username\", \"preferences\", \"account\"] },\n \"mint-ip-asset\": { id: \"mint-ip-asset\", label: \"Mint Unique NFT\", icon: Plus, href: \"/launchpad/single-editions\", keywords: [\"mint\", \"upload\", \"publish\", \"token\", \"erc721\", \"singular\", \"unique\", \"original\"] },\n \"create-collection\": { id: \"create-collection\", label: \"Create NFT Collection\", icon: LayoutGrid, href: \"/launchpad/single-editions/collection\", keywords: [\"deploy\", \"series\", \"erc721\", \"collection\", \"branded\"] },\n \"mint-editions\": { id: \"mint-editions\", label: \"Mint Limited Edition\", icon: Layers, href: \"/launchpad/nfteditions\", keywords: [\"mint\", \"edition\", \"erc1155\", \"multi\", \"copies\", \"limited\"] },\n \"create-1155\": { id: \"create-1155\", label: \"Create Limited Edition Contract\", icon: Layers, href: \"/launchpad/nfteditions/create\", keywords: [\"deploy\", \"erc1155\", \"edition\", \"contract\", \"limited\", \"multi-edition\"] },\n \"collection-drop\": { id: \"collection-drop\", label: \"Launch Collection Drop\", icon: Gift, href: \"/launchpad/drop/create\", keywords: [\"drop\", \"timed\", \"fixed supply\", \"release\", \"erc721\"] },\n \"browse-drops\": { id: \"browse-drops\", label: \"Browse Drops\", icon: Store, href: \"/launchpad/drop\", keywords: [\"drop\", \"browse\", \"active\"] },\n \"pop-create\": { id: \"pop-create\", label: \"Create POP Event\", icon: Ticket, href: \"/launchpad/pop/create\", keywords: [\"pop\", \"proof of participation\", \"event\", \"community\", \"soulbound\"] },\n \"pop-browse\": { id: \"pop-browse\", label: \"Browse POP Events\", icon: Ticket, href: \"/launchpad/pop\", keywords: [\"pop\", \"events\", \"proof of participation\"] },\n \"tickets-create\": { id: \"tickets-create\", label: \"Create IP Tickets\", icon: Ticket, href: \"/launchpad/tickets/create\", keywords: [\"tickets\", \"event\", \"verifiable\", \"attendee\", \"pass\"] },\n \"tickets-browse\": { id: \"tickets-browse\", label: \"Browse IP Tickets\", icon: Ticket, href: \"/launchpad/tickets\", keywords: [\"tickets\", \"browse\", \"events\"] },\n \"club-create\": { id: \"club-create\", label: \"Create IP Club\", icon: Users, href: \"/launchpad/club/create\", keywords: [\"club\", \"membership\", \"tiers\", \"community\", \"fans\"] },\n \"club-browse\": { id: \"club-browse\", label: \"Browse IP Clubs\", icon: Users, href: \"/launchpad/club\", keywords: [\"club\", \"membership\", \"browse\"] },\n \"sponsorship-create\": { id: \"sponsorship-create\", label: \"Create IP Sponsorship\", icon: Handshake, href: \"/launchpad/sponsorship/create\", keywords: [\"sponsorship\", \"sponsor\", \"license\", \"offer\", \"deal\"] },\n \"sponsorship-browse\": { id: \"sponsorship-browse\", label: \"Browse IP Sponsorship\", icon: Handshake, href: \"/launchpad/sponsorship\", keywords: [\"sponsorship\", \"browse\", \"offers\"] },\n \"launch-coin\": { id: \"launch-coin\", label: \"Launch a Creator Coin\", icon: Coins, href: \"/launchpad/coin/create\", keywords: [\"coin\", \"creator coin\", \"erc20\", \"token\", \"ekubo\", \"liquidity\", \"launch\"] },\n remix: { id: \"remix\", label: \"Remix an Asset\", icon: Repeat2, href: \"/marketplace\", keywords: [\"remix\", \"derivative\", \"attribution\", \"fork\"] },\n \"portfolio-collections\": { id: \"portfolio-collections\",label: \"My Collections\", icon: LayoutGrid, href: \"/portfolio/collections\", keywords: [\"deployed\", \"created\", \"my contracts\", \"claim\", \"import\"] },\n \"portfolio-assets\": { id: \"portfolio-assets\", label: \"My Assets\", icon: Gem, href: \"/portfolio/assets\", keywords: [\"owned\", \"nfts\", \"tokens\", \"collected\"] },\n \"portfolio-listings\": { id: \"portfolio-listings\", label: \"My Listings\", icon: Tag, href: \"/portfolio/listings\", keywords: [\"sell\", \"listed\", \"active listings\"] },\n \"portfolio-offers\": { id: \"portfolio-offers\", label: \"My Offers\", icon: List, href: \"/portfolio/offers\", keywords: [\"bids\", \"made\", \"sent offers\"] },\n \"portfolio-received\": { id: \"portfolio-received\", label: \"Received Offers\", icon: ScrollText, href: \"/portfolio/received\", keywords: [\"incoming\", \"bids\", \"offers received\"] },\n \"portfolio-activity\": { id: \"portfolio-activity\", label: \"My Activity\", icon: Activity, href: \"/portfolio/activity\", keywords: [\"history\", \"transactions\", \"events\"] },\n audio: { id: \"audio\", label: \"Audio\", icon: Music, href: \"/audio\", keywords: [\"music\", \"sound\", \"track\", \"podcast\"] },\n art: { id: \"art\", label: \"Art\", icon: Palette, href: \"/art\", keywords: [\"illustration\", \"drawing\", \"painting\", \"digital art\"] },\n video: { id: \"video\", label: \"Video\", icon: Film, href: \"/video\", keywords: [\"film\", \"clip\", \"animation\", \"short\"] },\n photography: { id: \"photography\", label: \"Photography\", icon: Camera, href: \"/photography\", keywords: [\"photo\", \"image\", \"picture\", \"shot\"] },\n publications: { id: \"publications\", label: \"Publications\", icon: BookOpen, href: \"/publications\", keywords: [\"article\", \"articles\", \"blog\", \"news\", \"writing\", \"book\", \"journal\"] },\n nft: { id: \"nft\", label: \"NFT\", icon: Gem, href: \"/nft\", keywords: [\"collectible\", \"token\", \"generative\"] },\n docs: { id: \"docs\", label: \"Docs — Overview\", icon: BookOpen, action: () => window.open(\"https://docs.medialane.io\", \"_blank\"), keywords: [\"docs\", \"help\", \"guide\", \"documentation\"] },\n \"docs-market\": { id: \"docs-market\", label: \"Docs — Marketplace\", icon: Store, action: () => window.open(\"https://docs.medialane.io/marketplace\", \"_blank\"), keywords: [\"docs\", \"buy\", \"sell\", \"orders\", \"guide\"] },\n \"docs-launchpad\": { id: \"docs-launchpad\",label: \"Docs — Launchpad\", icon: Zap, action: () => window.open(\"https://docs.medialane.io/launchpad\", \"_blank\"), keywords: [\"docs\", \"creator\", \"mint\", \"deploy\", \"guide\"] },\n \"docs-ip\": { id: \"docs-ip\", label: \"Docs — IP & Licensing\", icon: ShieldCheck, action: () => window.open(\"https://docs.medialane.io/ip-licensing\", \"_blank\"), keywords: [\"docs\", \"license\", \"ip\", \"rights\", \"royalty\"] },\n \"docs-sdk\": { id: \"docs-sdk\", label: \"Docs — SDK & API\", icon: FileText, action: () => window.open(\"https://docs.medialane.io/sdk\", \"_blank\"), keywords: [\"docs\", \"developer\", \"api\", \"sdk\", \"integration\"] },\n \"docs-terms\": { id: \"docs-terms\", label: \"Terms of Service\", icon: FileText, action: () => window.open(\"https://docs.medialane.io/guidelines/terms\", \"_blank\"), keywords: [\"legal\", \"terms\", \"tos\"] },\n \"docs-privacy\": { id: \"docs-privacy\", label: \"Privacy Policy\", icon: ShieldCheck, action: () => window.open(\"https://docs.medialane.io/guidelines/privacy\", \"_blank\"), keywords: [\"privacy\", \"data\", \"gdpr\"] },\n} satisfies Record<string, NavCommand>;\n\nexport type NavItemId = keyof typeof NAV_ITEMS;\n\nexport interface NavGroupSpec {\n heading?: string;\n items: (NavItemId | NavCommand)[];\n}\n\nexport function navGroups(groups: NavGroupSpec[]): NavCommandGroup[] {\n return groups.map(({ heading, items }) => ({\n heading,\n items: items.map((item) => (typeof item === \"string\" ? NAV_ITEMS[item] : item)),\n }));\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/data/nav-commands.ts"],"sourcesContent":["import {\n Activity, BookOpen, Briefcase, Camera, Coins, FileText, Film, Gem, Gift, Handshake, Home, Layers, LayoutGrid, List, Music, Palette, Plus, Repeat2, ScrollText, Settings, ShieldCheck, Store, Tag, Telescope, Ticket, Trophy, Users, Zap,\n} from \"lucide-react\";\nimport type { NavCommand, NavCommandGroup } from \"../components/nav-command-menu.js\";\n\nexport const NAV_ITEMS = {\n home: { id: \"home\", label: \"Medialane\", icon: Home, iconSrc: \"/icon.png\", href: \"/\", keywords: [\"home\", \"frontpage\", \"start\", \"homepage\", \"main\"], description: \"Start here\" },\n discover: { id: \"discover\", label: \"Discover\", icon: Telescope, href: \"/discover\", keywords: [\"feed\", \"explore\", \"trending\"], description: \"Feeds, collections & creators\" },\n marketplace: { id: \"marketplace\", label: \"Marketplace\", icon: Store, href: \"/marketplace\", keywords: [\"buy\", \"sell\", \"trade\", \"listings\", \"browse\"], description: \"Buy, sell & make offers\" },\n launchpad: { id: \"launchpad\", label: \"Launchpad\", icon: Zap, href: \"/launchpad\", keywords: [\"start\", \"launch\", \"creator\", \"mint\", \"create\"], description: \"Create, mint & launch\" },\n portfolio: { id: \"portfolio\", label: \"Portfolio\", icon: Briefcase, href: \"/portfolio\", keywords: [\"owned\", \"my nfts\", \"wallet\", \"account\"], description: \"Your assets & activity\" },\n collections: { id: \"collections\", label: \"Collections\", icon: LayoutGrid, href: \"/collections\", keywords: [\"nft\", \"drops\", \"browse\"] },\n coins: { id: \"coins\", label: \"Coins\", icon: Coins, href: \"/coins\", keywords: [\"token\", \"creator coin\", \"memecoin\", \"discover\", \"trade\", \"swap\"] },\n creators: { id: \"creators\", label: \"Creators\", icon: Users, href: \"/creators\", keywords: [\"artists\", \"profile\", \"profiles\", \"community\"] },\n activities: { id: \"activities\", label: \"Activity\", icon: Activity, href: \"/activities\", keywords: [\"history\", \"transactions\", \"feed\", \"events\"] },\n rewards: { id: \"rewards\", label: \"Rewards\", icon: Trophy, href: \"/rewards\", keywords: [\"xp\", \"points\", \"scoreboard\", \"leaderboard\", \"badges\", \"rank\"] },\n airdrop: { id: \"airdrop\", label: \"Airdrop\", icon: Gift, href: \"/airdrop\", keywords: [\"claim\", \"free\", \"drop\", \"genesis\", \"creator's fund\"] },\n settings: { id: \"settings\", label: \"Account Settings\", icon: Settings, href: \"/settings\", keywords: [\"profile\", \"username\", \"preferences\", \"account\"] },\n \"mint-ip-asset\": { id: \"mint-ip-asset\", label: \"Mint Unique NFT\", icon: Plus, href: \"/launchpad/single-editions\", keywords: [\"mint\", \"upload\", \"publish\", \"token\", \"erc721\", \"singular\", \"unique\", \"original\"] },\n \"create-collection\": { id: \"create-collection\", label: \"Create NFT Collection\", icon: LayoutGrid, href: \"/launchpad/single-editions/collection\", keywords: [\"deploy\", \"series\", \"erc721\", \"collection\", \"branded\"] },\n \"mint-editions\": { id: \"mint-editions\", label: \"Mint Limited Edition\", icon: Layers, href: \"/launchpad/nfteditions\", keywords: [\"mint\", \"edition\", \"erc1155\", \"multi\", \"copies\", \"limited\"] },\n \"create-1155\": { id: \"create-1155\", label: \"Create Limited Edition Contract\", icon: Layers, href: \"/launchpad/nfteditions/create\", keywords: [\"deploy\", \"erc1155\", \"edition\", \"contract\", \"limited\", \"multi-edition\"] },\n \"collection-drop\": { id: \"collection-drop\", label: \"Launch Collection Drop\", icon: Gift, href: \"/launchpad/drop/create\", keywords: [\"drop\", \"timed\", \"fixed supply\", \"release\", \"erc721\"] },\n \"browse-drops\": { id: \"browse-drops\", label: \"Browse Drops\", icon: Store, href: \"/launchpad/drop\", keywords: [\"drop\", \"browse\", \"active\"] },\n \"pop-create\": { id: \"pop-create\", label: \"Create POP Event\", icon: Ticket, href: \"/launchpad/pop/create\", keywords: [\"pop\", \"proof of participation\", \"event\", \"community\", \"soulbound\"] },\n \"pop-browse\": { id: \"pop-browse\", label: \"Browse POP Events\", icon: Ticket, href: \"/launchpad/pop\", keywords: [\"pop\", \"events\", \"proof of participation\"] },\n \"tickets-create\": { id: \"tickets-create\", label: \"Create IP Tickets\", icon: Ticket, href: \"/launchpad/tickets/create\", keywords: [\"tickets\", \"event\", \"verifiable\", \"attendee\", \"pass\"] },\n \"tickets-browse\": { id: \"tickets-browse\", label: \"Browse IP Tickets\", icon: Ticket, href: \"/launchpad/tickets\", keywords: [\"tickets\", \"browse\", \"events\"] },\n \"club-create\": { id: \"club-create\", label: \"Create IP Club\", icon: Users, href: \"/launchpad/club/create\", keywords: [\"club\", \"membership\", \"tiers\", \"community\", \"fans\"] },\n \"club-browse\": { id: \"club-browse\", label: \"Browse IP Clubs\", icon: Users, href: \"/launchpad/club\", keywords: [\"club\", \"membership\", \"browse\"] },\n \"sponsorship-create\": { id: \"sponsorship-create\", label: \"Create IP Sponsorship\", icon: Handshake, href: \"/launchpad/sponsorship/create\", keywords: [\"sponsorship\", \"sponsor\", \"license\", \"offer\", \"deal\"] },\n \"sponsorship-browse\": { id: \"sponsorship-browse\", label: \"Browse IP Sponsorship\", icon: Handshake, href: \"/launchpad/sponsorship\", keywords: [\"sponsorship\", \"browse\", \"offers\"] },\n \"launch-coin\": { id: \"launch-coin\", label: \"Launch a Creator Coin\", icon: Coins, href: \"/launchpad/coin/create\", keywords: [\"coin\", \"creator coin\", \"erc20\", \"token\", \"ekubo\", \"liquidity\", \"launch\"] },\n remix: { id: \"remix\", label: \"Remix an Asset\", icon: Repeat2, href: \"/marketplace\", keywords: [\"remix\", \"derivative\", \"attribution\", \"fork\"] },\n \"portfolio-collections\": { id: \"portfolio-collections\",label: \"My Collections\", icon: LayoutGrid, href: \"/portfolio/collections\", keywords: [\"deployed\", \"created\", \"my contracts\", \"claim\", \"import\"] },\n \"portfolio-assets\": { id: \"portfolio-assets\", label: \"My Assets\", icon: Gem, href: \"/portfolio/assets\", keywords: [\"owned\", \"nfts\", \"tokens\", \"collected\"] },\n \"portfolio-listings\": { id: \"portfolio-listings\", label: \"My Listings\", icon: Tag, href: \"/portfolio/listings\", keywords: [\"sell\", \"listed\", \"active listings\"] },\n \"portfolio-offers\": { id: \"portfolio-offers\", label: \"My Offers\", icon: List, href: \"/portfolio/offers\", keywords: [\"bids\", \"made\", \"sent offers\"] },\n \"portfolio-received\": { id: \"portfolio-received\", label: \"Received Offers\", icon: ScrollText, href: \"/portfolio/received\", keywords: [\"incoming\", \"bids\", \"offers received\"] },\n \"portfolio-activity\": { id: \"portfolio-activity\", label: \"My Activity\", icon: Activity, href: \"/portfolio/activity\", keywords: [\"history\", \"transactions\", \"events\"] },\n audio: { id: \"audio\", label: \"Audio\", icon: Music, href: \"/audio\", keywords: [\"music\", \"sound\", \"track\", \"podcast\"] },\n art: { id: \"art\", label: \"Art\", icon: Palette, href: \"/art\", keywords: [\"illustration\", \"drawing\", \"painting\", \"digital art\"] },\n video: { id: \"video\", label: \"Video\", icon: Film, href: \"/video\", keywords: [\"film\", \"clip\", \"animation\", \"short\"] },\n photography: { id: \"photography\", label: \"Photography\", icon: Camera, href: \"/photography\", keywords: [\"photo\", \"image\", \"picture\", \"shot\"] },\n publications: { id: \"publications\", label: \"Publications\", icon: BookOpen, href: \"/publications\", keywords: [\"article\", \"articles\", \"blog\", \"news\", \"writing\", \"book\", \"journal\"] },\n nft: { id: \"nft\", label: \"NFT\", icon: Gem, href: \"/nft\", keywords: [\"collectible\", \"token\", \"generative\"] },\n docs: { id: \"docs\", label: \"Docs — Overview\", icon: BookOpen, action: () => window.open(\"https://docs.medialane.io\", \"_blank\"), keywords: [\"docs\", \"help\", \"guide\", \"documentation\"] },\n \"docs-market\": { id: \"docs-market\", label: \"Docs — Marketplace\", icon: Store, action: () => window.open(\"https://docs.medialane.io/marketplace\", \"_blank\"), keywords: [\"docs\", \"buy\", \"sell\", \"orders\", \"guide\"] },\n \"docs-launchpad\": { id: \"docs-launchpad\",label: \"Docs — Launchpad\", icon: Zap, action: () => window.open(\"https://docs.medialane.io/launchpad\", \"_blank\"), keywords: [\"docs\", \"creator\", \"mint\", \"deploy\", \"guide\"] },\n \"docs-ip\": { id: \"docs-ip\", label: \"Docs — IP & Licensing\", icon: ShieldCheck, action: () => window.open(\"https://docs.medialane.io/ip-licensing\", \"_blank\"), keywords: [\"docs\", \"license\", \"ip\", \"rights\", \"royalty\"] },\n \"docs-sdk\": { id: \"docs-sdk\", label: \"Docs — SDK & API\", icon: FileText, action: () => window.open(\"https://docs.medialane.io/sdk\", \"_blank\"), keywords: [\"docs\", \"developer\", \"api\", \"sdk\", \"integration\"] },\n \"docs-terms\": { id: \"docs-terms\", label: \"Terms of Service\", icon: FileText, action: () => window.open(\"https://docs.medialane.io/guidelines/terms\", \"_blank\"), keywords: [\"legal\", \"terms\", \"tos\"] },\n \"docs-privacy\": { id: \"docs-privacy\", label: \"Privacy Policy\", icon: ShieldCheck, action: () => window.open(\"https://docs.medialane.io/guidelines/privacy\", \"_blank\"), keywords: [\"privacy\", \"data\", \"gdpr\"] },\n} satisfies Record<string, NavCommand>;\n\nexport type NavItemId = keyof typeof NAV_ITEMS;\n\nexport interface NavGroupSpec {\n heading?: string;\n items: (NavItemId | NavCommand)[];\n}\n\nexport function navGroups(groups: NavGroupSpec[]): NavCommandGroup[] {\n return groups.map(({ heading, items }) => ({\n heading,\n items: items.map((item) => (typeof item === \"string\" ? NAV_ITEMS[item] : item)),\n }));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -7,7 +7,7 @@ declare function useTokenBalance(symbol: string | null, holderAddress: string |
|
|
|
7
7
|
rawBalance: bigint | null;
|
|
8
8
|
isLoading: boolean;
|
|
9
9
|
error: any;
|
|
10
|
-
decimals:
|
|
10
|
+
decimals: 8 | 6 | 18;
|
|
11
11
|
};
|
|
12
12
|
declare function hasSufficientBalance(rawBalance: bigint | null, requiredHuman: string, decimals: number): boolean | null;
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ declare function useTokenBalance(symbol: string | null, holderAddress: string |
|
|
|
7
7
|
rawBalance: bigint | null;
|
|
8
8
|
isLoading: boolean;
|
|
9
9
|
error: any;
|
|
10
|
-
decimals:
|
|
10
|
+
decimals: 8 | 6 | 18;
|
|
11
11
|
};
|
|
12
12
|
declare function hasSufficientBalance(rawBalance: bigint | null, requiredHuman: string, decimals: number): boolean | null;
|
|
13
13
|
|