@medialane/ui 0.297.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.
@@ -1,7 +1,7 @@
1
1
  import * as input_otp from 'input-otp';
2
2
  import * as React from 'react';
3
3
 
4
- declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
4
+ declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
5
5
  value?: string;
6
6
  onChange?: (newValue: string) => unknown;
7
7
  maxLength: number;
@@ -14,7 +14,7 @@ declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHT
14
14
  } & {
15
15
  render: (props: input_otp.RenderProps) => React.ReactNode;
16
16
  children?: never;
17
- } & React.RefAttributes<HTMLInputElement>, "ref"> | Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
17
+ } & React.RefAttributes<HTMLInputElement>, "ref"> | Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
18
18
  value?: string;
19
19
  onChange?: (newValue: string) => unknown;
20
20
  maxLength: number;
@@ -1,7 +1,7 @@
1
1
  import * as input_otp from 'input-otp';
2
2
  import * as React from 'react';
3
3
 
4
- declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
4
+ declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
5
5
  value?: string;
6
6
  onChange?: (newValue: string) => unknown;
7
7
  maxLength: number;
@@ -14,7 +14,7 @@ declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHT
14
14
  } & {
15
15
  render: (props: input_otp.RenderProps) => React.ReactNode;
16
16
  children?: never;
17
- } & React.RefAttributes<HTMLInputElement>, "ref"> | Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
17
+ } & React.RefAttributes<HTMLInputElement>, "ref"> | Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
18
18
  value?: string;
19
19
  onChange?: (newValue: string) => unknown;
20
20
  maxLength: number;
