@fragments-sdk/ui 0.10.0 → 0.11.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.
Files changed (41) hide show
  1. package/dist/assets/ui.css +304 -0
  2. package/dist/blocks/BlogEditor.block.d.ts +3 -0
  3. package/dist/blocks/BlogEditor.block.d.ts.map +1 -0
  4. package/dist/components/Editor/Editor.module.scss.cjs +57 -0
  5. package/dist/components/Editor/Editor.module.scss.cjs.map +1 -0
  6. package/dist/components/Editor/Editor.module.scss.js +57 -0
  7. package/dist/components/Editor/Editor.module.scss.js.map +1 -0
  8. package/dist/components/Editor/index.cjs +548 -0
  9. package/dist/components/Editor/index.cjs.map +1 -0
  10. package/dist/components/Editor/index.d.ts +107 -0
  11. package/dist/components/Editor/index.d.ts.map +1 -0
  12. package/dist/components/Editor/index.js +531 -0
  13. package/dist/components/Editor/index.js.map +1 -0
  14. package/dist/components/Sidebar/index.cjs +6 -11
  15. package/dist/components/Sidebar/index.cjs.map +1 -1
  16. package/dist/components/Sidebar/index.d.ts.map +1 -1
  17. package/dist/components/Sidebar/index.js +6 -11
  18. package/dist/components/Sidebar/index.js.map +1 -1
  19. package/dist/index.cjs +22 -0
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +22 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/utils/keyboard-shortcuts.cjs +295 -0
  26. package/dist/utils/keyboard-shortcuts.cjs.map +1 -0
  27. package/dist/utils/keyboard-shortcuts.d.ts +293 -0
  28. package/dist/utils/keyboard-shortcuts.d.ts.map +1 -0
  29. package/dist/utils/keyboard-shortcuts.js +295 -0
  30. package/dist/utils/keyboard-shortcuts.js.map +1 -0
  31. package/fragments.json +1 -1
  32. package/package.json +27 -2
  33. package/src/blocks/BlogEditor.block.ts +34 -0
  34. package/src/components/Editor/Editor.fragment.tsx +322 -0
  35. package/src/components/Editor/Editor.module.scss +333 -0
  36. package/src/components/Editor/Editor.test.tsx +174 -0
  37. package/src/components/Editor/index.tsx +815 -0
  38. package/src/components/Sidebar/index.tsx +7 -14
  39. package/src/index.ts +43 -0
  40. package/src/utils/keyboard-shortcuts.test.ts +357 -0
  41. package/src/utils/keyboard-shortcuts.ts +502 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Sidebar/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Sidebar.module.scss';\nimport { Tooltip } from '../Tooltip';\nimport { Skeleton } from '../Skeleton';\nimport { Collapsible } from '../Collapsible';\nimport { ScrollArea } from '../ScrollArea';\nimport { useFocusTrap } from '../../utils/a11y';\n\n// ============================================\n// Types\n// ============================================\n\n/** Collapse behavior mode */\nexport type SidebarCollapsible = 'icon' | 'offcanvas' | 'none';\n\nexport interface SidebarProviderProps {\n children: React.ReactNode;\n /** Icon-only mode (desktop) - controlled */\n collapsed?: boolean;\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean;\n /** Callback when collapsed state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Mobile drawer state - controlled */\n open?: boolean;\n /** Initial open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Width of expanded sidebar */\n width?: string;\n /** Width when collapsed */\n collapsedWidth?: string;\n /** Sidebar position */\n position?: 'left' | 'right';\n /** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */\n collapsible?: SidebarCollapsible;\n /** Enable Cmd/Ctrl+B keyboard shortcut to toggle sidebar */\n enableKeyboardShortcut?: boolean;\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /** Icon-only mode (desktop) - controlled */\n collapsed?: boolean;\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean;\n /** Callback when collapsed state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Mobile drawer state - controlled */\n open?: boolean;\n /** Initial open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Width of expanded sidebar */\n width?: string;\n /** Width when collapsed */\n collapsedWidth?: string;\n /** Sidebar position */\n position?: 'left' | 'right';\n /** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */\n collapsible?: SidebarCollapsible;\n}\n\nexport interface SidebarHeaderProps {\n children: React.ReactNode;\n /** Content to show when sidebar is collapsed (e.g., just logo icon) */\n collapsedContent?: React.ReactNode;\n className?: string;\n}\n\nexport interface SidebarNavProps {\n children: React.ReactNode;\n /** Accessible label for navigation */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarSectionProps {\n children: React.ReactNode;\n /** Optional section label */\n label?: string;\n /** Action element to display in the section header (e.g., \"Add\" button) */\n action?: React.ReactNode;\n /** Enable collapsible behavior */\n collapsible?: boolean;\n /** Default expanded state (only applies when collapsible is true) */\n defaultOpen?: boolean;\n className?: string;\n}\n\nexport interface SidebarSectionActionProps {\n children: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Accessible label */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarItemProps {\n children: React.ReactNode;\n /** Icon element (required for collapsed mode visibility) */\n icon?: React.ReactNode;\n /** Whether item is currently active/selected */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Badge content (e.g., notification count) */\n badge?: React.ReactNode;\n /** Renders as anchor if provided */\n href?: string;\n /** Click handler (renders as button) */\n onClick?: () => void;\n /** Whether this item has a submenu */\n hasSubmenu?: boolean;\n /** Whether submenu is expanded (controlled) */\n expanded?: boolean;\n /** Initial expanded state (uncontrolled) */\n defaultExpanded?: boolean;\n /** Callback when expanded state changes */\n onExpandedChange?: (expanded: boolean) => void;\n /**\n * Render as child element (polymorphic). When true, clones the single child\n * and merges sidebar item props. Useful for rendering as Next.js Link, etc.\n */\n asChild?: boolean;\n className?: string;\n}\n\nexport interface SidebarSubItemProps {\n children: React.ReactNode;\n /** Whether item is currently active/selected */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Renders as anchor if provided */\n href?: string;\n /** Click handler (renders as button) */\n onClick?: () => void;\n className?: string;\n}\n\nexport interface SidebarFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface SidebarTriggerProps {\n /** Custom trigger element (uses render prop pattern) */\n children?: React.ReactNode;\n /** Accessible label */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarOverlayProps {\n className?: string;\n}\n\nexport interface SidebarCollapseToggleProps {\n /** Accessible label */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarRailProps {\n className?: string;\n}\n\nexport interface SidebarMenuSkeletonProps {\n /** Number of skeleton items to render */\n count?: number;\n /** Show icons in skeleton items */\n showIcon?: boolean;\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction MenuIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z\" />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" />\n </svg>\n );\n}\n\nfunction CollapsePanelIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM40,56H80V200H40ZM216,200H96V56H216V200Z\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z\" />\n </svg>\n );\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface SidebarContextValue {\n collapsed: boolean;\n setCollapsed: (collapsed: boolean) => void;\n open: boolean;\n setOpen: (open: boolean) => void;\n isMobile: boolean;\n position: 'left' | 'right';\n width: string;\n collapsedWidth: string;\n collapsible: SidebarCollapsible;\n hasIcons: boolean;\n toggleSidebar: () => void;\n sidebarId: string;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\n/**\n * Hook to access sidebar state and controls.\n * Returns safe defaults if used outside a SidebarProvider/Sidebar.\n */\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n // Return safe defaults when used outside provider\n return {\n collapsed: false,\n setCollapsed: () => {},\n open: false,\n setOpen: () => {},\n isMobile: false,\n position: 'left' as const,\n width: '240px',\n collapsedWidth: '56px',\n collapsible: 'icon' as SidebarCollapsible,\n hasIcons: true,\n toggleSidebar: () => {},\n sidebarId: 'sidebar',\n state: 'expanded' as 'expanded' | 'collapsed' | 'open' | 'closed',\n };\n }\n return {\n ...context,\n state: context.isMobile\n ? (context.open ? 'open' : 'closed')\n : (context.collapsed ? 'collapsed' : 'expanded'),\n };\n}\n\n/**\n * @deprecated Use `useSidebar` instead. This will be removed in a future version.\n */\nfunction useSidebarContext() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error('Sidebar compound components must be used within a Sidebar');\n }\n return context;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const mq = window.matchMedia('(max-width: 767px)');\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n return isMobile;\n}\n\nfunction useControllableState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void\n): [T, (value: T) => void] {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = React.useCallback(\n (newValue: T) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n },\n [isControlled, onChange]\n );\n\n return [value, setValue];\n}\n\nfunction hasSidebarItemIcons(children: React.ReactNode): boolean {\n let found = false;\n\n const visit = (nodes: React.ReactNode) => {\n React.Children.forEach(nodes, child => {\n if (found || !React.isValidElement(child)) return;\n\n if (child.type === SidebarItem) {\n const props = child.props as SidebarItemProps;\n if (props.icon) {\n found = true;\n return;\n }\n }\n\n const childProps = child.props as { children?: React.ReactNode };\n if (childProps?.children) {\n visit(childProps.children);\n }\n });\n };\n\n visit(children);\n return found;\n}\n\n// ============================================\n// Components\n// ============================================\n\n/**\n * SidebarProvider - Wrap your app layout to provide sidebar state to children.\n * This enables external triggers and keyboard shortcuts.\n */\nfunction SidebarProvider({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n width = '240px',\n collapsedWidth = '56px',\n position = 'left',\n collapsible = 'icon',\n enableKeyboardShortcut = true,\n}: SidebarProviderProps) {\n const isMobile = useIsMobile();\n const sidebarId = React.useId();\n\n const [collapsed, setCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n\n const [open, setOpen] = useControllableState(\n controlledOpen,\n defaultOpen,\n onOpenChange\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (collapsible === 'none') return;\n if (isMobile) {\n setOpen(!open);\n } else {\n setCollapsed(!collapsed);\n }\n }, [isMobile, open, collapsed, setOpen, setCollapsed, collapsible]);\n\n // Handle Cmd/Ctrl+B keyboard shortcut\n React.useEffect(() => {\n if (!enableKeyboardShortcut || collapsible === 'none') return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'b') {\n e.preventDefault();\n toggleSidebar();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [enableKeyboardShortcut, toggleSidebar, collapsible]);\n\n // Handle escape key for mobile drawer\n React.useEffect(() => {\n if (!isMobile || !open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isMobile, open, setOpen]);\n\n // Lock body scroll when mobile drawer is open\n React.useEffect(() => {\n if (!isMobile) return;\n\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [isMobile, open]);\n\n const contextValue: SidebarContextValue = {\n collapsed,\n setCollapsed,\n open,\n setOpen,\n isMobile,\n position,\n width,\n collapsedWidth,\n collapsible,\n hasIcons: true,\n toggleSidebar,\n sidebarId,\n };\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {children}\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarRoot({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n width = '240px',\n collapsedWidth = '56px',\n position = 'left',\n collapsible = 'icon',\n className,\n style: styleProp,\n 'aria-label': ariaLabel,\n ...htmlProps\n}: SidebarProps) {\n // Check if we're inside a SidebarProvider\n const existingContext = React.useContext(SidebarContext);\n const isMobile = useIsMobile();\n\n const [internalCollapsed, setInternalCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n\n const [internalOpen, setInternalOpen] = useControllableState(\n controlledOpen,\n defaultOpen,\n onOpenChange\n );\n\n // Use existing context values if inside a provider, otherwise use internal state\n const collapsed = existingContext ? existingContext.collapsed : internalCollapsed;\n const setCollapsed = existingContext ? existingContext.setCollapsed : setInternalCollapsed;\n const open = existingContext ? existingContext.open : internalOpen;\n const setOpen = existingContext ? existingContext.setOpen : setInternalOpen;\n const resolvedPosition = existingContext ? existingContext.position : position;\n const resolvedWidth = existingContext ? existingContext.width : width;\n const resolvedCollapsedWidth = existingContext ? existingContext.collapsedWidth : collapsedWidth;\n const resolvedCollapsible = existingContext ? existingContext.collapsible : collapsible;\n const hasIcons = React.useMemo(() => hasSidebarItemIcons(children), [children]);\n const shouldCollapseToZero = !isMobile && resolvedCollapsible === 'icon' && collapsed && !hasIcons;\n const isOffcanvasCollapsed = !isMobile && resolvedCollapsible === 'offcanvas' && collapsed;\n const effectiveCollapsedWidth = (shouldCollapseToZero || isOffcanvasCollapsed) ? '0px' : resolvedCollapsedWidth;\n const sidebarId = React.useId();\n const resolvedSidebarId = existingContext ? existingContext.sidebarId : sidebarId;\n const sidebarRef = React.useRef<HTMLElement>(null);\n\n useFocusTrap(sidebarRef, isMobile && open);\n\n const toggleSidebar = React.useCallback(() => {\n if (resolvedCollapsible === 'none') return;\n if (isMobile) {\n setOpen(!open);\n } else {\n setCollapsed(!collapsed);\n }\n }, [isMobile, open, collapsed, setOpen, setCollapsed, resolvedCollapsible]);\n\n // Handle escape key for mobile drawer (only if no provider)\n React.useEffect(() => {\n if (existingContext) return; // Provider handles this\n if (!isMobile || !open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [existingContext, isMobile, open, setOpen]);\n\n // Lock body scroll when mobile drawer is open (only if no provider)\n React.useEffect(() => {\n if (existingContext) return; // Provider handles this\n if (!isMobile) return;\n\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [existingContext, isMobile, open]);\n\n const contextValue: SidebarContextValue = {\n ...(existingContext || {\n collapsed,\n setCollapsed,\n open,\n setOpen,\n isMobile,\n position: resolvedPosition,\n width: resolvedWidth,\n collapsedWidth: resolvedCollapsedWidth,\n collapsible: resolvedCollapsible,\n hasIcons,\n toggleSidebar,\n sidebarId: resolvedSidebarId,\n }),\n hasIcons,\n };\n\n const isCollapsedForStyle = resolvedCollapsible === 'icon' && collapsed;\n\n const classes = [\n styles.root,\n isMobile && styles.mobile,\n !isMobile && isCollapsedForStyle && styles.collapsed,\n !isMobile && isCollapsedForStyle && shouldCollapseToZero && styles.collapsedNoIcons,\n isOffcanvasCollapsed && styles.offcanvasCollapsed,\n resolvedPosition === 'right' && styles.positionRight,\n className,\n ].filter(Boolean).join(' ');\n\n const style: React.CSSProperties = {\n '--sidebar-width': resolvedWidth,\n '--sidebar-collapsed-width': resolvedCollapsedWidth,\n '--sidebar-effective-collapsed-width': effectiveCollapsedWidth,\n ...styleProp,\n } as React.CSSProperties;\n\n const content = (\n <aside\n ref={sidebarRef}\n id={resolvedSidebarId}\n {...htmlProps}\n className={classes}\n style={style}\n role={isMobile ? 'dialog' : undefined}\n aria-modal={isMobile && open ? true : undefined}\n aria-hidden={isMobile && !open ? true : undefined}\n aria-label={isMobile ? (ariaLabel || 'Sidebar navigation') : ariaLabel}\n data-state={isMobile ? (open ? 'open' : 'closed') : (collapsed ? 'collapsed' : 'expanded')}\n data-position={resolvedPosition}\n data-collapsible={resolvedCollapsible}\n data-icon-collapse={resolvedCollapsible === 'icon' ? (hasIcons ? 'icons' : 'none') : undefined}\n >\n {children}\n </aside>\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {content}\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarHeader({ children, collapsedContent, className }: SidebarHeaderProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const isCollapsed = collapsed && !isMobile;\n const classes = [styles.header, className].filter(Boolean).join(' ');\n\n // Show collapsed content when sidebar is collapsed (and we have it), otherwise show children\n const content = isCollapsed && collapsedContent ? collapsedContent : children;\n\n return <div className={classes}>{content}</div>;\n}\n\nfunction SidebarNav({ children, 'aria-label': ariaLabel = 'Main navigation', className }: SidebarNavProps) {\n const classes = [styles.nav, className].filter(Boolean).join(' ');\n return (\n <nav className={classes} aria-label={ariaLabel}>\n <ScrollArea orientation=\"vertical\" showFades className={styles.navScrollArea}>\n {children}\n </ScrollArea>\n </nav>\n );\n}\n\nfunction SidebarSection({\n children,\n label,\n action,\n collapsible: isCollapsibleProp = false,\n defaultOpen = true,\n className\n}: SidebarSectionProps) {\n const { collapsed, isMobile } = useSidebarContext();\n\n const classes = [\n styles.section,\n className\n ].filter(Boolean).join(' ');\n\n const showLabel = label && (!collapsed || isMobile);\n const showAction = action && (!collapsed || isMobile);\n const isCollapsible = isCollapsibleProp && showLabel;\n\n // Non-collapsible section\n if (!isCollapsible) {\n return (\n <div className={classes} role=\"group\" aria-label={label}>\n {(showLabel || showAction) && (\n <div className={styles.sectionHeader}>\n {showLabel && <div className={styles.sectionLabel}>{label}</div>}\n {showAction && <div className={styles.sectionActionWrapper}>{action}</div>}\n </div>\n )}\n <ul className={styles.sectionList}>\n {children}\n </ul>\n </div>\n );\n }\n\n // Collapsible section using Collapsible component\n return (\n <div className={classes} role=\"group\" aria-label={label}>\n <Collapsible defaultOpen={defaultOpen} className={styles.sectionCollapsible}>\n <div className={styles.sectionHeader}>\n <Collapsible.Trigger\n className={styles.sectionTrigger}\n chevronPosition=\"end\"\n >\n <span className={styles.sectionLabel}>{label}</span>\n </Collapsible.Trigger>\n {showAction && <div className={styles.sectionActionWrapper}>{action}</div>}\n </div>\n <Collapsible.Content className={styles.sectionContent}>\n <ul className={styles.sectionList}>\n {children}\n </ul>\n </Collapsible.Content>\n </Collapsible>\n </div>\n );\n}\n\nfunction SidebarSectionAction({\n children,\n onClick,\n 'aria-label': ariaLabel,\n className,\n}: SidebarSectionActionProps) {\n const classes = [styles.sectionAction, className].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n aria-label={ariaLabel}\n >\n {children}\n </button>\n );\n}\n\nfunction SidebarItem({\n children,\n icon,\n active = false,\n disabled = false,\n badge,\n href,\n onClick,\n hasSubmenu = false,\n expanded: controlledExpanded,\n defaultExpanded = false,\n onExpandedChange,\n asChild = false,\n className,\n}: SidebarItemProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const [expanded, setExpanded] = useControllableState(\n controlledExpanded,\n defaultExpanded,\n onExpandedChange\n );\n\n const isCollapsed = collapsed && !isMobile;\n const showLabel = !isCollapsed;\n\n const classes = [\n styles.item,\n active && styles.itemActive,\n disabled && styles.itemDisabled,\n hasSubmenu && styles.itemHasSubmenu,\n expanded && styles.itemExpanded,\n className,\n ].filter(Boolean).join(' ');\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n if (hasSubmenu) {\n e.preventDefault();\n setExpanded(!expanded);\n }\n onClick?.();\n };\n\n // Extract text content from children for aria-label when collapsed\n // For asChild, try to extract from the child's children prop\n let labelText: string | undefined;\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as { children?: React.ReactNode };\n labelText = typeof childProps.children === 'string' ? childProps.children : undefined;\n } else {\n labelText = typeof children === 'string' ? children : undefined;\n }\n\n const itemContent = (\n <>\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n {showLabel && <span className={styles.itemLabel}>{asChild && React.isValidElement(children) ? (children.props as { children?: React.ReactNode }).children : children}</span>}\n {showLabel && badge && <span className={styles.itemBadge}>{badge}</span>}\n {showLabel && hasSubmenu && (\n <span className={styles.itemChevron}>\n <ChevronRightIcon />\n </span>\n )}\n </>\n );\n\n const itemProps = {\n className: classes,\n onClick: handleClick,\n 'aria-current': active ? 'page' as const : undefined,\n 'aria-disabled': disabled || undefined,\n 'aria-expanded': hasSubmenu ? expanded : undefined,\n 'aria-label': isCollapsed ? labelText : undefined,\n tabIndex: disabled ? -1 : 0,\n };\n\n let itemElement: React.ReactElement;\n\n if (asChild && React.isValidElement(children)) {\n // Clone the child element and merge props\n itemElement = React.cloneElement(children, {\n ...itemProps,\n // Merge classNames\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n children: itemContent,\n } as React.HTMLAttributes<HTMLElement>);\n } else if (href) {\n itemElement = (\n <a {...itemProps} href={href}>\n {itemContent}\n </a>\n );\n } else {\n itemElement = (\n <button {...itemProps} type=\"button\">\n {itemContent}\n </button>\n );\n }\n\n // Wrap in tooltip when collapsed\n const wrappedItem = isCollapsed ? (\n <Tooltip content={labelText || children} side=\"right\" delay={100}>\n {itemElement}\n </Tooltip>\n ) : (\n itemElement\n );\n\n const wrapperClasses = [\n styles.itemWrapper,\n expanded && styles.itemExpanded,\n ].filter(Boolean).join(' ');\n\n return <li className={wrapperClasses}>{wrappedItem}</li>;\n}\n\nfunction SidebarSubItem({\n children,\n active = false,\n disabled = false,\n href,\n onClick,\n className,\n}: SidebarSubItemProps) {\n const { collapsed, isMobile } = useSidebarContext();\n\n // Don't render sub-items when collapsed (unless mobile)\n if (collapsed && !isMobile) {\n return null;\n }\n\n const classes = [\n styles.subItem,\n active && styles.subItemActive,\n disabled && styles.subItemDisabled,\n className,\n ].filter(Boolean).join(' ');\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.();\n };\n\n const itemProps = {\n className: classes,\n onClick: handleClick,\n 'aria-current': active ? 'page' as const : undefined,\n 'aria-disabled': disabled,\n tabIndex: disabled ? -1 : 0,\n };\n\n const itemElement = href ? (\n <a {...itemProps} href={href}>\n {children}\n </a>\n ) : (\n <button {...itemProps} type=\"button\">\n {children}\n </button>\n );\n\n return <li className={styles.subItemWrapper}>{itemElement}</li>;\n}\n\nfunction SidebarSubmenu({ children }: { children: React.ReactNode }) {\n return (\n <li className={styles.submenuWrapper}>\n <ul className={styles.submenu}>\n {children}\n </ul>\n </li>\n );\n}\n\nfunction SidebarFooter({ children, className }: SidebarFooterProps) {\n const classes = [styles.footer, className].filter(Boolean).join(' ');\n return <div className={classes}>{children}</div>;\n}\n\nfunction SidebarTrigger({ children, 'aria-label': ariaLabel = 'Toggle navigation', className }: SidebarTriggerProps) {\n const { open, setOpen, isMobile, sidebarId } = useSidebarContext();\n\n // Only render trigger on mobile\n if (!isMobile) {\n return null;\n }\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => setOpen(!open)}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-controls={sidebarId}\n >\n {children || (open ? <CloseIcon /> : <MenuIcon />)}\n </button>\n );\n}\n\nfunction SidebarOverlay({ className }: SidebarOverlayProps) {\n const { open, setOpen, isMobile } = useSidebarContext();\n\n // Only render overlay on mobile when open\n if (!isMobile || !open) {\n return null;\n }\n\n const classes = [styles.overlay, className].filter(Boolean).join(' ');\n\n return (\n <div\n className={classes}\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n data-state={open ? 'open' : 'closed'}\n />\n );\n}\n\nfunction SidebarCollapseToggle({ 'aria-label': ariaLabel, className }: SidebarCollapseToggleProps) {\n const { collapsed, setCollapsed, isMobile, collapsible, hasIcons } = useSidebarContext();\n\n // Don't show on mobile or when collapsing is disabled\n if (isMobile || collapsible === 'none') {\n return null;\n }\n\n const shouldFloat = collapsed && (\n (collapsible === 'icon' && !hasIcons) ||\n collapsible === 'offcanvas'\n );\n const classes = [\n styles.collapseToggle,\n shouldFloat && styles.collapseToggleFloating,\n className,\n ].filter(Boolean).join(' ');\n const label = ariaLabel || (collapsed ? 'Expand sidebar' : 'Collapse sidebar');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => setCollapsed(!collapsed)}\n aria-label={label}\n >\n <CollapsePanelIcon />\n </button>\n );\n}\n\nfunction SidebarRail({ className }: SidebarRailProps) {\n const { collapsed, setCollapsed, isMobile, collapsible } = useSidebarContext();\n\n // Don't show on mobile or when collapsing is disabled\n if (isMobile || collapsible === 'none') {\n return null;\n }\n\n const classes = [\n styles.rail,\n collapsed && styles.railCollapsed,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => setCollapsed(!collapsed)}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n title={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n count = 5,\n showIcon = true,\n className,\n}: SidebarMenuSkeletonProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const isCollapsed = collapsed && !isMobile;\n\n const classes = [styles.menuSkeleton, className].filter(Boolean).join(' ');\n const labelWidths = ['64%', '72%', '68%', '79%', '74%', '66%', '83%', '70%'];\n\n return (\n <div className={classes} aria-hidden=\"true\">\n {Array.from({ length: count }).map((_, i) => (\n <div key={i} className={styles.skeletonItem}>\n {showIcon && <Skeleton variant=\"avatar\" size=\"sm\" />}\n {!isCollapsed && (\n <Skeleton\n variant=\"text\"\n className={styles.skeletonLabel}\n width={labelWidths[i % labelWidths.length]}\n />\n )}\n </div>\n ))}\n </div>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Sidebar = Object.assign(SidebarRoot, {\n Header: SidebarHeader,\n Nav: SidebarNav,\n Section: SidebarSection,\n SectionAction: SidebarSectionAction,\n Item: SidebarItem,\n SubItem: SidebarSubItem,\n Submenu: SidebarSubmenu,\n Footer: SidebarFooter,\n Trigger: SidebarTrigger,\n Overlay: SidebarOverlay,\n CollapseToggle: SidebarCollapseToggle,\n Rail: SidebarRail,\n MenuSkeleton: SidebarMenuSkeleton,\n});\n\n// Re-export individual components\nexport {\n SidebarProvider,\n SidebarRoot,\n SidebarHeader,\n SidebarNav,\n SidebarSection,\n SidebarSectionAction,\n SidebarItem,\n SidebarSubItem,\n SidebarSubmenu,\n SidebarFooter,\n SidebarTrigger,\n SidebarOverlay,\n SidebarCollapseToggle,\n SidebarRail,\n SidebarMenuSkeleton,\n};\n\n// Export hooks\nexport { useSidebar };\n\n// Export context hook for backwards compatibility (deprecated)\nexport { useSidebarContext };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Sidebar/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Sidebar.module.scss';\nimport { Tooltip } from '../Tooltip';\nimport { Skeleton } from '../Skeleton';\nimport { Collapsible } from '../Collapsible';\nimport { ScrollArea } from '../ScrollArea';\nimport { useFocusTrap } from '../../utils/a11y';\nimport { useKeyboardShortcut } from '../../utils/keyboard-shortcuts';\n\n// ============================================\n// Types\n// ============================================\n\n/** Collapse behavior mode */\nexport type SidebarCollapsible = 'icon' | 'offcanvas' | 'none';\n\nexport interface SidebarProviderProps {\n children: React.ReactNode;\n /** Icon-only mode (desktop) - controlled */\n collapsed?: boolean;\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean;\n /** Callback when collapsed state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Mobile drawer state - controlled */\n open?: boolean;\n /** Initial open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Width of expanded sidebar */\n width?: string;\n /** Width when collapsed */\n collapsedWidth?: string;\n /** Sidebar position */\n position?: 'left' | 'right';\n /** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */\n collapsible?: SidebarCollapsible;\n /** Enable Cmd/Ctrl+B keyboard shortcut to toggle sidebar */\n enableKeyboardShortcut?: boolean;\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /** Icon-only mode (desktop) - controlled */\n collapsed?: boolean;\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean;\n /** Callback when collapsed state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Mobile drawer state - controlled */\n open?: boolean;\n /** Initial open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Width of expanded sidebar */\n width?: string;\n /** Width when collapsed */\n collapsedWidth?: string;\n /** Sidebar position */\n position?: 'left' | 'right';\n /** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */\n collapsible?: SidebarCollapsible;\n}\n\nexport interface SidebarHeaderProps {\n children: React.ReactNode;\n /** Content to show when sidebar is collapsed (e.g., just logo icon) */\n collapsedContent?: React.ReactNode;\n className?: string;\n}\n\nexport interface SidebarNavProps {\n children: React.ReactNode;\n /** Accessible label for navigation */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarSectionProps {\n children: React.ReactNode;\n /** Optional section label */\n label?: string;\n /** Action element to display in the section header (e.g., \"Add\" button) */\n action?: React.ReactNode;\n /** Enable collapsible behavior */\n collapsible?: boolean;\n /** Default expanded state (only applies when collapsible is true) */\n defaultOpen?: boolean;\n className?: string;\n}\n\nexport interface SidebarSectionActionProps {\n children: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Accessible label */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarItemProps {\n children: React.ReactNode;\n /** Icon element (required for collapsed mode visibility) */\n icon?: React.ReactNode;\n /** Whether item is currently active/selected */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Badge content (e.g., notification count) */\n badge?: React.ReactNode;\n /** Renders as anchor if provided */\n href?: string;\n /** Click handler (renders as button) */\n onClick?: () => void;\n /** Whether this item has a submenu */\n hasSubmenu?: boolean;\n /** Whether submenu is expanded (controlled) */\n expanded?: boolean;\n /** Initial expanded state (uncontrolled) */\n defaultExpanded?: boolean;\n /** Callback when expanded state changes */\n onExpandedChange?: (expanded: boolean) => void;\n /**\n * Render as child element (polymorphic). When true, clones the single child\n * and merges sidebar item props. Useful for rendering as Next.js Link, etc.\n */\n asChild?: boolean;\n className?: string;\n}\n\nexport interface SidebarSubItemProps {\n children: React.ReactNode;\n /** Whether item is currently active/selected */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Renders as anchor if provided */\n href?: string;\n /** Click handler (renders as button) */\n onClick?: () => void;\n className?: string;\n}\n\nexport interface SidebarFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface SidebarTriggerProps {\n /** Custom trigger element (uses render prop pattern) */\n children?: React.ReactNode;\n /** Accessible label */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarOverlayProps {\n className?: string;\n}\n\nexport interface SidebarCollapseToggleProps {\n /** Accessible label */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarRailProps {\n className?: string;\n}\n\nexport interface SidebarMenuSkeletonProps {\n /** Number of skeleton items to render */\n count?: number;\n /** Show icons in skeleton items */\n showIcon?: boolean;\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction MenuIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z\" />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" />\n </svg>\n );\n}\n\nfunction CollapsePanelIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM40,56H80V200H40ZM216,200H96V56H216V200Z\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z\" />\n </svg>\n );\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface SidebarContextValue {\n collapsed: boolean;\n setCollapsed: (collapsed: boolean) => void;\n open: boolean;\n setOpen: (open: boolean) => void;\n isMobile: boolean;\n position: 'left' | 'right';\n width: string;\n collapsedWidth: string;\n collapsible: SidebarCollapsible;\n hasIcons: boolean;\n toggleSidebar: () => void;\n sidebarId: string;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\n/**\n * Hook to access sidebar state and controls.\n * Returns safe defaults if used outside a SidebarProvider/Sidebar.\n */\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n // Return safe defaults when used outside provider\n return {\n collapsed: false,\n setCollapsed: () => {},\n open: false,\n setOpen: () => {},\n isMobile: false,\n position: 'left' as const,\n width: '240px',\n collapsedWidth: '56px',\n collapsible: 'icon' as SidebarCollapsible,\n hasIcons: true,\n toggleSidebar: () => {},\n sidebarId: 'sidebar',\n state: 'expanded' as 'expanded' | 'collapsed' | 'open' | 'closed',\n };\n }\n return {\n ...context,\n state: context.isMobile\n ? (context.open ? 'open' : 'closed')\n : (context.collapsed ? 'collapsed' : 'expanded'),\n };\n}\n\n/**\n * @deprecated Use `useSidebar` instead. This will be removed in a future version.\n */\nfunction useSidebarContext() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error('Sidebar compound components must be used within a Sidebar');\n }\n return context;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const mq = window.matchMedia('(max-width: 767px)');\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n return isMobile;\n}\n\nfunction useControllableState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void\n): [T, (value: T) => void] {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = React.useCallback(\n (newValue: T) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n },\n [isControlled, onChange]\n );\n\n return [value, setValue];\n}\n\nfunction hasSidebarItemIcons(children: React.ReactNode): boolean {\n let found = false;\n\n const visit = (nodes: React.ReactNode) => {\n React.Children.forEach(nodes, child => {\n if (found || !React.isValidElement(child)) return;\n\n if (child.type === SidebarItem) {\n const props = child.props as SidebarItemProps;\n if (props.icon) {\n found = true;\n return;\n }\n }\n\n const childProps = child.props as { children?: React.ReactNode };\n if (childProps?.children) {\n visit(childProps.children);\n }\n });\n };\n\n visit(children);\n return found;\n}\n\n// ============================================\n// Components\n// ============================================\n\n/**\n * SidebarProvider - Wrap your app layout to provide sidebar state to children.\n * This enables external triggers and keyboard shortcuts.\n */\nfunction SidebarProvider({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n width = '240px',\n collapsedWidth = '56px',\n position = 'left',\n collapsible = 'icon',\n enableKeyboardShortcut = true,\n}: SidebarProviderProps) {\n const isMobile = useIsMobile();\n const sidebarId = React.useId();\n\n const [collapsed, setCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n\n const [open, setOpen] = useControllableState(\n controlledOpen,\n defaultOpen,\n onOpenChange\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (collapsible === 'none') return;\n if (isMobile) {\n setOpen(!open);\n } else {\n setCollapsed(!collapsed);\n }\n }, [isMobile, open, collapsed, setOpen, setCollapsed, collapsible]);\n\n // Handle Cmd/Ctrl+B keyboard shortcut (skips editable elements like Editor)\n useKeyboardShortcut({\n name: 'SIDEBAR_TOGGLE',\n handler: toggleSidebar,\n enabled: enableKeyboardShortcut && collapsible !== 'none',\n });\n\n // Handle escape key for mobile drawer\n React.useEffect(() => {\n if (!isMobile || !open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isMobile, open, setOpen]);\n\n // Lock body scroll when mobile drawer is open\n React.useEffect(() => {\n if (!isMobile) return;\n\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [isMobile, open]);\n\n const contextValue: SidebarContextValue = {\n collapsed,\n setCollapsed,\n open,\n setOpen,\n isMobile,\n position,\n width,\n collapsedWidth,\n collapsible,\n hasIcons: true,\n toggleSidebar,\n sidebarId,\n };\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {children}\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarRoot({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n width = '240px',\n collapsedWidth = '56px',\n position = 'left',\n collapsible = 'icon',\n className,\n style: styleProp,\n 'aria-label': ariaLabel,\n ...htmlProps\n}: SidebarProps) {\n // Check if we're inside a SidebarProvider\n const existingContext = React.useContext(SidebarContext);\n const isMobile = useIsMobile();\n\n const [internalCollapsed, setInternalCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n\n const [internalOpen, setInternalOpen] = useControllableState(\n controlledOpen,\n defaultOpen,\n onOpenChange\n );\n\n // Use existing context values if inside a provider, otherwise use internal state\n const collapsed = existingContext ? existingContext.collapsed : internalCollapsed;\n const setCollapsed = existingContext ? existingContext.setCollapsed : setInternalCollapsed;\n const open = existingContext ? existingContext.open : internalOpen;\n const setOpen = existingContext ? existingContext.setOpen : setInternalOpen;\n const resolvedPosition = existingContext ? existingContext.position : position;\n const resolvedWidth = existingContext ? existingContext.width : width;\n const resolvedCollapsedWidth = existingContext ? existingContext.collapsedWidth : collapsedWidth;\n const resolvedCollapsible = existingContext ? existingContext.collapsible : collapsible;\n const hasIcons = React.useMemo(() => hasSidebarItemIcons(children), [children]);\n const shouldCollapseToZero = !isMobile && resolvedCollapsible === 'icon' && collapsed && !hasIcons;\n const isOffcanvasCollapsed = !isMobile && resolvedCollapsible === 'offcanvas' && collapsed;\n const effectiveCollapsedWidth = (shouldCollapseToZero || isOffcanvasCollapsed) ? '0px' : resolvedCollapsedWidth;\n const sidebarId = React.useId();\n const resolvedSidebarId = existingContext ? existingContext.sidebarId : sidebarId;\n const sidebarRef = React.useRef<HTMLElement>(null);\n\n useFocusTrap(sidebarRef, isMobile && open);\n\n const toggleSidebar = React.useCallback(() => {\n if (resolvedCollapsible === 'none') return;\n if (isMobile) {\n setOpen(!open);\n } else {\n setCollapsed(!collapsed);\n }\n }, [isMobile, open, collapsed, setOpen, setCollapsed, resolvedCollapsible]);\n\n // Handle escape key for mobile drawer (only if no provider)\n React.useEffect(() => {\n if (existingContext) return; // Provider handles this\n if (!isMobile || !open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [existingContext, isMobile, open, setOpen]);\n\n // Lock body scroll when mobile drawer is open (only if no provider)\n React.useEffect(() => {\n if (existingContext) return; // Provider handles this\n if (!isMobile) return;\n\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [existingContext, isMobile, open]);\n\n const contextValue: SidebarContextValue = {\n ...(existingContext || {\n collapsed,\n setCollapsed,\n open,\n setOpen,\n isMobile,\n position: resolvedPosition,\n width: resolvedWidth,\n collapsedWidth: resolvedCollapsedWidth,\n collapsible: resolvedCollapsible,\n hasIcons,\n toggleSidebar,\n sidebarId: resolvedSidebarId,\n }),\n hasIcons,\n };\n\n const isCollapsedForStyle = resolvedCollapsible === 'icon' && collapsed;\n\n const classes = [\n styles.root,\n isMobile && styles.mobile,\n !isMobile && isCollapsedForStyle && styles.collapsed,\n !isMobile && isCollapsedForStyle && shouldCollapseToZero && styles.collapsedNoIcons,\n isOffcanvasCollapsed && styles.offcanvasCollapsed,\n resolvedPosition === 'right' && styles.positionRight,\n className,\n ].filter(Boolean).join(' ');\n\n const style: React.CSSProperties = {\n '--sidebar-width': resolvedWidth,\n '--sidebar-collapsed-width': resolvedCollapsedWidth,\n '--sidebar-effective-collapsed-width': effectiveCollapsedWidth,\n ...styleProp,\n } as React.CSSProperties;\n\n const content = (\n <aside\n ref={sidebarRef}\n id={resolvedSidebarId}\n {...htmlProps}\n className={classes}\n style={style}\n role={isMobile ? 'dialog' : undefined}\n aria-modal={isMobile && open ? true : undefined}\n aria-hidden={isMobile && !open ? true : undefined}\n aria-label={isMobile ? (ariaLabel || 'Sidebar navigation') : ariaLabel}\n data-state={isMobile ? (open ? 'open' : 'closed') : (collapsed ? 'collapsed' : 'expanded')}\n data-position={resolvedPosition}\n data-collapsible={resolvedCollapsible}\n data-icon-collapse={resolvedCollapsible === 'icon' ? (hasIcons ? 'icons' : 'none') : undefined}\n >\n {children}\n </aside>\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {content}\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarHeader({ children, collapsedContent, className }: SidebarHeaderProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const isCollapsed = collapsed && !isMobile;\n const classes = [styles.header, className].filter(Boolean).join(' ');\n\n // Show collapsed content when sidebar is collapsed (and we have it), otherwise show children\n const content = isCollapsed && collapsedContent ? collapsedContent : children;\n\n return <div className={classes}>{content}</div>;\n}\n\nfunction SidebarNav({ children, 'aria-label': ariaLabel = 'Main navigation', className }: SidebarNavProps) {\n const classes = [styles.nav, className].filter(Boolean).join(' ');\n return (\n <nav className={classes} aria-label={ariaLabel}>\n <ScrollArea orientation=\"vertical\" showFades className={styles.navScrollArea}>\n {children}\n </ScrollArea>\n </nav>\n );\n}\n\nfunction SidebarSection({\n children,\n label,\n action,\n collapsible: isCollapsibleProp = false,\n defaultOpen = true,\n className\n}: SidebarSectionProps) {\n const { collapsed, isMobile } = useSidebarContext();\n\n const classes = [\n styles.section,\n className\n ].filter(Boolean).join(' ');\n\n const showLabel = label && (!collapsed || isMobile);\n const showAction = action && (!collapsed || isMobile);\n const isCollapsible = isCollapsibleProp && showLabel;\n\n // Non-collapsible section\n if (!isCollapsible) {\n return (\n <div className={classes} role=\"group\" aria-label={label}>\n {(showLabel || showAction) && (\n <div className={styles.sectionHeader}>\n {showLabel && <div className={styles.sectionLabel}>{label}</div>}\n {showAction && <div className={styles.sectionActionWrapper}>{action}</div>}\n </div>\n )}\n <ul className={styles.sectionList}>\n {children}\n </ul>\n </div>\n );\n }\n\n // Collapsible section using Collapsible component\n return (\n <div className={classes} role=\"group\" aria-label={label}>\n <Collapsible defaultOpen={defaultOpen} className={styles.sectionCollapsible}>\n <div className={styles.sectionHeader}>\n <Collapsible.Trigger\n className={styles.sectionTrigger}\n chevronPosition=\"end\"\n >\n <span className={styles.sectionLabel}>{label}</span>\n </Collapsible.Trigger>\n {showAction && <div className={styles.sectionActionWrapper}>{action}</div>}\n </div>\n <Collapsible.Content className={styles.sectionContent}>\n <ul className={styles.sectionList}>\n {children}\n </ul>\n </Collapsible.Content>\n </Collapsible>\n </div>\n );\n}\n\nfunction SidebarSectionAction({\n children,\n onClick,\n 'aria-label': ariaLabel,\n className,\n}: SidebarSectionActionProps) {\n const classes = [styles.sectionAction, className].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n aria-label={ariaLabel}\n >\n {children}\n </button>\n );\n}\n\nfunction SidebarItem({\n children,\n icon,\n active = false,\n disabled = false,\n badge,\n href,\n onClick,\n hasSubmenu = false,\n expanded: controlledExpanded,\n defaultExpanded = false,\n onExpandedChange,\n asChild = false,\n className,\n}: SidebarItemProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const [expanded, setExpanded] = useControllableState(\n controlledExpanded,\n defaultExpanded,\n onExpandedChange\n );\n\n const isCollapsed = collapsed && !isMobile;\n const showLabel = !isCollapsed;\n\n const classes = [\n styles.item,\n active && styles.itemActive,\n disabled && styles.itemDisabled,\n hasSubmenu && styles.itemHasSubmenu,\n expanded && styles.itemExpanded,\n className,\n ].filter(Boolean).join(' ');\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n if (hasSubmenu) {\n e.preventDefault();\n setExpanded(!expanded);\n }\n onClick?.();\n };\n\n // Extract text content from children for aria-label when collapsed\n // For asChild, try to extract from the child's children prop\n let labelText: string | undefined;\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as { children?: React.ReactNode };\n labelText = typeof childProps.children === 'string' ? childProps.children : undefined;\n } else {\n labelText = typeof children === 'string' ? children : undefined;\n }\n\n const itemContent = (\n <>\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n {showLabel && <span className={styles.itemLabel}>{asChild && React.isValidElement(children) ? (children.props as { children?: React.ReactNode }).children : children}</span>}\n {showLabel && badge && <span className={styles.itemBadge}>{badge}</span>}\n {showLabel && hasSubmenu && (\n <span className={styles.itemChevron}>\n <ChevronRightIcon />\n </span>\n )}\n </>\n );\n\n const itemProps = {\n className: classes,\n onClick: handleClick,\n 'aria-current': active ? 'page' as const : undefined,\n 'aria-disabled': disabled || undefined,\n 'aria-expanded': hasSubmenu ? expanded : undefined,\n 'aria-label': isCollapsed ? labelText : undefined,\n tabIndex: disabled ? -1 : 0,\n };\n\n let itemElement: React.ReactElement;\n\n if (asChild && React.isValidElement(children)) {\n // Clone the child element and merge props\n itemElement = React.cloneElement(children, {\n ...itemProps,\n // Merge classNames\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n children: itemContent,\n } as React.HTMLAttributes<HTMLElement>);\n } else if (href) {\n itemElement = (\n <a {...itemProps} href={href}>\n {itemContent}\n </a>\n );\n } else {\n itemElement = (\n <button {...itemProps} type=\"button\">\n {itemContent}\n </button>\n );\n }\n\n // Wrap in tooltip when collapsed\n const wrappedItem = isCollapsed ? (\n <Tooltip content={labelText || children} side=\"right\" delay={100}>\n {itemElement}\n </Tooltip>\n ) : (\n itemElement\n );\n\n const wrapperClasses = [\n styles.itemWrapper,\n expanded && styles.itemExpanded,\n ].filter(Boolean).join(' ');\n\n return <li className={wrapperClasses}>{wrappedItem}</li>;\n}\n\nfunction SidebarSubItem({\n children,\n active = false,\n disabled = false,\n href,\n onClick,\n className,\n}: SidebarSubItemProps) {\n const { collapsed, isMobile } = useSidebarContext();\n\n // Don't render sub-items when collapsed (unless mobile)\n if (collapsed && !isMobile) {\n return null;\n }\n\n const classes = [\n styles.subItem,\n active && styles.subItemActive,\n disabled && styles.subItemDisabled,\n className,\n ].filter(Boolean).join(' ');\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.();\n };\n\n const itemProps = {\n className: classes,\n onClick: handleClick,\n 'aria-current': active ? 'page' as const : undefined,\n 'aria-disabled': disabled,\n tabIndex: disabled ? -1 : 0,\n };\n\n const itemElement = href ? (\n <a {...itemProps} href={href}>\n {children}\n </a>\n ) : (\n <button {...itemProps} type=\"button\">\n {children}\n </button>\n );\n\n return <li className={styles.subItemWrapper}>{itemElement}</li>;\n}\n\nfunction SidebarSubmenu({ children }: { children: React.ReactNode }) {\n return (\n <li className={styles.submenuWrapper}>\n <ul className={styles.submenu}>\n {children}\n </ul>\n </li>\n );\n}\n\nfunction SidebarFooter({ children, className }: SidebarFooterProps) {\n const classes = [styles.footer, className].filter(Boolean).join(' ');\n return <div className={classes}>{children}</div>;\n}\n\nfunction SidebarTrigger({ children, 'aria-label': ariaLabel = 'Toggle navigation', className }: SidebarTriggerProps) {\n const { open, setOpen, isMobile, sidebarId } = useSidebarContext();\n\n // Only render trigger on mobile\n if (!isMobile) {\n return null;\n }\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => setOpen(!open)}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-controls={sidebarId}\n >\n {children || (open ? <CloseIcon /> : <MenuIcon />)}\n </button>\n );\n}\n\nfunction SidebarOverlay({ className }: SidebarOverlayProps) {\n const { open, setOpen, isMobile } = useSidebarContext();\n\n // Only render overlay on mobile when open\n if (!isMobile || !open) {\n return null;\n }\n\n const classes = [styles.overlay, className].filter(Boolean).join(' ');\n\n return (\n <div\n className={classes}\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n data-state={open ? 'open' : 'closed'}\n />\n );\n}\n\nfunction SidebarCollapseToggle({ 'aria-label': ariaLabel, className }: SidebarCollapseToggleProps) {\n const { collapsed, setCollapsed, isMobile, collapsible, hasIcons } = useSidebarContext();\n\n // Don't show on mobile or when collapsing is disabled\n if (isMobile || collapsible === 'none') {\n return null;\n }\n\n const shouldFloat = collapsed && (\n (collapsible === 'icon' && !hasIcons) ||\n collapsible === 'offcanvas'\n );\n const classes = [\n styles.collapseToggle,\n shouldFloat && styles.collapseToggleFloating,\n className,\n ].filter(Boolean).join(' ');\n const label = ariaLabel || (collapsed ? 'Expand sidebar' : 'Collapse sidebar');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => setCollapsed(!collapsed)}\n aria-label={label}\n >\n <CollapsePanelIcon />\n </button>\n );\n}\n\nfunction SidebarRail({ className }: SidebarRailProps) {\n const { collapsed, setCollapsed, isMobile, collapsible } = useSidebarContext();\n\n // Don't show on mobile or when collapsing is disabled\n if (isMobile || collapsible === 'none') {\n return null;\n }\n\n const classes = [\n styles.rail,\n collapsed && styles.railCollapsed,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => setCollapsed(!collapsed)}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n title={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n count = 5,\n showIcon = true,\n className,\n}: SidebarMenuSkeletonProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const isCollapsed = collapsed && !isMobile;\n\n const classes = [styles.menuSkeleton, className].filter(Boolean).join(' ');\n const labelWidths = ['64%', '72%', '68%', '79%', '74%', '66%', '83%', '70%'];\n\n return (\n <div className={classes} aria-hidden=\"true\">\n {Array.from({ length: count }).map((_, i) => (\n <div key={i} className={styles.skeletonItem}>\n {showIcon && <Skeleton variant=\"avatar\" size=\"sm\" />}\n {!isCollapsed && (\n <Skeleton\n variant=\"text\"\n className={styles.skeletonLabel}\n width={labelWidths[i % labelWidths.length]}\n />\n )}\n </div>\n ))}\n </div>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Sidebar = Object.assign(SidebarRoot, {\n Header: SidebarHeader,\n Nav: SidebarNav,\n Section: SidebarSection,\n SectionAction: SidebarSectionAction,\n Item: SidebarItem,\n SubItem: SidebarSubItem,\n Submenu: SidebarSubmenu,\n Footer: SidebarFooter,\n Trigger: SidebarTrigger,\n Overlay: SidebarOverlay,\n CollapseToggle: SidebarCollapseToggle,\n Rail: SidebarRail,\n MenuSkeleton: SidebarMenuSkeleton,\n});\n\n// Re-export individual components\nexport {\n SidebarProvider,\n SidebarRoot,\n SidebarHeader,\n SidebarNav,\n SidebarSection,\n SidebarSectionAction,\n SidebarItem,\n SidebarSubItem,\n SidebarSubmenu,\n SidebarFooter,\n SidebarTrigger,\n SidebarOverlay,\n SidebarCollapseToggle,\n SidebarRail,\n SidebarMenuSkeleton,\n};\n\n// Export hooks\nexport { useSidebar };\n\n// Export context hook for backwards compatibility (deprecated)\nexport { useSidebarContext };\n"],"names":[],"mappings":";;;;;;;;;AA0LA,SAAS,WAAW;AAClB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ,UAAA,oBAAC,QAAA,EAAK,GAAE,4JAAA,CAA4J;AAAA,IAAA;AAAA,EAAA;AAG1K;AAEA,SAAS,YAAY;AACnB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ,UAAA,oBAAC,QAAA,EAAK,GAAE,2LAAA,CAA2L;AAAA,IAAA;AAAA,EAAA;AAGzM;AAEA,SAAS,oBAAoB;AAC3B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ,UAAA,oBAAC,QAAA,EAAK,GAAE,0IAAA,CAA0I;AAAA,IAAA;AAAA,EAAA;AAGxJ;AAEA,SAAS,mBAAmB;AAC1B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ,UAAA,oBAAC,QAAA,EAAK,GAAE,0HAAA,CAA0H;AAAA,IAAA;AAAA,EAAA;AAGxI;AAqBA,MAAM,iBAAiB,MAAM,cAA0C,IAAI;AAM3E,SAAS,aAAa;AACpB,QAAM,UAAU,MAAM,WAAW,cAAc;AAC/C,MAAI,CAAC,SAAS;AAEZ,WAAO;AAAA,MACL,WAAW;AAAA,MACX,cAAc,MAAM;AAAA,MAAC;AAAA,MACrB,MAAM;AAAA,MACN,SAAS,MAAM;AAAA,MAAC;AAAA,MAChB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,UAAU;AAAA,MACV,eAAe,MAAM;AAAA,MAAC;AAAA,MACtB,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,EAEX;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,QAAQ,WACV,QAAQ,OAAO,SAAS,WACxB,QAAQ,YAAY,cAAc;AAAA,EAAA;AAE3C;AAKA,SAAS,oBAAoB;AAC3B,QAAM,UAAU,MAAM,WAAW,cAAc;AAC/C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,2DAA2D;AAAA,EAC7E;AACA,SAAO;AACT;AAMA,SAAS,cAAc;AACrB,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,KAAK;AAEpD,QAAM,UAAU,MAAM;AACpB,UAAM,KAAK,OAAO,WAAW,oBAAoB;AACjD,gBAAY,GAAG,OAAO;AACtB,UAAM,UAAU,CAAC,MAA2B,YAAY,EAAE,OAAO;AACjE,OAAG,iBAAiB,UAAU,OAAO;AACrC,WAAO,MAAM,GAAG,oBAAoB,UAAU,OAAO;AAAA,EACvD,GAAG,CAAA,CAAE;AAEL,SAAO;AACT;AAEA,SAAS,qBACP,iBACA,cACA,UACyB;AACzB,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,MAAM,SAAS,YAAY;AAC7E,QAAM,eAAe,oBAAoB;AACzC,QAAM,QAAQ,eAAe,kBAAkB;AAE/C,QAAM,WAAW,MAAM;AAAA,IACrB,CAAC,aAAgB;AACf,UAAI,CAAC,cAAc;AACjB,6BAAqB,QAAQ;AAAA,MAC/B;AACA,2CAAW;AAAA,IACb;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,EAAA;AAGzB,SAAO,CAAC,OAAO,QAAQ;AACzB;AAEA,SAAS,oBAAoB,UAAoC;AAC/D,MAAI,QAAQ;AAEZ,QAAM,QAAQ,CAAC,UAA2B;AACxC,UAAM,SAAS,QAAQ,OAAO,CAAA,UAAS;AACrC,UAAI,SAAS,CAAC,MAAM,eAAe,KAAK,EAAG;AAE3C,UAAI,MAAM,SAAS,aAAa;AAC9B,cAAM,QAAQ,MAAM;AACpB,YAAI,MAAM,MAAM;AACd,kBAAQ;AACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,aAAa,MAAM;AACzB,UAAI,yCAAY,UAAU;AACxB,cAAM,WAAW,QAAQ;AAAA,MAC3B;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ;AACd,SAAO;AACT;AAUA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB;AAAA,EACA,MAAM;AAAA,EACN,cAAc;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,yBAAyB;AAC3B,GAAyB;AACvB,QAAM,WAAW,YAAA;AACjB,QAAM,YAAY,MAAM,MAAA;AAExB,QAAM,CAAC,WAAW,YAAY,IAAI;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,CAAC,MAAM,OAAO,IAAI;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,gBAAgB,MAAM,YAAY,MAAM;AAC5C,QAAI,gBAAgB,OAAQ;AAC5B,QAAI,UAAU;AACZ,cAAQ,CAAC,IAAI;AAAA,IACf,OAAO;AACL,mBAAa,CAAC,SAAS;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,UAAU,MAAM,WAAW,SAAS,cAAc,WAAW,CAAC;AAGlE,sBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS,0BAA0B,gBAAgB;AAAA,EAAA,CACpD;AAGD,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,YAAY,CAAC,KAAM;AAExB,UAAM,eAAe,CAAC,MAAqB;AACzC,UAAI,EAAE,QAAQ,UAAU;AACtB,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF;AAEA,aAAS,iBAAiB,WAAW,YAAY;AACjD,WAAO,MAAM,SAAS,oBAAoB,WAAW,YAAY;AAAA,EACnE,GAAG,CAAC,UAAU,MAAM,OAAO,CAAC;AAG5B,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,SAAU;AAEf,QAAI,MAAM;AACR,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC,OAAO;AACL,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAEA,WAAO,MAAM;AACX,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,UAAU,IAAI,CAAC;AAEnB,QAAM,eAAoC;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,EAAA;AAGF,6BACG,eAAe,UAAf,EAAwB,OAAO,cAC7B,UACH;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB;AAAA,EACA,MAAM;AAAA,EACN,cAAc;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,cAAc;AAAA,EACd;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAAA,EACd,GAAG;AACL,GAAiB;AAEf,QAAM,kBAAkB,MAAM,WAAW,cAAc;AACvD,QAAM,WAAW,YAAA;AAEjB,QAAM,CAAC,mBAAmB,oBAAoB,IAAI;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,CAAC,cAAc,eAAe,IAAI;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAIF,QAAM,YAAY,kBAAkB,gBAAgB,YAAY;AAChE,QAAM,eAAe,kBAAkB,gBAAgB,eAAe;AACtE,QAAM,OAAO,kBAAkB,gBAAgB,OAAO;AACtD,QAAM,UAAU,kBAAkB,gBAAgB,UAAU;AAC5D,QAAM,mBAAmB,kBAAkB,gBAAgB,WAAW;AACtE,QAAM,gBAAgB,kBAAkB,gBAAgB,QAAQ;AAChE,QAAM,yBAAyB,kBAAkB,gBAAgB,iBAAiB;AAClF,QAAM,sBAAsB,kBAAkB,gBAAgB,cAAc;AAC5E,QAAM,WAAW,MAAM,QAAQ,MAAM,oBAAoB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAC9E,QAAM,uBAAuB,CAAC,YAAY,wBAAwB,UAAU,aAAa,CAAC;AAC1F,QAAM,uBAAuB,CAAC,YAAY,wBAAwB,eAAe;AACjF,QAAM,0BAA2B,wBAAwB,uBAAwB,QAAQ;AACzF,QAAM,YAAY,MAAM,MAAA;AACxB,QAAM,oBAAoB,kBAAkB,gBAAgB,YAAY;AACxE,QAAM,aAAa,MAAM,OAAoB,IAAI;AAEjD,eAAa,YAAY,YAAY,IAAI;AAEzC,QAAM,gBAAgB,MAAM,YAAY,MAAM;AAC5C,QAAI,wBAAwB,OAAQ;AACpC,QAAI,UAAU;AACZ,cAAQ,CAAC,IAAI;AAAA,IACf,OAAO;AACL,mBAAa,CAAC,SAAS;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,UAAU,MAAM,WAAW,SAAS,cAAc,mBAAmB,CAAC;AAG1E,QAAM,UAAU,MAAM;AACpB,QAAI,gBAAiB;AACrB,QAAI,CAAC,YAAY,CAAC,KAAM;AAExB,UAAM,eAAe,CAAC,MAAqB;AACzC,UAAI,EAAE,QAAQ,UAAU;AACtB,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF;AAEA,aAAS,iBAAiB,WAAW,YAAY;AACjD,WAAO,MAAM,SAAS,oBAAoB,WAAW,YAAY;AAAA,EACnE,GAAG,CAAC,iBAAiB,UAAU,MAAM,OAAO,CAAC;AAG7C,QAAM,UAAU,MAAM;AACpB,QAAI,gBAAiB;AACrB,QAAI,CAAC,SAAU;AAEf,QAAI,MAAM;AACR,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC,OAAO;AACL,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAEA,WAAO,MAAM;AACX,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,iBAAiB,UAAU,IAAI,CAAC;AAEpC,QAAM,eAAoC;AAAA,IACxC,GAAI,mBAAmB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,WAAW;AAAA,IAAA;AAAA,IAEb;AAAA,EAAA;AAGF,QAAM,sBAAsB,wBAAwB,UAAU;AAE9D,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,YAAY,OAAO;AAAA,IACnB,CAAC,YAAY,uBAAuB,OAAO;AAAA,IAC3C,CAAC,YAAY,uBAAuB,wBAAwB,OAAO;AAAA,IACnE,wBAAwB,OAAO;AAAA,IAC/B,qBAAqB,WAAW,OAAO;AAAA,IACvC;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,QAAM,QAA6B;AAAA,IACjC,mBAAmB;AAAA,IACnB,6BAA6B;AAAA,IAC7B,uCAAuC;AAAA,IACvC,GAAG;AAAA,EAAA;AAGL,QAAM,UACJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,IAAI;AAAA,MACH,GAAG;AAAA,MACJ,WAAW;AAAA,MACX;AAAA,MACA,MAAM,WAAW,WAAW;AAAA,MAC5B,cAAY,YAAY,OAAO,OAAO;AAAA,MACtC,eAAa,YAAY,CAAC,OAAO,OAAO;AAAA,MACxC,cAAY,WAAY,aAAa,uBAAwB;AAAA,MAC7D,cAAY,WAAY,OAAO,SAAS,WAAa,YAAY,cAAc;AAAA,MAC/E,iBAAe;AAAA,MACf,oBAAkB;AAAA,MAClB,sBAAoB,wBAAwB,SAAU,WAAW,UAAU,SAAU;AAAA,MAEpF;AAAA,IAAA;AAAA,EAAA;AAIL,6BACG,eAAe,UAAf,EAAwB,OAAO,cAC7B,UAAA,SACH;AAEJ;AAEA,SAAS,cAAc,EAAE,UAAU,kBAAkB,aAAiC;AACpF,QAAM,EAAE,WAAW,SAAA,IAAa,kBAAA;AAChC,QAAM,cAAc,aAAa,CAAC;AAClC,QAAM,UAAU,CAAC,OAAO,QAAQ,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAGnE,QAAM,UAAU,eAAe,mBAAmB,mBAAmB;AAErE,SAAO,oBAAC,OAAA,EAAI,WAAW,SAAU,UAAA,SAAQ;AAC3C;AAEA,SAAS,WAAW,EAAE,UAAU,cAAc,YAAY,mBAAmB,aAA8B;AACzG,QAAM,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAChE,6BACG,OAAA,EAAI,WAAW,SAAS,cAAY,WACnC,UAAA,oBAAC,YAAA,EAAW,aAAY,YAAW,WAAS,MAAC,WAAW,OAAO,eAC5D,UACH,GACF;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa,oBAAoB;AAAA,EACjC,cAAc;AAAA,EACd;AACF,GAAwB;AACtB,QAAM,EAAE,WAAW,SAAA,IAAa,kBAAA;AAEhC,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,QAAM,YAAY,UAAU,CAAC,aAAa;AAC1C,QAAM,aAAa,WAAW,CAAC,aAAa;AAC5C,QAAM,gBAAgB,qBAAqB;AAG3C,MAAI,CAAC,eAAe;AAClB,gCACG,OAAA,EAAI,WAAW,SAAS,MAAK,SAAQ,cAAY,OAC9C,UAAA;AAAA,OAAA,aAAa,eACb,qBAAC,OAAA,EAAI,WAAW,OAAO,eACpB,UAAA;AAAA,QAAA,aAAa,oBAAC,OAAA,EAAI,WAAW,OAAO,cAAe,UAAA,OAAM;AAAA,QACzD,cAAc,oBAAC,OAAA,EAAI,WAAW,OAAO,sBAAuB,UAAA,OAAA,CAAO;AAAA,MAAA,GACtE;AAAA,MAEF,oBAAC,MAAA,EAAG,WAAW,OAAO,aACnB,SAAA,CACH;AAAA,IAAA,GACF;AAAA,EAEJ;AAGA,SACE,oBAAC,OAAA,EAAI,WAAW,SAAS,MAAK,SAAQ,cAAY,OAChD,UAAA,qBAAC,aAAA,EAAY,aAA0B,WAAW,OAAO,oBACvD,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAW,OAAO,eACrB,UAAA;AAAA,MAAA;AAAA,QAAC,YAAY;AAAA,QAAZ;AAAA,UACC,WAAW,OAAO;AAAA,UAClB,iBAAgB;AAAA,UAEhB,UAAA,oBAAC,QAAA,EAAK,WAAW,OAAO,cAAe,UAAA,MAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,MAE9C,cAAc,oBAAC,OAAA,EAAI,WAAW,OAAO,sBAAuB,UAAA,OAAA,CAAO;AAAA,IAAA,GACtE;AAAA,IACA,oBAAC,YAAY,SAAZ,EAAoB,WAAW,OAAO,gBACrC,UAAA,oBAAC,MAAA,EAAG,WAAW,OAAO,aACnB,UACH,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;AAEA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AACF,GAA8B;AAC5B,QAAM,UAAU,CAAC,OAAO,eAAe,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1E,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW;AAAA,MACX;AAAA,MACA,cAAY;AAAA,MAEX;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAAqB;AACnB,QAAM,EAAE,WAAW,SAAA,IAAa,kBAAA;AAChC,QAAM,CAAC,UAAU,WAAW,IAAI;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,cAAc,aAAa,CAAC;AAClC,QAAM,YAAY,CAAC;AAEnB,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,UAAU,OAAO;AAAA,IACjB,YAAY,OAAO;AAAA,IACnB,cAAc,OAAO;AAAA,IACrB,YAAY,OAAO;AAAA,IACnB;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,QAAM,cAAc,CAAC,MAAwB;AAC3C,QAAI,UAAU;AACZ,QAAE,eAAA;AACF;AAAA,IACF;AACA,QAAI,YAAY;AACd,QAAE,eAAA;AACF,kBAAY,CAAC,QAAQ;AAAA,IACvB;AACA;AAAA,EACF;AAIA,MAAI;AACJ,MAAI,WAAW,MAAM,eAAe,QAAQ,GAAG;AAC7C,UAAM,aAAa,SAAS;AAC5B,gBAAY,OAAO,WAAW,aAAa,WAAW,WAAW,WAAW;AAAA,EAC9E,OAAO;AACL,gBAAY,OAAO,aAAa,WAAW,WAAW;AAAA,EACxD;AAEA,QAAM,cACJ,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,QAAQ,oBAAC,QAAA,EAAK,WAAW,OAAO,UAAW,UAAA,MAAK;AAAA,IAChD,aAAa,oBAAC,QAAA,EAAK,WAAW,OAAO,WAAY,UAAA,WAAW,MAAM,eAAe,QAAQ,IAAK,SAAS,MAAyC,WAAW,UAAS;AAAA,IACpK,aAAa,SAAS,oBAAC,UAAK,WAAW,OAAO,WAAY,UAAA,OAAM;AAAA,IAChE,aAAa,cACZ,oBAAC,QAAA,EAAK,WAAW,OAAO,aACtB,UAAA,oBAAC,kBAAA,CAAA,CAAiB,EAAA,CACpB;AAAA,EAAA,GAEJ;AAGF,QAAM,YAAY;AAAA,IAChB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,gBAAgB,SAAS,SAAkB;AAAA,IAC3C,iBAAiB,YAAY;AAAA,IAC7B,iBAAiB,aAAa,WAAW;AAAA,IACzC,cAAc,cAAc,YAAY;AAAA,IACxC,UAAU,WAAW,KAAK;AAAA,EAAA;AAG5B,MAAI;AAEJ,MAAI,WAAW,MAAM,eAAe,QAAQ,GAAG;AAE7C,kBAAc,MAAM,aAAa,UAAU;AAAA,MACzC,GAAG;AAAA;AAAA,MAEH,WAAW,CAAC,SAAU,SAAS,MAAiC,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MACnG,UAAU;AAAA,IAAA,CAC0B;AAAA,EACxC,WAAW,MAAM;AACf,kBACE,oBAAC,KAAA,EAAG,GAAG,WAAW,MACf,UAAA,aACH;AAAA,EAEJ,OAAO;AACL,sCACG,UAAA,EAAQ,GAAG,WAAW,MAAK,UACzB,UAAA,aACH;AAAA,EAEJ;AAGA,QAAM,cAAc,cAClB,oBAAC,SAAA,EAAQ,SAAS,aAAa,UAAU,MAAK,SAAQ,OAAO,KAC1D,UAAA,YAAA,CACH,IAEA;AAGF,QAAM,iBAAiB;AAAA,IACrB,OAAO;AAAA,IACP,YAAY,OAAO;AAAA,EAAA,EACnB,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SAAO,oBAAC,MAAA,EAAG,WAAW,gBAAiB,UAAA,aAAY;AACrD;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,EAAE,WAAW,SAAA,IAAa,kBAAA;AAGhC,MAAI,aAAa,CAAC,UAAU;AAC1B,WAAO;AAAA,EACT;AAEA,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,UAAU,OAAO;AAAA,IACjB,YAAY,OAAO;AAAA,IACnB;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,QAAM,cAAc,CAAC,MAAwB;AAC3C,QAAI,UAAU;AACZ,QAAE,eAAA;AACF;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,YAAY;AAAA,IAChB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,gBAAgB,SAAS,SAAkB;AAAA,IAC3C,iBAAiB;AAAA,IACjB,UAAU,WAAW,KAAK;AAAA,EAAA;AAG5B,QAAM,cAAc,OAClB,oBAAC,KAAA,EAAG,GAAG,WAAW,MACf,SAAA,CACH,wBAEC,UAAA,EAAQ,GAAG,WAAW,MAAK,UACzB,UACH;AAGF,SAAO,oBAAC,MAAA,EAAG,WAAW,OAAO,gBAAiB,UAAA,aAAY;AAC5D;AAEA,SAAS,eAAe,EAAE,YAA2C;AACnE,SACE,oBAAC,MAAA,EAAG,WAAW,OAAO,gBACpB,UAAA,oBAAC,MAAA,EAAG,WAAW,OAAO,SACnB,SAAA,CACH,GACF;AAEJ;AAEA,SAAS,cAAc,EAAE,UAAU,aAAiC;AAClE,QAAM,UAAU,CAAC,OAAO,QAAQ,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACnE,SAAO,oBAAC,OAAA,EAAI,WAAW,SAAU,SAAA,CAAS;AAC5C;AAEA,SAAS,eAAe,EAAE,UAAU,cAAc,YAAY,qBAAqB,aAAkC;AACnH,QAAM,EAAE,MAAM,SAAS,UAAU,UAAA,IAAc,kBAAA;AAG/C,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,CAAC,OAAO,SAAS,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEpE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW;AAAA,MACX,SAAS,MAAM,QAAQ,CAAC,IAAI;AAAA,MAC5B,cAAY;AAAA,MACZ,iBAAe;AAAA,MACf,iBAAe;AAAA,MAEd,uBAAa,OAAO,oBAAC,WAAA,CAAA,CAAU,wBAAM,UAAA,EAAS;AAAA,IAAA;AAAA,EAAA;AAGrD;AAEA,SAAS,eAAe,EAAE,aAAkC;AAC1D,QAAM,EAAE,MAAM,SAAS,SAAA,IAAa,kBAAA;AAGpC,MAAI,CAAC,YAAY,CAAC,MAAM;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,CAAC,OAAO,SAAS,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEpE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,SAAS,MAAM,QAAQ,KAAK;AAAA,MAC5B,eAAY;AAAA,MACZ,cAAY,OAAO,SAAS;AAAA,IAAA;AAAA,EAAA;AAGlC;AAEA,SAAS,sBAAsB,EAAE,cAAc,WAAW,aAAyC;AACjG,QAAM,EAAE,WAAW,cAAc,UAAU,aAAa,SAAA,IAAa,kBAAA;AAGrE,MAAI,YAAY,gBAAgB,QAAQ;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,cACjB,gBAAgB,UAAU,CAAC,YAC5B,gBAAgB;AAElB,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,eAAe,OAAO;AAAA,IACtB;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAC1B,QAAM,QAAQ,cAAc,YAAY,mBAAmB;AAE3D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW;AAAA,MACX,SAAS,MAAM,aAAa,CAAC,SAAS;AAAA,MACtC,cAAY;AAAA,MAEZ,8BAAC,mBAAA,CAAA,CAAkB;AAAA,IAAA;AAAA,EAAA;AAGzB;AAEA,SAAS,YAAY,EAAE,aAA+B;AACpD,QAAM,EAAE,WAAW,cAAc,UAAU,YAAA,IAAgB,kBAAA;AAG3D,MAAI,YAAY,gBAAgB,QAAQ;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,aAAa,OAAO;AAAA,IACpB;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW;AAAA,MACX,SAAS,MAAM,aAAa,CAAC,SAAS;AAAA,MACtC,cAAY,YAAY,mBAAmB;AAAA,MAC3C,OAAO,YAAY,mBAAmB;AAAA,IAAA;AAAA,EAAA;AAG5C;AAEA,SAAS,oBAAoB;AAAA,EAC3B,QAAQ;AAAA,EACR,WAAW;AAAA,EACX;AACF,GAA6B;AAC3B,QAAM,EAAE,WAAW,SAAA,IAAa,kBAAA;AAChC,QAAM,cAAc,aAAa,CAAC;AAElC,QAAM,UAAU,CAAC,OAAO,cAAc,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACzE,QAAM,cAAc,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAE3E,SACE,oBAAC,SAAI,WAAW,SAAS,eAAY,QAClC,UAAA,MAAM,KAAK,EAAE,QAAQ,OAAO,EAAE,IAAI,CAAC,GAAG,MACrC,qBAAC,OAAA,EAAY,WAAW,OAAO,cAC5B,UAAA;AAAA,IAAA,YAAY,oBAAC,UAAA,EAAS,SAAQ,UAAS,MAAK,MAAK;AAAA,IACjD,CAAC,eACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAW,OAAO;AAAA,QAClB,OAAO,YAAY,IAAI,YAAY,MAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAC3C,KAPM,CASV,CACD,GACH;AAEJ;AAMO,MAAM,UAAU,OAAO,OAAO,aAAa;AAAA,EAChD,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,eAAe;AAAA,EACf,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,cAAc;AAChB,CAAC;"}
package/dist/index.cjs CHANGED
@@ -67,7 +67,9 @@ const index$T = require("./components/NavigationMenu/index.cjs");
67
67
  const index$U = require("./components/Drawer/index.cjs");
68
68
  const index$V = require("./components/Pagination/index.cjs");
69
69
  const index$W = require("./components/Command/index.cjs");
70
+ const index$X = require("./components/Editor/index.cjs");
70
71
  const a11y = require("./utils/a11y.cjs");
72
+ const keyboardShortcuts = require("./utils/keyboard-shortcuts.cjs");
71
73
  const index$4 = require("./components/Toggle/index.cjs");
72
74
  exports.Button = index.Button;
73
75
  exports.Input = index$1.Input;
@@ -223,6 +225,16 @@ exports.NavigationMenuViewport = index$T.NavigationMenuViewport;
223
225
  exports.Drawer = index$U.Drawer;
224
226
  exports.Pagination = index$V.Pagination;
225
227
  exports.Command = index$W.Command;
228
+ exports.Editor = index$X.Editor;
229
+ exports.EditorContentArea = index$X.EditorContentArea;
230
+ exports.EditorRoot = index$X.EditorRoot;
231
+ exports.EditorSeparator = index$X.EditorSeparator;
232
+ exports.EditorStatusBar = index$X.EditorStatusBar;
233
+ exports.EditorStatusIndicator = index$X.EditorStatusIndicator;
234
+ exports.EditorToolbar = index$X.EditorToolbar;
235
+ exports.EditorToolbarButton = index$X.EditorToolbarButton;
236
+ exports.EditorToolbarGroup = index$X.EditorToolbarGroup;
237
+ exports.useEditorContext = index$X.useEditorContext;
226
238
  exports.A11yVisuallyHidden = a11y.VisuallyHidden;
227
239
  exports.handleArrowNavigation = a11y.handleArrowNavigation;
228
240
  exports.useAnnounce = a11y.useAnnounce;
@@ -230,6 +242,16 @@ exports.useFocusTrap = a11y.useFocusTrap;
230
242
  exports.useId = a11y.useId;
231
243
  exports.usePrefersContrast = a11y.usePrefersContrast;
232
244
  exports.usePrefersReducedMotion = a11y.usePrefersReducedMotion;
245
+ exports.KEYBOARD_SHORTCUTS = keyboardShortcuts.KEYBOARD_SHORTCUTS;
246
+ exports.configureShortcuts = keyboardShortcuts.configureShortcuts;
247
+ exports.findConflicts = keyboardShortcuts.findConflicts;
248
+ exports.getResolvedShortcut = keyboardShortcuts.getResolvedShortcut;
249
+ exports.getShortcutLabel = keyboardShortcuts.getShortcutLabel;
250
+ exports.getShortcuts = keyboardShortcuts.getShortcuts;
251
+ exports.isEditableElement = keyboardShortcuts.isEditableElement;
252
+ exports.matchesShortcut = keyboardShortcuts.matchesShortcut;
253
+ exports.resetShortcutOverrides = keyboardShortcuts.resetShortcutOverrides;
254
+ exports.useKeyboardShortcut = keyboardShortcuts.useKeyboardShortcut;
233
255
  exports.Switch = index$4.Switch;
234
256
  exports.Toggle = index$4.Switch;
235
257
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -67,5 +67,7 @@ export { NavigationMenu, NavigationMenuRoot, NavigationMenuList, NavigationMenuI
67
67
  export { Drawer, type DrawerProps, type DrawerContentProps, type DrawerTriggerProps, type DrawerHeaderProps, type DrawerTitleProps, type DrawerDescriptionProps, type DrawerBodyProps, type DrawerFooterProps, type DrawerCloseProps, } from './components/Drawer';
68
68
  export { Pagination, type PaginationProps, type PaginationItemProps, } from './components/Pagination';
69
69
  export { Command, type CommandProps, type CommandInputProps, type CommandListProps, type CommandItemProps, type CommandGroupProps, type CommandEmptyProps, type CommandSeparatorProps, } from './components/Command';
70
+ export { Editor, EditorRoot, EditorToolbar, EditorToolbarGroup, EditorToolbarButton, EditorSeparator, EditorStatusIndicator, EditorContentArea, EditorStatusBar, useEditorContext, type EditorProps, type EditorFormat, type EditorSaveStatus, type EditorMode, type EditorSize, type EditorToolbarProps, type EditorToolbarGroupProps, type EditorToolbarButtonProps, type EditorSeparatorProps, type EditorStatusIndicatorProps, type EditorContentProps, type EditorStatusBarProps, } from './components/Editor';
70
71
  export { useId, useAnnounce, usePrefersReducedMotion, usePrefersContrast, useFocusTrap, handleArrowNavigation, VisuallyHidden as A11yVisuallyHidden, type VisuallyHiddenProps as A11yVisuallyHiddenProps, } from './utils/a11y';
72
+ export { KEYBOARD_SHORTCUTS, matchesShortcut, getShortcutLabel, findConflicts, getShortcuts, isEditableElement, configureShortcuts, getResolvedShortcut, resetShortcutOverrides, useKeyboardShortcut, type KeyboardShortcut, type ShortcutName, type UseKeyboardShortcutOptions, } from './utils/keyboard-shortcuts';
71
73
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -65,7 +65,9 @@ import { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, Navigat
65
65
  import { Drawer } from "./components/Drawer/index.js";
66
66
  import { Pagination } from "./components/Pagination/index.js";
67
67
  import { Command } from "./components/Command/index.js";
68
+ import { Editor, EditorContentArea, EditorRoot, EditorSeparator, EditorStatusBar, EditorStatusIndicator, EditorToolbar, EditorToolbarButton, EditorToolbarGroup, useEditorContext } from "./components/Editor/index.js";
68
69
  import { VisuallyHidden as VisuallyHidden2, handleArrowNavigation, useAnnounce, useFocusTrap, useId, usePrefersContrast, usePrefersReducedMotion } from "./utils/a11y.js";
70
+ import { KEYBOARD_SHORTCUTS, configureShortcuts, findConflicts, getResolvedShortcut, getShortcutLabel, getShortcuts, isEditableElement, matchesShortcut, resetShortcutOverrides, useKeyboardShortcut } from "./utils/keyboard-shortcuts.js";
69
71
  import { Switch, Switch as Switch2 } from "./components/Toggle/index.js";
70
72
  export {
71
73
  VisuallyHidden2 as A11yVisuallyHidden,
@@ -126,6 +128,15 @@ export {
126
128
  DateSeparator,
127
129
  Dialog,
128
130
  Drawer,
131
+ Editor,
132
+ EditorContentArea,
133
+ EditorRoot,
134
+ EditorSeparator,
135
+ EditorStatusBar,
136
+ EditorStatusIndicator,
137
+ EditorToolbar,
138
+ EditorToolbarButton,
139
+ EditorToolbarGroup,
129
140
  EmptyState,
130
141
  EmptyStateActions,
131
142
  EmptyStateDescription,
@@ -141,6 +152,7 @@ export {
141
152
  Icon,
142
153
  Image,
143
154
  Input,
155
+ KEYBOARD_SHORTCUTS,
144
156
  Link,
145
157
  List,
146
158
  ListItem,
@@ -212,16 +224,26 @@ export {
212
224
  TooltipProvider,
213
225
  TypingIndicator,
214
226
  VisuallyHidden,
227
+ configureShortcuts,
215
228
  configureTheme,
216
229
  createColumns,
230
+ findConflicts,
217
231
  fragmentsLogoSvg,
232
+ getResolvedShortcut,
233
+ getShortcutLabel,
234
+ getShortcuts,
218
235
  handleArrowNavigation,
236
+ isEditableElement,
237
+ matchesShortcut,
238
+ resetShortcutOverrides,
219
239
  useAnnounce,
220
240
  useChartConfig,
221
241
  useCollapsibleContext,
222
242
  useConversationList,
243
+ useEditorContext,
223
244
  useFocusTrap,
224
245
  useId,
246
+ useKeyboardShortcut,
225
247
  useMessageContext,
226
248
  usePrefersContrast,
227
249
  usePrefersReducedMotion,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}