@mastra/playground-ui 61.0.0-alpha.2 → 61.0.0-alpha.3

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.
Files changed (35) hide show
  1. package/dist/components/MainSidebar.cjs.js +125 -11
  2. package/dist/components/MainSidebar.cjs.js.map +1 -1
  3. package/dist/components/MainSidebar.es.js +120 -1
  4. package/dist/components/MainSidebar.es.js.map +1 -1
  5. package/dist/components/RelativeTimestamp.cjs.js +1 -1
  6. package/dist/components/RelativeTimestamp.es.js +1 -1
  7. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +0 -1
  8. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  9. package/dist/domains/chat/tools/badges/workflow-badge.es.js +0 -1
  10. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  11. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +0 -1
  12. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
  13. package/dist/domains/workflows/workflow/workflow-input-data.es.js +0 -1
  14. package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
  15. package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +1 -1
  16. package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
  17. package/dist/{main-sidebar-B0ivY7lW.js → main-sidebar-link-active-BW025pfN.js} +20 -128
  18. package/dist/main-sidebar-link-active-BW025pfN.js.map +1 -0
  19. package/dist/{main-sidebar-BWKVSRoQ.cjs → main-sidebar-link-active-MpwV6dGL.cjs} +18 -127
  20. package/dist/main-sidebar-link-active-MpwV6dGL.cjs.map +1 -0
  21. package/dist/new/sidebar.cjs.js +34 -34
  22. package/dist/new/sidebar.cjs.js.map +1 -1
  23. package/dist/new/sidebar.es.js +2 -2
  24. package/dist/{relative-timestamp-Nnwtw7Rp.cjs → relative-timestamp-DLOmWi7o.cjs} +6 -3
  25. package/dist/relative-timestamp-DLOmWi7o.cjs.map +1 -0
  26. package/dist/{relative-timestamp-Rn8mAobA.js → relative-timestamp-XodF8W6h.js} +6 -3
  27. package/dist/relative-timestamp-XodF8W6h.js.map +1 -0
  28. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +2 -0
  29. package/dist/src/ds/components/RelativeTimestamp/relative-timestamp.stories.d.ts +1 -0
  30. package/dist/style.css +9 -0
  31. package/package.json +8 -8
  32. package/dist/main-sidebar-B0ivY7lW.js.map +0 -1
  33. package/dist/main-sidebar-BWKVSRoQ.cjs.map +0 -1
  34. package/dist/relative-timestamp-Nnwtw7Rp.cjs.map +0 -1
  35. package/dist/relative-timestamp-Rn8mAobA.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.cjs.js","sources":["../../src/ds/new/sidebar/sidebar-new-brand.tsx","../../src/ds/new/sidebar/sidebar-new-command-header.tsx","../../src/ds/new/sidebar/sidebar-new-footer.tsx","../../src/ds/new/sidebar/sidebar-new-footer-meta.tsx","../../src/ds/new/sidebar/sidebar-new-trigger.tsx","../../src/ds/new/sidebar/sidebar-new-header.tsx","../../src/ds/new/sidebar/sidebar-new-meter.tsx","../../src/ds/new/sidebar/sidebar-new-nav.tsx","../../src/ds/new/sidebar/sidebar-new-nav-header.tsx","../../src/ds/new/sidebar/sidebar-new-nav-stack-context.ts","../../src/ds/new/sidebar/sidebar-new-nav-stack-root.tsx","../../src/ds/new/sidebar/sidebar-new-nav-stack-page-classes.ts","../../src/ds/new/sidebar/sidebar-new-nav-stack-root-view.tsx","../../src/ds/new/sidebar/sidebar-new-nav-stack-view.tsx","../../src/ds/new/sidebar/sidebar-new-nav-stack.ts","../../src/ds/new/sidebar/sidebar-new-root.tsx","../../src/ds/new/sidebar/sidebar-new-search-trigger.tsx","../../src/ds/new/sidebar/sidebar-new-section-link.tsx","../../src/ds/new/sidebar/sidebar-new-more-links.tsx","../../src/ds/new/sidebar/sidebar-new-sections.tsx","../../src/ds/new/sidebar/sidebar-new.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { Txt } from '@/ds/components/Txt';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewBrandProps = Omit<ComponentPropsWithoutRef<'div'>, 'title'> & {\n logo?: ReactNode;\n title: ReactNode;\n};\n\nexport function SidebarNewBrand({ logo, title, className, ...props }: SidebarNewBrandProps) {\n const { state } = useMainSidebar();\n\n return (\n <div data-slot=\"sidebar-new-brand\" className={cn('flex min-w-0 flex-1 items-center gap-2', className)} {...props}>\n {logo ? <span className=\"shrink-0\">{logo}</span> : null}\n {state === 'collapsed' ? (\n <VisuallyHidden>{title}</VisuallyHidden>\n ) : (\n <Txt as=\"span\" variant=\"subheading\" tone=\"ink\" className=\"truncate font-body tracking-tight\">\n {title}\n </Txt>\n )}\n </div>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewCommandHeaderProps = ComponentPropsWithoutRef<'header'>;\n\nexport const SidebarNewCommandHeader = forwardRef<HTMLElement, SidebarNewCommandHeaderProps>(\n function SidebarNewCommandHeader({ className, children, ...props }, ref) {\n const { state, isMobile } = useMainSidebar();\n\n return (\n <header\n ref={ref}\n data-slot=\"sidebar-new-command-header\"\n data-state={state}\n className={cn(\n 'flex h-header-default shrink-0 items-center gap-1 overflow-hidden',\n state === 'collapsed' ? 'px-3' : 'pr-2 pl-3.5',\n state !== 'collapsed' && !isMobile && 'w-[calc(var(--sidebar-width)-1rem)]',\n state === 'collapsed' && '[&_[data-slot=sidebar-new-search-trigger]]:hidden',\n className,\n )}\n {...props}\n >\n {children}\n </header>\n );\n },\n);\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewFooterProps = ComponentPropsWithoutRef<'footer'>;\n\nexport function SidebarNewFooter({ className, children, ...props }: SidebarNewFooterProps) {\n return (\n <footer data-slot=\"sidebar-new-footer\" className={cn('mt-auto shrink-0 space-y-1.5 pb-2', className)} {...props}>\n {children}\n </footer>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewFooterMetaProps = ComponentPropsWithoutRef<'div'> & {\n action?: ReactNode;\n};\n\nexport const SidebarNewFooterMeta = forwardRef<HTMLDivElement, SidebarNewFooterMetaProps>(function SidebarNewFooterMeta(\n { className, children, action, ...props },\n ref,\n) {\n const { state } = useMainSidebar();\n\n return (\n <div\n ref={ref}\n data-slot=\"sidebar-new-footer-meta\"\n data-state={state}\n className={cn(\n 'grid min-h-10 grid-cols-[minmax(0,1fr)_auto_0fr] items-center border-t border-border px-2 py-1 text-meta text-muted-foreground',\n 'transition-[grid-template-columns] duration-slow ease-out-custom motion-reduce:transition-none',\n state === 'collapsed' && 'grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] px-0',\n className,\n )}\n {...props}\n >\n <div\n aria-hidden={state === 'collapsed'}\n className={cn(\n 'min-w-0 truncate transition-opacity duration-normal ease-out-custom motion-reduce:transition-none',\n state === 'collapsed' && 'opacity-0',\n )}\n >\n {children}\n </div>\n {action}\n <span aria-hidden />\n </div>\n );\n});\n","import { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport type { MainSidebarTriggerProps } from '@/ds/components/MainSidebar/main-sidebar-trigger';\nimport { MainSidebarTrigger } from '@/ds/components/MainSidebar/main-sidebar-trigger';\n\nexport type SidebarNewTriggerProps = MainSidebarTriggerProps;\n\nexport function SidebarNewTrigger(props: SidebarNewTriggerProps) {\n const context = useMaybeSidebarState();\n if (context?.isMobile) return null;\n return <MainSidebarTrigger {...props} />;\n}\n","import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { SidebarNewTrigger } from './sidebar-new-trigger';\nimport { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { cn } from '@/lib/utils';\n\nimport './sidebar-new-header.css';\n\nexport type SidebarNewHeaderProps = ComponentPropsWithoutRef<'header'> & {\n /** Logo for the collapsed rail. Replaces the children when collapsed and swaps to the toggle on hover. */\n collapsedLogo?: ReactNode;\n};\n\n// Holds opacity while the sidebar collapses, so leftover hover doesn't flash the toggle.\nconst hold = 'animate-[sidebar-hold_var(--resize-dur)] motion-reduce:animate-none';\n\nexport function SidebarNewHeader({ className, children, collapsedLogo, ...props }: SidebarNewHeaderProps) {\n const sidebar = useMaybeSidebarState();\n const collapsed = sidebar?.state === 'collapsed';\n const isMobile = sidebar?.isMobile ?? false;\n\n return (\n <header\n data-slot=\"sidebar-new-header\"\n className={cn(\n 'flex h-header-default shrink-0 items-center gap-2',\n collapsed ? 'px-1' : 'pr-2 pl-3.5',\n // Target width, not the animating one, so the title doesn't re-truncate while expanding.\n !collapsed && !isMobile && 'w-[calc(var(--sidebar-width)-1rem)]',\n className,\n )}\n {...props}\n >\n {collapsed && collapsedLogo ? (\n // ml-0.5 instead of mx-auto, so it doesn't jump while the sidebar collapses.\n <div className=\"group/collapsed-logo relative ml-0.5 grid size-9 shrink-0 place-items-center\">\n <span\n className={cn(\n hold,\n 'grid place-items-center transition-opacity duration-normal [--sidebar-hold-opacity:1] group-focus-within/collapsed-logo:opacity-0 group-hover/sidebar:opacity-0 motion-reduce:transition-none',\n )}\n >\n {collapsedLogo}\n </span>\n {isMobile ? null : (\n <div\n className={cn(\n hold,\n 'absolute inset-0 grid place-items-center opacity-0 transition-opacity duration-normal [--sidebar-hold-opacity:0] group-hover/sidebar:opacity-100 focus-within:opacity-100 motion-reduce:transition-none',\n )}\n >\n <SidebarNewTrigger />\n </div>\n )}\n </div>\n ) : (\n children\n )}\n </header>\n );\n}\n","import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport type { SidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { Txt } from '@/ds/components/Txt';\nimport { surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewMeterTone = 'neutral' | 'warning' | 'danger';\n\nconst NOISE =\n \"url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\\\")\";\n\nconst CARD_HEIGHT = 76;\nconst BLOOM_HEIGHT = 100;\nconst BLOOM_HOLD_Y = 60;\nconst BLOOM_HOLD_X = 22.5;\nconst GRAIN_OPACITY = 0.18;\nconst GRAIN_SIZE = 110;\n\nconst FALLOFF_RAMP = [0, 0.08, 0.16, 0.25, 0.34, 0.44, 0.55, 0.66, 0.78, 0.89, 1];\n\nconst TONES = {\n neutral: { colorVar: '--foreground', peak: 0.08, grain: true, text: 'text-muted-foreground' },\n warning: {\n colorVar: '--warning-indicator',\n peak: 0.16,\n grain: false,\n text: 'text-warning-foreground',\n },\n danger: {\n colorVar: '--destructive-indicator',\n peak: 0.16,\n grain: false,\n text: 'text-destructive-foreground',\n },\n};\n\nfunction cubicFalloff(position: number) {\n const inverse = 1 - position;\n return inverse * inverse * inverse;\n}\n\nfunction easedBloom(colorVar: string, peak: number) {\n const stops = FALLOFF_RAMP.map(position => {\n const alpha = (peak * cubicFalloff(position) * 100).toFixed(2);\n return `color-mix(in oklch, var(${colorVar}) ${alpha}%, transparent) ${(position * 100).toFixed(0)}%`;\n });\n return `linear-gradient(to right, ${stops.join(', ')})`;\n}\n\nfunction easedMask(direction: string, hold: number) {\n const stops = FALLOFF_RAMP.map(position => {\n const offset = (hold + (100 - hold) * position).toFixed(2);\n return `rgb(0 0 0 / ${cubicFalloff(position).toFixed(3)}) ${offset}%`;\n });\n return `linear-gradient(${direction}, rgb(0 0 0 / 1) 0%, ${stops.join(', ')})`;\n}\n\nconst BLOOM_MASK = `${easedMask('to bottom', BLOOM_HOLD_Y)}, ${easedMask('to right', BLOOM_HOLD_X)}`;\n\nfunction Bloom({ tone }: { tone: SidebarNewMeterTone }) {\n const current = TONES[tone];\n return (\n <span\n aria-hidden\n data-slot=\"sidebar-new-meter-bloom\"\n className=\"pointer-events-none absolute inset-x-0 top-0 -z-10\"\n style={{\n height: BLOOM_HEIGHT,\n backgroundImage: easedBloom(current.colorVar, current.peak),\n maskImage: BLOOM_MASK,\n maskComposite: 'intersect',\n }}\n >\n {current.grain ? (\n <span\n aria-hidden\n className=\"absolute inset-0\"\n style={{\n backgroundImage: NOISE,\n backgroundRepeat: 'repeat',\n backgroundSize: `${GRAIN_SIZE}px ${GRAIN_SIZE}px`,\n opacity: GRAIN_OPACITY,\n }}\n />\n ) : null}\n </span>\n );\n}\n\ninterface SidebarNewMeterBaseProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n label: ReactNode;\n value: ReactNode;\n status?: ReactNode;\n tone?: SidebarNewMeterTone;\n icon?: ReactNode;\n action?: ReactNode;\n LinkComponent?: LinkComponent;\n state?: SidebarState;\n}\n\ntype SidebarNewMeterLinkProps =\n | {\n href: string;\n linkLabel: string;\n }\n | { href?: never; linkLabel?: never };\nexport type SidebarNewMeterProps = SidebarNewMeterBaseProps & SidebarNewMeterLinkProps;\n\nexport const SidebarNewMeter = forwardRef<HTMLDivElement, SidebarNewMeterProps>(function SidebarNewMeter(\n {\n label,\n value,\n status,\n tone = 'neutral',\n icon,\n action,\n href,\n linkLabel,\n LinkComponent: LinkProp,\n state: stateProp,\n className,\n ...props\n },\n ref,\n) {\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const Link: LinkComponent = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const isCollapsed = state === 'collapsed';\n const current = TONES[tone];\n\n if (isCollapsed) {\n return (\n <div\n ref={ref}\n data-slot=\"sidebar-new-meter\"\n data-tone={tone}\n data-state={state}\n className={cn(\n 'relative isolate flex items-center justify-center overflow-hidden rounded-lg border border-border bg-background px-1 py-2',\n className,\n )}\n {...props}\n >\n <Bloom tone={tone} />\n {href ? <Link href={href} className=\"absolute inset-0 rounded-lg\" aria-label={linkLabel} /> : null}\n <Txt as=\"span\" variant=\"meta\" tone=\"ink\" className=\"pointer-events-none relative tabular-nums\">\n {value}\n </Txt>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"sidebar-new-meter\"\n data-tone={tone}\n data-state={state}\n className={cn(\n 'relative isolate flex flex-col justify-center overflow-hidden rounded-lg border border-border bg-background px-3',\n href && surfaceStateLayerStyle,\n className,\n )}\n style={{ height: CARD_HEIGHT }}\n {...props}\n >\n <Bloom tone={tone} />\n {href ? <Link href={href} className=\"absolute inset-0 rounded-lg\" aria-label={linkLabel} /> : null}\n\n <div className=\"pointer-events-none relative\">\n <div className=\"flex items-center gap-1.5\">\n {tone === 'neutral' ? null : icon}\n <Txt as=\"span\" variant=\"column\" tone=\"muted\">\n {label}\n </Txt>\n {action ? <span className=\"pointer-events-auto\">{action}</span> : null}\n </div>\n\n <Txt variant=\"heading\" tone=\"ink\" className=\"mt-0.5 leading-tight tabular-nums\">\n {value}\n </Txt>\n\n {status ? (\n <div className=\"mt-1 text-meta\">\n <p className={cn('truncate', current.text)}>{status}</p>\n </div>\n ) : null}\n </div>\n </div>\n );\n});\n","import { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport type { MainSidebarNavProps } from '@/ds/components/MainSidebar/main-sidebar-nav';\nimport { MainSidebarNav } from '@/ds/components/MainSidebar/main-sidebar-nav';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewNavProps = MainSidebarNavProps;\n\nexport function SidebarNewNav({ children, className, ...props }: SidebarNewNavProps) {\n const isMobile = useMaybeSidebarState()?.isMobile ?? false;\n\n return (\n <MainSidebarNav\n className={cn(\n '-mr-1.5',\n '[&_[data-orientation=vertical]]:w-1 [&_[data-orientation=vertical]]:p-0',\n 'focus-within:[&_[data-orientation=vertical][data-has-overflow-y]]:opacity-100',\n isMobile && '[&_a]:min-h-11 [&_a]:touch-manipulation [&_button]:min-h-11 [&_button]:touch-manipulation',\n className,\n )}\n {...props}\n >\n <div className=\"pr-1.5\">{children}</div>\n </MainSidebarNav>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewNavHeaderProps = Omit<ComponentPropsWithoutRef<'header'>, 'children'> & {\n children?: React.ReactNode;\n state?: SidebarState;\n href?: string;\n isActive?: boolean;\n LinkComponent?: LinkComponent;\n};\n\nexport function SidebarNewNavHeader({\n children,\n className,\n state: stateProp,\n href,\n isActive,\n LinkComponent: LinkProp,\n ...props\n}: SidebarNewNavHeaderProps) {\n const context = useMaybeSidebarState();\n const state = stateProp ?? context?.state ?? 'default';\n const showTitle = state === 'default';\n const Link = LinkProp ?? context?.LinkComponent ?? 'a';\n\n return (\n // Same 40px slot in both states, so rows don't shift when collapsing; the divider is centered in it.\n <div className={cn('flex min-w-0 items-center', showTitle ? 'mt-3 min-h-7' : 'h-10', className)}>\n {showTitle ? (\n <header\n {...props}\n className={cn('max-w-full min-w-0 truncate pl-3 text-column', {\n 'text-foreground': isActive,\n 'text-muted-foreground': !isActive,\n })}\n >\n {href ? (\n <Link\n href={href}\n className={cn('block min-w-0 truncate transition-colors duration-normal', {\n 'hover:text-foreground': !isActive,\n 'text-foreground': isActive,\n })}\n >\n {children}\n </Link>\n ) : (\n children\n )}\n </header>\n ) : (\n <>\n <VisuallyHidden asChild>\n <header {...props}>{children}</header>\n </VisuallyHidden>\n <div aria-hidden=\"true\" className=\"mx-3 h-px flex-1 bg-border\" />\n </>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport type SidebarNewNavStackContextValue = {\n activeValue: string;\n rootValue: string;\n closeView: (returnFocusRef?: React.RefObject<HTMLElement | null>) => void;\n};\n\nexport const SidebarNewNavStackContext = React.createContext<SidebarNewNavStackContextValue | undefined>(undefined);\n\nexport function useSidebarNewNavStack() {\n const context = React.useContext(SidebarNewNavStackContext);\n if (!context) throw new Error('SidebarNew.NavStack components must be used within SidebarNew.NavStack.');\n return context;\n}\n","import React from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { SidebarNewNavStackContext } from './sidebar-new-nav-stack-context';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewNavStackProps = ComponentPropsWithoutRef<'div'> & {\n value: string;\n rootValue?: string;\n onValueChange: (value: string) => void;\n};\n\nexport function SidebarNewNavStackRoot({\n value,\n rootValue = 'root',\n onValueChange,\n children,\n className,\n ...props\n}: SidebarNewNavStackProps) {\n function closeView(returnFocusRef?: React.RefObject<HTMLElement | null>) {\n onValueChange(rootValue);\n requestAnimationFrame(() => {\n const target = returnFocusRef?.current;\n if (target && !target.closest('[inert]')) target.focus();\n });\n }\n\n return (\n <SidebarNewNavStackContext.Provider value={{ activeValue: value, rootValue, closeView }}>\n <div\n data-slot=\"sidebar-new-nav-stack\"\n data-value={value}\n className={cn('relative grid min-w-0 overflow-hidden', className)}\n {...props}\n >\n {children}\n </div>\n </SidebarNewNavStackContext.Provider>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function sidebarNewNavStackPageClasses(active: boolean, page: 'root' | 'view', className?: string) {\n return cn(\n 'col-start-1 row-start-1 min-w-0 transition-[opacity,translate] duration-normal ease-out-custom will-change-[opacity,translate] motion-reduce:transition-none',\n active && 'relative translate-x-0 opacity-100',\n !active && 'pointer-events-none absolute inset-0 opacity-0',\n !active && page === 'root' && '-translate-x-2',\n !active && page === 'view' && 'translate-x-2',\n className,\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { useSidebarNewNavStack } from './sidebar-new-nav-stack-context';\nimport { sidebarNewNavStackPageClasses } from './sidebar-new-nav-stack-page-classes';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\n\nexport type SidebarNewNavStackRootViewProps = ComponentPropsWithoutRef<'div'>;\n\nexport function SidebarNewNavStackRootView({ children, className, ...props }: SidebarNewNavStackRootViewProps) {\n const { state } = useMainSidebar();\n const { activeValue, rootValue } = useSidebarNewNavStack();\n const active = state === 'collapsed' || activeValue === rootValue;\n\n return (\n <div\n {...props}\n data-slot=\"sidebar-new-nav-stack-root\"\n aria-hidden={!active}\n inert={!active}\n className={sidebarNewNavStackPageClasses(active, 'root', className)}\n >\n {children}\n </div>\n );\n}\n","import { ArrowLeftIcon } from 'lucide-react';\nimport React from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useSidebarNewNavStack } from './sidebar-new-nav-stack-context';\nimport { sidebarNewNavStackPageClasses } from './sidebar-new-nav-stack-page-classes';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { navItemClasses } from '@/ds/components/MainSidebar/main-sidebar-nav-item-classes';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewNavStackViewProps = ComponentPropsWithoutRef<'div'> & {\n value: string;\n title: string;\n backLabel?: string;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n onBack?: () => void;\n};\n\nexport function SidebarNewNavStackView({\n value,\n title,\n backLabel = 'Back to main navigation',\n returnFocusRef,\n onBack,\n children,\n className,\n ...props\n}: SidebarNewNavStackViewProps) {\n const { state } = useMainSidebar();\n const { activeValue, closeView } = useSidebarNewNavStack();\n const active = state !== 'collapsed' && activeValue === value;\n const backRef = React.useRef<HTMLButtonElement>(null);\n const wasActiveRef = React.useRef(active);\n\n React.useEffect(() => {\n if (active && !wasActiveRef.current) backRef.current?.focus();\n wasActiveRef.current = active;\n }, [active]);\n\n React.useEffect(() => {\n if (!active) return;\n\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n event.preventDefault();\n closeView(returnFocusRef);\n onBack?.();\n }\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [active, closeView, onBack, returnFocusRef]);\n\n function handleBack() {\n closeView(returnFocusRef);\n onBack?.();\n }\n\n return (\n <div\n {...props}\n data-slot=\"sidebar-new-nav-stack-view\"\n data-value={value}\n aria-hidden={!active}\n inert={!active}\n className={sidebarNewNavStackPageClasses(active, 'view', className)}\n >\n <button\n ref={backRef}\n type=\"button\"\n aria-label={`${backLabel}: ${title}`}\n onClick={handleBack}\n className={cn(navItemClasses(), 'mb-2 grid grid-cols-[2rem_1fr_2rem] px-1')}\n >\n <ArrowLeftIcon className=\"justify-self-center\" aria-hidden=\"true\" />\n <span className=\"min-w-0 truncate text-center\">{title}</span>\n <span aria-hidden=\"true\" />\n </button>\n {children}\n </div>\n );\n}\n","import { SidebarNewNavStackRoot } from './sidebar-new-nav-stack-root';\nimport { SidebarNewNavStackRootView } from './sidebar-new-nav-stack-root-view';\nimport { SidebarNewNavStackView } from './sidebar-new-nav-stack-view';\n\nexport type { SidebarNewNavStackProps } from './sidebar-new-nav-stack-root';\nexport type { SidebarNewNavStackRootViewProps } from './sidebar-new-nav-stack-root-view';\nexport type { SidebarNewNavStackViewProps } from './sidebar-new-nav-stack-view';\n\nexport const SidebarNewNavStack = Object.assign(SidebarNewNavStackRoot, {\n Root: SidebarNewNavStackRootView,\n View: SidebarNewNavStackView,\n});\n","import { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport type { MainSidebarRootProps } from '@/ds/components/MainSidebar/main-sidebar-root';\nimport { MainSidebarRoot } from '@/ds/components/MainSidebar/main-sidebar-root';\nimport { frameSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewRootProps = MainSidebarRootProps & {\n 'aria-label'?: string;\n variant?: 'default' | 'raised';\n};\n\nexport function SidebarNewRoot({\n 'aria-label': ariaLabel = 'Sidebar',\n mobileMode = 'takeover',\n variant = 'default',\n children,\n ...props\n}: SidebarNewRootProps) {\n const sidebar = useMaybeSidebarState();\n const isRaised = variant === 'raised' && !sidebar?.isMobile;\n\n return (\n <aside aria-label={ariaLabel} className=\"contents\">\n <MainSidebarRoot mobileMode={mobileMode} {...props}>\n {isRaised ? (\n <div\n data-slot=\"sidebar-new-surface\"\n className={cn(\n 'my-2 -mr-2 -ml-4 flex min-h-0 flex-1 flex-col overflow-hidden rounded-r-xl py-1.5',\n sidebar?.state === 'collapsed' ? 'pr-2 pl-4' : 'pr-3.5 pl-5.5',\n frameSurfaceStyle,\n )}\n >\n {children}\n </div>\n ) : (\n children\n )}\n </MainSidebarRoot>\n </aside>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { Kbd } from '@/ds/components/Kbd';\nimport { controlStateColorTransition, focusRing } from '@/ds/primitives/transitions';\nimport { quietTextHover, quietTextHoverInGroup } from '@/ds/primitives/typography';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewSearchTriggerProps = ComponentPropsWithoutRef<'button'> & {\n shortcut?: ReactNode;\n};\n\nexport const SidebarNewSearchTrigger = forwardRef<HTMLButtonElement, SidebarNewSearchTriggerProps>(\n function SidebarNewSearchTrigger({ className, children, shortcut, type = 'button', ...props }, ref) {\n return (\n <button\n ref={ref}\n data-slot=\"sidebar-new-search-trigger\"\n type={type}\n className={cn(\n 'group inline-flex size-control-md shrink-0 items-center justify-center gap-1.5 rounded-full border border-transparent hover:bg-fill-subtle',\n quietTextHover,\n controlStateColorTransition,\n focusRing,\n '[&_svg]:size-4 [&_svg]:shrink-0',\n shortcut && 'w-auto px-2',\n className,\n )}\n {...props}\n >\n {children}\n {shortcut ? (\n <Kbd size=\"xs\" className={cn('bg-surface-overlay-soft active:scale-100', quietTextHoverInGroup)}>\n {shortcut}\n </Kbd>\n ) : null}\n </button>\n );\n },\n);\n","import type { NavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavList } from '@/ds/components/MainSidebar/main-sidebar-nav-list';\n\nexport type SidebarNewSectionLinkProps = {\n link: NavLink;\n activeCandidates: NavLink[];\n level?: number;\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n onSelect?: (link: NavLink) => void;\n};\n\nfunction getSidebarNewLinkKey(link: NavLink) {\n return `${link.url}:${link.name}`;\n}\n\nexport function SidebarNewSectionLink({\n link,\n activeCandidates,\n level = 0,\n isActive,\n onSelect,\n}: SidebarNewSectionLinkProps) {\n const childLinks = link.children ?? [];\n\n return (\n <MainSidebarNavLink\n link={link}\n isActive={isActive?.(link, activeCandidates) ?? link.isActive}\n level={level}\n onClick={event => {\n if (event.target instanceof Element && event.target.closest('li') !== event.currentTarget) return;\n onSelect?.(link);\n }}\n subItems={\n childLinks.length > 0 ? (\n <MainSidebarNavList className=\"mt-0.5\">\n {childLinks.map(child => (\n <SidebarNewSectionLink\n key={getSidebarNewLinkKey(child)}\n link={child}\n activeCandidates={activeCandidates}\n level={level + 1}\n isActive={isActive}\n onSelect={onSelect}\n />\n ))}\n </MainSidebarNavList>\n ) : null\n }\n />\n );\n}\n","import { ChevronDownIcon, MoreHorizontalIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { SidebarNewSectionLink } from './sidebar-new-section-link';\nimport { MainSidebarNavLabel } from '@/ds/components/MainSidebar/main-sidebar-nav-label';\nimport type { NavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewMoreLinksProps = {\n links: NavLink[];\n activeCandidates: NavLink[];\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n recentLinks: Record<string, number>;\n recentCutoff: number;\n onSelect: (link: NavLink) => void;\n};\n\nexport function SidebarNewMoreLinks({\n links,\n activeCandidates,\n isActive,\n recentLinks,\n recentCutoff,\n onSelect,\n}: SidebarNewMoreLinksProps) {\n const [expanded, setExpanded] = useState(false);\n const linkIsActive = (link: NavLink) => isActive?.(link, activeCandidates) ?? link.isActive ?? false;\n const surfacedLinks =\n links.length < 2\n ? links\n : links.filter(link => linkIsActive(link) || (recentLinks[`${link.url}:${link.name}`] ?? 0) >= recentCutoff);\n const foldedLinks = links.filter(link => !surfacedLinks.includes(link));\n\n function renderLink(link: NavLink) {\n return (\n <SidebarNewSectionLink\n key={`${link.url}:${link.name}`}\n link={link}\n activeCandidates={activeCandidates}\n isActive={isActive}\n onSelect={onSelect}\n />\n );\n }\n\n return (\n <>\n {surfacedLinks.map(renderLink)}\n {foldedLinks.length > 0 ? (\n <MainSidebarNavLink\n link={{ name: 'More', url: '', icon: <MoreHorizontalIcon /> }}\n render={\n <button\n type=\"button\"\n aria-label=\"More\"\n aria-expanded={expanded}\n onClick={() => setExpanded(current => !current)}\n >\n <MoreHorizontalIcon aria-hidden=\"true\" />\n <MainSidebarNavLabel>More</MainSidebarNavLabel>\n </button>\n }\n action={\n <ChevronDownIcon\n aria-hidden=\"true\"\n className={cn(\n 'size-3.5 transition-transform duration-normal ease-out-custom motion-reduce:transition-none',\n expanded && 'rotate-180',\n )}\n />\n }\n />\n ) : null}\n {expanded ? foldedLinks.map(renderLink) : null}\n </>\n );\n}\n","import { useId, useState } from 'react';\nimport { z } from 'zod/v4';\nimport { SidebarNewMoreLinks } from './sidebar-new-more-links';\nimport { SidebarNewNavHeader } from './sidebar-new-nav-header';\nimport { SidebarNewSectionLink } from './sidebar-new-section-link';\nimport type { NavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavList } from '@/ds/components/MainSidebar/main-sidebar-nav-list';\nimport type { NavSection } from '@/ds/components/MainSidebar/main-sidebar-nav-section';\nimport { MainSidebarNavSection } from '@/ds/components/MainSidebar/main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from '@/ds/components/MainSidebar/main-sidebar-nav-separator';\nimport { useLocalStorageState } from '@/hooks/use-local-storage-state';\n\nconst recentLinkRetentionMs = 7 * 24 * 60 * 60 * 1000;\nconst recentLinksSchema = z.record(z.string(), z.number());\nconst defaultRecentItemsStorageKey = 'mastra:sidebar-new:recent-more-items';\n\nexport type SidebarNewSection = NavSection & {\n moreLinks?: NavLink[];\n};\n\nexport type SidebarNewSectionsProps = {\n sections: SidebarNewSection[];\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n className?: string;\n recentItemsStorageKey?: string;\n};\n\nfunction getLinkKey(link: NavLink) {\n return `${link.url}:${link.name}`;\n}\n\nexport function SidebarNewSections({\n sections,\n isActive,\n className,\n recentItemsStorageKey = defaultRecentItemsStorageKey,\n}: SidebarNewSectionsProps) {\n const baseId = useId();\n const [renderedAt] = useState(Date.now);\n const [recentLinks, setRecentLinks] = useLocalStorageState({\n initialKey: recentItemsStorageKey,\n defaultValue: {},\n schema: recentLinksSchema,\n });\n const recentCutoff = renderedAt - recentLinkRetentionMs;\n\n function rememberLink(link: NavLink) {\n setRecentLinks(current => ({ ...current, [getLinkKey(link)]: Date.now() }));\n }\n\n return (\n <>\n {sections.map(section => {\n const showSeparator = section.links.length > 0 && section.separator;\n const headerId = section.title ? `${baseId}-${section.key}` : undefined;\n const activeCandidates = [...section.links, ...(section.moreLinks ?? [])];\n\n return (\n <MainSidebarNavSection\n key={section.key}\n className={className}\n aria-labelledby={headerId}\n aria-label={!headerId ? section.key : undefined}\n >\n {showSeparator ? <MainSidebarNavSeparator className=\"[&:after]:border-border\" /> : null}\n {section.title ? (\n <SidebarNewNavHeader id={headerId} href={section.href} isActive={section.isHeaderActive}>\n {section.title}\n </SidebarNewNavHeader>\n ) : null}\n <MainSidebarNavList>\n {section.links.map(link => (\n <SidebarNewSectionLink\n key={getLinkKey(link)}\n link={link}\n activeCandidates={activeCandidates}\n isActive={isActive}\n />\n ))}\n {section.moreLinks?.length ? (\n <SidebarNewMoreLinks\n links={section.moreLinks}\n activeCandidates={activeCandidates}\n isActive={isActive}\n recentLinks={recentLinks}\n recentCutoff={recentCutoff}\n onSelect={rememberLink}\n />\n ) : null}\n </MainSidebarNavList>\n </MainSidebarNavSection>\n );\n })}\n </>\n );\n}\n","import { SidebarNewBrand } from './sidebar-new-brand';\nimport { SidebarNewCommandHeader } from './sidebar-new-command-header';\nimport { SidebarNewFooter } from './sidebar-new-footer';\nimport { SidebarNewFooterMeta } from './sidebar-new-footer-meta';\nimport { SidebarNewHeader } from './sidebar-new-header';\nimport { SidebarNewMeter } from './sidebar-new-meter';\nimport { SidebarNewNav } from './sidebar-new-nav';\nimport { SidebarNewNavHeader } from './sidebar-new-nav-header';\nimport { SidebarNewNavStack } from './sidebar-new-nav-stack';\nimport { SidebarNewRoot } from './sidebar-new-root';\nimport { SidebarNewSearchTrigger } from './sidebar-new-search-trigger';\nimport { SidebarNewSections } from './sidebar-new-sections';\nimport { SidebarNewTrigger } from './sidebar-new-trigger';\nimport { MainSidebarMobileTrigger } from '@/ds/components/MainSidebar/main-sidebar-mobile-trigger';\nimport { MainSidebarNavLabel } from '@/ds/components/MainSidebar/main-sidebar-nav-label';\nimport { MainSidebarNavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavList } from '@/ds/components/MainSidebar/main-sidebar-nav-list';\nimport { MainSidebarNavSection } from '@/ds/components/MainSidebar/main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from '@/ds/components/MainSidebar/main-sidebar-nav-separator';\nimport { MainSidebarProvider } from '@/ds/components/MainSidebar/main-sidebar-provider';\n\nexport const SidebarNew = Object.assign(SidebarNewRoot, {\n Brand: SidebarNewBrand,\n CommandHeader: SidebarNewCommandHeader,\n Footer: SidebarNewFooter,\n FooterMeta: SidebarNewFooterMeta,\n Header: SidebarNewHeader,\n Meter: SidebarNewMeter,\n MobileTrigger: MainSidebarMobileTrigger,\n Nav: SidebarNewNav,\n NavHeader: SidebarNewNavHeader,\n NavLabel: MainSidebarNavLabel,\n NavLink: MainSidebarNavLink,\n NavList: MainSidebarNavList,\n NavSection: MainSidebarNavSection,\n NavSeparator: MainSidebarNavSeparator,\n NavStack: SidebarNewNavStack,\n Provider: MainSidebarProvider,\n SearchTrigger: SidebarNewSearchTrigger,\n Sections: SidebarNewSections,\n Trigger: SidebarNewTrigger,\n});\n"],"names":["useMainSidebar","jsxs","cn","jsx","VisuallyHidden","Txt","forwardRef","SidebarNewCommandHeader","SidebarNewFooterMeta","useMaybeSidebarState","MainSidebarTrigger","SidebarNewMeter","surfaceStateLayerStyle","MainSidebarNav","Fragment","navItemClasses","ArrowLeftIcon","MainSidebarRoot","frameSurfaceStyle","SidebarNewSearchTrigger","quietTextHover","controlStateColorTransition","focusRing","Kbd","quietTextHoverInGroup","MainSidebarNavLink","MainSidebarNavList","useState","MoreHorizontalIcon","MainSidebarNavLabel","ChevronDownIcon","z","useId","useLocalStorageState","MainSidebarNavSection","MainSidebarNavSeparator","MainSidebarMobileTrigger","MainSidebarProvider"],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.cjs.js","sources":["../../src/ds/new/sidebar/sidebar-new-brand.tsx","../../src/ds/new/sidebar/sidebar-new-command-header.tsx","../../src/ds/new/sidebar/sidebar-new-footer.tsx","../../src/ds/new/sidebar/sidebar-new-footer-meta.tsx","../../src/ds/new/sidebar/sidebar-new-trigger.tsx","../../src/ds/new/sidebar/sidebar-new-header.tsx","../../src/ds/new/sidebar/sidebar-new-meter.tsx","../../src/ds/new/sidebar/sidebar-new-nav.tsx","../../src/ds/new/sidebar/sidebar-new-nav-header.tsx","../../src/ds/new/sidebar/sidebar-new-nav-stack-context.ts","../../src/ds/new/sidebar/sidebar-new-nav-stack-root.tsx","../../src/ds/new/sidebar/sidebar-new-nav-stack-page-classes.ts","../../src/ds/new/sidebar/sidebar-new-nav-stack-root-view.tsx","../../src/ds/new/sidebar/sidebar-new-nav-stack-view.tsx","../../src/ds/new/sidebar/sidebar-new-nav-stack.ts","../../src/ds/new/sidebar/sidebar-new-root.tsx","../../src/ds/new/sidebar/sidebar-new-search-trigger.tsx","../../src/ds/new/sidebar/sidebar-new-section-link.tsx","../../src/ds/new/sidebar/sidebar-new-more-links.tsx","../../src/ds/new/sidebar/sidebar-new-sections.tsx","../../src/ds/new/sidebar/sidebar-new.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { Txt } from '@/ds/components/Txt';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewBrandProps = Omit<ComponentPropsWithoutRef<'div'>, 'title'> & {\n logo?: ReactNode;\n title: ReactNode;\n};\n\nexport function SidebarNewBrand({ logo, title, className, ...props }: SidebarNewBrandProps) {\n const { state } = useMainSidebar();\n\n return (\n <div data-slot=\"sidebar-new-brand\" className={cn('flex min-w-0 flex-1 items-center gap-2', className)} {...props}>\n {logo ? <span className=\"shrink-0\">{logo}</span> : null}\n {state === 'collapsed' ? (\n <VisuallyHidden>{title}</VisuallyHidden>\n ) : (\n <Txt as=\"span\" variant=\"subheading\" tone=\"ink\" className=\"truncate font-body tracking-tight\">\n {title}\n </Txt>\n )}\n </div>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewCommandHeaderProps = ComponentPropsWithoutRef<'header'>;\n\nexport const SidebarNewCommandHeader = forwardRef<HTMLElement, SidebarNewCommandHeaderProps>(\n function SidebarNewCommandHeader({ className, children, ...props }, ref) {\n const { state, isMobile } = useMainSidebar();\n\n return (\n <header\n ref={ref}\n data-slot=\"sidebar-new-command-header\"\n data-state={state}\n className={cn(\n 'flex h-header-default shrink-0 items-center gap-1 overflow-hidden',\n state === 'collapsed' ? 'px-3' : 'pr-2 pl-3.5',\n state !== 'collapsed' && !isMobile && 'w-[calc(var(--sidebar-width)-1rem)]',\n state === 'collapsed' && '[&_[data-slot=sidebar-new-search-trigger]]:hidden',\n className,\n )}\n {...props}\n >\n {children}\n </header>\n );\n },\n);\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewFooterProps = ComponentPropsWithoutRef<'footer'>;\n\nexport function SidebarNewFooter({ className, children, ...props }: SidebarNewFooterProps) {\n return (\n <footer data-slot=\"sidebar-new-footer\" className={cn('mt-auto shrink-0 space-y-1.5 pb-2', className)} {...props}>\n {children}\n </footer>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewFooterMetaProps = ComponentPropsWithoutRef<'div'> & {\n action?: ReactNode;\n};\n\nexport const SidebarNewFooterMeta = forwardRef<HTMLDivElement, SidebarNewFooterMetaProps>(function SidebarNewFooterMeta(\n { className, children, action, ...props },\n ref,\n) {\n const { state } = useMainSidebar();\n\n return (\n <div\n ref={ref}\n data-slot=\"sidebar-new-footer-meta\"\n data-state={state}\n className={cn(\n 'grid min-h-10 grid-cols-[minmax(0,1fr)_auto_0fr] items-center border-t border-border px-2 py-1 text-meta text-muted-foreground',\n 'transition-[grid-template-columns] duration-slow ease-out-custom motion-reduce:transition-none',\n state === 'collapsed' && 'grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] px-0',\n className,\n )}\n {...props}\n >\n <div\n aria-hidden={state === 'collapsed'}\n className={cn(\n 'min-w-0 truncate transition-opacity duration-normal ease-out-custom motion-reduce:transition-none',\n state === 'collapsed' && 'opacity-0',\n )}\n >\n {children}\n </div>\n {action}\n <span aria-hidden />\n </div>\n );\n});\n","import { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport type { MainSidebarTriggerProps } from '@/ds/components/MainSidebar/main-sidebar-trigger';\nimport { MainSidebarTrigger } from '@/ds/components/MainSidebar/main-sidebar-trigger';\n\nexport type SidebarNewTriggerProps = MainSidebarTriggerProps;\n\nexport function SidebarNewTrigger(props: SidebarNewTriggerProps) {\n const context = useMaybeSidebarState();\n if (context?.isMobile) return null;\n return <MainSidebarTrigger {...props} />;\n}\n","import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { SidebarNewTrigger } from './sidebar-new-trigger';\nimport { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { cn } from '@/lib/utils';\n\nimport './sidebar-new-header.css';\n\nexport type SidebarNewHeaderProps = ComponentPropsWithoutRef<'header'> & {\n /** Logo for the collapsed rail. Replaces the children when collapsed and swaps to the toggle on hover. */\n collapsedLogo?: ReactNode;\n};\n\n// Holds opacity while the sidebar collapses, so leftover hover doesn't flash the toggle.\nconst hold = 'animate-[sidebar-hold_var(--resize-dur)] motion-reduce:animate-none';\n\nexport function SidebarNewHeader({ className, children, collapsedLogo, ...props }: SidebarNewHeaderProps) {\n const sidebar = useMaybeSidebarState();\n const collapsed = sidebar?.state === 'collapsed';\n const isMobile = sidebar?.isMobile ?? false;\n\n return (\n <header\n data-slot=\"sidebar-new-header\"\n className={cn(\n 'flex h-header-default shrink-0 items-center gap-2',\n collapsed ? 'px-1' : 'pr-2 pl-3.5',\n // Target width, not the animating one, so the title doesn't re-truncate while expanding.\n !collapsed && !isMobile && 'w-[calc(var(--sidebar-width)-1rem)]',\n className,\n )}\n {...props}\n >\n {collapsed && collapsedLogo ? (\n // ml-0.5 instead of mx-auto, so it doesn't jump while the sidebar collapses.\n <div className=\"group/collapsed-logo relative ml-0.5 grid size-9 shrink-0 place-items-center\">\n <span\n className={cn(\n hold,\n 'grid place-items-center transition-opacity duration-normal [--sidebar-hold-opacity:1] group-focus-within/collapsed-logo:opacity-0 group-hover/sidebar:opacity-0 motion-reduce:transition-none',\n )}\n >\n {collapsedLogo}\n </span>\n {isMobile ? null : (\n <div\n className={cn(\n hold,\n 'absolute inset-0 grid place-items-center opacity-0 transition-opacity duration-normal [--sidebar-hold-opacity:0] group-hover/sidebar:opacity-100 focus-within:opacity-100 motion-reduce:transition-none',\n )}\n >\n <SidebarNewTrigger />\n </div>\n )}\n </div>\n ) : (\n children\n )}\n </header>\n );\n}\n","import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport type { SidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { Txt } from '@/ds/components/Txt';\nimport { surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewMeterTone = 'neutral' | 'warning' | 'danger';\n\nconst NOISE =\n \"url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\\\")\";\n\nconst CARD_HEIGHT = 76;\nconst BLOOM_HEIGHT = 100;\nconst BLOOM_HOLD_Y = 60;\nconst BLOOM_HOLD_X = 22.5;\nconst GRAIN_OPACITY = 0.18;\nconst GRAIN_SIZE = 110;\n\nconst FALLOFF_RAMP = [0, 0.08, 0.16, 0.25, 0.34, 0.44, 0.55, 0.66, 0.78, 0.89, 1];\n\nconst TONES = {\n neutral: { colorVar: '--foreground', peak: 0.08, grain: true, text: 'text-muted-foreground' },\n warning: {\n colorVar: '--warning-indicator',\n peak: 0.16,\n grain: false,\n text: 'text-warning-foreground',\n },\n danger: {\n colorVar: '--destructive-indicator',\n peak: 0.16,\n grain: false,\n text: 'text-destructive-foreground',\n },\n};\n\nfunction cubicFalloff(position: number) {\n const inverse = 1 - position;\n return inverse * inverse * inverse;\n}\n\nfunction easedBloom(colorVar: string, peak: number) {\n const stops = FALLOFF_RAMP.map(position => {\n const alpha = (peak * cubicFalloff(position) * 100).toFixed(2);\n return `color-mix(in oklch, var(${colorVar}) ${alpha}%, transparent) ${(position * 100).toFixed(0)}%`;\n });\n return `linear-gradient(to right, ${stops.join(', ')})`;\n}\n\nfunction easedMask(direction: string, hold: number) {\n const stops = FALLOFF_RAMP.map(position => {\n const offset = (hold + (100 - hold) * position).toFixed(2);\n return `rgb(0 0 0 / ${cubicFalloff(position).toFixed(3)}) ${offset}%`;\n });\n return `linear-gradient(${direction}, rgb(0 0 0 / 1) 0%, ${stops.join(', ')})`;\n}\n\nconst BLOOM_MASK = `${easedMask('to bottom', BLOOM_HOLD_Y)}, ${easedMask('to right', BLOOM_HOLD_X)}`;\n\nfunction Bloom({ tone }: { tone: SidebarNewMeterTone }) {\n const current = TONES[tone];\n return (\n <span\n aria-hidden\n data-slot=\"sidebar-new-meter-bloom\"\n className=\"pointer-events-none absolute inset-x-0 top-0 -z-10\"\n style={{\n height: BLOOM_HEIGHT,\n backgroundImage: easedBloom(current.colorVar, current.peak),\n maskImage: BLOOM_MASK,\n maskComposite: 'intersect',\n }}\n >\n {current.grain ? (\n <span\n aria-hidden\n className=\"absolute inset-0\"\n style={{\n backgroundImage: NOISE,\n backgroundRepeat: 'repeat',\n backgroundSize: `${GRAIN_SIZE}px ${GRAIN_SIZE}px`,\n opacity: GRAIN_OPACITY,\n }}\n />\n ) : null}\n </span>\n );\n}\n\ninterface SidebarNewMeterBaseProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n label: ReactNode;\n value: ReactNode;\n status?: ReactNode;\n tone?: SidebarNewMeterTone;\n icon?: ReactNode;\n action?: ReactNode;\n LinkComponent?: LinkComponent;\n state?: SidebarState;\n}\n\ntype SidebarNewMeterLinkProps =\n | {\n href: string;\n linkLabel: string;\n }\n | { href?: never; linkLabel?: never };\nexport type SidebarNewMeterProps = SidebarNewMeterBaseProps & SidebarNewMeterLinkProps;\n\nexport const SidebarNewMeter = forwardRef<HTMLDivElement, SidebarNewMeterProps>(function SidebarNewMeter(\n {\n label,\n value,\n status,\n tone = 'neutral',\n icon,\n action,\n href,\n linkLabel,\n LinkComponent: LinkProp,\n state: stateProp,\n className,\n ...props\n },\n ref,\n) {\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const Link: LinkComponent = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const isCollapsed = state === 'collapsed';\n const current = TONES[tone];\n\n if (isCollapsed) {\n return (\n <div\n ref={ref}\n data-slot=\"sidebar-new-meter\"\n data-tone={tone}\n data-state={state}\n className={cn(\n 'relative isolate flex items-center justify-center overflow-hidden rounded-lg border border-border bg-background px-1 py-2',\n className,\n )}\n {...props}\n >\n <Bloom tone={tone} />\n {href ? <Link href={href} className=\"absolute inset-0 rounded-lg\" aria-label={linkLabel} /> : null}\n <Txt as=\"span\" variant=\"meta\" tone=\"ink\" className=\"pointer-events-none relative tabular-nums\">\n {value}\n </Txt>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"sidebar-new-meter\"\n data-tone={tone}\n data-state={state}\n className={cn(\n 'relative isolate flex flex-col justify-center overflow-hidden rounded-lg border border-border bg-background px-3',\n href && surfaceStateLayerStyle,\n className,\n )}\n style={{ height: CARD_HEIGHT }}\n {...props}\n >\n <Bloom tone={tone} />\n {href ? <Link href={href} className=\"absolute inset-0 rounded-lg\" aria-label={linkLabel} /> : null}\n\n <div className=\"pointer-events-none relative\">\n <div className=\"flex items-center gap-1.5\">\n {tone === 'neutral' ? null : icon}\n <Txt as=\"span\" variant=\"column\" tone=\"muted\">\n {label}\n </Txt>\n {action ? <span className=\"pointer-events-auto\">{action}</span> : null}\n </div>\n\n <Txt variant=\"heading\" tone=\"ink\" className=\"mt-0.5 leading-tight tabular-nums\">\n {value}\n </Txt>\n\n {status ? (\n <div className=\"mt-1 text-meta\">\n <p className={cn('truncate', current.text)}>{status}</p>\n </div>\n ) : null}\n </div>\n </div>\n );\n});\n","import { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport type { MainSidebarNavProps } from '@/ds/components/MainSidebar/main-sidebar-nav';\nimport { MainSidebarNav } from '@/ds/components/MainSidebar/main-sidebar-nav';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewNavProps = MainSidebarNavProps;\n\nexport function SidebarNewNav({ children, className, ...props }: SidebarNewNavProps) {\n const isMobile = useMaybeSidebarState()?.isMobile ?? false;\n\n return (\n <MainSidebarNav\n className={cn(\n '-mr-1.5',\n '[&_[data-orientation=vertical]]:w-1 [&_[data-orientation=vertical]]:p-0',\n 'focus-within:[&_[data-orientation=vertical][data-has-overflow-y]]:opacity-100',\n isMobile && '[&_a]:min-h-11 [&_a]:touch-manipulation [&_button]:min-h-11 [&_button]:touch-manipulation',\n className,\n )}\n {...props}\n >\n <div className=\"pr-1.5\">{children}</div>\n </MainSidebarNav>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewNavHeaderProps = Omit<ComponentPropsWithoutRef<'header'>, 'children'> & {\n children?: React.ReactNode;\n state?: SidebarState;\n href?: string;\n isActive?: boolean;\n LinkComponent?: LinkComponent;\n};\n\nexport function SidebarNewNavHeader({\n children,\n className,\n state: stateProp,\n href,\n isActive,\n LinkComponent: LinkProp,\n ...props\n}: SidebarNewNavHeaderProps) {\n const context = useMaybeSidebarState();\n const state = stateProp ?? context?.state ?? 'default';\n const showTitle = state === 'default';\n const Link = LinkProp ?? context?.LinkComponent ?? 'a';\n\n return (\n // Same 40px slot in both states, so rows don't shift when collapsing; the divider is centered in it.\n <div className={cn('flex min-w-0 items-center', showTitle ? 'mt-3 min-h-7' : 'h-10', className)}>\n {showTitle ? (\n <header\n {...props}\n className={cn('max-w-full min-w-0 truncate pl-3 text-column', {\n 'text-foreground': isActive,\n 'text-muted-foreground': !isActive,\n })}\n >\n {href ? (\n <Link\n href={href}\n className={cn('block min-w-0 truncate transition-colors duration-normal', {\n 'hover:text-foreground': !isActive,\n 'text-foreground': isActive,\n })}\n >\n {children}\n </Link>\n ) : (\n children\n )}\n </header>\n ) : (\n <>\n <VisuallyHidden asChild>\n <header {...props}>{children}</header>\n </VisuallyHidden>\n <div aria-hidden=\"true\" className=\"mx-3 h-px flex-1 bg-border\" />\n </>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport type SidebarNewNavStackContextValue = {\n activeValue: string;\n rootValue: string;\n closeView: (returnFocusRef?: React.RefObject<HTMLElement | null>) => void;\n};\n\nexport const SidebarNewNavStackContext = React.createContext<SidebarNewNavStackContextValue | undefined>(undefined);\n\nexport function useSidebarNewNavStack() {\n const context = React.useContext(SidebarNewNavStackContext);\n if (!context) throw new Error('SidebarNew.NavStack components must be used within SidebarNew.NavStack.');\n return context;\n}\n","import React from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { SidebarNewNavStackContext } from './sidebar-new-nav-stack-context';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewNavStackProps = ComponentPropsWithoutRef<'div'> & {\n value: string;\n rootValue?: string;\n onValueChange: (value: string) => void;\n};\n\nexport function SidebarNewNavStackRoot({\n value,\n rootValue = 'root',\n onValueChange,\n children,\n className,\n ...props\n}: SidebarNewNavStackProps) {\n function closeView(returnFocusRef?: React.RefObject<HTMLElement | null>) {\n onValueChange(rootValue);\n requestAnimationFrame(() => {\n const target = returnFocusRef?.current;\n if (target && !target.closest('[inert]')) target.focus();\n });\n }\n\n return (\n <SidebarNewNavStackContext.Provider value={{ activeValue: value, rootValue, closeView }}>\n <div\n data-slot=\"sidebar-new-nav-stack\"\n data-value={value}\n className={cn('relative grid min-w-0 overflow-hidden', className)}\n {...props}\n >\n {children}\n </div>\n </SidebarNewNavStackContext.Provider>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function sidebarNewNavStackPageClasses(active: boolean, page: 'root' | 'view', className?: string) {\n return cn(\n 'col-start-1 row-start-1 min-w-0 transition-[opacity,translate] duration-normal ease-out-custom will-change-[opacity,translate] motion-reduce:transition-none',\n active && 'relative translate-x-0 opacity-100',\n !active && 'pointer-events-none absolute inset-0 opacity-0',\n !active && page === 'root' && '-translate-x-2',\n !active && page === 'view' && 'translate-x-2',\n className,\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { useSidebarNewNavStack } from './sidebar-new-nav-stack-context';\nimport { sidebarNewNavStackPageClasses } from './sidebar-new-nav-stack-page-classes';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\n\nexport type SidebarNewNavStackRootViewProps = ComponentPropsWithoutRef<'div'>;\n\nexport function SidebarNewNavStackRootView({ children, className, ...props }: SidebarNewNavStackRootViewProps) {\n const { state } = useMainSidebar();\n const { activeValue, rootValue } = useSidebarNewNavStack();\n const active = state === 'collapsed' || activeValue === rootValue;\n\n return (\n <div\n {...props}\n data-slot=\"sidebar-new-nav-stack-root\"\n aria-hidden={!active}\n inert={!active}\n className={sidebarNewNavStackPageClasses(active, 'root', className)}\n >\n {children}\n </div>\n );\n}\n","import { ArrowLeftIcon } from 'lucide-react';\nimport React from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useSidebarNewNavStack } from './sidebar-new-nav-stack-context';\nimport { sidebarNewNavStackPageClasses } from './sidebar-new-nav-stack-page-classes';\nimport { useMainSidebar } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport { navItemClasses } from '@/ds/components/MainSidebar/main-sidebar-nav-item-classes';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewNavStackViewProps = ComponentPropsWithoutRef<'div'> & {\n value: string;\n title: string;\n backLabel?: string;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n onBack?: () => void;\n};\n\nexport function SidebarNewNavStackView({\n value,\n title,\n backLabel = 'Back to main navigation',\n returnFocusRef,\n onBack,\n children,\n className,\n ...props\n}: SidebarNewNavStackViewProps) {\n const { state } = useMainSidebar();\n const { activeValue, closeView } = useSidebarNewNavStack();\n const active = state !== 'collapsed' && activeValue === value;\n const backRef = React.useRef<HTMLButtonElement>(null);\n const wasActiveRef = React.useRef(active);\n\n React.useEffect(() => {\n if (active && !wasActiveRef.current) backRef.current?.focus();\n wasActiveRef.current = active;\n }, [active]);\n\n React.useEffect(() => {\n if (!active) return;\n\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n event.preventDefault();\n closeView(returnFocusRef);\n onBack?.();\n }\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [active, closeView, onBack, returnFocusRef]);\n\n function handleBack() {\n closeView(returnFocusRef);\n onBack?.();\n }\n\n return (\n <div\n {...props}\n data-slot=\"sidebar-new-nav-stack-view\"\n data-value={value}\n aria-hidden={!active}\n inert={!active}\n className={sidebarNewNavStackPageClasses(active, 'view', className)}\n >\n <button\n ref={backRef}\n type=\"button\"\n aria-label={`${backLabel}: ${title}`}\n onClick={handleBack}\n className={cn(navItemClasses(), 'mb-2 grid grid-cols-[2rem_1fr_2rem] px-1')}\n >\n <ArrowLeftIcon className=\"justify-self-center\" aria-hidden=\"true\" />\n <span className=\"min-w-0 truncate text-center\">{title}</span>\n <span aria-hidden=\"true\" />\n </button>\n {children}\n </div>\n );\n}\n","import { SidebarNewNavStackRoot } from './sidebar-new-nav-stack-root';\nimport { SidebarNewNavStackRootView } from './sidebar-new-nav-stack-root-view';\nimport { SidebarNewNavStackView } from './sidebar-new-nav-stack-view';\n\nexport type { SidebarNewNavStackProps } from './sidebar-new-nav-stack-root';\nexport type { SidebarNewNavStackRootViewProps } from './sidebar-new-nav-stack-root-view';\nexport type { SidebarNewNavStackViewProps } from './sidebar-new-nav-stack-view';\n\nexport const SidebarNewNavStack = Object.assign(SidebarNewNavStackRoot, {\n Root: SidebarNewNavStackRootView,\n View: SidebarNewNavStackView,\n});\n","import { useMaybeSidebarState } from '@/ds/components/MainSidebar/main-sidebar-context';\nimport type { MainSidebarRootProps } from '@/ds/components/MainSidebar/main-sidebar-root';\nimport { MainSidebarRoot } from '@/ds/components/MainSidebar/main-sidebar-root';\nimport { frameSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewRootProps = MainSidebarRootProps & {\n 'aria-label'?: string;\n variant?: 'default' | 'raised';\n};\n\nexport function SidebarNewRoot({\n 'aria-label': ariaLabel = 'Sidebar',\n mobileMode = 'takeover',\n variant = 'default',\n children,\n ...props\n}: SidebarNewRootProps) {\n const sidebar = useMaybeSidebarState();\n const isRaised = variant === 'raised' && !sidebar?.isMobile;\n\n return (\n <aside aria-label={ariaLabel} className=\"contents\">\n <MainSidebarRoot mobileMode={mobileMode} {...props}>\n {isRaised ? (\n <div\n data-slot=\"sidebar-new-surface\"\n className={cn(\n 'my-2 -mr-2 -ml-4 flex min-h-0 flex-1 flex-col overflow-hidden rounded-r-xl py-1.5',\n sidebar?.state === 'collapsed' ? 'pr-2 pl-4' : 'pr-3.5 pl-5.5',\n frameSurfaceStyle,\n )}\n >\n {children}\n </div>\n ) : (\n children\n )}\n </MainSidebarRoot>\n </aside>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { Kbd } from '@/ds/components/Kbd';\nimport { controlStateColorTransition, focusRing } from '@/ds/primitives/transitions';\nimport { quietTextHover, quietTextHoverInGroup } from '@/ds/primitives/typography';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewSearchTriggerProps = ComponentPropsWithoutRef<'button'> & {\n shortcut?: ReactNode;\n};\n\nexport const SidebarNewSearchTrigger = forwardRef<HTMLButtonElement, SidebarNewSearchTriggerProps>(\n function SidebarNewSearchTrigger({ className, children, shortcut, type = 'button', ...props }, ref) {\n return (\n <button\n ref={ref}\n data-slot=\"sidebar-new-search-trigger\"\n type={type}\n className={cn(\n 'group inline-flex size-control-md shrink-0 items-center justify-center gap-1.5 rounded-full border border-transparent hover:bg-fill-subtle',\n quietTextHover,\n controlStateColorTransition,\n focusRing,\n '[&_svg]:size-4 [&_svg]:shrink-0',\n shortcut && 'w-auto px-2',\n className,\n )}\n {...props}\n >\n {children}\n {shortcut ? (\n <Kbd size=\"xs\" className={cn('bg-surface-overlay-soft active:scale-100', quietTextHoverInGroup)}>\n {shortcut}\n </Kbd>\n ) : null}\n </button>\n );\n },\n);\n","import type { NavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavList } from '@/ds/components/MainSidebar/main-sidebar-nav-list';\n\nexport type SidebarNewSectionLinkProps = {\n link: NavLink;\n activeCandidates: NavLink[];\n level?: number;\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n onSelect?: (link: NavLink) => void;\n};\n\nfunction getSidebarNewLinkKey(link: NavLink) {\n return `${link.url}:${link.name}`;\n}\n\nexport function SidebarNewSectionLink({\n link,\n activeCandidates,\n level = 0,\n isActive,\n onSelect,\n}: SidebarNewSectionLinkProps) {\n const childLinks = link.children ?? [];\n\n return (\n <MainSidebarNavLink\n link={link}\n isActive={isActive?.(link, activeCandidates) ?? link.isActive}\n level={level}\n onClick={event => {\n if (event.target instanceof Element && event.target.closest('li') !== event.currentTarget) return;\n onSelect?.(link);\n }}\n subItems={\n childLinks.length > 0 ? (\n <MainSidebarNavList className=\"mt-0.5\">\n {childLinks.map(child => (\n <SidebarNewSectionLink\n key={getSidebarNewLinkKey(child)}\n link={child}\n activeCandidates={activeCandidates}\n level={level + 1}\n isActive={isActive}\n onSelect={onSelect}\n />\n ))}\n </MainSidebarNavList>\n ) : null\n }\n />\n );\n}\n","import { ChevronDownIcon, MoreHorizontalIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { SidebarNewSectionLink } from './sidebar-new-section-link';\nimport { MainSidebarNavLabel } from '@/ds/components/MainSidebar/main-sidebar-nav-label';\nimport type { NavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { cn } from '@/lib/utils';\n\nexport type SidebarNewMoreLinksProps = {\n links: NavLink[];\n activeCandidates: NavLink[];\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n recentLinks: Record<string, number>;\n recentCutoff: number;\n onSelect: (link: NavLink) => void;\n};\n\nexport function SidebarNewMoreLinks({\n links,\n activeCandidates,\n isActive,\n recentLinks,\n recentCutoff,\n onSelect,\n}: SidebarNewMoreLinksProps) {\n const [expanded, setExpanded] = useState(false);\n const linkIsActive = (link: NavLink) => isActive?.(link, activeCandidates) ?? link.isActive ?? false;\n const surfacedLinks =\n links.length < 2\n ? links\n : links.filter(link => linkIsActive(link) || (recentLinks[`${link.url}:${link.name}`] ?? 0) >= recentCutoff);\n const foldedLinks = links.filter(link => !surfacedLinks.includes(link));\n\n function renderLink(link: NavLink) {\n return (\n <SidebarNewSectionLink\n key={`${link.url}:${link.name}`}\n link={link}\n activeCandidates={activeCandidates}\n isActive={isActive}\n onSelect={onSelect}\n />\n );\n }\n\n return (\n <>\n {surfacedLinks.map(renderLink)}\n {foldedLinks.length > 0 ? (\n <MainSidebarNavLink\n link={{ name: 'More', url: '', icon: <MoreHorizontalIcon /> }}\n render={\n <button\n type=\"button\"\n aria-label=\"More\"\n aria-expanded={expanded}\n onClick={() => setExpanded(current => !current)}\n >\n <MoreHorizontalIcon aria-hidden=\"true\" />\n <MainSidebarNavLabel>More</MainSidebarNavLabel>\n </button>\n }\n action={\n <ChevronDownIcon\n aria-hidden=\"true\"\n className={cn(\n 'size-3.5 transition-transform duration-normal ease-out-custom motion-reduce:transition-none',\n expanded && 'rotate-180',\n )}\n />\n }\n />\n ) : null}\n {expanded ? foldedLinks.map(renderLink) : null}\n </>\n );\n}\n","import { useId, useState } from 'react';\nimport { z } from 'zod/v4';\nimport { SidebarNewMoreLinks } from './sidebar-new-more-links';\nimport { SidebarNewNavHeader } from './sidebar-new-nav-header';\nimport { SidebarNewSectionLink } from './sidebar-new-section-link';\nimport type { NavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavList } from '@/ds/components/MainSidebar/main-sidebar-nav-list';\nimport type { NavSection } from '@/ds/components/MainSidebar/main-sidebar-nav-section';\nimport { MainSidebarNavSection } from '@/ds/components/MainSidebar/main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from '@/ds/components/MainSidebar/main-sidebar-nav-separator';\nimport { useLocalStorageState } from '@/hooks/use-local-storage-state';\n\nconst recentLinkRetentionMs = 7 * 24 * 60 * 60 * 1000;\nconst recentLinksSchema = z.record(z.string(), z.number());\nconst defaultRecentItemsStorageKey = 'mastra:sidebar-new:recent-more-items';\n\nexport type SidebarNewSection = NavSection & {\n moreLinks?: NavLink[];\n};\n\nexport type SidebarNewSectionsProps = {\n sections: SidebarNewSection[];\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n className?: string;\n recentItemsStorageKey?: string;\n};\n\nfunction getLinkKey(link: NavLink) {\n return `${link.url}:${link.name}`;\n}\n\nexport function SidebarNewSections({\n sections,\n isActive,\n className,\n recentItemsStorageKey = defaultRecentItemsStorageKey,\n}: SidebarNewSectionsProps) {\n const baseId = useId();\n const [renderedAt] = useState(Date.now);\n const [recentLinks, setRecentLinks] = useLocalStorageState({\n initialKey: recentItemsStorageKey,\n defaultValue: {},\n schema: recentLinksSchema,\n });\n const recentCutoff = renderedAt - recentLinkRetentionMs;\n\n function rememberLink(link: NavLink) {\n setRecentLinks(current => ({ ...current, [getLinkKey(link)]: Date.now() }));\n }\n\n return (\n <>\n {sections.map(section => {\n const showSeparator = section.links.length > 0 && section.separator;\n const headerId = section.title ? `${baseId}-${section.key}` : undefined;\n const activeCandidates = [...section.links, ...(section.moreLinks ?? [])];\n\n return (\n <MainSidebarNavSection\n key={section.key}\n className={className}\n aria-labelledby={headerId}\n aria-label={!headerId ? section.key : undefined}\n >\n {showSeparator ? <MainSidebarNavSeparator className=\"[&:after]:border-border\" /> : null}\n {section.title ? (\n <SidebarNewNavHeader id={headerId} href={section.href} isActive={section.isHeaderActive}>\n {section.title}\n </SidebarNewNavHeader>\n ) : null}\n <MainSidebarNavList>\n {section.links.map(link => (\n <SidebarNewSectionLink\n key={getLinkKey(link)}\n link={link}\n activeCandidates={activeCandidates}\n isActive={isActive}\n />\n ))}\n {section.moreLinks?.length ? (\n <SidebarNewMoreLinks\n links={section.moreLinks}\n activeCandidates={activeCandidates}\n isActive={isActive}\n recentLinks={recentLinks}\n recentCutoff={recentCutoff}\n onSelect={rememberLink}\n />\n ) : null}\n </MainSidebarNavList>\n </MainSidebarNavSection>\n );\n })}\n </>\n );\n}\n","import { SidebarNewBrand } from './sidebar-new-brand';\nimport { SidebarNewCommandHeader } from './sidebar-new-command-header';\nimport { SidebarNewFooter } from './sidebar-new-footer';\nimport { SidebarNewFooterMeta } from './sidebar-new-footer-meta';\nimport { SidebarNewHeader } from './sidebar-new-header';\nimport { SidebarNewMeter } from './sidebar-new-meter';\nimport { SidebarNewNav } from './sidebar-new-nav';\nimport { SidebarNewNavHeader } from './sidebar-new-nav-header';\nimport { SidebarNewNavStack } from './sidebar-new-nav-stack';\nimport { SidebarNewRoot } from './sidebar-new-root';\nimport { SidebarNewSearchTrigger } from './sidebar-new-search-trigger';\nimport { SidebarNewSections } from './sidebar-new-sections';\nimport { SidebarNewTrigger } from './sidebar-new-trigger';\nimport { MainSidebarMobileTrigger } from '@/ds/components/MainSidebar/main-sidebar-mobile-trigger';\nimport { MainSidebarNavLabel } from '@/ds/components/MainSidebar/main-sidebar-nav-label';\nimport { MainSidebarNavLink } from '@/ds/components/MainSidebar/main-sidebar-nav-link';\nimport { MainSidebarNavList } from '@/ds/components/MainSidebar/main-sidebar-nav-list';\nimport { MainSidebarNavSection } from '@/ds/components/MainSidebar/main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from '@/ds/components/MainSidebar/main-sidebar-nav-separator';\nimport { MainSidebarProvider } from '@/ds/components/MainSidebar/main-sidebar-provider';\n\nexport const SidebarNew = Object.assign(SidebarNewRoot, {\n Brand: SidebarNewBrand,\n CommandHeader: SidebarNewCommandHeader,\n Footer: SidebarNewFooter,\n FooterMeta: SidebarNewFooterMeta,\n Header: SidebarNewHeader,\n Meter: SidebarNewMeter,\n MobileTrigger: MainSidebarMobileTrigger,\n Nav: SidebarNewNav,\n NavHeader: SidebarNewNavHeader,\n NavLabel: MainSidebarNavLabel,\n NavLink: MainSidebarNavLink,\n NavList: MainSidebarNavList,\n NavSection: MainSidebarNavSection,\n NavSeparator: MainSidebarNavSeparator,\n NavStack: SidebarNewNavStack,\n Provider: MainSidebarProvider,\n SearchTrigger: SidebarNewSearchTrigger,\n Sections: SidebarNewSections,\n Trigger: SidebarNewTrigger,\n});\n"],"names":["useMainSidebar","jsxs","cn","jsx","VisuallyHidden","Txt","forwardRef","SidebarNewCommandHeader","SidebarNewFooterMeta","useMaybeSidebarState","MainSidebarTrigger","SidebarNewMeter","surfaceStateLayerStyle","MainSidebarNav","Fragment","navItemClasses","ArrowLeftIcon","MainSidebarRoot","frameSurfaceStyle","SidebarNewSearchTrigger","quietTextHover","controlStateColorTransition","focusRing","Kbd","quietTextHoverInGroup","MainSidebarNavLink","MainSidebarNavList","useState","MoreHorizontalIcon","MainSidebarNavLabel","ChevronDownIcon","z","useId","useLocalStorageState","MainSidebarNavSection","MainSidebarNavSeparator","MainSidebarMobileTrigger","MainSidebarProvider"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import { u as useMainSidebar, e as useMaybeSidebarState, c as MainSidebarTrigger, h as MainSidebarNav, n as navItemClasses, i as MainSidebarRoot, j as MainSidebarNavLink, k as MainSidebarNavList, l as MainSidebarNavLabel, m as MainSidebarNavSection, o as MainSidebarNavSeparator, b as MainSidebarProvider, a as MainSidebarMobileTrigger } from '../main-sidebar-B0ivY7lW.js';
3
- import '../sidebar.css';export { g as getIsLinkActive } from '../main-sidebar-B0ivY7lW.js';
2
+ import { k as useMainSidebar, u as useMaybeSidebarState, f as MainSidebarTrigger, h as MainSidebarNav, n as navItemClasses, d as MainSidebarRoot, c as MainSidebarNavLink, b as MainSidebarNavList, g as MainSidebarNavLabel, M as MainSidebarNavSection, a as MainSidebarNavSeparator, i as MainSidebarProvider, e as MainSidebarMobileTrigger } from '../main-sidebar-link-active-BW025pfN.js';
3
+ import '../sidebar.css';export { j as getIsLinkActive } from '../main-sidebar-link-active-BW025pfN.js';
4
4
  import { T as Txt } from '../Txt-C3cYJgKU.js';
5
5
  import { VisuallyHidden } from '@radix-ui/react-visually-hidden';
6
6
  import { c as cn } from '../cn-65Adrsfj.js';
@@ -59,7 +59,10 @@ function formatSince(date, at) {
59
59
  return diff < 0 ? `${label} from now` : `${label} ago`;
60
60
  }
61
61
  function Relative({ date }) {
62
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: utils_relativeTime.formatRelativeTime(date, { now: useNow() }) });
62
+ const parts = utils_relativeTime.formatRelativeTime(date, { now: useNow() })?.split(/(\d+[smhd])/) ?? [];
63
+ return parts.map(
64
+ (part, index) => index % 2 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono [font-size-adjust:cap-height_0.729]", children: part }, index) : part
65
+ );
63
66
  }
64
67
  function Since({ date }) {
65
68
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: formatSince(date, useNow()) });
@@ -93,7 +96,7 @@ function RelativeTimestamp({ value, label, className }) {
93
96
  {
94
97
  dateTime: date.toISOString(),
95
98
  tabIndex: 0,
96
- className: utils_cn.cn("rounded-sm font-mono whitespace-nowrap tabular-nums", primitives_transitions.focusRing, className)
99
+ className: utils_cn.cn("rounded-sm whitespace-nowrap tabular-nums", primitives_transitions.focusRing, className)
97
100
  }
98
101
  ),