@@ -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?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
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?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
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,8 +3,8 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const buttonVariants: (props?: ({
6
- variant?: "ghost" | "link" | "default" | "destructive" | "outline" | "secondary" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
7
- size?: "icon" | "default" | "sm" | "lg" | null | undefined;
6
+ variant?: "link" | "default" | "secondary" | "outline" | "destructive" | "ghost" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
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> {
10
10
  asChild?: boolean;
@@ -3,8 +3,8 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const buttonVariants: (props?: ({
6
- variant?: "ghost" | "link" | "default" | "destructive" | "outline" | "secondary" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
7
- size?: "icon" | "default" | "sm" | "lg" | null | undefined;
6
+ variant?: "link" | "default" | "secondary" | "outline" | "destructive" | "ghost" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
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> {
10
10
  asChild?: boolean;
@@ -1,10 +1,10 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as React from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import { FastMintProps } from './types.cjs';
4
4
  import 'starknet';
5
5
  import '@medialane/sdk';
6
6
  import '@medialane/sdk/starknet';
7
7
 
8
- declare function FastMint(props: FastMintProps): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
8
+ declare function FastMint(props: FastMintProps): string | number | bigint | boolean | react_jsx_runtime.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
9
9
 
10
10
  export { FastMint };
@@ -1,10 +1,10 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as React from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import { FastMintProps } from './types.js';
4
4
  import 'starknet';
5
5
  import '@medialane/sdk';
6
6
  import '@medialane/sdk/starknet';
7
7
 
8
- declare function FastMint(props: FastMintProps): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
8
+ declare function FastMint(props: FastMintProps): string | number | bigint | boolean | react_jsx_runtime.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
9
9
 
10
10
  export { FastMint };
@@ -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":[]}
@@ -7,6 +7,7 @@ interface NavCommand {
7
7
  icon: React.ComponentType<{
8
8
  className?: string;
9
9
  }>;
10
+ iconSrc?: string;
10
11
  href?: string;
11
12
  action?: () => void;
12
13
  keywords?: string[];
@@ -7,6 +7,7 @@ interface NavCommand {
7
7
  icon: React.ComponentType<{
8
8
  className?: string;
9
9
  }>;
10
+ iconSrc?: string;
10
11
  href?: string;
11
12
  action?: () => void;
12
13
  keywords?: string[];
@@ -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":";AA2DI,SAoGA,UApGA,KA6EE,YA7EF;AAzDJ,YAAY,WAAW;AACvB,SAAS,SAAS,qBAAqB;AACvC,SAAS,WAAW,gBAAgB,mBAAmB;AACvD,SAAS,iBAAiB;AAC1B,SAAS,QAAQ,GAAG,YAAY,eAAe;AAC/C,SAAS,iBAAiB,cAAc;AACxC,SAAS,UAAU;AACnB,SAAS,uBAAuB;AAChC,SAAS,WAAW,yBAAyB;AAC7C,SAAS,uBAAuB;AAoChC,MAAM,cAAe;AACrB,MAAM,eAAe;AAEd,SAAS,oBAAoB;AAClC,SAAO;AAAA,IACL,MAAO,MAAM,SAAS,cAAc,IAAI,YAAY,WAAW,CAAC;AAAA,IAChE,OAAO,MAAM,SAAS,cAAc,IAAI,YAAY,YAAY,CAAC;AAAA,EACnE;AACF;AAEA,SAAS,IAAI,EAAE,UAAU,UAAU,GAAsD;AACvF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,MAAM,kBAAkB;AAEjB,SAAS,gBAAgB,OAAe,QAAgB,UAA6B;AAC1F,QAAM,QAAQ,cAAc,OAAO,QAAQ,QAAQ;AACnD,SAAO,SAAS,kBAAkB,QAAQ;AAC5C;AAEA,SAAS,aAAa,MAAkB;AACtC,SAAO,CAAC,KAAK,OAAO,GAAI,KAAK,YAAY,CAAC,CAAE,EAAE,KAAK,GAAG;AACxD;AAEO,SAAS,cAAc,UAA6B,OAA6B;AACtF,QAAM,IAAI,MAAM,KAAK;AACrB,MAAI,CAAC,EAAG,QAAO,CAAC;AAChB,SAAO,SACJ,QAAQ,CAAC,UAAU,MAAM,KAAK,EAC9B,IAAI,CAAC,UAAU,EAAE,MAAM,OAAO,gBAAgB,aAAa,IAAI,GAAG,CAAC,EAAE,EAAE,EACvE,OAAO,CAAC,EAAE,MAAM,MAAM,QAAQ,CAAC,EAC/B,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAChC,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI;AAC3B;AAEA,MAAM,qBAAqB;AAC3B,MAAM,eAAe;AAErB,SAAS,kBAAkB,OAAe;AACxC,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,KAAK;AACtD,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,MAAM,KAAK,GAAG;AACjB,mBAAa,KAAK;AAClB;AAAA,IACF;AACA,UAAM,IAAI,WAAW,MAAM,aAAa,KAAK,GAAG,kBAAkB;AAClE,WAAO,MAAM,aAAa,CAAC;AAAA,EAC7B,GAAG,CAAC,KAAK,CAAC;AACV,SAAO;AACT;AAEA,SAAS,cAAc,OAAe;AACpC,SAAO,UAAU,OAAO,EAAE,OAAO,cAAc,cAAc,KAAK,CAAC;AACrE;AAEA,SAAS,WAAW,EAAE,OAAO,OAAO,GAAuC;AACzE,QAAM,EAAE,UAAU,IAAI,cAAc,KAAK;AACzC,SAAO,YACL,oBAAC,WAAQ,WAAU,wDAAuD,IAE1E,oBAAC,UAAO,WAAW,GAAG,gDAAgD,SAAS,iBAAiB,uBAAuB,GAAG;AAE9H;AAEA,SAAS,UAAU,EAAE,OAAO,OAAO,aAAa,SAAS,SAAS,GAM/D;AACD,SACE;AAAA,IAAC,QAAQ;AAAA,IAAR;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MAET;AAAA;AAAA,QACD,qBAAC,UAAK,WAAU,kBACd;AAAA,8BAAC,UAAK,WAAU,wCAAwC,iBAAM;AAAA,UAC7D,eACC,oBAAC,UAAK,WAAU,2EAA2E,uBAAY;AAAA,WAE3G;AAAA,QACA,oBAAC,cAAW,WAAU,4GAA2G;AAAA;AAAA;AAAA,EACnI;AAEJ;AAEA,SAAS,cAAc,EAAE,OAAO,gBAAgB,WAAW,GAIxD;AACD,QAAM,EAAE,QAAQ,IAAI,cAAc,cAAc;AAChD,QAAM,WAAW,SAAS,YAAY,CAAC;AACvC,QAAM,cAAc,SAAS,eAAe,CAAC;AAC7C,QAAM,SAAS,SAAS,UAAU,CAAC;AACnC,QAAM,IAAI,MAAM,KAAK;AAErB,SACE,iCACG;AAAA,aAAS,SAAS,KACjB,oBAAC,QAAQ,OAAR,EAAc,SAAQ,YAAW,WAAW,uBAC1C,mBAAS,IAAI,CAAC,YAAY;AACzB,YAAM,EAAE,UAAU,KAAK,IAAI,gBAAgB,OAAO;AAClD,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO,WAAW,QAAQ,aAAa;AAAA,UACvC,OAAO;AAAA,UACP,aAAa;AAAA,UACb,SAAS,oBAAC,mBAAgB,KAAK,QAAQ,aAAa,OAAO,UAAU,OAAK,MAAC;AAAA,UAC3E,UAAU,MAAM,WAAW,YAAY,EAAE,UAAU,QAAQ,UAAU,SAAS,QAAQ,cAAc,CAAC,CAAC;AAAA;AAAA,QALjG,QAAQ;AAAA,MAMf;AAAA,IAEJ,CAAC,GACH;AAAA,IAED,YAAY,SAAS,KACpB,oBAAC,QAAQ,OAAR,EAAc,SAAQ,eAAc,WAAW,uBAC7C,sBAAY,IAAI,CAAC,QAAQ;AACxB,YAAM,QAAQ,IAAI,QAAQ;AAC1B,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO,cAAc,IAAI,eAAe;AAAA,UACxC;AAAA,UACA,SAAS,oBAAC,mBAAgB,KAAK,IAAI,OAAO,OAAc;AAAA,UACxD,UAAU,MAAM,WAAW,eAAe,YAAY,IAAI,eAAe,CAAC;AAAA;AAAA,QAJrE,IAAI;AAAA,MAKX;AAAA,IAEJ,CAAC,GACH;AAAA,IAED,OAAO,SAAS,KACf,oBAAC,QAAQ,OAAR,EAAc,SAAQ,UAAS,WAAW,uBACxC,iBAAO,IAAI,CAAC,UAAU;AACrB,YAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,OAAO;AAC7C,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO,SAAS,MAAM,eAAe,IAAI,MAAM,OAAO;AAAA,UACtD;AAAA,UACA,SAAS,oBAAC,mBAAgB,KAAK,MAAM,OAAO,OAAc;AAAA,UAC1D,UAAU,MAAM,WAAW,UAAU,YAAY,MAAM,iBAAiB,MAAM,OAAO,CAAC;AAAA;AAAA,QAJjF,GAAG,MAAM,eAAe,IAAI,MAAM,OAAO;AAAA,MAKhD;AAAA,IAEJ,CAAC,GACH;AAAA,IAEF,oBAAC,QAAQ,OAAR,EAAc,WAAW,uBACxB;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,OAAO,oBAAoB,CAAC;AAAA,QAC5B,SACE,oBAAC,UAAK,WAAU,mHACd,8BAAC,UAAO,WAAU,sFAAqF,GACzG;AAAA,QAEF,UAAU,MAAM,WAAW,aAAa,mBAAmB,CAAC,CAAC,EAAE;AAAA;AAAA,IACjE,GACF;AAAA,KACF;AAEJ;AAEA,SAAS,WAAW,EAAE,MAAM,SAAS,SAAS,GAAiE;AAC7G,SACE;AAAA,IAAC,QAAQ;AAAA,IAAR;AAAA,MACC,OAAO,aAAa,IAAI;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,UAAU,kBAAkB;AAAA,MAC9B;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,UAAU,YAAY;AAAA,YACxB;AAAA,YAEA;AAAA,cAAC,KAAK;AAAA,cAAL;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,UAAU,sBAAsB;AAAA,gBAClC;AAAA;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QACA,qBAAC,UAAK,WAAU,kBACd;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,UAAU,0BAA0B;AAAA,cACtC;AAAA,cAEC,eAAK;AAAA;AAAA,UACR;AAAA,UACC,KAAK,eACJ,oBAAC,UAAK,WAAU,2EACb,eAAK,aACR;AAAA,WAEJ;AAAA,QACA,oBAAC,cAAW,WAAU,4GAA2G;AAAA;AAAA;AAAA,EACnI;AAEJ;AAEA,MAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB;AAAA,EACA,SAAS;AACX,GAAwB;AACtB,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,EAAE;AAC3C,QAAM,iBAAiB,kBAAkB,KAAK;AAC9C,QAAM,YAAY,MAAM,KAAK,EAAE,SAAS;AACxC,QAAM,mBAAmB,UAAU,MAAM,KAAK,EAAE,UAAU;AAC1D,QAAM,UAAU,MAAM,QAAQ,MAAM,cAAc,UAAU,KAAK,GAAG,CAAC,UAAU,KAAK,CAAC;AACrF,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,MAAM,OAAyB,IAAI;AAEpD,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,KAAM;AACX,aAAS,EAAE;AACX,UAAM,IAAI,WAAW,MAAM,SAAS,SAAS,MAAM,GAAG,EAAE;AACxD,WAAO,MAAM,aAAa,CAAC;AAAA,EAC7B,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,UAAU,MAAM;AACpB,UAAM,QAAQ,CAAC,MAAqB;AAClC,UAAI,EAAE,QAAQ,QAAQ,EAAE,WAAW,EAAE,UAAU;AAC7C,UAAE,eAAe;AACjB,gBAAQ,CAAC,SAAS,CAAC,IAAI;AAAA,MACzB;AACA,UAAI,EAAE,QAAQ,SAAU,SAAQ,KAAK;AAAA,IACvC;AACA,UAAM,SAAU,MAAM,QAAQ,IAAI;AAClC,UAAM,UAAU,MAAM,QAAQ,KAAK;AAEnC,aAAS,iBAAiB,WAAW,KAAK;AAC1C,aAAS,iBAAiB,aAAa,MAAM;AAC7C,aAAS,iBAAiB,cAAc,OAAO;AAC/C,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,KAAK;AAC7C,eAAS,oBAAoB,aAAa,MAAM;AAChD,eAAS,oBAAoB,cAAc,OAAO;AAAA,IACpD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,WAAW,MAAM;AAAA,IACrB,CAAC,SAAiB;AAChB,cAAQ,KAAK;AACb,aAAO,KAAK,IAAI;AAAA,IAClB;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,QAAM,aAAa,MAAM;AAAA,IACvB,CAAC,QAAoB;AACnB,UAAI,IAAI,KAAM,QAAO,SAAS,IAAI,IAAI;AACtC,cAAQ,KAAK;AACb,UAAI,SAAS;AAAA,IACf;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,SACE,iCACG;AAAA;AAAA,IAED,oBAAC,mBACE,kBACC,iCAEE;AAAA;AAAA,QAAC,OAAO;AAAA,QAAP;AAAA,UACC,WAAU;AAAA,UACV,SAAS,EAAE,SAAS,EAAE;AAAA,UACtB,SAAS,EAAE,SAAS,EAAE;AAAA,UACtB,MAAM,EAAE,SAAS,EAAE;AAAA,UACnB,YAAY,EAAE,UAAU,KAAK;AAAA,UAC7B,SAAS,MAAM,QAAQ,KAAK;AAAA;AAAA,MAC9B;AAAA,MAEA;AAAA,QAAC,OAAO;AAAA,QAAP;AAAA,UACC,WAAU;AAAA,UACV,SAAS,EAAE,SAAS,GAAG,GAAG,IAAI,OAAO,EAAE;AAAA,UACvC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,OAAO,EAAE;AAAA,UACtC,MAAM,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,UAC1B,YAAY,EAAE,UAAU,MAAM,MAAM,UAAU;AAAA,UAC9C,SAAS,MAAM,QAAQ,KAAK;AAAA,UAE5B;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cACA,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,cAElC,+BAAC,WAAQ,cAAc,OAAO,OAAM,wBAAuB,WAAU,gCAEnE;AAAA,oCAAC,SAAI,WAAU,wCAAuC,eAAY,QAChE,8BAAC,UAAK,WAAU,+CAA8C,GAChE;AAAA,gBAEA,qBAAC,SAAI,WAAU,iEACZ;AAAA,2BACC,oBAAC,cAAW,OAAO,gBAAgB,QAAQ,QAAQ,KAAK,GAAG,IAE3D;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW;AAAA,wBACT;AAAA,wBACA,QAAQ,iBAAiB;AAAA,sBAC3B;AAAA;AAAA,kBACF;AAAA,kBAEF;AAAA,oBAAC,QAAQ;AAAA,oBAAR;AAAA,sBACC,KAAK;AAAA,sBACL,OAAO;AAAA,sBACP,eAAe;AAAA,sBACf,aAAY;AAAA,sBACZ,WAAU;AAAA;AAAA,kBACZ;AAAA,kBACA,oBAAC,OAAI,WAAU,yBAAwB,iBAAG;AAAA,kBAC1C;AAAA,oBAAC;AAAA;AAAA,sBACC,SAAS,MAAM,QAAQ,KAAK;AAAA,sBAC5B,WAAU;AAAA,sBACV,cAAW;AAAA,sBAEX,8BAAC,KAAE,WAAU,iCAAgC;AAAA;AAAA,kBAC/C;AAAA,mBACF;AAAA,gBAEA,qBAAC,QAAQ,MAAR,EAAa,WAAU,yDACtB;AAAA,sCAAC,QAAQ,OAAR,EAAc,WAAU,kDAAiD,+BAE1E;AAAA,kBAEC,YACC,iCACG;AAAA,4BAAQ,SAAS,KAChB,oBAAC,QAAQ,OAAR,EAAc,WAAW,uBACvB,kBAAQ,IAAI,CAAC,SACZ;AAAA,sBAAC;AAAA;AAAA,wBAEC;AAAA,wBACA,SAAS;AAAA,wBACT,UAAU,MAAM,WAAW,IAAI;AAAA;AAAA,sBAH1B,KAAK;AAAA,oBAIZ,CACD,GACH;AAAA,oBAED,oBACC,oBAAC,iBAAc,OAAc,gBAAgC,YAAY,UAAU;AAAA,qBAEvF,IAEA,SAAS,IAAI,CAAC,OAAO,MAAM;AACzB,0BAAM,UAAU,CAAC,MAAM;AACvB,2BACA,qBAAC,MAAM,UAAN,EACE;AAAA,0BAAI,KACH,oBAAC,QAAQ,WAAR,EAAkB,WAAU,4BAA2B;AAAA,sBAE1D,oBAAC,QAAQ,OAAR,EAAc,SAAS,MAAM,SAAS,WAAW,uBAC/C,gBAAM,MAAM,IAAI,CAAC,SAChB;AAAA,wBAAC;AAAA;AAAA,0BAEC;AAAA,0BACA;AAAA,0BACA,UAAU,MAAM,WAAW,IAAI;AAAA;AAAA,wBAH1B,KAAK;AAAA,sBAIZ,CACD,GACH;AAAA,yBAbmB,MAAM,WAAW,aAAa,CAAC,EAcpD;AAAA,kBAEF,CAAC;AAAA,mBAEL;AAAA,gBAEC,eACC,oBAAC,SAAI,WAAU,mDACZ,uBACH;AAAA,gBAGF,qBAAC,SAAI,WAAU,2FACb;AAAA,uCAAC,SAAI,WAAU,2BACZ;AAAA;AAAA,oBACA,qBACC,qBAAC,UAAK,WAAU,4EACd;AAAA,2CAAC,UAAK,WAAU,2BAA0B;AAAA,4CAAC,OAAI,oBAAC;AAAA,wBAAM,oBAAC,OAAI,oBAAC;AAAA,wBAAM;AAAA,yBAAS;AAAA,sBAC3E,qBAAC,UAAK,WAAU,2BAA0B;AAAA,4CAAC,OAAI,oBAAC;AAAA,wBAAM;AAAA,yBAAK;AAAA,uBAC7D;AAAA,qBAEJ;AAAA,kBACC,aACC,qBAAC,UAAK,WAAU,sEAAqE;AAAA;AAAA,oBAEnF,oBAAC,OAAI,WAAU,yBAAwB,qBAAE;AAAA,qBAC3C;AAAA,mBAEJ;AAAA,iBACF;AAAA;AAAA,UACF;AAAA;AAAA,MACF;AAAA,OACF,GAEJ;AAAA,KACF;AAEJ;","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":[]}
@@ -10,7 +10,7 @@ declare const SheetClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogC
10
10
  declare const SheetPortal: React.FC<SheetPrimitive.DialogPortalProps>;
11
11
  declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
12
  declare const sheetVariants: (props?: ({
13
- side?: "left" | "right" | "bottom" | "top" | null | undefined;
13
+ side?: "bottom" | "left" | "right" | "top" | null | undefined;
14
14
  } & class_variance_authority_types.ClassProp) | undefined) => string;
15
15
  interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
16
16
  overlayClassName?: string;
@@ -10,7 +10,7 @@ declare const SheetClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogC
10
10
  declare const SheetPortal: React.FC<SheetPrimitive.DialogPortalProps>;
11
11
  declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
12
  declare const sheetVariants: (props?: ({
13
- side?: "left" | "right" | "bottom" | "top" | null | undefined;
13
+ side?: "bottom" | "left" | "right" | "top" | null | undefined;
14
14
  } & class_variance_authority_types.ClassProp) | undefined) => string;
15
15
  interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
16
16
  overlayClassName?: string;
@@ -62,7 +62,7 @@ function SelfFundConsentDialog({ consent }) {
62
62
  if (!next) respond(false);
63
63
  }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dialog.DialogContent, { className: "sm:max-w-md", children: [
64
64
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dialog.DialogTitle, { children: "Network fee needed" }),
65
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dialog.DialogDescription, { children: "Medialane usually covers network fees for you, but can't right now. You can pay this one from your wallet, or try again later." }),
65
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dialog.DialogDescription, { children: "Sponsored transactions are unavailable. You can pay with your wallet balance." }),
66
66
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "rounded-lg bg-muted px-4 py-3 flex items-center justify-between", children: [
67
67
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-sm text-muted-foreground", children: "Network fee" }),
68
68
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-sm font-semibold", children: label ? `\u2248 ${label}` : "Estimating\u2026" })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/wallet/self-fund-consent-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { formatAmount } from \"@medialane/sdk\";\nimport type { SelfFundConsent, SelfFundFeeEstimate } from \"@medialane/sdk/starknet\";\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from \"../dialog.js\";\n\ninterface PendingRequest {\n resolve: (consented: boolean) => void;\n feeEstimate: SelfFundFeeEstimate | null | \"loading\";\n}\n\nfunction amountLabel(raw: bigint, unit: string): string {\n const [whole, fraction = \"\"] = formatAmount(raw.toString(), 18).split(\".\");\n const trimmed = fraction.slice(0, 6).replace(/0+$/, \"\");\n const amount = trimmed ? `${whole}.${trimmed}` : whole;\n return `${amount} ${unit === \"FRI\" ? \"STRK\" : \"ETH\"}`;\n}\n\nexport function feeLabelFor(estimate: SelfFundFeeEstimate | null | \"loading\"): string | null {\n if (estimate === \"loading\" || estimate == null) return null;\n return amountLabel(estimate.feeRaw, estimate.unit);\n}\n\nexport function SelfFundConsentDialog({ consent }: { consent: SelfFundConsent }) {\n const [pending, setPending] = useState<PendingRequest | null>(null);\n\n useEffect(() => {\n consent.registerHandler((feeEstimatePromise) => {\n return new Promise<boolean>((resolve) => {\n setPending({ resolve, feeEstimate: \"loading\" });\n void feeEstimatePromise.then((feeEstimate) => {\n setPending((current) => (current ? { ...current, feeEstimate } : current));\n });\n });\n });\n return () => consent.registerHandler(null);\n }, [consent]);\n\n const respond = (consented: boolean) => {\n pending?.resolve(consented);\n setPending(null);\n };\n\n const label = feeLabelFor(pending?.feeEstimate ?? null);\n const estimate = pending?.feeEstimate && pending.feeEstimate !== \"loading\" ? pending.feeEstimate : null;\n const balanceLabel = estimate?.balanceRaw != null ? amountLabel(estimate.balanceRaw, estimate.unit) : null;\n const notEnough = estimate?.balanceRaw != null && estimate.balanceRaw < estimate.feeRaw;\n\n return (\n <Dialog open={pending !== null} onOpenChange={(next) => { if (!next) respond(false); }}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogTitle>Network fee needed</DialogTitle>\n <DialogDescription>\n Medialane usually covers network fees for you, but can&apos;t right now. You can pay this one from your\n wallet, or try again later.\n </DialogDescription>\n <div className=\"rounded-lg bg-muted px-4 py-3 flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Network fee</span>\n <span className=\"text-sm font-semibold\">{label ? `≈ ${label}` : \"Estimating…\"}</span>\n </div>\n {balanceLabel && (\n <div className=\"flex items-center justify-between px-4\">\n <span className=\"text-sm text-muted-foreground\">Your balance</span>\n <span className=\"text-sm font-semibold\">{balanceLabel}</span>\n </div>\n )}\n {notEnough && (\n <p className=\"text-sm text-destructive\">\n You don&apos;t have enough to pay this fee. Try again later, when Medialane can cover it.\n </p>\n )}\n <div className=\"flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={() => respond(false)}\n className=\"px-4 py-2 rounded-lg text-sm font-medium text-muted-foreground hover:bg-muted transition-colors\"\n >\n Try again later\n </button>\n <button\n type=\"button\"\n onClick={() => respond(true)}\n disabled={notEnough}\n className=\"px-4 py-2 rounded-lg text-sm font-medium bg-primary text-primary-foreground hover:opacity-90 transition-opacity disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {label ? `Pay ${label}` : \"Pay from my wallet\"}\n </button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoDQ;AAlDR,mBAAoC;AACpC,iBAA6B;AAE7B,oBAAsE;AAOtE,SAAS,YAAY,KAAa,MAAsB;AACtD,QAAM,CAAC,OAAO,WAAW,EAAE,QAAI,yBAAa,IAAI,SAAS,GAAG,EAAE,EAAE,MAAM,GAAG;AACzE,QAAM,UAAU,SAAS,MAAM,GAAG,CAAC,EAAE,QAAQ,OAAO,EAAE;AACtD,QAAM,SAAS,UAAU,GAAG,KAAK,IAAI,OAAO,KAAK;AACjD,SAAO,GAAG,MAAM,IAAI,SAAS,QAAQ,SAAS,KAAK;AACrD;AAEO,SAAS,YAAY,UAAiE;AAC3F,MAAI,aAAa,aAAa,YAAY,KAAM,QAAO;AACvD,SAAO,YAAY,SAAS,QAAQ,SAAS,IAAI;AACnD;AAEO,SAAS,sBAAsB,EAAE,QAAQ,GAAiC;AAC/E,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAgC,IAAI;AAElE,8BAAU,MAAM;AACd,YAAQ,gBAAgB,CAAC,uBAAuB;AAC9C,aAAO,IAAI,QAAiB,CAAC,YAAY;AACvC,mBAAW,EAAE,SAAS,aAAa,UAAU,CAAC;AAC9C,aAAK,mBAAmB,KAAK,CAAC,gBAAgB;AAC5C,qBAAW,CAAC,YAAa,UAAU,EAAE,GAAG,SAAS,YAAY,IAAI,OAAQ;AAAA,QAC3E,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AACD,WAAO,MAAM,QAAQ,gBAAgB,IAAI;AAAA,EAC3C,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,UAAU,CAAC,cAAuB;AACtC,aAAS,QAAQ,SAAS;AAC1B,eAAW,IAAI;AAAA,EACjB;AAEA,QAAM,QAAQ,YAAY,SAAS,eAAe,IAAI;AACtD,QAAM,WAAW,SAAS,eAAe,QAAQ,gBAAgB,YAAY,QAAQ,cAAc;AACnG,QAAM,eAAe,UAAU,cAAc,OAAO,YAAY,SAAS,YAAY,SAAS,IAAI,IAAI;AACtG,QAAM,YAAY,UAAU,cAAc,QAAQ,SAAS,aAAa,SAAS;AAEjF,SACE,4CAAC,wBAAO,MAAM,YAAY,MAAM,cAAc,CAAC,SAAS;AAAE,QAAI,CAAC,KAAM,SAAQ,KAAK;AAAA,EAAG,GACnF,uDAAC,+BAAc,WAAU,eACvB;AAAA,gDAAC,6BAAY,gCAAkB;AAAA,IAC/B,4CAAC,mCAAkB,4IAGnB;AAAA,IACA,6CAAC,SAAI,WAAU,mEACb;AAAA,kDAAC,UAAK,WAAU,iCAAgC,yBAAW;AAAA,MAC3D,4CAAC,UAAK,WAAU,yBAAyB,kBAAQ,UAAK,KAAK,KAAK,oBAAc;AAAA,OAChF;AAAA,IACC,gBACC,6CAAC,SAAI,WAAU,0CACb;AAAA,kDAAC,UAAK,WAAU,iCAAgC,0BAAY;AAAA,MAC5D,4CAAC,UAAK,WAAU,yBAAyB,wBAAa;AAAA,OACxD;AAAA,IAED,aACC,4CAAC,OAAE,WAAU,4BAA2B,kGAExC;AAAA,IAEF,6CAAC,SAAI,WAAU,0BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,QAAQ,KAAK;AAAA,UAC5B,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,QAAQ,IAAI;AAAA,UAC3B,UAAU;AAAA,UACV,WAAU;AAAA,UAET,kBAAQ,OAAO,KAAK,KAAK;AAAA;AAAA,MAC5B;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/wallet/self-fund-consent-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { formatAmount } from \"@medialane/sdk\";\nimport type { SelfFundConsent, SelfFundFeeEstimate } from \"@medialane/sdk/starknet\";\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from \"../dialog.js\";\n\ninterface PendingRequest {\n resolve: (consented: boolean) => void;\n feeEstimate: SelfFundFeeEstimate | null | \"loading\";\n}\n\nfunction amountLabel(raw: bigint, unit: string): string {\n const [whole, fraction = \"\"] = formatAmount(raw.toString(), 18).split(\".\");\n const trimmed = fraction.slice(0, 6).replace(/0+$/, \"\");\n const amount = trimmed ? `${whole}.${trimmed}` : whole;\n return `${amount} ${unit === \"FRI\" ? \"STRK\" : \"ETH\"}`;\n}\n\nexport function feeLabelFor(estimate: SelfFundFeeEstimate | null | \"loading\"): string | null {\n if (estimate === \"loading\" || estimate == null) return null;\n return amountLabel(estimate.feeRaw, estimate.unit);\n}\n\nexport function SelfFundConsentDialog({ consent }: { consent: SelfFundConsent }) {\n const [pending, setPending] = useState<PendingRequest | null>(null);\n\n useEffect(() => {\n consent.registerHandler((feeEstimatePromise) => {\n return new Promise<boolean>((resolve) => {\n setPending({ resolve, feeEstimate: \"loading\" });\n void feeEstimatePromise.then((feeEstimate) => {\n setPending((current) => (current ? { ...current, feeEstimate } : current));\n });\n });\n });\n return () => consent.registerHandler(null);\n }, [consent]);\n\n const respond = (consented: boolean) => {\n pending?.resolve(consented);\n setPending(null);\n };\n\n const label = feeLabelFor(pending?.feeEstimate ?? null);\n const estimate = pending?.feeEstimate && pending.feeEstimate !== \"loading\" ? pending.feeEstimate : null;\n const balanceLabel = estimate?.balanceRaw != null ? amountLabel(estimate.balanceRaw, estimate.unit) : null;\n const notEnough = estimate?.balanceRaw != null && estimate.balanceRaw < estimate.feeRaw;\n\n return (\n <Dialog open={pending !== null} onOpenChange={(next) => { if (!next) respond(false); }}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogTitle>Network fee needed</DialogTitle>\n <DialogDescription>\n Sponsored transactions are unavailable. You can pay with your wallet balance.\n </DialogDescription>\n <div className=\"rounded-lg bg-muted px-4 py-3 flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Network fee</span>\n <span className=\"text-sm font-semibold\">{label ? `≈ ${label}` : \"Estimating…\"}</span>\n </div>\n {balanceLabel && (\n <div className=\"flex items-center justify-between px-4\">\n <span className=\"text-sm text-muted-foreground\">Your balance</span>\n <span className=\"text-sm font-semibold\">{balanceLabel}</span>\n </div>\n )}\n {notEnough && (\n <p className=\"text-sm text-destructive\">\n You don&apos;t have enough to pay this fee. Try again later, when Medialane can cover it.\n </p>\n )}\n <div className=\"flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={() => respond(false)}\n className=\"px-4 py-2 rounded-lg text-sm font-medium text-muted-foreground hover:bg-muted transition-colors\"\n >\n Try again later\n </button>\n <button\n type=\"button\"\n onClick={() => respond(true)}\n disabled={notEnough}\n className=\"px-4 py-2 rounded-lg text-sm font-medium bg-primary text-primary-foreground hover:opacity-90 transition-opacity disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {label ? `Pay ${label}` : \"Pay from my wallet\"}\n </button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoDQ;AAlDR,mBAAoC;AACpC,iBAA6B;AAE7B,oBAAsE;AAOtE,SAAS,YAAY,KAAa,MAAsB;AACtD,QAAM,CAAC,OAAO,WAAW,EAAE,QAAI,yBAAa,IAAI,SAAS,GAAG,EAAE,EAAE,MAAM,GAAG;AACzE,QAAM,UAAU,SAAS,MAAM,GAAG,CAAC,EAAE,QAAQ,OAAO,EAAE;AACtD,QAAM,SAAS,UAAU,GAAG,KAAK,IAAI,OAAO,KAAK;AACjD,SAAO,GAAG,MAAM,IAAI,SAAS,QAAQ,SAAS,KAAK;AACrD;AAEO,SAAS,YAAY,UAAiE;AAC3F,MAAI,aAAa,aAAa,YAAY,KAAM,QAAO;AACvD,SAAO,YAAY,SAAS,QAAQ,SAAS,IAAI;AACnD;AAEO,SAAS,sBAAsB,EAAE,QAAQ,GAAiC;AAC/E,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAgC,IAAI;AAElE,8BAAU,MAAM;AACd,YAAQ,gBAAgB,CAAC,uBAAuB;AAC9C,aAAO,IAAI,QAAiB,CAAC,YAAY;AACvC,mBAAW,EAAE,SAAS,aAAa,UAAU,CAAC;AAC9C,aAAK,mBAAmB,KAAK,CAAC,gBAAgB;AAC5C,qBAAW,CAAC,YAAa,UAAU,EAAE,GAAG,SAAS,YAAY,IAAI,OAAQ;AAAA,QAC3E,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AACD,WAAO,MAAM,QAAQ,gBAAgB,IAAI;AAAA,EAC3C,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,UAAU,CAAC,cAAuB;AACtC,aAAS,QAAQ,SAAS;AAC1B,eAAW,IAAI;AAAA,EACjB;AAEA,QAAM,QAAQ,YAAY,SAAS,eAAe,IAAI;AACtD,QAAM,WAAW,SAAS,eAAe,QAAQ,gBAAgB,YAAY,QAAQ,cAAc;AACnG,QAAM,eAAe,UAAU,cAAc,OAAO,YAAY,SAAS,YAAY,SAAS,IAAI,IAAI;AACtG,QAAM,YAAY,UAAU,cAAc,QAAQ,SAAS,aAAa,SAAS;AAEjF,SACE,4CAAC,wBAAO,MAAM,YAAY,MAAM,cAAc,CAAC,SAAS;AAAE,QAAI,CAAC,KAAM,SAAQ,KAAK;AAAA,EAAG,GACnF,uDAAC,+BAAc,WAAU,eACvB;AAAA,gDAAC,6BAAY,gCAAkB;AAAA,IAC/B,4CAAC,mCAAkB,2FAEnB;AAAA,IACA,6CAAC,SAAI,WAAU,mEACb;AAAA,kDAAC,UAAK,WAAU,iCAAgC,yBAAW;AAAA,MAC3D,4CAAC,UAAK,WAAU,yBAAyB,kBAAQ,UAAK,KAAK,KAAK,oBAAc;AAAA,OAChF;AAAA,IACC,gBACC,6CAAC,SAAI,WAAU,0CACb;AAAA,kDAAC,UAAK,WAAU,iCAAgC,0BAAY;AAAA,MAC5D,4CAAC,UAAK,WAAU,yBAAyB,wBAAa;AAAA,OACxD;AAAA,IAED,aACC,4CAAC,OAAE,WAAU,4BAA2B,kGAExC;AAAA,IAEF,6CAAC,SAAI,WAAU,0BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,QAAQ,KAAK;AAAA,UAC5B,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,QAAQ,IAAI;AAAA,UAC3B,UAAU;AAAA,UACV,WAAU;AAAA,UAET,kBAAQ,OAAO,KAAK,KAAK;AAAA;AAAA,MAC5B;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -38,7 +38,7 @@ function SelfFundConsentDialog({ consent }) {
38
38
  if (!next) respond(false);
39
39
  }, children: /* @__PURE__ */ jsxs(DialogContent, { className: "sm:max-w-md", children: [
40
40
  /* @__PURE__ */ jsx(DialogTitle, { children: "Network fee needed" }),
41
- /* @__PURE__ */ jsx(DialogDescription, { children: "Medialane usually covers network fees for you, but can't right now. You can pay this one from your wallet, or try again later." }),
41
+ /* @__PURE__ */ jsx(DialogDescription, { children: "Sponsored transactions are unavailable. You can pay with your wallet balance." }),
42
42
  /* @__PURE__ */ jsxs("div", { className: "rounded-lg bg-muted px-4 py-3 flex items-center justify-between", children: [
43
43
  /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "Network fee" }),
44
44
  /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: label ? `\u2248 ${label}` : "Estimating\u2026" })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/wallet/self-fund-consent-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { formatAmount } from \"@medialane/sdk\";\nimport type { SelfFundConsent, SelfFundFeeEstimate } from \"@medialane/sdk/starknet\";\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from \"../dialog.js\";\n\ninterface PendingRequest {\n resolve: (consented: boolean) => void;\n feeEstimate: SelfFundFeeEstimate | null | \"loading\";\n}\n\nfunction amountLabel(raw: bigint, unit: string): string {\n const [whole, fraction = \"\"] = formatAmount(raw.toString(), 18).split(\".\");\n const trimmed = fraction.slice(0, 6).replace(/0+$/, \"\");\n const amount = trimmed ? `${whole}.${trimmed}` : whole;\n return `${amount} ${unit === \"FRI\" ? \"STRK\" : \"ETH\"}`;\n}\n\nexport function feeLabelFor(estimate: SelfFundFeeEstimate | null | \"loading\"): string | null {\n if (estimate === \"loading\" || estimate == null) return null;\n return amountLabel(estimate.feeRaw, estimate.unit);\n}\n\nexport function SelfFundConsentDialog({ consent }: { consent: SelfFundConsent }) {\n const [pending, setPending] = useState<PendingRequest | null>(null);\n\n useEffect(() => {\n consent.registerHandler((feeEstimatePromise) => {\n return new Promise<boolean>((resolve) => {\n setPending({ resolve, feeEstimate: \"loading\" });\n void feeEstimatePromise.then((feeEstimate) => {\n setPending((current) => (current ? { ...current, feeEstimate } : current));\n });\n });\n });\n return () => consent.registerHandler(null);\n }, [consent]);\n\n const respond = (consented: boolean) => {\n pending?.resolve(consented);\n setPending(null);\n };\n\n const label = feeLabelFor(pending?.feeEstimate ?? null);\n const estimate = pending?.feeEstimate && pending.feeEstimate !== \"loading\" ? pending.feeEstimate : null;\n const balanceLabel = estimate?.balanceRaw != null ? amountLabel(estimate.balanceRaw, estimate.unit) : null;\n const notEnough = estimate?.balanceRaw != null && estimate.balanceRaw < estimate.feeRaw;\n\n return (\n <Dialog open={pending !== null} onOpenChange={(next) => { if (!next) respond(false); }}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogTitle>Network fee needed</DialogTitle>\n <DialogDescription>\n Medialane usually covers network fees for you, but can&apos;t right now. You can pay this one from your\n wallet, or try again later.\n </DialogDescription>\n <div className=\"rounded-lg bg-muted px-4 py-3 flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Network fee</span>\n <span className=\"text-sm font-semibold\">{label ? `≈ ${label}` : \"Estimating…\"}</span>\n </div>\n {balanceLabel && (\n <div className=\"flex items-center justify-between px-4\">\n <span className=\"text-sm text-muted-foreground\">Your balance</span>\n <span className=\"text-sm font-semibold\">{balanceLabel}</span>\n </div>\n )}\n {notEnough && (\n <p className=\"text-sm text-destructive\">\n You don&apos;t have enough to pay this fee. Try again later, when Medialane can cover it.\n </p>\n )}\n <div className=\"flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={() => respond(false)}\n className=\"px-4 py-2 rounded-lg text-sm font-medium text-muted-foreground hover:bg-muted transition-colors\"\n >\n Try again later\n </button>\n <button\n type=\"button\"\n onClick={() => respond(true)}\n disabled={notEnough}\n className=\"px-4 py-2 rounded-lg text-sm font-medium bg-primary text-primary-foreground hover:opacity-90 transition-opacity disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {label ? `Pay ${label}` : \"Pay from my wallet\"}\n </button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";AAoDQ,cAKA,YALA;AAlDR,SAAS,WAAW,gBAAgB;AACpC,SAAS,oBAAoB;AAE7B,SAAS,QAAQ,eAAe,mBAAmB,mBAAmB;AAOtE,SAAS,YAAY,KAAa,MAAsB;AACtD,QAAM,CAAC,OAAO,WAAW,EAAE,IAAI,aAAa,IAAI,SAAS,GAAG,EAAE,EAAE,MAAM,GAAG;AACzE,QAAM,UAAU,SAAS,MAAM,GAAG,CAAC,EAAE,QAAQ,OAAO,EAAE;AACtD,QAAM,SAAS,UAAU,GAAG,KAAK,IAAI,OAAO,KAAK;AACjD,SAAO,GAAG,MAAM,IAAI,SAAS,QAAQ,SAAS,KAAK;AACrD;AAEO,SAAS,YAAY,UAAiE;AAC3F,MAAI,aAAa,aAAa,YAAY,KAAM,QAAO;AACvD,SAAO,YAAY,SAAS,QAAQ,SAAS,IAAI;AACnD;AAEO,SAAS,sBAAsB,EAAE,QAAQ,GAAiC;AAC/E,QAAM,CAAC,SAAS,UAAU,IAAI,SAAgC,IAAI;AAElE,YAAU,MAAM;AACd,YAAQ,gBAAgB,CAAC,uBAAuB;AAC9C,aAAO,IAAI,QAAiB,CAAC,YAAY;AACvC,mBAAW,EAAE,SAAS,aAAa,UAAU,CAAC;AAC9C,aAAK,mBAAmB,KAAK,CAAC,gBAAgB;AAC5C,qBAAW,CAAC,YAAa,UAAU,EAAE,GAAG,SAAS,YAAY,IAAI,OAAQ;AAAA,QAC3E,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AACD,WAAO,MAAM,QAAQ,gBAAgB,IAAI;AAAA,EAC3C,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,UAAU,CAAC,cAAuB;AACtC,aAAS,QAAQ,SAAS;AAC1B,eAAW,IAAI;AAAA,EACjB;AAEA,QAAM,QAAQ,YAAY,SAAS,eAAe,IAAI;AACtD,QAAM,WAAW,SAAS,eAAe,QAAQ,gBAAgB,YAAY,QAAQ,cAAc;AACnG,QAAM,eAAe,UAAU,cAAc,OAAO,YAAY,SAAS,YAAY,SAAS,IAAI,IAAI;AACtG,QAAM,YAAY,UAAU,cAAc,QAAQ,SAAS,aAAa,SAAS;AAEjF,SACE,oBAAC,UAAO,MAAM,YAAY,MAAM,cAAc,CAAC,SAAS;AAAE,QAAI,CAAC,KAAM,SAAQ,KAAK;AAAA,EAAG,GACnF,+BAAC,iBAAc,WAAU,eACvB;AAAA,wBAAC,eAAY,gCAAkB;AAAA,IAC/B,oBAAC,qBAAkB,4IAGnB;AAAA,IACA,qBAAC,SAAI,WAAU,mEACb;AAAA,0BAAC,UAAK,WAAU,iCAAgC,yBAAW;AAAA,MAC3D,oBAAC,UAAK,WAAU,yBAAyB,kBAAQ,UAAK,KAAK,KAAK,oBAAc;AAAA,OAChF;AAAA,IACC,gBACC,qBAAC,SAAI,WAAU,0CACb;AAAA,0BAAC,UAAK,WAAU,iCAAgC,0BAAY;AAAA,MAC5D,oBAAC,UAAK,WAAU,yBAAyB,wBAAa;AAAA,OACxD;AAAA,IAED,aACC,oBAAC,OAAE,WAAU,4BAA2B,kGAExC;AAAA,IAEF,qBAAC,SAAI,WAAU,0BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,QAAQ,KAAK;AAAA,UAC5B,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,QAAQ,IAAI;AAAA,UAC3B,UAAU;AAAA,UACV,WAAU;AAAA,UAET,kBAAQ,OAAO,KAAK,KAAK;AAAA;AAAA,MAC5B;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/wallet/self-fund-consent-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { formatAmount } from \"@medialane/sdk\";\nimport type { SelfFundConsent, SelfFundFeeEstimate } from \"@medialane/sdk/starknet\";\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from \"../dialog.js\";\n\ninterface PendingRequest {\n resolve: (consented: boolean) => void;\n feeEstimate: SelfFundFeeEstimate | null | \"loading\";\n}\n\nfunction amountLabel(raw: bigint, unit: string): string {\n const [whole, fraction = \"\"] = formatAmount(raw.toString(), 18).split(\".\");\n const trimmed = fraction.slice(0, 6).replace(/0+$/, \"\");\n const amount = trimmed ? `${whole}.${trimmed}` : whole;\n return `${amount} ${unit === \"FRI\" ? \"STRK\" : \"ETH\"}`;\n}\n\nexport function feeLabelFor(estimate: SelfFundFeeEstimate | null | \"loading\"): string | null {\n if (estimate === \"loading\" || estimate == null) return null;\n return amountLabel(estimate.feeRaw, estimate.unit);\n}\n\nexport function SelfFundConsentDialog({ consent }: { consent: SelfFundConsent }) {\n const [pending, setPending] = useState<PendingRequest | null>(null);\n\n useEffect(() => {\n consent.registerHandler((feeEstimatePromise) => {\n return new Promise<boolean>((resolve) => {\n setPending({ resolve, feeEstimate: \"loading\" });\n void feeEstimatePromise.then((feeEstimate) => {\n setPending((current) => (current ? { ...current, feeEstimate } : current));\n });\n });\n });\n return () => consent.registerHandler(null);\n }, [consent]);\n\n const respond = (consented: boolean) => {\n pending?.resolve(consented);\n setPending(null);\n };\n\n const label = feeLabelFor(pending?.feeEstimate ?? null);\n const estimate = pending?.feeEstimate && pending.feeEstimate !== \"loading\" ? pending.feeEstimate : null;\n const balanceLabel = estimate?.balanceRaw != null ? amountLabel(estimate.balanceRaw, estimate.unit) : null;\n const notEnough = estimate?.balanceRaw != null && estimate.balanceRaw < estimate.feeRaw;\n\n return (\n <Dialog open={pending !== null} onOpenChange={(next) => { if (!next) respond(false); }}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogTitle>Network fee needed</DialogTitle>\n <DialogDescription>\n Sponsored transactions are unavailable. You can pay with your wallet balance.\n </DialogDescription>\n <div className=\"rounded-lg bg-muted px-4 py-3 flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Network fee</span>\n <span className=\"text-sm font-semibold\">{label ? `≈ ${label}` : \"Estimating…\"}</span>\n </div>\n {balanceLabel && (\n <div className=\"flex items-center justify-between px-4\">\n <span className=\"text-sm text-muted-foreground\">Your balance</span>\n <span className=\"text-sm font-semibold\">{balanceLabel}</span>\n </div>\n )}\n {notEnough && (\n <p className=\"text-sm text-destructive\">\n You don&apos;t have enough to pay this fee. Try again later, when Medialane can cover it.\n </p>\n )}\n <div className=\"flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={() => respond(false)}\n className=\"px-4 py-2 rounded-lg text-sm font-medium text-muted-foreground hover:bg-muted transition-colors\"\n >\n Try again later\n </button>\n <button\n type=\"button\"\n onClick={() => respond(true)}\n disabled={notEnough}\n className=\"px-4 py-2 rounded-lg text-sm font-medium bg-primary text-primary-foreground hover:opacity-90 transition-opacity disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {label ? `Pay ${label}` : \"Pay from my wallet\"}\n </button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";AAoDQ,cAIA,YAJA;AAlDR,SAAS,WAAW,gBAAgB;AACpC,SAAS,oBAAoB;AAE7B,SAAS,QAAQ,eAAe,mBAAmB,mBAAmB;AAOtE,SAAS,YAAY,KAAa,MAAsB;AACtD,QAAM,CAAC,OAAO,WAAW,EAAE,IAAI,aAAa,IAAI,SAAS,GAAG,EAAE,EAAE,MAAM,GAAG;AACzE,QAAM,UAAU,SAAS,MAAM,GAAG,CAAC,EAAE,QAAQ,OAAO,EAAE;AACtD,QAAM,SAAS,UAAU,GAAG,KAAK,IAAI,OAAO,KAAK;AACjD,SAAO,GAAG,MAAM,IAAI,SAAS,QAAQ,SAAS,KAAK;AACrD;AAEO,SAAS,YAAY,UAAiE;AAC3F,MAAI,aAAa,aAAa,YAAY,KAAM,QAAO;AACvD,SAAO,YAAY,SAAS,QAAQ,SAAS,IAAI;AACnD;AAEO,SAAS,sBAAsB,EAAE,QAAQ,GAAiC;AAC/E,QAAM,CAAC,SAAS,UAAU,IAAI,SAAgC,IAAI;AAElE,YAAU,MAAM;AACd,YAAQ,gBAAgB,CAAC,uBAAuB;AAC9C,aAAO,IAAI,QAAiB,CAAC,YAAY;AACvC,mBAAW,EAAE,SAAS,aAAa,UAAU,CAAC;AAC9C,aAAK,mBAAmB,KAAK,CAAC,gBAAgB;AAC5C,qBAAW,CAAC,YAAa,UAAU,EAAE,GAAG,SAAS,YAAY,IAAI,OAAQ;AAAA,QAC3E,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AACD,WAAO,MAAM,QAAQ,gBAAgB,IAAI;AAAA,EAC3C,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,UAAU,CAAC,cAAuB;AACtC,aAAS,QAAQ,SAAS;AAC1B,eAAW,IAAI;AAAA,EACjB;AAEA,QAAM,QAAQ,YAAY,SAAS,eAAe,IAAI;AACtD,QAAM,WAAW,SAAS,eAAe,QAAQ,gBAAgB,YAAY,QAAQ,cAAc;AACnG,QAAM,eAAe,UAAU,cAAc,OAAO,YAAY,SAAS,YAAY,SAAS,IAAI,IAAI;AACtG,QAAM,YAAY,UAAU,cAAc,QAAQ,SAAS,aAAa,SAAS;AAEjF,SACE,oBAAC,UAAO,MAAM,YAAY,MAAM,cAAc,CAAC,SAAS;AAAE,QAAI,CAAC,KAAM,SAAQ,KAAK;AAAA,EAAG,GACnF,+BAAC,iBAAc,WAAU,eACvB;AAAA,wBAAC,eAAY,gCAAkB;AAAA,IAC/B,oBAAC,qBAAkB,2FAEnB;AAAA,IACA,qBAAC,SAAI,WAAU,mEACb;AAAA,0BAAC,UAAK,WAAU,iCAAgC,yBAAW;AAAA,MAC3D,oBAAC,UAAK,WAAU,yBAAyB,kBAAQ,UAAK,KAAK,KAAK,oBAAc;AAAA,OAChF;AAAA,IACC,gBACC,qBAAC,SAAI,WAAU,0CACb;AAAA,0BAAC,UAAK,WAAU,iCAAgC,0BAAY;AAAA,MAC5D,oBAAC,UAAK,WAAU,yBAAyB,wBAAa;AAAA,OACxD;AAAA,IAED,aACC,oBAAC,OAAE,WAAU,4BAA2B,kGAExC;AAAA,IAEF,qBAAC,SAAI,WAAU,0BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,QAAQ,KAAK;AAAA,UAC5B,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,QAAQ,IAAI;AAAA,UAC3B,UAAU;AAAA,UACV,WAAU;AAAA,UAET,kBAAQ,OAAO,KAAK,KAAK;AAAA;AAAA,MAC5B;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","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":[]}
@@ -8,6 +8,7 @@ declare const NAV_ITEMS: {
8
8
  id: string;
9
9
  label: string;
10
10
  icon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
11
+ iconSrc: string;
11
12
  href: string;
12
13
  keywords: string[];
13
14
  description: string;
@@ -8,6 +8,7 @@ declare const NAV_ITEMS: {
8
8
  id: string;
9
9
  label: string;
10
10
  icon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
11
+ iconSrc: string;
11
12
  href: string;
12
13
  keywords: string[];
13
14
  description: string;
@@ -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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medialane/ui",
3
- "version": "0.297.0",
3
+ "version": "0.299.0",
4
4
  "description": "Shared UI components for Medialane apps",
5
5
  "type": "module",
6
6
  "sideEffects": false,