99
102
  children: [
@@ -117,4 +120,4 @@ function RelativeTimestamp({ value, label, className }) {
117
120
  }
118
121
 
119
122
  exports.RelativeTimestamp = RelativeTimestamp;
120
- //# sourceMappingURL=relative-timestamp-Nnwtw7Rp.cjs.map
123
+ //# sourceMappingURL=relative-timestamp-DLOmWi7o.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relative-timestamp-DLOmWi7o.cjs","sources":["../src/ds/components/RelativeTimestamp/relative-timestamp.tsx"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\nimport { formatDate, toDate } from '@/utils/date-format';\nimport type { DateInput } from '@/utils/date-format';\nimport { formatRelativeTime } from '@/utils/relative-time';\n\nexport interface RelativeTimestampProps {\n value: DateInput;\n label?: string;\n className?: string;\n}\n\nconst listeners = new Set<() => void>();\nlet ticker: ReturnType<typeof setInterval> | undefined;\nlet now = Date.now();\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n if (!ticker) {\n now = Date.now();\n ticker = setInterval(() => {\n now = Date.now();\n listeners.forEach(notify => notify());\n }, 1000);\n }\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) {\n clearInterval(ticker);\n ticker = undefined;\n }\n };\n}\n\nfunction useNow() {\n const read = () => (ticker ? now : Date.now());\n return useSyncExternalStore(subscribe, read, read);\n}\n\nconst SINCE_UNITS = [\n ['day', 86_400_000],\n ['hour', 3_600_000],\n ['minute', 60_000],\n ['second', 1_000],\n] as const;\n\nfunction formatUnit(count: number, unit: (typeof SINCE_UNITS)[number][0]) {\n return new Intl.NumberFormat(undefined, { style: 'unit', unit, unitDisplay: 'long' }).format(count);\n}\n\nfunction formatSince(date: Date, at: number) {\n const diff = at - date.getTime();\n let rest = Math.abs(diff);\n const parts: string[] = [];\n for (const [unit, size] of SINCE_UNITS) {\n const count = Math.floor(rest / size);\n rest %= size;\n if (parts.length > 0) {\n if (count > 0) parts.push(formatUnit(count, unit));\n break;\n }\n if (count > 0 || unit === 'second') parts.push(formatUnit(count, unit));\n }\n const label = parts.join(' ');\n return diff < 0 ? `${label} from now` : `${label} ago`;\n}\n\nfunction Relative({ date }: { date: Date }) {\n const parts = formatRelativeTime(date, { now: useNow() })?.split(/(\\d+[smhd])/) ?? [];\n return parts.map((part, index) =>\n index % 2 ? (\n <span key={index} className=\"font-mono [font-size-adjust:cap-height_0.729]\">\n {part}\n </span>\n ) : (\n part\n ),\n );\n}\n\nfunction Since({ date }: { date: Date }) {\n return <>{formatSince(date, useNow())}</>;\n}\n\nfunction zoneName(date: Date, timeZone?: string) {\n return new Intl.DateTimeFormat(undefined, { timeZone, timeZoneName: 'short' })\n .formatToParts(date)\n .find(part => part.type === 'timeZoneName')?.value;\n}\n\nfunction zoneRow(date: Date, timeZone?: string) {\n return {\n zone: zoneName(date, timeZone) ?? 'Local',\n day: new Intl.DateTimeFormat(undefined, { timeZone, month: 'short', day: 'numeric', year: 'numeric' }).format(date),\n time: new Intl.DateTimeFormat(undefined, {\n timeZone,\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n }).format(date),\n };\n}\n\nexport function RelativeTimestamp({ value, label, className }: RelativeTimestampProps) {\n const date = toDate(value);\n if (!date) return null;\n\n const local = zoneRow(date);\n const rows = local.zone === 'UTC' ? [local] : [local, zoneRow(date, 'UTC')];\n\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <time\n dateTime={date.toISOString()}\n tabIndex={0}\n className={cn('rounded-sm whitespace-nowrap tabular-nums', focusRing, className)}\n />\n }\n >\n <span aria-hidden=\"true\">\n <Relative date={date} />\n </span>\n <span className=\"sr-only\">{[label, formatDate(date, 'date-time-seconds')].filter(Boolean).join(' ')}</span>\n </TooltipTrigger>\n <TooltipContent>\n <span className=\"text-muted-foreground\">\n {label ? `${label} ` : null}\n <Since date={date} />\n </span>\n <table className=\"mt-1.5 border-t border-border font-mono tabular-nums\">\n <tbody>\n {rows.map(row => (\n <tr key={row.zone}>\n <td className=\"pt-1.5 pr-3\">\n <Badge size=\"xs\">{row.zone}</Badge>\n </td>\n <td className=\"pt-1.5 pr-3\">{row.day}</td>\n <td className=\"pt-1.5 text-right\">{row.time}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </TooltipContent>\n </Tooltip>\n );\n}\n"],"names":["useSyncExternalStore","formatRelativeTime","jsx","Fragment","toDate","Tooltip","jsxs","TooltipTrigger","cn","focusRing","formatDate","TooltipContent","Badge"],"mappings":"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"}
@@ -57,7 +57,10 @@ function formatSince(date, at) {
57
57
  return diff < 0 ? `${label} from now` : `${label} ago`;
58
58
  }
59
59
  function Relative({ date }) {
60
- return /* @__PURE__ */ jsx(Fragment, { children: formatRelativeTime(date, { now: useNow() }) });
60
+ const parts = formatRelativeTime(date, { now: useNow() })?.split(/(\d+[smhd])/) ?? [];
61
+ return parts.map(
62
+ (part, index) => index % 2 ? /* @__PURE__ */ jsx("span", { className: "font-mono [font-size-adjust:cap-height_0.729]", children: part }, index) : part
63
+ );
61
64
  }
62
65
  function Since({ date }) {
63
66
  return /* @__PURE__ */ jsx(Fragment, { children: formatSince(date, useNow()) });
@@ -91,7 +94,7 @@ function RelativeTimestamp({ value, label, className }) {
91
94
  {
92
95
  dateTime: date.toISOString(),
93
96
  tabIndex: 0,
94
- className: cn("rounded-sm font-mono whitespace-nowrap tabular-nums", focusRing, className)
97
+ className: cn("rounded-sm whitespace-nowrap tabular-nums", focusRing, className)
95
98
  }
96
99
  ),
97
100
  children: [
@@ -115,4 +118,4 @@ function RelativeTimestamp({ value, label, className }) {
115
118
  }
116
119
 
117
120
  export { RelativeTimestamp as R };
118
- //# sourceMappingURL=relative-timestamp-Rn8mAobA.js.map
121
+ //# sourceMappingURL=relative-timestamp-XodF8W6h.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relative-timestamp-XodF8W6h.js","sources":["../src/ds/components/RelativeTimestamp/relative-timestamp.tsx"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\nimport { formatDate, toDate } from '@/utils/date-format';\nimport type { DateInput } from '@/utils/date-format';\nimport { formatRelativeTime } from '@/utils/relative-time';\n\nexport interface RelativeTimestampProps {\n value: DateInput;\n label?: string;\n className?: string;\n}\n\nconst listeners = new Set<() => void>();\nlet ticker: ReturnType<typeof setInterval> | undefined;\nlet now = Date.now();\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n if (!ticker) {\n now = Date.now();\n ticker = setInterval(() => {\n now = Date.now();\n listeners.forEach(notify => notify());\n }, 1000);\n }\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) {\n clearInterval(ticker);\n ticker = undefined;\n }\n };\n}\n\nfunction useNow() {\n const read = () => (ticker ? now : Date.now());\n return useSyncExternalStore(subscribe, read, read);\n}\n\nconst SINCE_UNITS = [\n ['day', 86_400_000],\n ['hour', 3_600_000],\n ['minute', 60_000],\n ['second', 1_000],\n] as const;\n\nfunction formatUnit(count: number, unit: (typeof SINCE_UNITS)[number][0]) {\n return new Intl.NumberFormat(undefined, { style: 'unit', unit, unitDisplay: 'long' }).format(count);\n}\n\nfunction formatSince(date: Date, at: number) {\n const diff = at - date.getTime();\n let rest = Math.abs(diff);\n const parts: string[] = [];\n for (const [unit, size] of SINCE_UNITS) {\n const count = Math.floor(rest / size);\n rest %= size;\n if (parts.length > 0) {\n if (count > 0) parts.push(formatUnit(count, unit));\n break;\n }\n if (count > 0 || unit === 'second') parts.push(formatUnit(count, unit));\n }\n const label = parts.join(' ');\n return diff < 0 ? `${label} from now` : `${label} ago`;\n}\n\nfunction Relative({ date }: { date: Date }) {\n const parts = formatRelativeTime(date, { now: useNow() })?.split(/(\\d+[smhd])/) ?? [];\n return parts.map((part, index) =>\n index % 2 ? (\n <span key={index} className=\"font-mono [font-size-adjust:cap-height_0.729]\">\n {part}\n </span>\n ) : (\n part\n ),\n );\n}\n\nfunction Since({ date }: { date: Date }) {\n return <>{formatSince(date, useNow())}</>;\n}\n\nfunction zoneName(date: Date, timeZone?: string) {\n return new Intl.DateTimeFormat(undefined, { timeZone, timeZoneName: 'short' })\n .formatToParts(date)\n .find(part => part.type === 'timeZoneName')?.value;\n}\n\nfunction zoneRow(date: Date, timeZone?: string) {\n return {\n zone: zoneName(date, timeZone) ?? 'Local',\n day: new Intl.DateTimeFormat(undefined, { timeZone, month: 'short', day: 'numeric', year: 'numeric' }).format(date),\n time: new Intl.DateTimeFormat(undefined, {\n timeZone,\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n }).format(date),\n };\n}\n\nexport function RelativeTimestamp({ value, label, className }: RelativeTimestampProps) {\n const date = toDate(value);\n if (!date) return null;\n\n const local = zoneRow(date);\n const rows = local.zone === 'UTC' ? [local] : [local, zoneRow(date, 'UTC')];\n\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <time\n dateTime={date.toISOString()}\n tabIndex={0}\n className={cn('rounded-sm whitespace-nowrap tabular-nums', focusRing, className)}\n />\n }\n >\n <span aria-hidden=\"true\">\n <Relative date={date} />\n </span>\n <span className=\"sr-only\">{[label, formatDate(date, 'date-time-seconds')].filter(Boolean).join(' ')}</span>\n </TooltipTrigger>\n <TooltipContent>\n <span className=\"text-muted-foreground\">\n {label ? `${label} ` : null}\n <Since date={date} />\n </span>\n <table className=\"mt-1.5 border-t border-border font-mono tabular-nums\">\n <tbody>\n {rows.map(row => (\n <tr key={row.zone}>\n <td className=\"pt-1.5 pr-3\">\n <Badge size=\"xs\">{row.zone}</Badge>\n </td>\n <td className=\"pt-1.5 pr-3\">{row.day}</td>\n <td className=\"pt-1.5 text-right\">{row.time}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </TooltipContent>\n </Tooltip>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export type NavLink = {
10
10
  isActive?: boolean;
11
11
  variant?: 'default' | 'featured';
12
12
  tooltipMsg?: string;
13
+ opensView?: boolean;
13
14
  /** @deprecated Prefer nested `children`; accepted for callers still rendering manual sublinks. */
14
15
  indent?: boolean;
15
16
  };
@@ -37,6 +38,7 @@ export type MainSidebarNavLinkProps = Omit<ComponentProps<'li'>, 'children'> & {
37
38
  };
38
39
  type SlottedNavChildProps = {
39
40
  className?: string;
41
+ children?: React.ReactNode;
40
42
  'aria-current'?: 'page';
41
43
  };
42
44
  export declare function MainSidebarNavLink({ link, state: stateProp, children, isActive, size, render, action, className, LinkComponent: LinkProp, level: levelProp, subItems, asChild, ...props }: MainSidebarNavLinkProps): React.JSX.Element;
@@ -5,4 +5,5 @@ export default meta;
5
5
  type Story = StoryObj<typeof RelativeTimestamp>;
6
6
  export declare const Default: Story;
7
7
  export declare const Labeled: Story;
8
+ export declare const InText: Story;
8
9
  export declare const Scale: Story;
package/dist/style.css CHANGED
@@ -1911,6 +1911,11 @@
1911
1911
  aspect-ratio: 1;
1912
1912
  }
1913
1913
 
1914
+ .\!size-3\.5 {
1915
+ width: calc(var(--spacing) * 3.5) !important;
1916
+ height: calc(var(--spacing) * 3.5) !important;
1917
+ }
1918
+
1914
1919
  .size-1 {
1915
1920
  width: var(--spacing);
1916
1921
  height: var(--spacing);
@@ -7519,6 +7524,10 @@
7519
7524
  content-visibility: visible;
7520
7525
  }
7521
7526
 
7527
+ .\[font-size-adjust\:cap-height_0\.729\] {
7528
+ font-size-adjust: cap-height .729;
7529
+ }
7530
+
7522
7531
  .\[overflow-clip-margin\:0\.75rem\] {
7523
7532
  overflow-clip-margin: .75rem;
7524
7533
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mastra/playground-ui",
3
3
  "type": "module",
4
- "version": "61.0.0-alpha.2",
4
+ "version": "61.0.0-alpha.3",
5
5
  "description": "Mastra Playground components",
6
6
  "sideEffects": [
7
7
  "**/*.css"
@@ -208,9 +208,9 @@
208
208
  "react": ">=19.0.0",
209
209
  "react-dom": ">=19.0.0",
210
210
  "tailwindcss": "^4.0.0",
211
- "@mastra/react": "1.7.3-alpha.2",
212
211
  "@mastra/ai-sdk": "^1.10.7-alpha.1",
213
- "@mastra/client-js": "^1.52.0-alpha.2"
212
+ "@mastra/client-js": "^1.52.0-alpha.3",
213
+ "@mastra/react": "1.7.3-alpha.3"
214
214
  },
215
215
  "devDependencies": {
216
216
  "@modelcontextprotocol/sdk": "^1.29.0",
@@ -255,12 +255,12 @@
255
255
  "vite-plugin-lib-inject-css": "^2.2.2",
256
256
  "vitest": "4.1.11",
257
257
  "@internal/lint": "0.0.140",
258
- "@mastra/client-js": "^1.52.0-alpha.2",
258
+ "@mastra/client-js": "^1.52.0-alpha.3",
259
259
  "@mastra/ai-sdk": "1.10.7-alpha.1",
260
- "@mastra/core": "1.75.0-alpha.2",
261
- "@mastra/react": "1.7.3-alpha.2",
262
- "@mastra/schema-compat": "1.3.13",
263
- "@mastra/memory": "1.36.0-alpha.1"
260
+ "@mastra/memory": "1.36.0-alpha.2",
261
+ "@mastra/core": "1.75.0-alpha.3",
262
+ "@mastra/react": "1.7.3-alpha.3",
263
+ "@mastra/schema-compat": "1.3.13"
264
264
  },
265
265
  "homepage": "https://mastra.ai",
266
266
  "repository": {