@l3mpire/ui 3.3.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/USAGE.md +469 -10
- package/dist/index.d.mts +498 -28
- package/dist/index.d.ts +498 -28
- package/dist/index.js +5674 -3594
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6011 -3909
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
- package/src/styles/globals.css +241 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/browser-tab.tsx","../src/components/ui/badge.tsx","../src/components/ui/button.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/bulk-action.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/truncated-text.tsx","../src/components/ui/emoji-picker.tsx","../src/components/ui/link.tsx","../src/components/ui/input-label.tsx","../src/components/ui/info-message.tsx","../src/components/ui/toast.tsx","../src/components/ui/switch.tsx","../src/components/ui/switch-card.tsx","../src/components/ui/search-bar.tsx","../src/components/ui/sidebar.tsx","../src/components/ui/product-logo.tsx","../src/assets/logos/lemlist-sm-picto.svg","../src/assets/logos/lemlist-md-picto.svg","../src/assets/logos/lemlist-lg-picto.svg","../src/assets/logos/lemlist-xl-picto.svg","../src/assets/logos/lemlist-sm-logotype.svg","../src/assets/logos/lemlist-md-logotype.svg","../src/assets/logos/lemlist-lg-logotype.svg","../src/assets/logos/lemlist-sm-picto-dark.svg","../src/assets/logos/lemlist-md-picto-dark.svg","../src/assets/logos/lemlist-lg-picto-dark.svg","../src/assets/logos/lemlist-xl-picto-dark.svg","../src/assets/logos/lemlist-sm-logotype-dark.svg","../src/assets/logos/lemlist-md-logotype-dark.svg","../src/assets/logos/lemlist-lg-logotype-dark.svg","../src/assets/logos/lemwarm-sm-picto.svg","../src/assets/logos/lemwarm-md-picto.svg","../src/assets/logos/lemwarm-lg-picto.svg","../src/assets/logos/lemwarm-xl-picto.svg","../src/assets/logos/lemwarm-sm-logotype.svg","../src/assets/logos/lemwarm-md-logotype.svg","../src/assets/logos/lemwarm-lg-logotype.svg","../src/assets/logos/lemwarm-sm-picto-dark.svg","../src/assets/logos/lemwarm-md-picto-dark.svg","../src/assets/logos/lemwarm-lg-picto-dark.svg","../src/assets/logos/lemwarm-xl-picto-dark.svg","../src/assets/logos/lemwarm-sm-logotype-dark.svg","../src/assets/logos/lemwarm-md-logotype-dark.svg","../src/assets/logos/lemwarm-lg-logotype-dark.svg","../src/assets/logos/lemcal-sm-picto.svg","../src/assets/logos/lemcal-md-picto.svg","../src/assets/logos/lemcal-lg-picto.svg","../src/assets/logos/lemcal-xl-picto.svg","../src/assets/logos/lemcal-sm-logotype.svg","../src/assets/logos/lemcal-md-logotype.svg","../src/assets/logos/lemcal-lg-logotype.svg","../src/assets/logos/lemcal-sm-picto-dark.svg","../src/assets/logos/lemcal-md-picto-dark.svg","../src/assets/logos/lemcal-lg-picto-dark.svg","../src/assets/logos/lemcal-xl-picto-dark.svg","../src/assets/logos/lemcal-sm-logotype-dark.svg","../src/assets/logos/lemcal-md-logotype-dark.svg","../src/assets/logos/lemcal-lg-logotype-dark.svg","../src/components/ui/avatar.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/radio.tsx","../src/components/ui/radio-card.tsx","../src/components/ui/sidebar-heading-item.tsx","../src/components/ui/sidebar-item.tsx","../src/components/ui/select.tsx","../src/components/ui/tab.tsx","../src/components/ui/tag.tsx","../src/components/ui/textarea.tsx","../src/components/ui/text-input.tsx","../src/components/ui/chip-input.tsx","../src/components/ui/number-input.tsx","../src/components/ui/typography.tsx","../src/components/ui/user-menu.tsx","../src/components/ui/modal.tsx","../src/components/ui/dialog.tsx","../src/components/ui/empty-state.tsx","../src/components/ui/table-cells.tsx","../src/components/ui/data-table.tsx","../src/components/ui/table.tsx","../src/components/ui/data-table-settings-modal.tsx","../src/components/ui/side-panel.tsx","../src/components/ui/filter/filter-chip-segment.tsx","../src/components/ui/filter/filter-chip.tsx","../src/components/ui/filter/utils.ts","../src/components/ui/filter/filter-bar.tsx","../src/components/ui/filter/sort-button.tsx","../src/components/ui/filter/filter-bar-button.tsx","../src/components/ui/filter/save-view-button.tsx","../src/components/ui/filter/operator-selector.tsx","../src/components/ui/filter/value-inputs/shared.ts","../src/components/ui/filter/value-inputs/text-value-input.tsx","../src/components/ui/filter/value-inputs/number-value-input.tsx","../src/components/ui/filter/value-inputs/date-value-input.tsx","../src/components/ui/date-picker.tsx","../src/components/ui/filter/value-inputs/select-value-input.tsx","../src/components/ui/filter/value-inputs/relation-value-input.tsx","../src/components/ui/filter/value-input.tsx","../src/components/ui/filter/property-selector.tsx","../src/components/ui/filter/kebab-menu.tsx","../src/components/ui/filter/filter-editor.tsx","../src/components/ui/filter/interactive-filter-chip.tsx","../src/components/ui/filter/filter-system.tsx","../src/components/ui/filter/advanced-chip.tsx","../src/components/ui/filter/advanced-popover.tsx","../src/components/ui/filter/advanced-row.tsx","../src/components/ui/filter/filter-node-actions.tsx","../src/components/ui/filter/advanced-group.tsx","../src/components/ui/filter/summary-chip.tsx","../src/components/ui/filter/use-filter-bar-mode.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n \"font-size\": [\n { text: [\"xxs\", \"xs\", \"sm\", \"base\", \"md\", \"lg\", \"xl\"] },\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Icon, faXmarkOutline, faPenOutline, faGripDotsVerticalSolid, faPlusSolid, faChevronDownSolid, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge } from \"./badge\";\nimport { Button } from \"./button\";\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\n\n// ── Drag context ────────────────────────────────────────────────────────────\n\ninterface BrowserTabContextValue {\n draggable: boolean;\n dragIndex: number | null;\n dropIndex: number | null;\n onItemDragStart: (index: number) => void;\n onItemDragOver: (e: React.DragEvent, index: number) => void;\n onItemDragEnd: () => void;\n onItemDrop: (index: number) => void;\n itemIndex: number;\n}\n\nconst BrowserTabContext = React.createContext<BrowserTabContextValue | null>(null);\n\n// ── BrowserTabItem ───────────────────────────────────────────────────────────\n\ninterface BrowserTabItemProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: IconDefinition;\n label: string;\n badge?: string;\n isActive?: boolean;\n /** Pinned tabs can't be closed and show a \"Pinned tab\" tooltip on hover. */\n pinned?: boolean;\n /** When true, an edit (pencil) button appears in the hover overlay, left of the close button. */\n isEditable?: boolean;\n /** Called when the edit button is clicked. */\n onEdit?: (e: React.MouseEvent) => void;\n onClose?: (e: React.MouseEvent) => void;\n /** Called with the new label after double-click rename. Omit to disable rename. */\n onRename?: (newLabel: string) => void;\n}\n\nconst BrowserTabItem = React.forwardRef<HTMLDivElement, BrowserTabItemProps>(\n ({ className, icon, label, badge, isActive = false, pinned = false, isEditable = false, onEdit, onClose, onRename, ...props }, ref) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const [isEditing, setIsEditing] = React.useState(false);\n const [editValue, setEditValue] = React.useState(label);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const ctx = React.useContext(BrowserTabContext);\n\n React.useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n const commitRename = () => {\n setIsEditing(false);\n const trimmed = editValue.trim();\n if (trimmed && trimmed !== label && onRename) {\n onRename(trimmed);\n } else {\n setEditValue(label);\n }\n };\n\n const cancelRename = () => {\n setIsEditing(false);\n setEditValue(label);\n };\n\n // Drag props injected via context\n const dragProps = ctx?.draggable\n ? {\n draggable: true,\n onDragStart: () => ctx.onItemDragStart(ctx.itemIndex),\n onDragOver: (e: React.DragEvent) => ctx.onItemDragOver(e, ctx.itemIndex),\n onDrop: () => ctx.onItemDrop(ctx.itemIndex),\n onDragEnd: () => ctx.onItemDragEnd(),\n }\n : {};\n\n const isDragged = ctx?.draggable && ctx.dragIndex === ctx.itemIndex;\n const isDropTarget = ctx?.draggable && ctx.dropIndex === ctx.itemIndex && ctx.dragIndex !== ctx.itemIndex;\n\n const showGrip = ctx?.draggable && isHovered;\n\n const tab = (\n <div\n ref={ref}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n \"relative shrink-0 p-xs rounded-tl-base rounded-tr-base cursor-pointer select-none transition-opacity\",\n \"border-solid border-browser-tab-item-border\",\n isActive\n ? \"bg-browser-tab-item-bg border-l border-r border-t mb-[-1px] z-10\"\n : \"border-0\",\n isDragged && \"opacity-40\",\n isDropTarget && \"ring-2 ring-inset ring-blue-400\",\n className,\n )}\n {...dragProps}\n {...props}\n >\n {/* Inner pill — owns hover bg/radius/shadow (inactive tabs only) */}\n <div\n className={cn(\n \"relative flex items-center gap-base px-xs py-2xs transition-[background-color,border-radius,box-shadow]\",\n isHovered && !isActive\n ? \"bg-browser-tab-item-hover-bg rounded-sm shadow-sm\"\n : \"bg-browser-tab-item-bg rounded-base\",\n )}\n >\n {/* Leading icon — swaps to grip-dots on hover when draggable */}\n {icon && (\n <div className=\"shrink-0\">\n <Icon\n icon={showGrip ? faGripDotsVerticalSolid : icon}\n size=\"xs\"\n className={cn(\n showGrip\n ? \"text-browser-tab-item-hover-icon cursor-grab\"\n : isActive\n ? \"text-browser-tab-item-active-icon\"\n : \"text-browser-tab-item-inactive-icon\",\n )}\n />\n </div>\n )}\n\n {/* Label — inline editable on double-click when onRename is provided */}\n {isEditing ? (\n <input\n ref={inputRef}\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onBlur={commitRename}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commitRename();\n if (e.key === \"Escape\") cancelRename();\n }}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"text-sm font-medium leading-sm bg-transparent outline-none p-0 m-0\",\n \"border-b border-browser-tab-item-border border-dashed border-t-0 border-l-0 border-r-0\",\n isActive\n ? \"text-browser-tab-item-active-text\"\n : \"text-browser-tab-item-inactive-text\",\n )}\n style={{ width: `${Math.max(editValue.length + 1, 2)}ch` }}\n />\n ) : (\n <span\n className={cn(\n \"text-sm font-medium leading-sm whitespace-nowrap\",\n isActive\n ? \"text-browser-tab-item-active-text\"\n : \"text-browser-tab-item-inactive-text\",\n )}\n onDoubleClick={(e) => {\n if (onRename) {\n e.stopPropagation();\n setEditValue(label);\n setIsEditing(true);\n }\n }}\n >\n {label}\n </span>\n )}\n\n {/* Badge */}\n {badge && (\n <Badge variant=\"light\" type=\"neutral\" size=\"sm\">\n {badge}\n </Badge>\n )}\n\n {/* Action overlay — hover-only, non-pinned tabs. Holds an optional\n edit button (left) and the close button (right), both absolutely\n positioned with a gradient fade so they never take layout space —\n the label slides under the gradient instead of being pushed. */}\n {!pinned && (isEditable || onClose) && (\n <div\n aria-hidden={!isHovered}\n className={cn(\n \"absolute right-0 top-0 bottom-0 flex items-center justify-end gap-2xs pl-2xl pr-2xs\",\n \"transition-opacity duration-150 bg-gradient-to-l from-[72%] to-transparent\",\n isActive\n ? \"from-browser-tab-item-bg rounded-r-base\"\n : \"from-browser-tab-item-hover-bg rounded-r-sm\",\n isHovered ? \"opacity-100\" : \"opacity-0 pointer-events-none\",\n )}\n >\n {isEditable && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onEdit?.(e);\n }}\n tabIndex={isHovered ? 0 : -1}\n className={cn(\n \"shrink-0 flex items-center justify-center cursor-pointer rounded-2xs p-2xs\",\n \"hover:bg-black/5 transition-colors\",\n isActive\n ? \"text-browser-tab-item-active-icon\"\n : \"text-browser-tab-item-inactive-icon\",\n )}\n aria-label={`Edit ${label}`}\n >\n <Icon icon={faPenOutline} size=\"xs\" />\n </button>\n )}\n {onClose && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClose(e);\n }}\n tabIndex={isHovered ? 0 : -1}\n className={cn(\n \"shrink-0 flex items-center justify-center cursor-pointer rounded-2xs p-2xs\",\n \"hover:bg-black/5 transition-colors\",\n isActive\n ? \"text-browser-tab-item-active-icon\"\n : \"text-browser-tab-item-inactive-icon\",\n )}\n aria-label={`Close ${label}`}\n >\n <Icon icon={faXmarkOutline} size=\"xs\" />\n </button>\n )}\n </div>\n )}\n </div>\n\n {/* Active-tab bottom frame:\n - Vertical masks hide the bottom 8px of border-l/-r (which otherwise extend past where the arc begins).\n Positioned at -1px because abs children anchor to the padding box (inside the border).\n - Concave corners draw the outward arc and mask the bar's border-b in their 8px width. */}\n {isActive && (\n <>\n <span aria-hidden className=\"pointer-events-none absolute bottom-0 left-[-1px] w-px h-[8px] bg-browser-tab-item-bg\" />\n <span aria-hidden className=\"pointer-events-none absolute bottom-0 right-[-1px] w-px h-[8px] bg-browser-tab-item-bg\" />\n <span aria-hidden className=\"pointer-events-none absolute bottom-0 left-[-8px] size-[8px]\">\n <span className=\"absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg\" />\n <span className=\"absolute inset-0 rounded-br-[8px] border-b border-r border-solid border-browser-tab-item-border\" />\n </span>\n <span aria-hidden className=\"pointer-events-none absolute bottom-0 right-[-8px] size-[8px]\">\n <span className=\"absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg\" />\n <span className=\"absolute inset-0 rounded-bl-[8px] border-b border-l border-solid border-browser-tab-item-border\" />\n </span>\n </>\n )}\n </div>\n );\n\n // Pinned tabs surface a \"Pinned tab\" tooltip on hover (and never show a\n // close button — handled above). Only mount the tooltip machinery when\n // actually pinned.\n if (pinned) {\n return (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>{tab}</TooltipTrigger>\n <TooltipContent side=\"bottom\" hasArrow={false}>\n Pinned tab\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return tab;\n },\n);\nBrowserTabItem.displayName = \"BrowserTabItem\";\n\n// ── Overflow detection hook ──────────────────────────────────────────────────\n\nfunction useOverflowDetection(\n containerRef: React.RefObject<HTMLDivElement | null>,\n childCount: number,\n) {\n const [visibleCount, setVisibleCount] = React.useState(childCount);\n\n React.useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const measure = () => {\n const children = Array.from(container.children) as HTMLElement[];\n if (children.length === 0) {\n setVisibleCount(childCount);\n return;\n }\n\n const containerRight = container.getBoundingClientRect().right;\n let count = 0;\n for (const child of children) {\n const childRight = child.getBoundingClientRect().right;\n if (childRight <= containerRight + 1) {\n count++;\n } else {\n break;\n }\n }\n setVisibleCount(Math.max(1, count));\n };\n\n const observer = new ResizeObserver(measure);\n observer.observe(container);\n measure();\n\n return () => observer.disconnect();\n }, [containerRef, childCount]);\n\n return visibleCount;\n}\n\n// ── BrowserTab (container) ───────────────────────────────────────────────────\n\ninterface BrowserTabProps extends React.HTMLAttributes<HTMLDivElement> {\n onAddTab?: () => void;\n /** Enable drag-to-reorder on tab items. */\n draggable?: boolean;\n /** Called when a tab is dragged to a new position. */\n onReorder?: (fromIndex: number, toIndex: number) => void;\n /** Called when a hidden tab is selected from the overflow menu. Swaps it with the last visible tab. */\n onOverflowSelect?: (hiddenIndex: number, lastVisibleIndex: number) => void;\n}\n\nconst BrowserTab = React.forwardRef<HTMLDivElement, BrowserTabProps>(\n ({ className, children, onAddTab, draggable = false, onReorder, onOverflowSelect, ...props }, ref) => {\n const [dragIndex, setDragIndex] = React.useState<number | null>(null);\n const [dropIndex, setDropIndex] = React.useState<number | null>(null);\n const tabsContainerRef = React.useRef<HTMLDivElement>(null);\n\n const childArray = React.Children.toArray(children).filter(React.isValidElement);\n const visibleCount = useOverflowDetection(tabsContainerRef, childArray.length);\n const hasOverflow = visibleCount < childArray.length;\n\n const ctxBase = {\n draggable,\n dragIndex,\n dropIndex,\n onItemDragStart: (index: number) => setDragIndex(index),\n onItemDragOver: (e: React.DragEvent, index: number) => {\n e.preventDefault();\n setDropIndex(index);\n },\n onItemDragEnd: () => {\n setDragIndex(null);\n setDropIndex(null);\n },\n onItemDrop: (toIdx: number) => {\n if (dragIndex !== null && dragIndex !== toIdx && onReorder) {\n onReorder(dragIndex, toIdx);\n }\n setDragIndex(null);\n setDropIndex(null);\n },\n };\n\n // Extract label/icon/badge from hidden children for the overflow menu\n const hiddenItems = childArray.slice(visibleCount).map((child, i) => {\n const childProps = (child as React.ReactElement<BrowserTabItemProps>).props;\n return {\n index: visibleCount + i,\n label: childProps.label,\n icon: childProps.icon,\n badge: childProps.badge,\n isActive: childProps.isActive,\n };\n });\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-end w-full h-[44px] border-b border-browser-tab-border pl-base pr-xl\",\n className,\n )}\n {...props}\n >\n {/* Tabs area — clip horizontally, allow vertical overflow for active tab overlap.\n pl-base reserves space for the first active tab's left concave corner (which sits at -8px). */}\n <div\n ref={tabsContainerRef}\n className=\"flex items-center flex-1 min-w-0 pl-base\"\n style={{ overflowX: \"clip\", overflowY: \"visible\" }}\n >\n {childArray.map((child, index) => (\n <BrowserTabContext.Provider key={index} value={{ ...ctxBase, itemIndex: index }}>\n {child}\n </BrowserTabContext.Provider>\n ))}\n {/* Add tab button (inline next to last tab when no overflow) */}\n {onAddTab && !hasOverflow && (\n <Button\n className=\"ml-base\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n iconOnly\n leftIcon={faPlusSolid}\n onClick={onAddTab}\n aria-label=\"Add tab\"\n />\n )}\n </div>\n\n {/* Overflow dropdown */}\n {hasOverflow && (\n <DropdownMenuPrimitive.Root>\n <DropdownMenuPrimitive.Trigger asChild>\n <Button\n className=\"mb-sm\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n iconOnly\n leftIcon={faChevronDownSolid}\n aria-label=\"Show more tabs\"\n />\n </DropdownMenuPrimitive.Trigger>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n sideOffset={4}\n align=\"end\"\n className={cn(\n \"z-50 flex flex-col gap-base overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg p-base shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n )}\n >\n {hiddenItems.map((item) => (\n <DropdownMenuPrimitive.Item\n key={item.index}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer hover:bg-dropdown-item-hover outline-none\",\n item.isActive && \"bg-dropdown-item-hover\",\n )}\n onSelect={() => {\n if (onOverflowSelect) {\n onOverflowSelect(item.index, visibleCount - 1);\n }\n }}\n >\n {item.icon && (\n <Icon\n icon={item.icon}\n size=\"xs\"\n className={cn(\n item.isActive\n ? \"text-browser-tab-item-active-icon\"\n : \"text-browser-tab-item-inactive-icon\",\n )}\n />\n )}\n <span\n className={cn(\n \"text-sm font-medium leading-sm whitespace-nowrap\",\n item.isActive\n ? \"text-browser-tab-item-active-text\"\n : \"text-browser-tab-item-inactive-text\",\n )}\n >\n {item.label}\n </span>\n {item.badge && (\n <Badge variant=\"light\" type=\"neutral\" size=\"sm\">\n {item.badge}\n </Badge>\n )}\n </DropdownMenuPrimitive.Item>\n ))}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </DropdownMenuPrimitive.Root>\n )}\n\n {/* Add tab button (after overflow chevron when overflowing).\n mb-sm lifts the button off the divider line so it centers with the tabs\n (bar is items-end). */}\n {onAddTab && hasOverflow && (\n <Button\n className=\"mb-sm\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n iconOnly\n leftIcon={faPlusSolid}\n onClick={onAddTab}\n aria-label=\"Add tab\"\n />\n )}\n </div>\n );\n },\n);\nBrowserTab.displayName = \"BrowserTab\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n BrowserTab,\n BrowserTabItem,\n type BrowserTabProps,\n type BrowserTabItemProps,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst badgeVariants = cva(\n [\n \"inline-flex items-center justify-center whitespace-nowrap\",\n \"font-medium\",\n \"border border-transparent\",\n ],\n {\n variants: {\n variant: {\n solid: \"\",\n light: \"\",\n outlined: \"bg-transparent\",\n },\n type: {\n primary: \"\",\n success: \"\",\n critical: \"\",\n warning: \"\",\n neutral: \"\",\n },\n // Categorical palette. Colors come from {variant, tone} compound variants below,\n // so a tone combines with solid / light / outlined just like `type` does.\n tone: {\n indigo: \"\",\n rose: \"\",\n lime: \"\",\n violet: \"\",\n cyan: \"\",\n orange: \"\",\n emerald: \"\",\n fuchsia: \"\",\n amber: \"\",\n slate: \"\",\n },\n size: {\n sm: [\n \"p-2xs gap-2xs\",\n \"rounded-xs\",\n \"text-xxs leading-2xs\",\n ],\n md: [\n \"p-xs gap-xs\",\n \"rounded-sm\",\n \"text-xs leading-2xs\",\n ],\n lg: [\n \"p-xs gap-xs\",\n \"rounded-base\",\n \"text-sm leading-sm\",\n ],\n },\n },\n compoundVariants: [\n // ── Solid ───────────────────────────────────────────────────────────\n { variant: \"solid\", type: \"primary\", class: \"bg-badge-solid-primary-bg text-badge-solid-primary-text\" },\n { variant: \"solid\", type: \"success\", class: \"bg-badge-solid-success-bg text-badge-solid-success-text\" },\n { variant: \"solid\", type: \"critical\", class: \"bg-badge-solid-critical-bg text-badge-solid-critical-text\" },\n { variant: \"solid\", type: \"warning\", class: \"bg-badge-solid-warning-bg text-badge-solid-warning-text\" },\n { variant: \"solid\", type: \"neutral\", class: \"bg-badge-solid-neutral-bg text-badge-solid-neutral-text\" },\n // ── Light ───────────────────────────────────────────────────────────\n { variant: \"light\", type: \"primary\", class: \"bg-badge-light-primary-bg text-badge-light-primary-text\" },\n { variant: \"light\", type: \"success\", class: \"bg-badge-light-success-bg text-badge-light-success-text\" },\n { variant: \"light\", type: \"critical\", class: \"bg-badge-light-critical-bg text-badge-light-critical-text\" },\n { variant: \"light\", type: \"warning\", class: \"bg-badge-light-warning-bg text-badge-light-warning-text\" },\n { variant: \"light\", type: \"neutral\", class: \"bg-badge-light-neutral-bg text-badge-light-neutral-text\" },\n // ── Outlined ────────────────────────────────────────────────────────\n { variant: \"outlined\", type: \"primary\", class: \"border-badge-outlined-primary-border text-badge-outlined-primary-text\" },\n { variant: \"outlined\", type: \"success\", class: \"border-badge-outlined-success-border text-badge-outlined-success-text\" },\n { variant: \"outlined\", type: \"critical\", class: \"border-badge-outlined-critical-border text-badge-outlined-critical-text\" },\n { variant: \"outlined\", type: \"warning\", class: \"border-badge-outlined-warning-border text-badge-outlined-warning-text\" },\n { variant: \"outlined\", type: \"neutral\", class: \"border-badge-outlined-neutral-border text-badge-outlined-neutral-text\" },\n // ── Categorical tones × variant ──────────────────────────────────────\n { variant: \"solid\", tone: \"indigo\", class: \"bg-badge-solid-indigo-bg text-badge-solid-indigo-text\" },\n { variant: \"solid\", tone: \"rose\", class: \"bg-badge-solid-rose-bg text-badge-solid-rose-text\" },\n { variant: \"solid\", tone: \"lime\", class: \"bg-badge-solid-lime-bg text-badge-solid-lime-text\" },\n { variant: \"solid\", tone: \"violet\", class: \"bg-badge-solid-violet-bg text-badge-solid-violet-text\" },\n { variant: \"solid\", tone: \"cyan\", class: \"bg-badge-solid-cyan-bg text-badge-solid-cyan-text\" },\n { variant: \"solid\", tone: \"orange\", class: \"bg-badge-solid-orange-bg text-badge-solid-orange-text\" },\n { variant: \"solid\", tone: \"emerald\", class: \"bg-badge-solid-emerald-bg text-badge-solid-emerald-text\" },\n { variant: \"solid\", tone: \"fuchsia\", class: \"bg-badge-solid-fuchsia-bg text-badge-solid-fuchsia-text\" },\n { variant: \"solid\", tone: \"amber\", class: \"bg-badge-solid-amber-bg text-badge-solid-amber-text\" },\n { variant: \"solid\", tone: \"slate\", class: \"bg-badge-solid-slate-bg text-badge-solid-slate-text\" },\n { variant: \"light\", tone: \"indigo\", class: \"bg-badge-light-indigo-bg text-badge-light-indigo-text\" },\n { variant: \"light\", tone: \"rose\", class: \"bg-badge-light-rose-bg text-badge-light-rose-text\" },\n { variant: \"light\", tone: \"lime\", class: \"bg-badge-light-lime-bg text-badge-light-lime-text\" },\n { variant: \"light\", tone: \"violet\", class: \"bg-badge-light-violet-bg text-badge-light-violet-text\" },\n { variant: \"light\", tone: \"cyan\", class: \"bg-badge-light-cyan-bg text-badge-light-cyan-text\" },\n { variant: \"light\", tone: \"orange\", class: \"bg-badge-light-orange-bg text-badge-light-orange-text\" },\n { variant: \"light\", tone: \"emerald\", class: \"bg-badge-light-emerald-bg text-badge-light-emerald-text\" },\n { variant: \"light\", tone: \"fuchsia\", class: \"bg-badge-light-fuchsia-bg text-badge-light-fuchsia-text\" },\n { variant: \"light\", tone: \"amber\", class: \"bg-badge-light-amber-bg text-badge-light-amber-text\" },\n { variant: \"light\", tone: \"slate\", class: \"bg-badge-light-slate-bg text-badge-light-slate-text\" },\n { variant: \"outlined\", tone: \"indigo\", class: \"border-badge-outlined-indigo-border text-badge-outlined-indigo-text\" },\n { variant: \"outlined\", tone: \"rose\", class: \"border-badge-outlined-rose-border text-badge-outlined-rose-text\" },\n { variant: \"outlined\", tone: \"lime\", class: \"border-badge-outlined-lime-border text-badge-outlined-lime-text\" },\n { variant: \"outlined\", tone: \"violet\", class: \"border-badge-outlined-violet-border text-badge-outlined-violet-text\" },\n { variant: \"outlined\", tone: \"cyan\", class: \"border-badge-outlined-cyan-border text-badge-outlined-cyan-text\" },\n { variant: \"outlined\", tone: \"orange\", class: \"border-badge-outlined-orange-border text-badge-outlined-orange-text\" },\n { variant: \"outlined\", tone: \"emerald\", class: \"border-badge-outlined-emerald-border text-badge-outlined-emerald-text\" },\n { variant: \"outlined\", tone: \"fuchsia\", class: \"border-badge-outlined-fuchsia-border text-badge-outlined-fuchsia-text\" },\n { variant: \"outlined\", tone: \"amber\", class: \"border-badge-outlined-amber-border text-badge-outlined-amber-text\" },\n { variant: \"outlined\", tone: \"slate\", class: \"border-badge-outlined-slate-border text-badge-outlined-slate-text\" },\n ],\n // variant/type defaults are applied in the component so `tone` can suppress `type`.\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface BadgeProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"type\">,\n VariantProps<typeof badgeVariants> {\n icon?: IconDefinition;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, type, tone, size, icon, children, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n badgeVariants({\n variant: variant ?? \"solid\",\n // `tone` and `type` share the color axis — when a tone is set it wins.\n type: tone != null ? undefined : type ?? \"primary\",\n tone,\n size,\n }),\n className,\n )}\n {...props}\n >\n {icon && <Icon icon={icon} size=\"xs\" />}\n {children}\n </span>\n );\n },\n);\n\nBadge.displayName = \"Badge\";\n\nexport { Badge, badgeVariants, type BadgeProps };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faSpinnerSolid, type IconDefinition, type IconSize } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst buttonVariants = cva(\n [\n \"inline-flex items-center justify-center whitespace-nowrap\",\n \"font-medium transition-colors\",\n \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"disabled:pointer-events-none\",\n \"border\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n ],\n {\n variants: {\n appearance: {\n solid: [\n \"disabled:bg-none disabled:bg-btn-disabled-solid-bg\",\n \"disabled:text-btn-disabled-solid-text\",\n \"disabled:border-btn-disabled-solid-border\",\n \"disabled:shadow-none\",\n ],\n outlined: [\n \"disabled:bg-none disabled:bg-btn-disabled-outlined-bg\",\n \"disabled:text-btn-disabled-outlined-text\",\n \"disabled:border-btn-disabled-outlined-border\",\n \"disabled:shadow-none\",\n ],\n ghost: [\n \"disabled:bg-btn-disabled-ghost-bg\",\n \"disabled:text-btn-disabled-ghost-text\",\n \"disabled:border-btn-disabled-ghost-border\",\n ],\n },\n intent: {\n brand: [],\n alert: [],\n },\n size: {\n sm: [\n \"h-6 px-sm py-xs gap-none\",\n \"text-xs\",\n \"min-w-16 rounded-base\",\n ],\n md: [\n \"h-8 px-base py-sm gap-2xs\",\n \"text-sm\",\n \"min-w-20 rounded-md\",\n ],\n lg: [\n \"h-10 px-lg py-md gap-2xs\",\n \"text-sm\",\n \"min-w-20 rounded-lg\",\n ],\n },\n iconOnly: {\n true: \"\",\n false: \"\",\n },\n fullWidth: {\n true: \"w-full\",\n },\n },\n compoundVariants: [\n // ── Solid + Brand ──────────────────────────────────────────────────\n {\n appearance: \"solid\",\n intent: \"brand\",\n class: [\n \"bg-gradient-to-t from-btn-solid-brand-bg-default from-[10%] to-btn-solid-brand-bg-gradient-to-default\",\n \"text-btn-solid-brand-text-default\",\n \"border-btn-solid-brand-border-default\",\n \"shadow-[inset_0_0_0_1px_var(--comp-btn-solid-brand-inner-border-default),0_1px_3px_0_var(--shadow-4)]\",\n \"hover:from-btn-solid-brand-bg-hover hover:from-[0%] hover:to-btn-solid-brand-bg-gradient-to-hover\",\n \"hover:border-btn-solid-brand-border-hover\",\n \"hover:shadow-[inset_0_0_0_1px_var(--comp-btn-solid-brand-inner-border-hover),0_1px_3px_0_var(--shadow-4)]\",\n \"active:from-btn-solid-brand-bg-pressed active:to-btn-solid-brand-bg-gradient-to-pressed\",\n \"active:border-btn-solid-brand-border-pressed\",\n \"active:shadow-[inset_0_0_0_1px_var(--comp-btn-solid-brand-inner-border-pressed),0_1px_3px_0_var(--shadow-4)]\",\n ],\n },\n // ── Solid + Alert ──────────────────────────────────────────────────\n {\n appearance: \"solid\",\n intent: \"alert\",\n class: [\n \"bg-gradient-to-t from-btn-solid-alert-bg-default from-[10%] to-btn-solid-alert-bg-gradient-to-default\",\n \"text-btn-solid-alert-text-default\",\n \"border-btn-solid-alert-border-default\",\n \"shadow-[inset_0_0_0_1px_var(--comp-btn-solid-alert-inner-border-default),0_1px_3px_0_var(--shadow-4)]\",\n \"hover:from-btn-solid-alert-bg-hover hover:from-[0%] hover:to-btn-solid-alert-bg-gradient-to-hover\",\n \"hover:border-btn-solid-alert-border-hover\",\n \"hover:shadow-[inset_0_0_0_1px_var(--comp-btn-solid-alert-inner-border-hover),0_1px_3px_0_var(--shadow-4)]\",\n \"active:from-btn-solid-alert-bg-pressed active:to-btn-solid-alert-bg-gradient-to-pressed\",\n \"active:border-btn-solid-alert-border-pressed\",\n \"active:shadow-[inset_0_0_0_1px_var(--comp-btn-solid-alert-inner-border-pressed),0_1px_3px_0_var(--shadow-4)]\",\n ],\n },\n // ── Outlined + Brand ─────────────────────────────────────────────\n {\n appearance: \"outlined\",\n intent: \"brand\",\n class: [\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default\",\n \"text-btn-outlined-neutral-text-default\",\n \"border-btn-outlined-neutral-border-default\",\n \"shadow-[0_1px_3px_0_var(--shadow-4)]\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:from-[0%] hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n \"hover:border-btn-outlined-neutral-border-hover\",\n \"active:from-btn-outlined-neutral-bg-pressed active:to-btn-outlined-neutral-bg-gradient-to-pressed\",\n \"active:border-btn-outlined-neutral-border-pressed\",\n ],\n },\n // ── Outlined + Alert ───────────────────────────────────────────────\n {\n appearance: \"outlined\",\n intent: \"alert\",\n class: [\n \"bg-btn-outlined-alert-bg-default\",\n \"text-btn-outlined-alert-text-default\",\n \"border-btn-outlined-alert-border-default\",\n \"shadow-[0_1px_3px_0_var(--shadow-4)]\",\n \"hover:bg-btn-outlined-alert-bg-hover\",\n \"hover:text-btn-outlined-alert-text-hover\",\n \"hover:border-btn-outlined-alert-border-default\",\n \"active:bg-btn-outlined-alert-bg-pressed\",\n \"active:text-btn-outlined-alert-text-pressed\",\n \"active:border-btn-outlined-alert-border-pressed\",\n ],\n },\n // ── Ghost + Brand ──────────────────────────────────────────────────\n {\n appearance: \"ghost\",\n intent: \"brand\",\n class: [\n \"bg-btn-ghost-brand-bg-default\",\n \"text-btn-ghost-brand-text-default\",\n \"border-btn-ghost-brand-border-default\",\n \"hover:bg-btn-ghost-brand-bg-hover\",\n \"hover:text-btn-ghost-brand-text-hover\",\n \"active:bg-btn-ghost-brand-bg-pressed\",\n \"active:text-btn-ghost-brand-text-pressed\",\n ],\n },\n // ── Ghost + Alert ──────────────────────────────────────────────────\n {\n appearance: \"ghost\",\n intent: \"alert\",\n class: [\n \"bg-btn-ghost-alert-bg-default\",\n \"text-btn-ghost-alert-text-default\",\n \"border-btn-ghost-alert-border-default\",\n \"hover:bg-btn-ghost-alert-bg-hover\",\n \"hover:text-btn-ghost-alert-text-hover\",\n \"active:bg-btn-ghost-alert-bg-pressed\",\n \"active:text-btn-ghost-alert-text-pressed\",\n ],\n },\n // ── Icon-only size overrides ───────────────────────────────────────\n { size: \"sm\", iconOnly: true, class: \"w-6 min-w-0 px-0\" },\n { size: \"md\", iconOnly: true, class: \"w-8 min-w-0 px-0\" },\n { size: \"lg\", iconOnly: true, class: \"w-10 min-w-0 px-0\" },\n ],\n defaultVariants: {\n appearance: \"solid\",\n intent: \"brand\",\n size: \"md\",\n },\n },\n);\n\n// ── Icon size mapping ────────────────────────────────────────────────────────\n\nconst iconSizeMap: Record<NonNullable<ButtonProps[\"size\"]>, IconSize> = {\n sm: \"xs\", // 12px\n md: \"sm\", // 14px\n lg: \"sm\", // 14px\n};\n\n// ── Per-size text-wrapper (hosts label + optional badge) ────────────────────\n\nconst textWrapperClass = (size: NonNullable<ButtonProps[\"size\"]>) =>\n cn(\n \"inline-flex items-center justify-center px-xs\",\n size === \"lg\" ? \"gap-sm\" : \"gap-xs\",\n );\n\n// ── Badge (in-button counter / accent) ──────────────────────────────────────\n\ninterface ButtonBadgeProps {\n size: NonNullable<ButtonProps[\"size\"]>;\n intent: NonNullable<ButtonProps[\"intent\"]>;\n children: React.ReactNode;\n}\n\nconst ButtonBadge: React.FC<ButtonBadgeProps> = ({ size, intent, children }) => {\n const colors =\n intent === \"alert\"\n ? \"bg-[var(--core-bg-functional-invert-critical)] text-[var(--core-text-functional-critical)]\"\n : \"bg-[var(--core-bg-functional-invert-info)] text-[var(--core-text-functional-info)]\";\n\n // lg: 12px font / 16px line / radius-sm / px-sm py-xs\n // md & sm: 10px font / 14px line / radius-xs / px-xs py-2xs\n const shape =\n size === \"lg\"\n ? \"gap-xs px-sm py-xs rounded-sm text-xs leading-xs\"\n : \"gap-2xs px-xs py-2xs rounded-xs text-xxs leading-2xs\";\n\n return (\n <span\n className={cn(\n \"inline-flex items-center font-medium whitespace-nowrap\",\n shape,\n colors,\n )}\n >\n {children}\n </span>\n );\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n leftIcon?: IconDefinition;\n rightIcon?: IconDefinition;\n iconOnly?: boolean;\n /** Optional badge (e.g. counter) shown next to the label. Ignored when iconOnly. */\n badge?: React.ReactNode;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n appearance: appearanceProp,\n intent: intentProp,\n size,\n iconOnly: iconOnlyProp,\n fullWidth,\n asChild = false,\n loading = false,\n leftIcon,\n rightIcon,\n disabled,\n badge,\n children,\n ...props\n },\n ref,\n ) => {\n const appearance = appearanceProp ?? \"solid\";\n const intent = intentProp ?? \"brand\";\n const resolvedSize = size ?? \"md\";\n\n const isDisabled = disabled || loading;\n const isIconOnly = iconOnlyProp ?? !children;\n const iconSize = iconSizeMap[resolvedSize];\n\n const variantClasses = buttonVariants({\n appearance,\n intent,\n size: resolvedSize,\n iconOnly: isIconOnly || undefined,\n fullWidth,\n className,\n });\n\n const labelNode = !isIconOnly ? (\n <span className={textWrapperClass(resolvedSize)}>\n {children}\n {badge != null && (\n <ButtonBadge size={resolvedSize} intent={intent}>\n {badge}\n </ButtonBadge>\n )}\n </span>\n ) : null;\n\n if (asChild) {\n return (\n <Slot ref={ref} className={cn(variantClasses)} {...props}>\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n className={cn(variantClasses)}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading ? (\n <Icon icon={faSpinnerSolid} size={iconSize} className=\"animate-spin\" />\n ) : leftIcon ? (\n <Icon icon={leftIcon} size={iconSize} />\n ) : null}\n {labelNode}\n {rightIcon && !loading && <Icon icon={rightIcon} size={iconSize} />}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants, type ButtonProps };\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst tooltipContentVariants = cva(\n [\n \"inline-flex items-center z-50\",\n \"gap-xs\",\n \"px-base py-sm\",\n \"rounded-lg\",\n \"shadow-lg\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n \"data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out]\",\n \"data-[state=instant-open]:animate-[tooltip-in_0ms]\",\n \"data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\",\n ],\n {\n variants: {\n type: {\n default: [\n \"bg-tooltip-default-bg\",\n \"text-tooltip-default-text\",\n ],\n invert: [\n \"bg-tooltip-invert-bg\",\n \"text-tooltip-invert-text\",\n \"border border-tooltip-invert-border\",\n ],\n },\n },\n defaultVariants: {\n type: \"default\",\n },\n },\n);\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TooltipContentProps\n extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>,\n VariantProps<typeof tooltipContentVariants> {\n hasArrow?: boolean;\n}\n\n// ── Components ───────────────────────────────────────────────────────────────\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n TooltipContentProps\n>(({ className, type, hasArrow = true, sideOffset = 4, children, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(tooltipContentVariants({ type, className }))}\n {...props}\n >\n {children}\n {hasArrow && (\n <TooltipPrimitive.Arrow\n className={\n type === \"default\"\n ? \"fill-tooltip-default-bg\"\n : \"fill-tooltip-invert-bg\"\n }\n />\n )}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n));\n\nTooltipContent.displayName = \"TooltipContent\";\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n tooltipContentVariants,\n type TooltipContentProps,\n};\n","import * as React from \"react\";\nimport {\n Icon,\n faXmarkOutline,\n faEllipsisOutline,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Button, type ButtonProps } from \"./button\";\nimport {\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n} from \"./dropdown-menu\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface BulkActionItem {\n id: string;\n label: string;\n icon?: IconDefinition;\n appearance?: ButtonProps[\"appearance\"];\n intent?: ButtonProps[\"intent\"];\n disabled?: boolean;\n onClick?: () => void;\n}\n\nexport interface BulkActionProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Number of currently selected items. */\n count: number;\n /** Called when the user clicks the Clear button. */\n onClear?: () => void;\n /** Label shown next to the count. Defaults to \"selected\". */\n countLabel?: string;\n /** Override the Clear button label. Defaults to \"Clear\". */\n clearLabel?: string;\n /** Action items rendered on the right side. Overflow collapses into a \"more\" menu. */\n actions: BulkActionItem[];\n /**\n * When true (default), the bar sticks to the bottom of its scroll container.\n * Set to false if you position it manually.\n */\n sticky?: boolean;\n}\n\n// ── BulkAction ──────────────────────────────────────────────────────────────\n\nconst GAP_PX = 8; // gap-base\nconst MORE_BTN_FALLBACK = 36;\n\nconst BulkAction = React.forwardRef<HTMLDivElement, BulkActionProps>(\n (\n {\n count,\n onClear,\n countLabel = \"selected\",\n clearLabel = \"Clear\",\n actions,\n sticky = true,\n className,\n ...props\n },\n ref,\n ) => {\n const slotRef = React.useRef<HTMLDivElement>(null);\n const measureRef = React.useRef<HTMLDivElement>(null);\n const moreBtnMeasureRef = React.useRef<HTMLButtonElement>(null);\n const [visibleCount, setVisibleCount] = React.useState(actions.length);\n\n // Recompute how many actions fit in the available slot width.\n React.useLayoutEffect(() => {\n const slot = slotRef.current;\n const measure = measureRef.current;\n if (!slot || !measure) return;\n\n const recompute = () => {\n const itemEls = Array.from(measure.children) as HTMLElement[];\n if (itemEls.length === 0) {\n setVisibleCount(0);\n return;\n }\n const widths = itemEls.map((el) => el.offsetWidth);\n const totalWithGaps =\n widths.reduce((a, b) => a + b, 0) + GAP_PX * (widths.length - 1);\n const available = slot.clientWidth;\n\n if (totalWithGaps <= available) {\n setVisibleCount(widths.length);\n return;\n }\n\n const moreBtnWidth =\n moreBtnMeasureRef.current?.offsetWidth ?? MORE_BTN_FALLBACK;\n const reserved = available - moreBtnWidth - GAP_PX;\n let used = 0;\n let fit = 0;\n for (let i = 0; i < widths.length; i++) {\n const next = used + widths[i] + (i > 0 ? GAP_PX : 0);\n if (next <= reserved) {\n used = next;\n fit++;\n } else {\n break;\n }\n }\n setVisibleCount(fit);\n };\n\n recompute();\n const ro = new ResizeObserver(recompute);\n ro.observe(slot);\n ro.observe(measure);\n return () => ro.disconnect();\n }, [actions]);\n\n const visibleItems = actions.slice(0, visibleCount);\n const overflowItems = actions.slice(visibleCount);\n\n return (\n <div\n ref={ref}\n role=\"toolbar\"\n aria-label=\"Bulk actions\"\n className={cn(\n \"flex items-center gap-xl px-lg py-base w-full min-w-0\",\n \"bg-bulk-action-bg border-l border-r border-t border-bulk-action-border\",\n \"rounded-tl-lg rounded-tr-lg\",\n \"shadow-[0px_0px_6px_0px_rgba(0,0,0,0.02),0px_2px_4px_0px_rgba(0,0,0,0.08)]\",\n sticky && \"sticky bottom-0 z-10\",\n className,\n )}\n {...props}\n >\n {/* ── Selection count (left) ──────────────────────────────── */}\n <span className=\"text-sm font-regular leading-sm text-bulk-action-count whitespace-nowrap shrink-0\">\n {count} {countLabel}\n </span>\n\n {/* ── Actions slot (responsive, middle) ───────────────────── */}\n <div\n ref={slotRef}\n className=\"relative flex flex-1 items-center gap-base min-w-0 overflow-hidden\"\n >\n {/* Visible buttons */}\n {visibleItems.map((item) => (\n <ActionButton key={item.id} item={item} />\n ))}\n\n {/* More menu */}\n {overflowItems.length > 0 && (\n <DropdownMenuRoot>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n appearance=\"outlined\"\n intent=\"brand\"\n size=\"md\"\n iconOnly\n leftIcon={faEllipsisOutline}\n aria-label=\"More actions\"\n />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" side=\"top\" sideOffset={8}>\n {overflowItems.map((item) => (\n <DropdownMenuItem\n key={item.id}\n icon={item.icon}\n label={item.label}\n onClick={() => !item.disabled && item.onClick?.()}\n />\n ))}\n </DropdownMenuContent>\n </DropdownMenuRoot>\n )}\n\n {/* Hidden measurement layer — full natural widths for every item */}\n <div\n ref={measureRef}\n aria-hidden\n className=\"pointer-events-none absolute inset-0 flex items-center gap-base opacity-0 invisible\"\n >\n {actions.map((item) => (\n <ActionButton key={`measure-${item.id}`} item={item} tabIndex={-1} />\n ))}\n </div>\n {/* Hidden reference for the \"more\" button width */}\n <button\n ref={moreBtnMeasureRef}\n aria-hidden\n tabIndex={-1}\n className=\"pointer-events-none absolute opacity-0 invisible h-8 w-8 min-w-8\"\n >\n <Icon icon={faEllipsisOutline} size=\"sm\" />\n </button>\n </div>\n\n {/* ── Clear button (right) ────────────────────────────────── */}\n <Button\n type=\"button\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"md\"\n iconOnly\n leftIcon={faXmarkOutline}\n onClick={onClear}\n aria-label={clearLabel}\n className=\"shrink-0\"\n />\n </div>\n );\n },\n);\nBulkAction.displayName = \"BulkAction\";\n\n// ── ActionButton (internal) ─────────────────────────────────────────────────\n\ninterface ActionButtonProps {\n item: BulkActionItem;\n tabIndex?: number;\n}\n\nconst ActionButton: React.FC<ActionButtonProps> = ({ item, tabIndex }) => (\n <Button\n type=\"button\"\n appearance={item.appearance ?? \"outlined\"}\n intent={item.intent ?? \"brand\"}\n size=\"md\"\n leftIcon={item.icon}\n disabled={item.disabled}\n onClick={item.onClick}\n tabIndex={tabIndex}\n className=\"shrink-0\"\n >\n {item.label}\n </Button>\n);\n\nexport { BulkAction };\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Shared text styles ──────────────────────────────────────────────────────\n\nconst textSm =\n \"text-sm font-regular leading-sm\";\n\nconst textXs =\n \"text-xs font-regular leading-xs\";\n\nconst textXsMedium =\n \"text-xs font-medium leading-xs\";\n\nconst textSmMedium =\n \"text-sm font-medium leading-sm\";\n\n// ── Container styles ────────────────────────────────────────────────────────\n\nconst containerStyle = [\n \"flex flex-col gap-base overflow-clip\",\n \"bg-dropdown-bg\",\n \"border border-dropdown-border\",\n \"rounded-lg\",\n \"p-xs\",\n \"shadow-lg\",\n];\n\n// ── DropdownMenu (static container) ─────────────────────────────────────────\n\ninterface DropdownMenuProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(containerStyle, className)} {...props}>\n {children}\n </div>\n ),\n);\nDropdownMenu.displayName = \"DropdownMenu\";\n\n// ── Radix-powered interactive dropdown ──────────────────────────────────────\n\nconst DropdownMenuRoot = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, children, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n containerStyle,\n \"z-50\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\n// ── DropdownMenuList ─────────────────────────────────────────────────────────\n\ninterface DropdownMenuListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenuList = React.forwardRef<HTMLDivElement, DropdownMenuListProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col\", className)} role=\"listbox\" {...props}>\n {children}\n </div>\n ),\n);\nDropdownMenuList.displayName = \"DropdownMenuList\";\n\n// ── DropdownMenuItem ─────────────────────────────────────────────────────────\n\nconst itemStyle =\n \"flex items-center gap-base p-base rounded-base cursor-pointer hover:bg-dropdown-item-hover\";\n\ninterface DropdownMenuItemProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: IconDefinition;\n avatar?: React.ReactNode;\n flag?: React.ReactNode;\n label: string;\n description?: string;\n badge?: React.ReactNode;\n action?: React.ReactNode;\n isActive?: boolean;\n}\n\nconst DropdownMenuItem = React.forwardRef<HTMLDivElement, DropdownMenuItemProps>(\n (\n {\n className,\n icon,\n avatar,\n flag,\n label,\n description,\n badge,\n action,\n isActive,\n children,\n onClick,\n ...props\n },\n ref,\n ) => {\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // If the click didn't originate from the checkbox itself, toggle it\n const target = e.target as HTMLElement;\n if (!target.closest(\"button[role='checkbox']\")) {\n const checkbox = e.currentTarget.querySelector<HTMLButtonElement>(\n \"button[role='checkbox']\",\n );\n checkbox?.click();\n }\n onClick?.(e);\n },\n [onClick],\n );\n\n return (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={isActive}\n className={cn(\n itemStyle,\n isActive && \"bg-dropdown-item-hover\",\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n {children}\n {avatar}\n {flag}\n {icon && (\n <Icon\n icon={icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n )}\n <div className=\"flex flex-1 items-center gap-sm min-w-0\">\n <span className={cn(\"truncate shrink-0\", textSm, \"text-dropdown-item-text\")}>\n {label}\n </span>\n {description && (\n <span className={cn(\"truncate\", textXs, \"text-dropdown-item-secondary\")}>\n {description}\n </span>\n )}\n </div>\n {badge}\n {action}\n </div>\n );\n },\n);\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\n// ── Radix-powered DropdownMenuItem ───────────────────────────────────────────\n\ninterface DropdownMenuRadixItemProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> {\n icon?: IconDefinition;\n avatar?: React.ReactNode;\n flag?: React.ReactNode;\n label: string;\n description?: string;\n badge?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nconst DropdownMenuRadixItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n DropdownMenuRadixItemProps\n>(\n (\n {\n className,\n icon,\n avatar,\n flag,\n label,\n description,\n badge,\n action,\n children,\n ...props\n },\n ref,\n ) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n itemStyle,\n \"outline-none focus:bg-dropdown-item-hover\",\n className,\n )}\n {...props}\n >\n {children}\n {avatar}\n {flag}\n {icon && (\n <Icon\n icon={icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n )}\n <div className=\"flex flex-1 items-center gap-sm min-w-0\">\n <span className={cn(\"truncate shrink-0\", textSm, \"text-dropdown-item-text\")}>\n {label}\n </span>\n {description && (\n <span className={cn(\"truncate\", textXs, \"text-dropdown-item-secondary\")}>\n {description}\n </span>\n )}\n </div>\n {badge}\n {action}\n </DropdownMenuPrimitive.Item>\n ),\n);\nDropdownMenuRadixItem.displayName = \"DropdownMenuRadixItem\";\n\n// ── DropdownMenuHeading ──────────────────────────────────────────────────────\n\ninterface DropdownMenuHeadingProps extends React.HTMLAttributes<HTMLDivElement> {\n action?: React.ReactNode;\n}\n\nconst DropdownMenuHeading = React.forwardRef<\n HTMLDivElement,\n DropdownMenuHeadingProps\n>(({ className, action, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-base p-base rounded-base\",\n className,\n )}\n {...props}\n >\n <span className={cn(\"flex-1 truncate uppercase\", textXsMedium, \"text-dropdown-heading-text\")}>\n {children}\n </span>\n {action}\n </div>\n));\nDropdownMenuHeading.displayName = \"DropdownMenuHeading\";\n\n// ── DropdownMenuClear ────────────────────────────────────────────────────────\n\nconst clearStyle = [\n \"sticky bottom-0 -mx-base -mb-base\",\n \"flex items-center justify-center\",\n \"h-10 min-w-[80px] px-lg py-[10px]\",\n \"bg-gradient-to-t from-dropdown-bg from-[10%] to-dropdown-bg\",\n \"border border-dropdown-border\",\n \"shadow-sm\",\n \"cursor-pointer\",\n];\n\ninterface DropdownMenuClearProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nconst DropdownMenuClear = React.forwardRef<\n HTMLButtonElement,\n DropdownMenuClearProps\n>(({ className, children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(clearStyle, textSmMedium, \"text-dropdown-clear-text\", className)}\n {...props}\n >\n {children}\n </button>\n));\nDropdownMenuClear.displayName = \"DropdownMenuClear\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n // Static (presentational) components — backward compatible\n DropdownMenu,\n DropdownMenuList,\n DropdownMenuItem,\n DropdownMenuHeading,\n DropdownMenuClear,\n // Radix-powered interactive components\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuRadixItem,\n // Types\n type DropdownMenuProps,\n type DropdownMenuListProps,\n type DropdownMenuItemProps,\n type DropdownMenuHeadingProps,\n type DropdownMenuClearProps,\n type DropdownMenuRadixItemProps,\n};\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TruncatedTextProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\"> {\n /** Full text content. Used both for display and as the tooltip body. */\n children: string;\n /**\n * Optional explicit tooltip body. Defaults to `children`. Useful when the\n * displayed string is formatted but the tooltip should show a different form.\n */\n tooltip?: React.ReactNode;\n /** Hover delay before the tooltip opens (ms). */\n delayDuration?: number;\n /** Forwarded to the inner `<span>`. */\n className?: string;\n}\n\n// ── TruncatedText ───────────────────────────────────────────────────────────\n//\n// Renders a `<span>` with `truncate` semantics and conditionally wraps it in\n// a tooltip when the text is actually clipped (`scrollWidth > clientWidth`).\n//\n// The span is `inline-block` (not raw `inline`) so that `max-width` and the\n// `scrollWidth`/`clientWidth` measurements work in any parent — without this,\n// an inline `<span>` reports `clientWidth: 0` and the tooltip never mounts.\n\nconst TruncatedText = React.forwardRef<HTMLSpanElement, TruncatedTextProps>(\n ({ children, tooltip, delayDuration = 300, className, ...props }, forwardedRef) => {\n const [el, setEl] = React.useState<HTMLSpanElement | null>(null);\n const [isTruncated, setIsTruncated] = React.useState(false);\n\n // Ref callback that captures the live element AND forwards to the consumer's ref.\n // Using state (not useRef) ensures the effect re-runs when the span instance\n // changes (e.g. when we re-render to mount the tooltip wrapper).\n const setRef = React.useCallback(\n (node: HTMLSpanElement | null) => {\n setEl(node);\n if (typeof forwardedRef === \"function\") forwardedRef(node);\n else if (forwardedRef) {\n (forwardedRef as React.MutableRefObject<HTMLSpanElement | null>).current = node;\n }\n },\n [forwardedRef],\n );\n\n React.useLayoutEffect(() => {\n if (!el) return;\n const check = () => setIsTruncated(el.scrollWidth > el.clientWidth);\n check();\n const ro = new ResizeObserver(check);\n ro.observe(el);\n return () => ro.disconnect();\n }, [el, children]);\n\n const span = (\n <span\n ref={setRef}\n className={cn(\n \"inline-block max-w-full min-w-0 align-bottom truncate\",\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n\n if (!isTruncated) return span;\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{span}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-sm font-regular leading-sm max-w-[320px] data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n {tooltip ?? children}\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n },\n);\n\nTruncatedText.displayName = \"TruncatedText\";\n\nexport { TruncatedText };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { faFaceSmileOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n//\n// Emoji shape emitted by emoji-mart's `onEmojiSelect` callback. We re-declare\n// it locally so consumers don't need to import from `@emoji-mart/react`.\n//\n// See https://github.com/missive/emoji-mart#-events.\n\nexport interface EmojiSelection {\n id: string;\n name: string;\n native: string;\n unified: string;\n keywords: string[];\n shortcodes: string;\n skin?: number;\n}\n\nexport type EmojiPickerLocale = \"en\" | \"fr\";\n\ninterface CommonEmojiPickerProps {\n /** Called with the selected emoji. */\n onSelect: (emoji: EmojiSelection) => void;\n /** Picker locale (defaults to `\"en\"`). */\n locale?: EmojiPickerLocale;\n /**\n * Auto-tracks `data-theme=\"dark\"` on `<html>` by default. Pass an explicit\n * `\"light\"` or `\"dark\"` to override.\n */\n theme?: \"light\" | \"dark\" | \"auto\";\n /** Pre-selected skin tone (1–6). */\n skin?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Hide the search bar. */\n searchPosition?: \"sticky\" | \"static\" | \"none\";\n /** Hide the skin-tone selector button. */\n skinTonePosition?: \"preview\" | \"search\" | \"none\";\n /** Hide the bottom preview bar. */\n previewPosition?: \"top\" | \"bottom\" | \"none\";\n /** Hide the category navigation row. */\n navPosition?: \"top\" | \"bottom\" | \"none\";\n /** Per-row emoji count (default emoji-mart value: 9). */\n perLine?: number;\n /** Maximum number of recent emojis kept by emoji-mart (localStorage). */\n maxFrequentRows?: number;\n}\n\nexport interface EmojiPickerProps extends CommonEmojiPickerProps {\n className?: string;\n}\n\n// ── i18n bundles ────────────────────────────────────────────────────────────\n//\n// Two minimal locale dictionaries for emoji-mart's `i18n` prop. The English\n// dict mirrors emoji-mart's own defaults; the French dict is a curated\n// translation. Add more languages here as needed.\n\nconst EN_I18N = {\n search: \"Search\",\n search_no_results_1: \"No emoji\",\n search_no_results_2: \"We couldn't find this one\",\n pick: \"Pick an emoji…\",\n add_custom: \"Add custom emoji\",\n categories: {\n activity: \"Activity\",\n custom: \"Custom\",\n flags: \"Flags\",\n foods: \"Food & Drink\",\n frequent: \"Frequently used\",\n nature: \"Animals & Nature\",\n objects: \"Objects\",\n people: \"Smileys & People\",\n places: \"Travel & Places\",\n search: \"Search Results\",\n symbols: \"Symbols\",\n },\n skins: {\n \"1\": \"Default\",\n \"2\": \"Light\",\n \"3\": \"Medium-Light\",\n \"4\": \"Medium\",\n \"5\": \"Medium-Dark\",\n \"6\": \"Dark\",\n choose: \"Choose default skin tone\",\n },\n} as const;\n\nconst FR_I18N = {\n search: \"Rechercher\",\n search_no_results_1: \"Aucun emoji\",\n search_no_results_2: \"Impossible de trouver celui-ci\",\n pick: \"Choisissez un emoji…\",\n add_custom: \"Ajouter un emoji personnalisé\",\n categories: {\n activity: \"Activité\",\n custom: \"Personnalisé\",\n flags: \"Drapeaux\",\n foods: \"Nourriture & boisson\",\n frequent: \"Fréquemment utilisés\",\n nature: \"Animaux & nature\",\n objects: \"Objets\",\n people: \"Smileys & personnes\",\n places: \"Voyages & lieux\",\n search: \"Résultats\",\n symbols: \"Symboles\",\n },\n skins: {\n \"1\": \"Par défaut\",\n \"2\": \"Claire\",\n \"3\": \"Moyennement claire\",\n \"4\": \"Moyenne\",\n \"5\": \"Moyennement foncée\",\n \"6\": \"Foncée\",\n choose: \"Choisir la couleur de peau par défaut\",\n },\n} as const;\n\nconst I18N_BUNDLES = { en: EN_I18N, fr: FR_I18N };\n\n// ── Theme auto-detection ────────────────────────────────────────────────────\n\nfunction useDocumentTheme(): \"light\" | \"dark\" {\n const [theme, setTheme] = React.useState<\"light\" | \"dark\">(\"light\");\n\n React.useEffect(() => {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n const read = () => {\n setTheme(root.dataset.theme === \"dark\" ? \"dark\" : \"light\");\n };\n read();\n const observer = new MutationObserver(read);\n observer.observe(root, { attributes: true, attributeFilter: [\"data-theme\"] });\n return () => observer.disconnect();\n }, []);\n\n return theme;\n}\n\n// ── Lazy emoji-mart loader ──────────────────────────────────────────────────\n//\n// emoji-mart's data bundle is ~150 KB gzipped. We dynamically import the\n// Picker + data so the cost is paid only when the picker actually mounts,\n// keeping the rest of @l3mpire/ui slim.\n\ninterface LoadedPicker {\n Picker: any;\n data: any;\n}\n\nlet pickerCache: Promise<LoadedPicker> | null = null;\n\nasync function loadPicker(): Promise<LoadedPicker> {\n if (!pickerCache) {\n pickerCache = Promise.all([\n import(\"@emoji-mart/react\"),\n import(\"@emoji-mart/data\"),\n ]).then(([reactMod, dataMod]) => ({\n Picker: (reactMod as any).default ?? reactMod,\n data: (dataMod as any).default ?? dataMod,\n }));\n }\n return pickerCache;\n}\n\n// ── EmojiPicker (inline) ────────────────────────────────────────────────────\n\nconst EmojiPicker = React.forwardRef<HTMLDivElement, EmojiPickerProps>(\n ({ className, onSelect, locale = \"en\", theme: themeProp, ...pickerProps }, ref) => {\n const docTheme = useDocumentTheme();\n const theme = themeProp ?? docTheme;\n\n const [loaded, setLoaded] = React.useState<LoadedPicker | null>(null);\n React.useEffect(() => {\n let alive = true;\n loadPicker().then((mod) => {\n if (alive) setLoaded(mod);\n });\n return () => {\n alive = false;\n };\n }, []);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"lemds-emoji-picker inline-flex overflow-clip\",\n \"bg-emoji-picker-bg border border-emoji-picker-border rounded-lg shadow-lg\",\n className,\n )}\n >\n {loaded ? (\n <loaded.Picker\n data={loaded.data}\n onEmojiSelect={onSelect}\n theme={theme}\n i18n={I18N_BUNDLES[locale]}\n {...pickerProps}\n />\n ) : (\n <div className=\"flex h-[420px] w-[352px] items-center justify-center text-emoji-picker-text-muted text-sm font-regular leading-sm\">\n Loading…\n </div>\n )}\n </div>\n );\n },\n);\nEmojiPicker.displayName = \"EmojiPicker\";\n\n// ── EmojiPickerPopover ──────────────────────────────────────────────────────\n\nexport interface EmojiPickerPopoverProps extends CommonEmojiPickerProps {\n /**\n * Custom trigger element. Provide via `children` together with `asChild`-style\n * composition (Radix passes the trigger props down). When omitted, a default\n * ghost icon-only Button with the face-smile icon is rendered.\n */\n children?: React.ReactNode;\n /** Controlled open state. */\n open?: boolean;\n /** Open-state change handler. */\n onOpenChange?: (open: boolean) => void;\n /** Popover side (default `\"bottom\"`). */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Popover alignment (default `\"start\"`). */\n align?: \"start\" | \"center\" | \"end\";\n /** Distance from the trigger in px (default 6). */\n sideOffset?: number;\n /** `aria-label` for the default trigger (ignored when `children` is set). */\n triggerAriaLabel?: string;\n}\n\nconst EmojiPickerPopover = React.forwardRef<\n HTMLButtonElement,\n EmojiPickerPopoverProps\n>(\n (\n {\n children,\n open,\n onOpenChange,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 6,\n triggerAriaLabel = \"Pick an emoji\",\n onSelect,\n ...emojiPickerProps\n },\n ref,\n ) => {\n const handleSelect = (emoji: EmojiSelection) => {\n onSelect(emoji);\n onOpenChange?.(false);\n };\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>\n {children ?? (\n <Button\n ref={ref}\n type=\"button\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"md\"\n iconOnly\n leftIcon={faFaceSmileOutline}\n aria-label={triggerAriaLabel}\n />\n )}\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={sideOffset}\n side={side}\n align={align}\n className=\"z-50 outline-none\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <EmojiPicker onSelect={handleSelect} {...emojiPickerProps} />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n },\n);\nEmojiPickerPopover.displayName = \"EmojiPickerPopover\";\n\nexport { EmojiPicker, EmojiPickerPopover };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, type IconDefinition, type IconSize } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst linkVariants = cva(\n [\n \"inline-flex items-center\",\n \"font-medium\",\n \"transition-colors cursor-pointer\",\n \"disabled:pointer-events-none\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n ],\n {\n variants: {\n intent: {\n neutral: [\n \"text-link-neutral-text-default\",\n \"hover:text-link-neutral-text-hover\",\n \"active:text-link-neutral-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n brand: [\n \"text-link-brand-text-default\",\n \"hover:text-link-brand-text-hover\",\n \"active:text-link-brand-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n alert: [\n \"text-link-alert-text-default\",\n \"hover:text-link-alert-text-hover\",\n \"active:text-link-alert-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n success: [\n \"text-link-success-text-default\",\n \"hover:text-link-success-text-hover\",\n \"active:text-link-success-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n warning: [\n \"text-link-warning-text-default\",\n \"hover:text-link-warning-text-hover\",\n \"active:text-link-warning-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n },\n size: {\n sm: [\n \"text-xs\",\n \"leading-xs\",\n \"gap-xs\",\n ],\n md: [\n \"text-sm\",\n \"leading-sm\",\n \"gap-sm\",\n ],\n },\n },\n defaultVariants: {\n intent: \"neutral\",\n size: \"md\",\n },\n },\n);\n\n// ── Icon size mapping ────────────────────────────────────────────────────────\n\nconst iconSizeMap: Record<NonNullable<LinkProps[\"size\"]>, IconSize> = {\n sm: \"xs\", // 12px\n md: \"sm\", // 14px\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface LinkProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement>,\n VariantProps<typeof linkVariants> {\n asChild?: boolean;\n disabled?: boolean;\n leftIcon?: IconDefinition;\n rightIcon?: IconDefinition;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n className,\n intent,\n size,\n asChild = false,\n disabled,\n leftIcon,\n rightIcon,\n children,\n ...props\n },\n ref,\n ) => {\n const iconSize = iconSizeMap[size ?? \"md\"];\n\n const variantClasses = linkVariants({\n intent,\n size,\n className,\n });\n\n if (asChild) {\n return (\n <Slot ref={ref} className={cn(variantClasses)} {...props}>\n {children}\n </Slot>\n );\n }\n\n return (\n <a\n ref={ref}\n className={cn(variantClasses)}\n aria-disabled={disabled || undefined}\n {...(disabled ? { tabIndex: -1, role: \"link\" } : {})}\n {...props}\n >\n {leftIcon && (\n <Icon\n icon={leftIcon}\n size={iconSize}\n className=\"text-current\"\n />\n )}\n {children}\n {rightIcon && (\n <Icon\n icon={rightIcon}\n size={iconSize}\n className=\"text-current\"\n />\n )}\n </a>\n );\n },\n);\n\nLink.displayName = \"Link\";\n\nexport { Link, linkVariants, type LinkProps };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { Icon, faCircleInfoSolid, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface InputLabelProps\n extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {\n type?: \"default\" | \"optional\" | \"mandatory\" | \"info\";\n disabled?: boolean;\n infoIcon?: IconDefinition;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst InputLabel = React.forwardRef<\n React.ComponentRef<typeof LabelPrimitive.Root>,\n InputLabelProps\n>(({ className, type = \"default\", disabled, infoIcon, children, ...props }, ref) => {\n const textColor = disabled\n ? \"text-input-label-disabled\"\n : \"text-input-label-text\";\n\n return (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-xs\",\n \"text-xs\",\n \"font-medium\",\n \"leading-xs\",\n textColor,\n className,\n )}\n {...props}\n >\n {children}\n {type === \"optional\" && (\n <span\n className={cn(\n \"font-regular\",\n \"text-xxs leading-2xs\",\n disabled\n ? \"text-input-label-disabled\"\n : \"text-input-label-optional\",\n )}\n >\n Optional\n </span>\n )}\n {type === \"mandatory\" && (\n <span\n className={cn(\n \"font-regular\",\n \"text-xs\",\n \"leading-xs\",\n disabled\n ? \"text-input-label-disabled\"\n : \"text-input-label-mandatory\",\n )}\n >\n *\n </span>\n )}\n {type === \"info\" && (\n <Icon\n icon={infoIcon ?? faCircleInfoSolid}\n size=\"xs\"\n className={\n disabled\n ? \"text-input-label-disabled\"\n : \"text-input-label-icon\"\n }\n />\n )}\n </LabelPrimitive.Root>\n );\n});\n\nInputLabel.displayName = \"InputLabel\";\n\nexport { InputLabel, type InputLabelProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faCircleInfoSolid,\n faCircleCheckSolid,\n faCircleExclamationSolid,\n faTriangleExclamationSolid,\n faXmarkSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Link } from \"./link\";\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst infoMessageVariants = cva(\n \"flex items-start gap-lg px-xl py-base rounded-lg\",\n {\n variants: {\n type: {\n info: \"bg-info-message-info-bg\",\n success: \"bg-info-message-success-bg\",\n alert: \"bg-info-message-alert-bg\",\n warning: \"bg-info-message-warning-bg\",\n empty: \"bg-info-message-empty-bg\",\n },\n },\n defaultVariants: { type: \"info\" },\n },\n);\n\n// ── Per-type icon + color mapping ────────────────────────────────────────────\n\nconst typeIconMap: Record<string, { icon: IconDefinition; color: string }> = {\n info: { icon: faCircleInfoSolid, color: \"text-info-message-info-icon\" },\n success: { icon: faCircleCheckSolid, color: \"text-info-message-success-icon\" },\n alert: { icon: faCircleExclamationSolid, color: \"text-info-message-alert-icon\" },\n warning: { icon: faTriangleExclamationSolid, color: \"text-info-message-warning-icon\" },\n empty: { icon: faCircleInfoSolid, color: \"text-info-message-empty-icon\" },\n};\n\n// ── Text styles ─────────────────────────────────────────────────────────────\n\nconst titleStyle =\n \"text-sm font-medium leading-sm text-info-message-title\";\n\nconst descriptionStyle =\n \"text-xs font-regular leading-xs text-info-message-description\";\n\nconst closeButtonStyle =\n \"inline-flex shrink-0 items-center justify-center p-xs rounded-base text-info-message-close hover:bg-black/5 transition-colors\";\n\n// Map info message type to Link intent\nconst typeLinkIntentMap: Record<string, \"brand\" | \"neutral\" | \"alert\" | \"success\" | \"warning\"> = {\n info: \"brand\",\n success: \"success\",\n alert: \"alert\",\n warning: \"warning\",\n empty: \"neutral\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface InfoMessageProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n VariantProps<typeof infoMessageVariants> {\n title: React.ReactNode;\n description?: React.ReactNode;\n onClose?: () => void;\n action?: React.ReactNode;\n /** Render a semantically-colored link below the description. */\n linkLabel?: string;\n linkHref?: string;\n onLinkClick?: () => void;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst InfoMessage = React.forwardRef<HTMLDivElement, InfoMessageProps>(\n ({ className, type = \"info\", title, description, onClose, action, linkLabel, linkHref, onLinkClick, ...props }, ref) => {\n const { icon, color } = typeIconMap[type ?? \"info\"];\n const isTitleOnly = !description && !linkLabel;\n\n return (\n <div\n ref={ref}\n className={cn(infoMessageVariants({ type }), isTitleOnly && \"items-center\", className)}\n role=\"status\"\n {...props}\n >\n <div className=\"flex flex-1 items-center gap-base\">\n <Icon icon={icon} size=\"sm\" className={cn(\"shrink-0\", color)} />\n <div className=\"flex flex-1 flex-col gap-2xs\">\n <span className={titleStyle}>{title}</span>\n {description && <span className={descriptionStyle}>{description}</span>}\n {linkLabel && (\n <Link\n intent={typeLinkIntentMap[type ?? \"info\"]}\n size=\"md\"\n href={linkHref}\n onClick={onLinkClick}\n >\n {linkLabel}\n </Link>\n )}\n </div>\n {action}\n </div>\n {onClose && (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onClose} className={closeButtonStyle} aria-label=\"Close\">\n <Icon icon={faXmarkSolid} size=\"md\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Close</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n );\n },\n);\n\nInfoMessage.displayName = \"InfoMessage\";\n\nexport { InfoMessage, infoMessageVariants, type InfoMessageProps };\n","import * as React from \"react\";\nimport * as ToastPrimitive from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faCircleInfoSolid,\n faCircleCheckSolid,\n faCircleExclamationSolid,\n faTriangleExclamationSolid,\n faXmarkSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst toastVariants = cva(\n [\n \"flex flex-col items-end w-[308px] gap-lg p-xl\",\n \"rounded-lg\",\n \"border border-toast-border\",\n \"bg-gradient-to-b to-background to-[60%]\",\n \"[background-size:100%_calc(100%+120px)] [background-position:0_-120px]\",\n \"shadow-md\",\n ],\n {\n variants: {\n type: {\n info: \"from-toast-info-bg\",\n success: \"from-toast-success-bg\",\n alert: \"from-toast-alert-bg\",\n warning: \"from-toast-warning-bg\",\n },\n },\n defaultVariants: { type: \"info\" },\n },\n);\n\nconst iconContainerVariants = cva(\n \"shrink-0 size-10 rounded-base overflow-clip flex items-center justify-center\",\n {\n variants: {\n type: {\n info: \"bg-toast-info-bg\",\n success: \"bg-toast-success-bg\",\n alert: \"bg-toast-alert-bg\",\n warning: \"bg-toast-warning-bg\",\n },\n },\n defaultVariants: { type: \"info\" },\n },\n);\n\n// ── Per-type icon + color mapping ────────────────────────────────────────────\n\nconst typeIconMap: Record<string, { icon: IconDefinition; color: string }> = {\n info: { icon: faCircleInfoSolid, color: \"text-toast-info-icon\" },\n success: { icon: faCircleCheckSolid, color: \"text-toast-success-icon\" },\n alert: { icon: faCircleExclamationSolid, color: \"text-toast-alert-icon\" },\n warning: { icon: faTriangleExclamationSolid, color: \"text-toast-warning-icon\" },\n};\n\n// ── Text styles ─────────────────────────────────────────────────────────────\n\nconst titleStyle =\n \"text-sm font-medium leading-sm text-toast-title\";\n\nconst subtitleStyle =\n \"text-sm font-regular leading-sm text-toast-subtitle\";\n\nconst closeButtonStyle =\n \"inline-flex shrink-0 items-center justify-center self-start p-sm rounded-lg text-toast-close hover:bg-black/5 transition-colors\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface ToastProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Root>,\n \"title\" | \"type\"\n >,\n VariantProps<typeof toastVariants> {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n onClose?: () => void;\n actions?: React.ReactNode;\n}\n\n// ── Toast Provider & Viewport ────────────────────────────────────────────────\n\nconst ToastProvider = ToastPrimitive.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Viewport\n ref={ref}\n className={cn(\n \"fixed top-0 right-0 z-[100] flex max-h-screen w-full flex-col-reverse p-xl sm:flex-col md:max-w-[420px]\",\n className,\n )}\n {...props}\n />\n));\nToastViewport.displayName = \"ToastViewport\";\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Toast = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitive.Root>,\n ToastProps\n>(({ className, type = \"info\", title, subtitle, onClose, actions, open, onOpenChange, ...props }, ref) => {\n const { icon, color } = typeIconMap[type ?? \"info\"];\n\n const handleOpenChange = (value: boolean) => {\n if (!value) onClose?.();\n onOpenChange?.(value);\n };\n\n const content = (\n <ToastPrimitive.Root\n ref={ref}\n open={open}\n onOpenChange={handleOpenChange}\n className={cn(toastVariants({ type }), !actions && \"min-h-[80px]\", className)}\n {...props}\n >\n <div className=\"flex w-full items-center gap-lg\">\n <div className={iconContainerVariants({ type })}>\n <Icon icon={icon} size=\"lg\" className={color} />\n </div>\n\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <ToastPrimitive.Title className={titleStyle}>{title}</ToastPrimitive.Title>\n {subtitle && (\n <ToastPrimitive.Description className={subtitleStyle}>\n {subtitle}\n </ToastPrimitive.Description>\n )}\n </div>\n\n {onClose && (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <ToastPrimitive.Close className={closeButtonStyle} aria-label=\"Close\">\n <Icon icon={faXmarkSolid} size=\"sm\" />\n </ToastPrimitive.Close>\n </TooltipTrigger>\n <TooltipContent>Close</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n\n {actions && (\n <div className=\"flex items-center gap-2\">{actions}</div>\n )}\n </ToastPrimitive.Root>\n );\n\n // Auto-wrap in Provider if used standalone (outside a ToastProvider)\n return (\n <ToastPrimitive.Provider swipeDirection=\"right\">\n {content}\n <ToastPrimitive.Viewport />\n </ToastPrimitive.Provider>\n );\n});\n\nToast.displayName = \"Toast\";\n\nexport {\n Toast,\n ToastProvider,\n ToastViewport,\n toastVariants,\n type ToastProps,\n};\n","import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst trackStyles = {\n base: \"peer inline-flex shrink-0 cursor-pointer items-center h-4 w-7 rounded-full transition-colors focus-visible:outline-none\",\n off: [\n \"bg-switch-off-track-default\",\n \"hover:bg-switch-off-track-hover\",\n ],\n on: [\n \"data-[state=checked]:bg-switch-on-track-default\",\n \"data-[state=checked]:hover:bg-switch-on-track-hover\",\n ],\n pressed: \"active:[box-shadow:0_0_0_3px_#316bff26]\",\n disabled: [\n \"disabled:pointer-events-none\",\n \"disabled:bg-switch-off-track-disabled\",\n \"data-[state=checked]:disabled:bg-switch-on-track-disabled\",\n ],\n};\n\nconst thumbStyle =\n \"pointer-events-none block rounded-full size-3 translate-x-0.5 bg-switch-thumb-bg shadow-md transition-transform data-[state=checked]:translate-x-[13px]\";\n\nconst labelBase =\n \"cursor-pointer select-none text-sm font-medium leading-sm\";\n\nconst labelColor = {\n default: \"text-switch-label-text\",\n disabled: \"pointer-events-none text-switch-label-disabled\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> {\n label?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Switch = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, label, disabled, id, ...props }, ref) => {\n const innerId = id ?? React.useId();\n\n return (\n <div className=\"inline-flex items-center gap-base\">\n <SwitchPrimitive.Root\n ref={ref}\n id={innerId}\n disabled={disabled}\n className={cn(\n trackStyles.base,\n trackStyles.off,\n trackStyles.on,\n trackStyles.pressed,\n trackStyles.disabled,\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb className={thumbStyle} />\n </SwitchPrimitive.Root>\n {label && (\n <label\n htmlFor={innerId}\n className={cn(labelBase, labelColor[disabled ? \"disabled\" : \"default\"])}\n >\n {label}\n </label>\n )}\n </div>\n );\n});\n\nSwitch.displayName = \"Switch\";\n\nexport { Switch, type SwitchProps };\n","import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst cardStyles = {\n base: [\n \"group relative flex w-full items-center gap-base rounded-lg border border-solid p-lg text-left transition-colors\",\n \"border-switch-card-border\",\n \"focus-visible:outline-none focus-visible:shadow-focus-ring\",\n \"disabled:pointer-events-none disabled:opacity-60\",\n \"cursor-pointer\",\n ],\n bg: [\n \"bg-switch-card-bg-off\",\n \"data-[state=checked]:bg-switch-card-bg-on\",\n ],\n};\n\nconst trackStyles = [\n \"inline-flex shrink-0 items-center h-4 w-7 rounded-full transition-colors\",\n \"bg-switch-off-track-default\",\n \"group-hover:bg-switch-off-track-hover\",\n \"group-data-[state=checked]:bg-switch-on-track-default\",\n \"group-data-[state=checked]:group-hover:bg-switch-on-track-hover\",\n \"group-disabled:bg-switch-off-track-disabled\",\n \"group-data-[state=checked]:group-disabled:bg-switch-on-track-disabled\",\n];\n\nconst thumbStyle =\n \"pointer-events-none block rounded-full size-3 translate-x-0.5 bg-switch-thumb-bg shadow-md transition-transform group-data-[state=checked]:translate-x-[13px]\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SwitchCardProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n \"title\"\n > {\n title: string;\n description?: string;\n icon?: IconDefinition;\n}\n\n// ── Component ───────────────────────────────────────────────────────────────\n\nconst SwitchCard = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n SwitchCardProps\n>(({ className, title, description, icon, ...props }, ref) => (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(cardStyles.base, cardStyles.bg, className)}\n {...props}\n >\n {icon && (\n <Icon icon={icon} size=\"xs\" className=\"shrink-0 text-switch-card-icon\" />\n )}\n <div className=\"flex flex-1 flex-col gap-2xs min-w-0 text-left\">\n <span className=\"truncate text-sm font-medium leading-sm text-switch-card-title\">\n {title}\n </span>\n {description && (\n <span className=\"text-xs font-regular leading-xs text-switch-card-description\">\n {description}\n </span>\n )}\n </div>\n <span className={cn(trackStyles)}>\n <SwitchPrimitive.Thumb className={thumbStyle} />\n </span>\n </SwitchPrimitive.Root>\n));\nSwitchCard.displayName = \"SwitchCard\";\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport { SwitchCard, type SwitchCardProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faMagnifyingGlassSolid, faXmarkSolid } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\nimport { useSidebarContext } from \"./sidebar\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst searchBarVariants = cva(\n [\n \"inline-flex w-full items-center rounded-md border transition-colors\",\n \"border-search-bar-border-default\",\n \"hover:border-search-bar-border-hover\",\n \"focus-within:border-search-bar-border-active\",\n \"focus-within:shadow-focus-ring\",\n ],\n {\n variants: {\n variant: {\n white: \"bg-search-bar-white-bg\",\n grey: \"bg-search-bar-grey-bg\",\n },\n size: {\n sm: \"gap-sm px-base py-sm\",\n md: \"gap-base px-lg py-base\",\n },\n },\n defaultVariants: { variant: \"white\", size: \"md\" },\n },\n);\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst inputStyle =\n \"flex-1 min-w-0 bg-transparent outline-none text-sm font-regular leading-sm text-search-bar-text placeholder:text-search-bar-placeholder\";\n\nconst clearButtonStyle =\n \"inline-flex shrink-0 items-center justify-center p-xs rounded-base text-search-bar-clear hover:bg-black/5 transition-colors\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SearchBarProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof searchBarVariants> {\n onClear?: () => void;\n hasShortcut?: boolean;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst SearchBar = React.forwardRef<HTMLInputElement, SearchBarProps>(\n (\n {\n className,\n variant,\n size = \"md\",\n value,\n defaultValue,\n onChange,\n onClear,\n hasShortcut = false,\n placeholder = \"Search...\",\n ...props\n },\n ref,\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n const hasValue = String(currentValue).length > 0;\n const iconSize = size === \"sm\" ? (\"xs\" as const) : (\"sm\" as const);\n\n // When inside a collapsed sidebar, show icon-only mode\n const sidebarCtx = useSidebarContext();\n const isCollapsed = sidebarCtx.isCollapsed;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalValue(e.target.value);\n onChange?.(e);\n };\n\n const handleClear = () => {\n if (!isControlled) setInternalValue(\"\");\n onClear?.();\n };\n\n return (\n <div className={cn(searchBarVariants({ variant, size }), isCollapsed && \"justify-center\", className)}>\n <Icon\n icon={faMagnifyingGlassSolid}\n size={iconSize}\n className=\"shrink-0 text-search-bar-icon\"\n />\n {!isCollapsed && (\n <>\n <input\n ref={ref}\n type=\"text\"\n value={currentValue}\n defaultValue={undefined}\n onChange={handleChange}\n placeholder={placeholder}\n className={inputStyle}\n {...props}\n />\n {hasShortcut && !hasValue && (\n <span className=\"shrink-0 text-xs text-search-bar-placeholder\">\n ⌘K\n </span>\n )}\n {hasValue && (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={handleClear}\n className={clearButtonStyle}\n aria-label=\"Erase\"\n >\n <Icon icon={faXmarkSolid} size=\"xs\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Erase</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </>\n )}\n </div>\n );\n },\n);\n\nSearchBar.displayName = \"SearchBar\";\n\nexport { SearchBar, searchBarVariants, type SearchBarProps };\n","import * as React from \"react\";\nimport { Icon, faArrowLeftFromLineOutline, faArrowRightFromLineOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { ProductLogo } from \"./product-logo\";\n\n// ── Context ─────────────────────────────────────────────────────────────────\n\ninterface SidebarContextValue {\n isCollapsed: boolean;\n isHovered: boolean;\n setCollapsed: (collapsed: boolean) => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue>({\n isCollapsed: false,\n isHovered: false,\n setCollapsed: () => {},\n});\n\nfunction useSidebarContext() {\n return React.useContext(SidebarContext);\n}\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n isCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\ninterface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {}\n\ninterface SidebarFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n// ── SidebarHeader ───────────────────────────────────────────────────────────\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { isCollapsed, isHovered, setCollapsed } = useSidebarContext();\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center shrink-0 h-[44px] border-b border-sidebar-border\",\n isCollapsed ? \"justify-center px-xl\" : \"justify-between px-xl\",\n className,\n )}\n {...props}\n >\n {isCollapsed ? (\n // Collapsed: show picto, on sidebar hover show expand button\n isHovered ? (\n <button\n onClick={() => setCollapsed(false)}\n className=\"flex items-center justify-center size-6 rounded-base hover:bg-sidebar-item-hover-bg transition-colors cursor-pointer\"\n aria-label=\"Expand sidebar\"\n >\n <Icon icon={faArrowRightFromLineOutline} size=\"xs\" className=\"text-sidebar-item-default-icon\" />\n </button>\n ) : (\n <ProductLogo product=\"lemlist\" size=\"sm\" hasText={false} />\n )\n ) : (\n // Expanded: logo + collapse button\n <>\n <ProductLogo product=\"lemlist\" size=\"sm\" hasText />\n <button\n onClick={() => setCollapsed(true)}\n className=\"flex items-center justify-center size-6 rounded-base hover:bg-sidebar-item-hover-bg transition-colors cursor-pointer\"\n aria-label=\"Collapse sidebar\"\n >\n <Icon icon={faArrowLeftFromLineOutline} size=\"xs\" className=\"text-sidebar-item-default-icon\" />\n </button>\n </>\n )}\n </div>\n );\n },\n);\n\nSidebarHeader.displayName = \"SidebarHeader\";\n\n// ── Sidebar ──────────────────────────────────────────────────────────────────\n\nconst Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ className, isCollapsed: isCollapsedProp = false, onCollapsedChange, children, ...props }, ref) => {\n const [isCollapsedInternal, setCollapsedInternal] = React.useState(isCollapsedProp);\n const [isHovered, setIsHovered] = React.useState(false);\n\n // Sync with external prop\n React.useEffect(() => {\n setCollapsedInternal(isCollapsedProp);\n }, [isCollapsedProp]);\n\n const setCollapsed = React.useCallback(\n (collapsed: boolean) => {\n setCollapsedInternal(collapsed);\n onCollapsedChange?.(collapsed);\n },\n [onCollapsedChange],\n );\n\n return (\n <SidebarContext.Provider value={{ isCollapsed: isCollapsedInternal, isHovered, setCollapsed }}>\n <aside\n ref={ref}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n \"flex flex-col shrink-0 bg-sidebar-bg border-r border-sidebar-border h-full transition-[width] duration-200\",\n isCollapsedInternal ? \"w-[72px]\" : \"w-[298px]\",\n className,\n )}\n {...props}\n >\n <SidebarHeader />\n {(() => {\n const childArray = React.Children.toArray(children);\n const footer = childArray.filter(\n (child) => React.isValidElement(child) && (child.type as any)?.displayName === \"SidebarFooter\",\n );\n const rest = childArray.filter(\n (child) => !(React.isValidElement(child) && (child.type as any)?.displayName === \"SidebarFooter\"),\n );\n return (\n <>\n <div className=\"flex flex-col gap-xl p-xl flex-1 overflow-y-auto\">\n {rest}\n </div>\n {footer}\n </>\n );\n })()}\n </aside>\n </SidebarContext.Provider>\n );\n },\n);\n\nSidebar.displayName = \"Sidebar\";\n\n// ── SidebarSection ───────────────────────────────────────────────────────────\n\nconst SidebarSection = React.forwardRef<HTMLDivElement, SidebarSectionProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col w-full\", className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nSidebarSection.displayName = \"SidebarSection\";\n\n// ── SidebarFooter ────────────────────────────────────────────────────────────\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col p-xl bg-sidebar-footer-bg border-t border-sidebar-border mt-auto w-full\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nSidebarFooter.displayName = \"SidebarFooter\";\n\nexport {\n Sidebar,\n SidebarHeader,\n SidebarSection,\n SidebarFooter,\n useSidebarContext,\n type SidebarProps,\n type SidebarSectionProps,\n type SidebarFooterProps,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Lemlist SVGs (light) ────────────────────────────────────────────────────\nimport lemlistSmPicto from \"../../assets/logos/lemlist-sm-picto.svg\";\nimport lemlistMdPicto from \"../../assets/logos/lemlist-md-picto.svg\";\nimport lemlistLgPicto from \"../../assets/logos/lemlist-lg-picto.svg\";\nimport lemlistXlPicto from \"../../assets/logos/lemlist-xl-picto.svg\";\nimport lemlistSmLogotype from \"../../assets/logos/lemlist-sm-logotype.svg\";\nimport lemlistMdLogotype from \"../../assets/logos/lemlist-md-logotype.svg\";\nimport lemlistLgLogotype from \"../../assets/logos/lemlist-lg-logotype.svg\";\n\n// ── Lemlist SVGs (dark) ─────────────────────────────────────────────────────\nimport lemlistSmPictoDark from \"../../assets/logos/lemlist-sm-picto-dark.svg\";\nimport lemlistMdPictoDark from \"../../assets/logos/lemlist-md-picto-dark.svg\";\nimport lemlistLgPictoDark from \"../../assets/logos/lemlist-lg-picto-dark.svg\";\nimport lemlistXlPictoDark from \"../../assets/logos/lemlist-xl-picto-dark.svg\";\nimport lemlistSmLogotypeDark from \"../../assets/logos/lemlist-sm-logotype-dark.svg\";\nimport lemlistMdLogotypeDark from \"../../assets/logos/lemlist-md-logotype-dark.svg\";\nimport lemlistLgLogotypeDark from \"../../assets/logos/lemlist-lg-logotype-dark.svg\";\n\n// ── Lemwarm SVGs (light) ────────────────────────────────────────────────────\nimport lemwarmSmPicto from \"../../assets/logos/lemwarm-sm-picto.svg\";\nimport lemwarmMdPicto from \"../../assets/logos/lemwarm-md-picto.svg\";\nimport lemwarmLgPicto from \"../../assets/logos/lemwarm-lg-picto.svg\";\nimport lemwarmXlPicto from \"../../assets/logos/lemwarm-xl-picto.svg\";\nimport lemwarmSmLogotype from \"../../assets/logos/lemwarm-sm-logotype.svg\";\nimport lemwarmMdLogotype from \"../../assets/logos/lemwarm-md-logotype.svg\";\nimport lemwarmLgLogotype from \"../../assets/logos/lemwarm-lg-logotype.svg\";\n\n// ── Lemwarm SVGs (dark) ─────────────────────────────────────────────────────\nimport lemwarmSmPictoDark from \"../../assets/logos/lemwarm-sm-picto-dark.svg\";\nimport lemwarmMdPictoDark from \"../../assets/logos/lemwarm-md-picto-dark.svg\";\nimport lemwarmLgPictoDark from \"../../assets/logos/lemwarm-lg-picto-dark.svg\";\nimport lemwarmXlPictoDark from \"../../assets/logos/lemwarm-xl-picto-dark.svg\";\nimport lemwarmSmLogotypeDark from \"../../assets/logos/lemwarm-sm-logotype-dark.svg\";\nimport lemwarmMdLogotypeDark from \"../../assets/logos/lemwarm-md-logotype-dark.svg\";\nimport lemwarmLgLogotypeDark from \"../../assets/logos/lemwarm-lg-logotype-dark.svg\";\n\n// ── Lemcal SVGs (light) ─────────────────────────────────────────────────────\nimport lemcalSmPicto from \"../../assets/logos/lemcal-sm-picto.svg\";\nimport lemcalMdPicto from \"../../assets/logos/lemcal-md-picto.svg\";\nimport lemcalLgPicto from \"../../assets/logos/lemcal-lg-picto.svg\";\nimport lemcalXlPicto from \"../../assets/logos/lemcal-xl-picto.svg\";\nimport lemcalSmLogotype from \"../../assets/logos/lemcal-sm-logotype.svg\";\nimport lemcalMdLogotype from \"../../assets/logos/lemcal-md-logotype.svg\";\nimport lemcalLgLogotype from \"../../assets/logos/lemcal-lg-logotype.svg\";\n\n// ── Lemcal SVGs (dark) ──────────────────────────────────────────────────────\nimport lemcalSmPictoDark from \"../../assets/logos/lemcal-sm-picto-dark.svg\";\nimport lemcalMdPictoDark from \"../../assets/logos/lemcal-md-picto-dark.svg\";\nimport lemcalLgPictoDark from \"../../assets/logos/lemcal-lg-picto-dark.svg\";\nimport lemcalXlPictoDark from \"../../assets/logos/lemcal-xl-picto-dark.svg\";\nimport lemcalSmLogotypeDark from \"../../assets/logos/lemcal-sm-logotype-dark.svg\";\nimport lemcalMdLogotypeDark from \"../../assets/logos/lemcal-md-logotype-dark.svg\";\nimport lemcalLgLogotypeDark from \"../../assets/logos/lemcal-lg-logotype-dark.svg\";\n\n// ── CVA variant definitions ─────────────────────────────────────────────────\n\nconst productLogoVariants = cva([\"inline-flex items-center shrink-0\"], {\n variants: {\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n xl: \"\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n },\n});\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\ntype Product = \"lemlist\" | \"lemwarm\" | \"lemcal\";\ntype Size = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\ninterface ProductLogoProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n VariantProps<typeof productLogoVariants> {\n product?: Product;\n hasText?: boolean;\n}\n\n// ── SVG lookup ──────────────────────────────────────────────────────────────\n\ntype SvgEntry = { picto: string; logotype?: string };\ntype ThemeSvgMap = Record<Product, Record<Size, { light: SvgEntry; dark: SvgEntry }>>;\n\nconst svgMap: ThemeSvgMap = {\n lemlist: {\n sm: { light: { picto: lemlistSmPicto, logotype: lemlistSmLogotype }, dark: { picto: lemlistSmPictoDark, logotype: lemlistSmLogotypeDark } },\n md: { light: { picto: lemlistMdPicto, logotype: lemlistMdLogotype }, dark: { picto: lemlistMdPictoDark, logotype: lemlistMdLogotypeDark } },\n lg: { light: { picto: lemlistLgPicto, logotype: lemlistLgLogotype }, dark: { picto: lemlistLgPictoDark, logotype: lemlistLgLogotypeDark } },\n xl: { light: { picto: lemlistXlPicto }, dark: { picto: lemlistXlPictoDark } },\n },\n lemwarm: {\n sm: { light: { picto: lemwarmSmPicto, logotype: lemwarmSmLogotype }, dark: { picto: lemwarmSmPictoDark, logotype: lemwarmSmLogotypeDark } },\n md: { light: { picto: lemwarmMdPicto, logotype: lemwarmMdLogotype }, dark: { picto: lemwarmMdPictoDark, logotype: lemwarmMdLogotypeDark } },\n lg: { light: { picto: lemwarmLgPicto, logotype: lemwarmLgLogotype }, dark: { picto: lemwarmLgPictoDark, logotype: lemwarmLgLogotypeDark } },\n xl: { light: { picto: lemwarmXlPicto }, dark: { picto: lemwarmXlPictoDark } },\n },\n lemcal: {\n sm: { light: { picto: lemcalSmPicto, logotype: lemcalSmLogotype }, dark: { picto: lemcalSmPictoDark, logotype: lemcalSmLogotypeDark } },\n md: { light: { picto: lemcalMdPicto, logotype: lemcalMdLogotype }, dark: { picto: lemcalMdPictoDark, logotype: lemcalMdLogotypeDark } },\n lg: { light: { picto: lemcalLgPicto, logotype: lemcalLgLogotype }, dark: { picto: lemcalLgPictoDark, logotype: lemcalLgLogotypeDark } },\n xl: { light: { picto: lemcalXlPicto }, dark: { picto: lemcalXlPictoDark } },\n },\n};\n\n// ── Dark mode detection ─────────────────────────────────────────────────────\n\nfunction useIsDarkTheme() {\n const [isDark, setIsDark] = React.useState(false);\n\n React.useEffect(() => {\n const root = document.documentElement;\n const check = () => setIsDark(root.getAttribute(\"data-theme\") === \"dark\");\n check();\n\n const observer = new MutationObserver(check);\n observer.observe(root, { attributes: true, attributeFilter: [\"data-theme\"] });\n return () => observer.disconnect();\n }, []);\n\n return isDark;\n}\n\n// ── Helper: render SVG string as data URI ───────────────────────────────────\n\nfunction SvgImage({ svg, alt, className }: { svg: string; alt: string; className?: string }) {\n const dataUri = React.useMemo(\n () => `data:image/svg+xml,${encodeURIComponent(svg)}`,\n [svg],\n );\n return <img src={dataUri} alt={alt} className={className} />;\n}\n\n// ── Component ───────────────────────────────────────────────────────────────\n\nconst ProductLogo = React.forwardRef<HTMLDivElement, ProductLogoProps>(\n ({ className, product = \"lemlist\", size = \"lg\", hasText = true, ...props }, ref) => {\n const resolvedSize = (size ?? \"lg\") as Size;\n const isDark = useIsDarkTheme();\n const entry = svgMap[product][resolvedSize][isDark ? \"dark\" : \"light\"];\n\n // Pick the right SVG: logotype if hasText + available, otherwise picto\n const svg = hasText && entry.logotype ? entry.logotype : entry.picto;\n\n return (\n <div\n ref={ref}\n className={cn(productLogoVariants({ size }), className)}\n {...props}\n >\n <SvgImage svg={svg} alt={`${product} logo`} className=\"h-auto w-auto\" />\n </div>\n );\n },\n);\n\nProductLogo.displayName = \"ProductLogo\";\n\nexport { ProductLogo, productLogoVariants, type ProductLogoProps, type Product };\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#316BFF\"/>\n<path d=\"M14.6428 13.3821V14.1178C14.6428 14.4076 14.4076 14.6428 14.1178 14.6428H7.41337C6.30968 14.5723 5.42773 13.6903 5.35718 12.5866V5.88215C5.35718 5.59237 5.59236 5.35719 5.88215 5.35719H6.61794C6.90772 5.35719 7.14291 5.59237 7.14291 5.88215V11.4922C7.14291 12.2464 7.75355 12.8571 8.50782 12.8571H14.1178C14.4076 12.8571 14.6428 13.0923 14.6428 13.3821Z\" fill=\"white\"/>\n<path d=\"M14.1178 5.35718H9.45362C9.16369 5.35718 8.92865 5.59222 8.92865 5.88215V6.61795C8.92865 6.90788 9.16369 7.14291 9.45362 7.14291H14.1178C14.4078 7.14291 14.6428 6.90788 14.6428 6.61795V5.88215C14.6428 5.59222 14.4078 5.35718 14.1178 5.35718Z\" fill=\"white\"/>\n<path d=\"M13.2846 9.10755H9.45362C9.16369 9.10755 8.92865 9.34259 8.92865 9.63252V10.3683C8.92865 10.6582 9.16369 10.8933 9.45362 10.8933H13.2846C13.5746 10.8933 13.8096 10.6582 13.8096 10.3683V9.63252C13.8096 9.34259 13.5746 9.10755 13.2846 9.10755Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#316BFF\"/>\n<path d=\"M20.4999 18.7349V19.765C20.4999 20.1707 20.1707 20.4999 19.765 20.4999H10.3787C8.83356 20.4012 7.59884 19.1664 7.50006 17.6213V8.23502C7.50006 7.82932 7.82932 7.50006 8.23502 7.50006H9.26513C9.67082 7.50006 10.0001 7.82932 10.0001 8.23502V16.089C10.0001 17.145 10.855 17.9999 11.911 17.9999H19.765C20.1707 17.9999 20.4999 18.3292 20.4999 18.7349Z\" fill=\"white\"/>\n<path d=\"M19.765 7.50006H13.2351C12.8292 7.50006 12.5001 7.82911 12.5001 8.23501V9.26513C12.5001 9.67103 12.8292 10.0001 13.2351 10.0001H19.765C20.1709 10.0001 20.5 9.67103 20.5 9.26513V8.23501C20.5 7.82911 20.1709 7.50006 19.765 7.50006Z\" fill=\"white\"/>\n<path d=\"M18.5985 12.7506H13.2351C12.8292 12.7506 12.5001 13.0796 12.5001 13.4855V14.5156C12.5001 14.9215 12.8292 15.2506 13.2351 15.2506H18.5985C19.0044 15.2506 19.3334 14.9215 19.3334 14.5156V13.4855C19.3334 13.0796 19.0044 12.7506 18.5985 12.7506Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55117 29.4488 0 26.3018 0Z\" fill=\"#316BFF\"/>\n<path d=\"M23.4285 21.4113V22.5886C23.4285 23.0522 23.0522 23.4285 22.5886 23.4285H11.8614C10.0955 23.3156 8.68442 21.9045 8.57153 20.1386V9.41145C8.57153 8.9478 8.94783 8.5715 9.41148 8.5715H10.5888C11.0524 8.5715 11.4287 8.9478 11.4287 9.41145V18.3875C11.4287 19.5943 12.4057 20.5713 13.6126 20.5713H22.5886C23.0522 20.5713 23.4285 20.9476 23.4285 21.4113Z\" fill=\"white\"/>\n<path d=\"M22.5886 8.5715H15.1258C14.6619 8.5715 14.2859 8.94755 14.2859 9.41144V10.5887C14.2859 11.0526 14.6619 11.4287 15.1258 11.4287H22.5886C23.0525 11.4287 23.4286 11.0526 23.4286 10.5887V9.41144C23.4286 8.94755 23.0525 8.5715 22.5886 8.5715Z\" fill=\"white\"/>\n<path d=\"M21.2554 14.5721H15.1258C14.6619 14.5721 14.2859 14.9481 14.2859 15.412V16.5893C14.2859 17.0532 14.6619 17.4293 15.1258 17.4293H21.2554C21.7193 17.4293 22.0954 17.0532 22.0954 16.5893V15.412C22.0954 14.9481 21.7193 14.5721 21.2554 14.5721Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12275V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12275C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#316BFF\"/>\n<path d=\"M29.2856 26.7641V28.2357C29.2856 28.8152 28.8152 29.2856 28.2357 29.2856H14.8267C12.6194 29.1445 10.8555 27.3806 10.7144 25.1732V11.7643C10.7144 11.1847 11.1847 10.7144 11.7643 10.7144H13.2359C13.8154 10.7144 14.2858 11.1847 14.2858 11.7643V22.9843C14.2858 24.4929 15.5071 25.7142 17.0156 25.7142H28.2357C28.8152 25.7142 29.2856 26.1845 29.2856 26.7641Z\" fill=\"white\"/>\n<path d=\"M28.2357 10.7144H18.9072C18.3274 10.7144 17.8573 11.1844 17.8573 11.7643V13.2359C17.8573 13.8158 18.3274 14.2858 18.9072 14.2858H28.2357C28.8156 14.2858 29.2856 13.8158 29.2856 13.2359V11.7643C29.2856 11.1844 28.8156 10.7144 28.2357 10.7144Z\" fill=\"white\"/>\n<path d=\"M26.5692 18.2151H18.9072C18.3274 18.2151 17.8573 18.6852 17.8573 19.265V20.7366C17.8573 21.3165 18.3274 21.7866 18.9072 21.7866H26.5692C27.1491 21.7866 27.6192 21.3165 27.6192 20.7366V19.265C27.6192 18.6852 27.1491 18.2151 26.5692 18.2151Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"81\" height=\"20\" viewBox=\"0 0 81 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M62.545 3.47999H61.5715C61.2816 3.47999 61.0465 3.71501 61.0465 4.00493V4.87132C61.0465 5.16124 61.2816 5.39627 61.5715 5.39627H62.545C62.8349 5.39627 63.0699 5.16124 63.0699 4.87132V4.00493C63.0699 3.71501 62.8349 3.47999 62.545 3.47999Z\" fill=\"#213856\"/>\n<path d=\"M27.3053 4.01872V16.0615C27.3053 16.3512 27.0701 16.5864 26.7803 16.5864H25.9009C25.6112 16.5864 25.376 16.3512 25.376 16.0615V4.01872C25.376 3.72895 25.6112 3.49377 25.9009 3.49377H26.7803C27.0701 3.49377 27.3053 3.72895 27.3053 4.01872Z\" fill=\"#213856\"/>\n<path d=\"M31.0698 12.6234C31.2387 14.0286 32.3994 14.9457 34.0851 14.9457C34.8663 14.9457 35.8162 14.698 36.4361 14.2469C36.6435 14.0957 36.9283 14.1134 37.113 14.2923L37.6246 14.7887C37.8488 15.0062 37.8371 15.3724 37.5952 15.569C36.6326 16.3518 35.277 16.744 34.0473 16.744C31.0127 16.744 29.0649 14.8147 29.0649 11.8557C29.0649 8.89665 31.032 7.04211 33.9163 7.04211C36.8006 7.04211 38.7307 8.69675 38.5955 12.1203C38.5846 12.4016 38.3519 12.6242 38.0706 12.6242H31.069L31.0698 12.6234ZM36.7074 10.9939C36.5948 9.53331 35.5273 8.76479 33.9726 8.76479C32.5674 8.76479 31.4066 9.53247 31.1068 10.9939H36.7074Z\" fill=\"#213856\"/>\n<path d=\"M46.4655 16.0579V11.192C46.4655 9.97492 45.4803 8.96114 44.2633 8.9855C42.9236 9.01153 42.082 10.1437 42.082 11.4952V16.0579C42.082 16.3477 41.8468 16.5829 41.5571 16.5829H40.6777C40.3879 16.5829 40.1527 16.3477 40.1527 16.0579V7.77804C40.1527 7.48827 40.3879 7.25309 40.6777 7.25309H41.4789C41.7477 7.25309 41.9728 7.45551 42.0014 7.7226L42.0829 8.55462C42.607 7.54336 43.6938 7.16875 44.6673 7.16875C45.8474 7.16875 47.0459 7.65591 47.5709 9.02329C48.3201 7.65591 49.4817 7.18807 50.7365 7.18807C53.284 7.18807 54.6514 8.79903 54.6514 11.4591V16.0596C54.6514 16.3494 54.4162 16.5846 54.1264 16.5846H53.2286C52.9388 16.5846 52.7036 16.3494 52.7036 16.0596V11.0895C52.7036 9.95644 51.7999 9.00733 50.6668 9.00565C49.2969 9.00313 48.4142 10.1278 48.4142 11.4969V16.0596C48.4142 16.3494 48.179 16.5846 47.8892 16.5846H46.9913C46.7016 16.5846 46.4664 16.3494 46.4664 16.0596L46.4655 16.0579Z\" fill=\"#213856\"/>\n<path d=\"M58.7712 4.0031V16.0599C58.7712 16.3497 58.536 16.5849 58.2463 16.5849H57.3669C57.0771 16.5849 56.8419 16.3497 56.8419 16.0599V4.0031C56.8419 3.71333 57.0771 3.47815 57.3669 3.47815H58.2463C58.536 3.47815 58.7712 3.71333 58.7712 4.0031Z\" fill=\"#213856\"/>\n<path d=\"M61.0936 7.77265V16.066C61.0936 16.3558 61.3288 16.591 61.6185 16.591H62.4979C62.7877 16.591 63.0229 16.3558 63.0229 16.066V7.77265C63.0229 7.48288 62.7877 7.2477 62.4979 7.2477H61.6185C61.3288 7.2477 61.0936 7.48288 61.0936 7.77265Z\" fill=\"#213856\"/>\n<path d=\"M71.4968 9.11071C71.3221 9.31565 71.0223 9.34841 70.8005 9.1947C70.1748 8.76131 69.5003 8.63112 68.736 8.63112C67.5559 8.61264 66.7689 9.00572 66.7689 9.73645C66.7874 10.5041 67.5929 10.804 68.773 10.9165C70.4772 11.066 72.7063 11.4406 72.6878 13.8201C72.6693 15.5436 71.1516 16.7422 68.7545 16.7422C67.3863 16.7422 66.0172 16.4608 64.8631 15.3706C64.6716 15.1892 64.6481 14.8919 64.8052 14.6794L65.1991 14.146C65.3755 13.9075 65.7182 13.8588 65.9475 14.0469C66.7798 14.7306 67.8616 15.0212 68.7923 15.0372C69.7103 15.0372 70.7401 14.7004 70.7594 13.8386C70.7778 13.0147 69.9917 12.6963 68.6243 12.5645C66.8823 12.3956 64.8783 11.8337 64.8598 9.79272C64.8598 7.75088 66.9764 6.9832 68.6999 6.9832C69.9203 6.9832 70.9064 7.21669 71.8118 7.86175C72.0629 8.04066 72.1074 8.39678 71.9075 8.63112L71.4985 9.11071H71.4968Z\" fill=\"#213856\"/>\n<path d=\"M76.6852 4.43747C77.0166 4.43747 77.2852 4.7061 77.2852 5.03747L77.2936 7.25363H79.5129C79.809 7.25363 80.0493 7.49393 80.0493 7.79002V8.42081C80.0493 8.71689 79.809 8.95719 79.5129 8.95719H77.2739L77.2654 13.4203C77.2654 14.4158 77.7057 14.9702 78.624 14.9702C78.854 14.9702 79.1037 14.9222 79.3501 14.8424C79.6247 14.7531 79.9199 14.9093 80.0126 15.1831L80.2374 15.843C80.3327 16.1237 80.1834 16.4309 79.9019 16.5245C79.4436 16.6772 79.0016 16.7502 78.5081 16.7502C76.4604 16.8077 75.2933 15.6396 75.2933 13.4203L75.3017 8.95719H74.0212C73.7251 8.95719 73.4848 8.71689 73.4848 8.42081V7.79002C73.4848 7.49393 73.7251 7.25363 74.0212 7.25363H75.3034L75.295 5.03747C75.295 4.7061 75.5636 4.43747 75.895 4.43747H76.6852Z\" fill=\"#213856\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.56138 0H16.4386C18.4055 0 20 1.59448 20 3.56138V16.4386C20 18.4055 18.4055 20 16.4386 20H3.56138C1.59448 20 0 18.4055 0 16.4386V3.56138C0 1.59448 1.59448 0 3.56138 0Z\" fill=\"#316BFF\"/>\n<path d=\"M9.59338 5.37553H14.115C14.4049 5.37553 14.64 5.61056 14.64 5.9005V6.71468C14.64 7.00461 14.4049 7.23965 14.115 7.23965H9.59338C9.30345 7.23965 9.06842 7.00461 9.06842 6.71468V5.9005C9.06842 5.61056 9.30345 5.37553 9.59338 5.37553Z\" fill=\"white\"/>\n<path d=\"M9.59769 9.0885H13.187C13.4769 9.0885 13.712 9.32354 13.712 9.61347V10.424C13.712 10.7139 13.4769 10.949 13.187 10.949H9.59769C9.30776 10.949 9.07273 10.7139 9.07273 10.424V9.61347C9.07273 9.32354 9.30776 9.0885 9.59769 9.0885Z\" fill=\"white\"/>\n<path d=\"M14.6428 13.3237V14.1353C14.6428 14.4251 14.4076 14.6602 14.1178 14.6602H7.41338C6.30969 14.5897 5.42775 13.7077 5.35719 12.604V5.86472C5.35719 5.57494 5.59238 5.33975 5.88216 5.33975H6.68621C6.976 5.33975 7.21118 5.57494 7.21118 5.86472V11.4533C7.21118 12.2076 7.75356 12.7987 8.50784 12.7987H14.1178C14.4076 12.7987 14.6428 13.0339 14.6428 13.3237Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"112\" height=\"28\" viewBox=\"0 0 112 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M87.2726 4.87198H85.9143C85.5097 4.87198 85.1818 5.20102 85.1818 5.60691V6.81985C85.1818 7.22574 85.5097 7.55478 85.9143 7.55478H87.2726C87.6771 7.55478 88.0051 7.22574 88.0051 6.81985V5.60691C88.0051 5.20102 87.6771 4.87198 87.2726 4.87198Z\" fill=\"#213856\"/>\n<path d=\"M38.1006 5.62621V22.4861C38.1006 22.8917 37.7725 23.221 37.3682 23.221H36.1411C35.7367 23.221 35.4086 22.8917 35.4086 22.4861V5.62621C35.4086 5.22053 35.7367 4.89128 36.1411 4.89128H37.3682C37.7725 4.89128 38.1006 5.22053 38.1006 5.62621Z\" fill=\"#213856\"/>\n<path d=\"M43.3535 17.6727C43.5891 19.64 45.2088 20.924 47.561 20.924C48.6509 20.924 49.9764 20.5772 50.8413 19.9457C51.1308 19.734 51.5281 19.7587 51.786 20.0092L52.4997 20.7042C52.8126 21.0087 52.7962 21.5214 52.4587 21.7966C51.1156 22.8925 49.224 23.4416 47.5082 23.4416C43.2738 23.4416 40.556 20.7406 40.556 16.598C40.556 12.4553 43.3008 9.85896 47.3254 9.85896C51.35 9.85896 54.0432 12.1754 53.8545 16.9684C53.8393 17.3623 53.5147 17.6739 53.122 17.6739H43.3523L43.3535 17.6727ZM51.2199 15.3915C51.0629 13.3466 49.5733 12.2707 47.4039 12.2707C45.4432 12.2707 43.8235 13.3455 43.4051 15.3915H51.2199Z\" fill=\"#213856\"/>\n<path d=\"M64.8361 22.4811V15.6687C64.8361 13.9649 63.4613 12.5456 61.7631 12.5797C59.8938 12.6161 58.7195 14.2012 58.7195 16.0932V22.4811C58.7195 22.8868 58.3913 23.216 57.987 23.216H56.7599C56.3556 23.216 56.0274 22.8868 56.0274 22.4811V10.8893C56.0274 10.4836 56.3556 10.1543 56.7599 10.1543H57.878C58.253 10.1543 58.5671 10.4377 58.6069 10.8116L58.7206 11.9765C59.4519 10.5607 60.9685 10.0363 62.3268 10.0363C63.9735 10.0363 65.6459 10.7183 66.3784 12.6326C67.4238 10.7183 69.0447 10.0633 70.7956 10.0633C74.3503 10.0633 76.2582 12.3186 76.2582 16.0427V22.4835C76.2582 22.8891 75.9301 23.2184 75.5257 23.2184H74.2729C73.8686 23.2184 73.5404 22.8891 73.5404 22.4835V15.5253C73.5404 13.939 72.2793 12.6103 70.6983 12.6079C68.7868 12.6044 67.5551 14.1789 67.5551 16.0956V22.4835C67.5551 22.8891 67.2269 23.2184 66.8226 23.2184H65.5697C65.1654 23.2184 64.8372 22.8891 64.8372 22.4835L64.8361 22.4811Z\" fill=\"#213856\"/>\n<path d=\"M82.0068 5.60434V22.4839C82.0068 22.8896 81.6787 23.2188 81.2743 23.2188H80.0473C79.6429 23.2188 79.3148 22.8896 79.3148 22.4839V5.60434C79.3148 5.19866 79.6429 4.86941 80.0473 4.86941H81.2743C81.6787 4.86941 82.0068 5.19866 82.0068 5.60434Z\" fill=\"#213856\"/>\n<path d=\"M85.2474 10.8817V22.4924C85.2474 22.8981 85.5755 23.2274 85.9799 23.2274H87.207C87.6113 23.2274 87.9394 22.8981 87.9394 22.4924V10.8817C87.9394 10.476 87.6113 10.1468 87.207 10.1468H85.9799C85.5755 10.1468 85.2474 10.476 85.2474 10.8817Z\" fill=\"#213856\"/>\n<path d=\"M99.7636 12.755C99.5199 13.0419 99.1014 13.0878 98.792 12.8726C97.9189 12.2658 96.9778 12.0836 95.9113 12.0836C94.2647 12.0577 93.1665 12.608 93.1665 13.631C93.1923 14.7058 94.3162 15.1256 95.9629 15.2831C98.3408 15.4925 101.451 16.0169 101.426 19.3482C101.4 21.7611 99.282 23.4391 95.9371 23.4391C94.0279 23.4391 92.1176 23.0452 90.5073 21.5189C90.2401 21.2649 90.2072 20.8486 90.4264 20.5511L90.9761 19.8044C91.2222 19.4705 91.7004 19.4023 92.0203 19.6657C93.1817 20.6228 94.6913 21.0297 95.9898 21.052C97.2708 21.052 98.7077 20.5805 98.7346 19.3741C98.7604 18.2205 97.6634 17.7749 95.7554 17.5902C93.3247 17.3539 90.5284 16.5672 90.5026 13.7098C90.5026 10.8512 93.456 9.77648 95.8609 9.77648C97.5638 9.77648 98.9397 10.1034 100.203 11.0065C100.554 11.2569 100.616 11.7555 100.337 12.0836L99.766 12.755H99.7636Z\" fill=\"#213856\"/>\n<path d=\"M107.003 6.21246C107.466 6.21246 107.84 6.58854 107.84 7.05246L107.852 10.1551H110.949C111.362 10.1551 111.697 10.4915 111.697 10.906V11.7891C111.697 12.2037 111.362 12.5401 110.949 12.5401H107.825L107.813 18.7884C107.813 20.1821 108.427 20.9583 109.709 20.9583C110.03 20.9583 110.378 20.891 110.722 20.7793C111.105 20.6543 111.517 20.873 111.646 21.2563L111.96 22.1802C112.093 22.5731 111.884 23.0033 111.492 23.1342C110.852 23.3481 110.235 23.4502 109.547 23.4502C106.69 23.5307 105.061 21.8955 105.061 18.7884L105.073 12.5401H103.286C102.873 12.5401 102.538 12.2037 102.538 11.7891V10.906C102.538 10.4915 102.873 10.1551 103.286 10.1551H105.075L105.063 7.05246C105.063 6.58854 105.438 6.21246 105.901 6.21246H107.003Z\" fill=\"#213856\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.9694 0H22.9378C25.6823 0 27.9072 2.23228 27.9072 4.98593V23.0141C27.9072 25.7677 25.6823 28 22.9378 28H4.9694C2.22487 28 0 25.7677 0 23.0141V4.98593C0 2.23228 2.22487 0 4.9694 0Z\" fill=\"#316BFF\"/>\n<path d=\"M13.3862 7.52574H19.6955C20.1 7.52574 20.428 7.85479 20.428 8.26069V9.40055C20.428 9.80646 20.1 10.1355 19.6955 10.1355H13.3862C12.9816 10.1355 12.6537 9.80646 12.6537 9.40055V8.26069C12.6537 7.85479 12.9816 7.52574 13.3862 7.52574Z\" fill=\"white\"/>\n<path d=\"M13.3922 12.7239H18.4006C18.8051 12.7239 19.1331 13.053 19.1331 13.4589V14.5936C19.1331 14.9995 18.8051 15.3286 18.4006 15.3286H13.3922C12.9877 15.3286 12.6597 14.9995 12.6597 14.5936V13.4589C12.6597 13.053 12.9877 12.7239 13.3922 12.7239Z\" fill=\"white\"/>\n<path d=\"M20.432 18.6532V19.7894C20.432 20.1951 20.1038 20.5243 19.6994 20.5243H10.3443C8.80427 20.4256 7.57365 19.1908 7.47519 17.6457V8.2106C7.47519 7.80491 7.80336 7.47565 8.20771 7.47565H9.32966C9.73401 7.47565 10.0622 7.80491 10.0622 8.2106V16.0347C10.0622 17.0907 10.819 17.9182 11.8715 17.9182H19.6994C20.1038 17.9182 20.432 18.2475 20.432 18.6532Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"128\" height=\"32\" viewBox=\"0 0 128 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M99.7401 5.56798H98.1877C97.7254 5.56798 97.3506 5.94402 97.3506 6.40789V7.79412C97.3506 8.25799 97.7254 8.63403 98.1877 8.63403H99.7401C100.202 8.63403 100.577 8.25799 100.577 7.79412V6.40789C100.577 5.94402 100.202 5.56798 99.7401 5.56798Z\" fill=\"#213856\"/>\n<path d=\"M43.5436 6.42995V25.6984C43.5436 26.162 43.1686 26.5383 42.7065 26.5383H41.3041C40.842 26.5383 40.467 26.162 40.467 25.6984V6.42995C40.467 5.96632 40.842 5.59003 41.3041 5.59003H42.7065C43.1686 5.59003 43.5436 5.96632 43.5436 6.42995Z\" fill=\"#213856\"/>\n<path d=\"M49.5469 20.1974C49.8161 22.4457 51.6672 23.9132 54.3554 23.9132C55.601 23.9132 57.1159 23.5168 58.1044 22.7951C58.4352 22.5532 58.8893 22.5814 59.184 22.8677L59.9997 23.6619C60.3573 24.01 60.3385 24.5959 59.9528 24.9103C58.4178 26.1628 56.256 26.7904 54.2951 26.7904C49.4558 26.7904 46.3497 23.7035 46.3497 18.9691C46.3497 14.2346 49.4866 11.2674 54.0861 11.2674C58.6857 11.2674 61.7637 13.9148 61.548 19.3924C61.5306 19.8426 61.1596 20.1987 60.7109 20.1987H49.5455L49.5469 20.1974ZM58.537 17.5903C58.3575 15.2533 56.6551 14.0237 54.1759 14.0237C51.9351 14.0237 50.084 15.252 49.6058 17.5903H58.537Z\" fill=\"#213856\"/>\n<path d=\"M74.0983 25.6927V17.9071C74.0983 15.9599 72.5272 14.3378 70.5864 14.3768C68.45 14.4185 67.1079 16.23 67.1079 18.3923V25.6927C67.1079 26.1563 66.7329 26.5326 66.2708 26.5326H64.8684C64.4063 26.5326 64.0313 26.1563 64.0313 25.6927V12.4449C64.0313 11.9812 64.4063 11.6049 64.8684 11.6049H66.1462C66.5749 11.6049 66.9338 11.9288 66.9794 12.3562L67.1093 13.6874C67.9451 12.0694 69.6783 11.47 71.2307 11.47C73.1125 11.47 75.0239 12.2494 75.861 14.4373C77.0558 12.2494 78.9082 11.5009 80.9093 11.5009C84.9717 11.5009 87.1523 14.0785 87.1523 18.3345V25.6954C87.1523 26.159 86.7772 26.5353 86.3151 26.5353H84.8833C84.4212 26.5353 84.0462 26.159 84.0462 25.6954V17.7432C84.0462 15.9303 82.605 14.4117 80.7981 14.409C78.6135 14.405 77.2058 16.2045 77.2058 18.395V25.6954C77.2058 26.159 76.8307 26.5353 76.3687 26.5353H74.9368C74.4747 26.5353 74.0997 26.159 74.0997 25.6954L74.0983 25.6927Z\" fill=\"#213856\"/>\n<path d=\"M93.7221 6.40496V25.6959C93.7221 26.1595 93.3471 26.5358 92.885 26.5358H91.4826C91.0205 26.5358 90.6455 26.1595 90.6455 25.6959V6.40496C90.6455 5.94132 91.0205 5.56504 91.4826 5.56504H92.885C93.3471 5.56504 93.7221 5.94132 93.7221 6.40496Z\" fill=\"#213856\"/>\n<path d=\"M97.4256 12.4362V25.7057C97.4256 26.1693 97.8006 26.5456 98.2627 26.5456H99.6651C100.127 26.5456 100.502 26.1693 100.502 25.7057V12.4362C100.502 11.9726 100.127 11.5963 99.6651 11.5963H98.2627C97.8006 11.5963 97.4256 11.9726 97.4256 12.4362Z\" fill=\"#213856\"/>\n<path d=\"M114.016 14.5771C113.737 14.905 113.259 14.9575 112.905 14.7115C111.907 14.0181 110.832 13.8098 109.613 13.8098C107.731 13.7802 106.476 14.4092 106.476 15.5783C106.505 16.8066 107.79 17.2864 109.672 17.4665C112.39 17.7057 115.944 18.305 115.915 22.1122C115.885 24.8698 113.465 26.7875 109.642 26.7875C107.46 26.7875 105.277 26.3373 103.437 24.593C103.131 24.3027 103.094 23.827 103.344 23.487L103.973 22.6336C104.254 22.252 104.8 22.174 105.166 22.4751C106.493 23.569 108.219 24.0339 109.703 24.0595C111.167 24.0595 112.809 23.5206 112.84 22.1418C112.869 20.8234 111.615 20.3141 109.435 20.1031C106.657 19.833 103.461 18.934 103.432 15.6684C103.432 12.4014 106.807 11.1731 109.555 11.1731C111.501 11.1731 113.074 11.5467 114.518 12.5788C114.918 12.865 114.989 13.4348 114.671 13.8098L114.018 14.5771H114.016Z\" fill=\"#213856\"/>\n<path d=\"M122.289 7.09996C122.818 7.09996 123.246 7.52976 123.246 8.05996L123.26 11.6058H126.799C127.271 11.6058 127.654 11.9903 127.654 12.464V13.4733C127.654 13.947 127.271 14.3315 126.799 14.3315H123.228L123.215 21.4725C123.215 23.0653 123.917 23.9524 125.381 23.9524C125.748 23.9524 126.146 23.8755 126.539 23.7478C126.977 23.605 127.448 23.8549 127.596 24.2929L127.954 25.3489C128.106 25.7979 127.868 26.2895 127.419 26.4391C126.688 26.6835 125.983 26.8003 125.196 26.8003C121.931 26.8923 120.07 25.0234 120.07 21.4725L120.083 14.3315H118.041C117.569 14.3315 117.186 13.947 117.186 13.4733V12.464C117.186 11.9903 117.569 11.6058 118.041 11.6058H120.086L120.072 8.05996C120.072 7.52976 120.501 7.09996 121.029 7.09996H122.289Z\" fill=\"#213856\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.67931 0H26.2146C29.3512 0 31.8939 2.55118 31.8939 5.69821V26.3018C31.8939 29.4488 29.3512 32 26.2146 32H5.67931C2.54271 32 0 29.4488 0 26.3018V5.69821C0 2.55118 2.54271 0 5.67931 0Z\" fill=\"#316BFF\"/>\n<path d=\"M15.2985 8.60085H22.5091C22.9715 8.60085 23.3463 8.9769 23.3463 9.44079V10.7435C23.3463 11.2074 22.9715 11.5834 22.5091 11.5834H15.2985C14.8362 11.5834 14.4614 11.2074 14.4614 10.7435V9.44079C14.4614 8.9769 14.8362 8.60085 15.2985 8.60085Z\" fill=\"white\"/>\n<path d=\"M15.3054 14.5416H21.0292C21.4916 14.5416 21.8664 14.9177 21.8664 15.3816V16.6784C21.8664 17.1423 21.4916 17.5183 21.0292 17.5183H15.3054C14.843 17.5183 14.4682 17.1423 14.4682 16.6784V15.3816C14.4682 14.9177 14.843 14.5416 15.3054 14.5416Z\" fill=\"white\"/>\n<path d=\"M23.3508 21.3179V22.6164C23.3508 23.0801 22.9758 23.4564 22.5136 23.4564H11.8221C10.062 23.3435 8.65559 21.9324 8.54308 20.1665V9.38355C8.54308 8.9199 8.91813 8.5436 9.38024 8.5436H10.6625C11.1246 8.5436 11.4996 8.9199 11.4996 9.38355V18.3254C11.4996 19.5322 12.3646 20.478 13.5674 20.478H22.5136C22.9758 20.478 23.3508 20.8542 23.3508 21.3179Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#1646C2\"/>\n<path d=\"M14.6428 13.3821V14.1178C14.6428 14.4076 14.4076 14.6428 14.1178 14.6428H7.41337C6.30968 14.5723 5.42773 13.6903 5.35718 12.5866V5.88215C5.35718 5.59237 5.59236 5.35719 5.88215 5.35719H6.61794C6.90772 5.35719 7.14291 5.59237 7.14291 5.88215V11.4922C7.14291 12.2464 7.75355 12.8571 8.50782 12.8571H14.1178C14.4076 12.8571 14.6428 13.0923 14.6428 13.3821Z\" fill=\"#0C1521\"/>\n<path d=\"M14.1178 5.35718H9.45362C9.16369 5.35718 8.92865 5.59222 8.92865 5.88215V6.61795C8.92865 6.90788 9.16369 7.14291 9.45362 7.14291H14.1178C14.4078 7.14291 14.6428 6.90788 14.6428 6.61795V5.88215C14.6428 5.59222 14.4078 5.35718 14.1178 5.35718Z\" fill=\"#0C1521\"/>\n<path d=\"M13.2846 9.10755H9.45362C9.16369 9.10755 8.92865 9.34259 8.92865 9.63252V10.3683C8.92865 10.6582 9.16369 10.8933 9.45362 10.8933H13.2846C13.5746 10.8933 13.8096 10.6582 13.8096 10.3683V9.63252C13.8096 9.34259 13.5746 9.10755 13.2846 9.10755Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#1646C2\"/>\n<path d=\"M20.4999 18.7349V19.765C20.4999 20.1707 20.1707 20.4999 19.765 20.4999H10.3787C8.83356 20.4012 7.59884 19.1664 7.50006 17.6213V8.23502C7.50006 7.82932 7.82932 7.50006 8.23502 7.50006H9.26513C9.67082 7.50006 10.0001 7.82932 10.0001 8.23502V16.089C10.0001 17.145 10.855 17.9999 11.911 17.9999H19.765C20.1707 17.9999 20.4999 18.3292 20.4999 18.7349Z\" fill=\"#0C1521\"/>\n<path d=\"M19.765 7.50006H13.2351C12.8292 7.50006 12.5001 7.82911 12.5001 8.23501V9.26513C12.5001 9.67103 12.8292 10.0001 13.2351 10.0001H19.765C20.1709 10.0001 20.5 9.67103 20.5 9.26513V8.23501C20.5 7.82911 20.1709 7.50006 19.765 7.50006Z\" fill=\"#0C1521\"/>\n<path d=\"M18.5985 12.7506H13.2351C12.8292 12.7506 12.5001 13.0796 12.5001 13.4855V14.5156C12.5001 14.9215 12.8292 15.2506 13.2351 15.2506H18.5985C19.0044 15.2506 19.3334 14.9215 19.3334 14.5156V13.4855C19.3334 13.0796 19.0044 12.7506 18.5985 12.7506Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55117 29.4488 0 26.3018 0Z\" fill=\"#1646C2\"/>\n<path d=\"M23.4285 21.4113V22.5886C23.4285 23.0522 23.0522 23.4285 22.5886 23.4285H11.8614C10.0955 23.3156 8.68442 21.9045 8.57153 20.1386V9.41145C8.57153 8.9478 8.94783 8.5715 9.41148 8.5715H10.5888C11.0524 8.5715 11.4287 8.9478 11.4287 9.41145V18.3875C11.4287 19.5943 12.4057 20.5713 13.6126 20.5713H22.5886C23.0522 20.5713 23.4285 20.9476 23.4285 21.4113Z\" fill=\"#0C1521\"/>\n<path d=\"M22.5886 8.5715H15.1258C14.6619 8.5715 14.2859 8.94755 14.2859 9.41144V10.5887C14.2859 11.0526 14.6619 11.4287 15.1258 11.4287H22.5886C23.0525 11.4287 23.4286 11.0526 23.4286 10.5887V9.41144C23.4286 8.94755 23.0525 8.5715 22.5886 8.5715Z\" fill=\"#0C1521\"/>\n<path d=\"M21.2554 14.5721H15.1258C14.6619 14.5721 14.2859 14.9481 14.2859 15.412V16.5893C14.2859 17.0532 14.6619 17.4293 15.1258 17.4293H21.2554C21.7193 17.4293 22.0954 17.0532 22.0954 16.5893V15.412C22.0954 14.9481 21.7193 14.5721 21.2554 14.5721Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12275V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12275C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#1646C2\"/>\n<path d=\"M29.2856 26.7641V28.2357C29.2856 28.8152 28.8152 29.2856 28.2357 29.2856H14.8267C12.6194 29.1445 10.8555 27.3806 10.7144 25.1732V11.7643C10.7144 11.1847 11.1847 10.7144 11.7643 10.7144H13.2359C13.8154 10.7144 14.2858 11.1847 14.2858 11.7643V22.9843C14.2858 24.4929 15.5071 25.7142 17.0156 25.7142H28.2357C28.8152 25.7142 29.2856 26.1845 29.2856 26.7641Z\" fill=\"#0C1521\"/>\n<path d=\"M28.2357 10.7144H18.9072C18.3274 10.7144 17.8573 11.1844 17.8573 11.7643V13.2359C17.8573 13.8158 18.3274 14.2858 18.9072 14.2858H28.2357C28.8156 14.2858 29.2856 13.8158 29.2856 13.2359V11.7643C29.2856 11.1844 28.8156 10.7144 28.2357 10.7144Z\" fill=\"#0C1521\"/>\n<path d=\"M26.5692 18.2151H18.9072C18.3274 18.2151 17.8573 18.6852 17.8573 19.265V20.7366C17.8573 21.3165 18.3274 21.7866 18.9072 21.7866H26.5692C27.1491 21.7866 27.6192 21.3165 27.6192 20.7366V19.265C27.6192 18.6852 27.1491 18.2151 26.5692 18.2151Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"81\" height=\"20\" viewBox=\"0 0 81 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M62.545 3.47999H61.5715C61.2816 3.47999 61.0465 3.71501 61.0465 4.00493V4.87132C61.0465 5.16124 61.2816 5.39627 61.5715 5.39627H62.545C62.8349 5.39627 63.0699 5.16124 63.0699 4.87132V4.00493C63.0699 3.71501 62.8349 3.47999 62.545 3.47999Z\" fill=\"white\"/>\n<path d=\"M27.3053 4.01872V16.0615C27.3053 16.3512 27.0701 16.5864 26.7803 16.5864H25.9009C25.6112 16.5864 25.376 16.3512 25.376 16.0615V4.01872C25.376 3.72895 25.6112 3.49377 25.9009 3.49377H26.7803C27.0701 3.49377 27.3053 3.72895 27.3053 4.01872Z\" fill=\"white\"/>\n<path d=\"M31.0698 12.6234C31.2387 14.0286 32.3994 14.9457 34.0851 14.9457C34.8663 14.9457 35.8162 14.698 36.4361 14.2469C36.6435 14.0957 36.9283 14.1134 37.113 14.2923L37.6246 14.7887C37.8488 15.0062 37.8371 15.3724 37.5952 15.569C36.6326 16.3518 35.277 16.744 34.0473 16.744C31.0127 16.744 29.0649 14.8147 29.0649 11.8557C29.0649 8.89665 31.032 7.04211 33.9163 7.04211C36.8006 7.04211 38.7307 8.69675 38.5955 12.1203C38.5846 12.4016 38.3519 12.6242 38.0706 12.6242H31.069L31.0698 12.6234ZM36.7074 10.9939C36.5948 9.53331 35.5273 8.76479 33.9726 8.76479C32.5674 8.76479 31.4066 9.53247 31.1068 10.9939H36.7074Z\" fill=\"white\"/>\n<path d=\"M46.4655 16.0579V11.192C46.4655 9.97492 45.4803 8.96114 44.2633 8.9855C42.9236 9.01153 42.082 10.1437 42.082 11.4952V16.0579C42.082 16.3477 41.8468 16.5829 41.5571 16.5829H40.6777C40.3879 16.5829 40.1527 16.3477 40.1527 16.0579V7.77804C40.1527 7.48827 40.3879 7.25309 40.6777 7.25309H41.4789C41.7477 7.25309 41.9728 7.45551 42.0014 7.7226L42.0829 8.55462C42.607 7.54336 43.6938 7.16875 44.6673 7.16875C45.8474 7.16875 47.0459 7.65591 47.5709 9.02329C48.3201 7.65591 49.4817 7.18807 50.7365 7.18807C53.284 7.18807 54.6514 8.79903 54.6514 11.4591V16.0596C54.6514 16.3494 54.4162 16.5846 54.1264 16.5846H53.2286C52.9388 16.5846 52.7036 16.3494 52.7036 16.0596V11.0895C52.7036 9.95644 51.7999 9.00733 50.6668 9.00565C49.2969 9.00313 48.4142 10.1278 48.4142 11.4969V16.0596C48.4142 16.3494 48.179 16.5846 47.8892 16.5846H46.9913C46.7016 16.5846 46.4664 16.3494 46.4664 16.0596L46.4655 16.0579Z\" fill=\"white\"/>\n<path d=\"M58.7712 4.0031V16.0599C58.7712 16.3497 58.536 16.5849 58.2463 16.5849H57.3669C57.0771 16.5849 56.8419 16.3497 56.8419 16.0599V4.0031C56.8419 3.71333 57.0771 3.47815 57.3669 3.47815H58.2463C58.536 3.47815 58.7712 3.71333 58.7712 4.0031Z\" fill=\"white\"/>\n<path d=\"M61.0936 7.77265V16.066C61.0936 16.3558 61.3288 16.591 61.6185 16.591H62.4979C62.7877 16.591 63.0229 16.3558 63.0229 16.066V7.77265C63.0229 7.48288 62.7877 7.2477 62.4979 7.2477H61.6185C61.3288 7.2477 61.0936 7.48288 61.0936 7.77265Z\" fill=\"white\"/>\n<path d=\"M71.4968 9.11071C71.3221 9.31565 71.0223 9.34841 70.8005 9.1947C70.1748 8.76131 69.5003 8.63112 68.736 8.63112C67.5559 8.61264 66.7689 9.00572 66.7689 9.73645C66.7874 10.5041 67.5929 10.804 68.773 10.9165C70.4772 11.066 72.7063 11.4406 72.6878 13.8201C72.6693 15.5436 71.1516 16.7422 68.7545 16.7422C67.3863 16.7422 66.0172 16.4608 64.8631 15.3706C64.6716 15.1892 64.6481 14.8919 64.8052 14.6794L65.1991 14.146C65.3755 13.9075 65.7182 13.8588 65.9475 14.0469C66.7798 14.7306 67.8617 15.0212 68.7923 15.0372C69.7103 15.0372 70.74 14.7004 70.7594 13.8386C70.7778 13.0147 69.9917 12.6963 68.6243 12.5645C66.8823 12.3956 64.8783 11.8337 64.8598 9.79272C64.8598 7.75088 66.9764 6.9832 68.6999 6.9832C69.9203 6.9832 70.9064 7.2167 71.8118 7.86175C72.0629 8.04066 72.1074 8.39678 71.9075 8.63112L71.4985 9.11071H71.4968Z\" fill=\"white\"/>\n<path d=\"M76.6852 4.43747C77.0166 4.43747 77.2852 4.7061 77.2852 5.03747L77.2936 7.25363H79.5129C79.809 7.25363 80.0493 7.49393 80.0493 7.79002V8.42081C80.0493 8.71689 79.809 8.95719 79.5129 8.95719H77.2739L77.2654 13.4203C77.2654 14.4158 77.7057 14.9702 78.624 14.9702C78.854 14.9702 79.1037 14.9222 79.3501 14.8424C79.6247 14.7531 79.9199 14.9093 80.0126 15.1831L80.2374 15.843C80.3327 16.1237 80.1834 16.4309 79.9019 16.5245C79.4436 16.6772 79.0016 16.7502 78.5081 16.7502C76.4604 16.8077 75.2932 15.6396 75.2932 13.4203L75.3017 8.95719H74.0212C73.7251 8.95719 73.4848 8.71689 73.4848 8.42081V7.79002C73.4848 7.49393 73.7251 7.25363 74.0212 7.25363H75.3034L75.295 5.03747C75.295 4.7061 75.5636 4.43747 75.895 4.43747H76.6852Z\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.56138 0H16.4386C18.4055 0 20 1.59448 20 3.56138V16.4386C20 18.4055 18.4055 20 16.4386 20H3.56138C1.59448 20 0 18.4055 0 16.4386V3.56138C0 1.59448 1.59448 0 3.56138 0Z\" fill=\"#1646C2\"/>\n<path d=\"M9.59338 5.37553H14.115C14.4049 5.37553 14.64 5.61056 14.64 5.9005V6.71468C14.64 7.00461 14.4049 7.23965 14.115 7.23965H9.59338C9.30345 7.23965 9.06842 7.00461 9.06842 6.71468V5.9005C9.06842 5.61056 9.30345 5.37553 9.59338 5.37553Z\" fill=\"#0C1521\"/>\n<path d=\"M9.59769 9.0885H13.187C13.4769 9.0885 13.712 9.32354 13.712 9.61347V10.424C13.712 10.7139 13.4769 10.949 13.187 10.949H9.59769C9.30776 10.949 9.07273 10.7139 9.07273 10.424V9.61347C9.07273 9.32354 9.30776 9.0885 9.59769 9.0885Z\" fill=\"#0C1521\"/>\n<path d=\"M14.6428 13.3237V14.1353C14.6428 14.4251 14.4076 14.6602 14.1178 14.6602H7.41338C6.30969 14.5897 5.42775 13.7077 5.35719 12.604V5.86472C5.35719 5.57494 5.59238 5.33975 5.88216 5.33975H6.68621C6.976 5.33975 7.21118 5.57494 7.21118 5.86472V11.4533C7.21118 12.2076 7.75356 12.7987 8.50784 12.7987H14.1178C14.4076 12.7987 14.6428 13.0339 14.6428 13.3237Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"112\" height=\"28\" viewBox=\"0 0 112 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M87.2726 4.87198H85.9143C85.5097 4.87198 85.1818 5.20102 85.1818 5.60691V6.81985C85.1818 7.22574 85.5097 7.55478 85.9143 7.55478H87.2726C87.6771 7.55478 88.0051 7.22574 88.0051 6.81985V5.60691C88.0051 5.20102 87.6771 4.87198 87.2726 4.87198Z\" fill=\"white\"/>\n<path d=\"M38.1006 5.62621V22.4861C38.1006 22.8917 37.7725 23.221 37.3682 23.221H36.1411C35.7367 23.221 35.4086 22.8917 35.4086 22.4861V5.62621C35.4086 5.22053 35.7367 4.89128 36.1411 4.89128H37.3682C37.7725 4.89128 38.1006 5.22053 38.1006 5.62621Z\" fill=\"white\"/>\n<path d=\"M43.3535 17.6727C43.5891 19.64 45.2088 20.924 47.561 20.924C48.6509 20.924 49.9764 20.5772 50.8413 19.9457C51.1308 19.734 51.5281 19.7587 51.786 20.0092L52.4997 20.7042C52.8126 21.0087 52.7962 21.5214 52.4587 21.7966C51.1156 22.8925 49.224 23.4416 47.5082 23.4416C43.2738 23.4416 40.556 20.7406 40.556 16.598C40.556 12.4553 43.3008 9.85896 47.3254 9.85896C51.35 9.85896 54.0432 12.1754 53.8545 16.9684C53.8393 17.3623 53.5147 17.6739 53.122 17.6739H43.3523L43.3535 17.6727ZM51.2199 15.3915C51.0629 13.3466 49.5733 12.2707 47.4039 12.2707C45.4432 12.2707 43.8235 13.3455 43.4051 15.3915H51.2199Z\" fill=\"white\"/>\n<path d=\"M64.8361 22.4811V15.6687C64.8361 13.9649 63.4613 12.5456 61.7631 12.5797C59.8938 12.6161 58.7195 14.2012 58.7195 16.0932V22.4811C58.7195 22.8868 58.3913 23.216 57.987 23.216H56.7599C56.3556 23.216 56.0274 22.8868 56.0274 22.4811V10.8893C56.0274 10.4836 56.3556 10.1543 56.7599 10.1543H57.878C58.253 10.1543 58.5671 10.4377 58.6069 10.8116L58.7206 11.9765C59.4519 10.5607 60.9685 10.0363 62.3268 10.0363C63.9735 10.0363 65.6459 10.7183 66.3784 12.6326C67.4238 10.7183 69.0447 10.0633 70.7956 10.0633C74.3503 10.0633 76.2582 12.3186 76.2582 16.0427V22.4835C76.2582 22.8891 75.9301 23.2184 75.5257 23.2184H74.2729C73.8686 23.2184 73.5404 22.8891 73.5404 22.4835V15.5253C73.5404 13.939 72.2793 12.6103 70.6983 12.6079C68.7868 12.6044 67.5551 14.1789 67.5551 16.0956V22.4835C67.5551 22.8891 67.2269 23.2184 66.8226 23.2184H65.5697C65.1654 23.2184 64.8372 22.8891 64.8372 22.4835L64.8361 22.4811Z\" fill=\"white\"/>\n<path d=\"M82.0068 5.60434V22.4839C82.0068 22.8896 81.6787 23.2188 81.2743 23.2188H80.0473C79.6429 23.2188 79.3148 22.8896 79.3148 22.4839V5.60434C79.3148 5.19866 79.6429 4.86941 80.0473 4.86941H81.2743C81.6787 4.86941 82.0068 5.19866 82.0068 5.60434Z\" fill=\"white\"/>\n<path d=\"M85.2474 10.8817V22.4924C85.2474 22.8981 85.5755 23.2274 85.9799 23.2274H87.207C87.6113 23.2274 87.9394 22.8981 87.9394 22.4924V10.8817C87.9394 10.476 87.6113 10.1468 87.207 10.1468H85.9799C85.5755 10.1468 85.2474 10.476 85.2474 10.8817Z\" fill=\"white\"/>\n<path d=\"M99.7636 12.755C99.5199 13.0419 99.1015 13.0878 98.792 12.8726C97.9189 12.2658 96.9778 12.0836 95.9113 12.0836C94.2647 12.0577 93.1665 12.608 93.1665 13.631C93.1923 14.7058 94.3162 15.1256 95.9629 15.2831C98.3408 15.4925 101.451 16.0169 101.426 19.3482C101.4 21.7611 99.2819 23.4391 95.9371 23.4391C94.0279 23.4391 92.1176 23.0452 90.5073 21.5189C90.2401 21.2649 90.2072 20.8486 90.4264 20.5511L90.9761 19.8044C91.2222 19.4705 91.7004 19.4023 92.0203 19.6657C93.1817 20.6228 94.6913 21.0297 95.9898 21.052C97.2708 21.052 98.7077 20.5805 98.7346 19.3741C98.7604 18.2205 97.6634 17.7749 95.7554 17.5902C93.3247 17.3539 90.5284 16.5672 90.5026 13.7098C90.5026 10.8512 93.456 9.77648 95.8609 9.77648C97.5638 9.77648 98.9397 10.1034 100.203 11.0065C100.554 11.2569 100.616 11.7555 100.337 12.0836L99.766 12.755H99.7636Z\" fill=\"white\"/>\n<path d=\"M107.003 6.21246C107.466 6.21246 107.84 6.58854 107.84 7.05246L107.852 10.1551H110.949C111.362 10.1551 111.697 10.4915 111.697 10.906V11.7891C111.697 12.2037 111.362 12.5401 110.949 12.5401H107.825L107.813 18.7884C107.813 20.1821 108.427 20.9583 109.709 20.9583C110.03 20.9583 110.378 20.891 110.722 20.7793C111.105 20.6543 111.517 20.873 111.646 21.2563L111.96 22.1802C112.093 22.5731 111.884 23.0033 111.492 23.1342C110.852 23.3481 110.235 23.4502 109.547 23.4502C106.69 23.5307 105.061 21.8955 105.061 18.7884L105.073 12.5401H103.286C102.873 12.5401 102.538 12.2037 102.538 11.7891V10.906C102.538 10.4915 102.873 10.1551 103.286 10.1551H105.075L105.063 7.05246C105.063 6.58854 105.438 6.21246 105.901 6.21246H107.003Z\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.9694 0H22.9378C25.6823 0 27.9072 2.23228 27.9072 4.98593V23.0141C27.9072 25.7677 25.6823 28 22.9378 28H4.9694C2.22487 28 0 25.7677 0 23.0141V4.98593C0 2.23228 2.22487 0 4.9694 0Z\" fill=\"#1646C2\"/>\n<path d=\"M13.3862 7.52574H19.6955C20.1 7.52574 20.428 7.85479 20.428 8.26069V9.40055C20.428 9.80646 20.1 10.1355 19.6955 10.1355H13.3862C12.9816 10.1355 12.6537 9.80646 12.6537 9.40055V8.26069C12.6537 7.85479 12.9816 7.52574 13.3862 7.52574Z\" fill=\"#0C1521\"/>\n<path d=\"M13.3922 12.7239H18.4006C18.8051 12.7239 19.1331 13.053 19.1331 13.4589V14.5936C19.1331 14.9995 18.8051 15.3286 18.4006 15.3286H13.3922C12.9877 15.3286 12.6597 14.9995 12.6597 14.5936V13.4589C12.6597 13.053 12.9877 12.7239 13.3922 12.7239Z\" fill=\"#0C1521\"/>\n<path d=\"M20.432 18.6532V19.7894C20.432 20.1951 20.1038 20.5243 19.6994 20.5243H10.3443C8.80427 20.4256 7.57365 19.1908 7.47519 17.6457V8.2106C7.47519 7.80491 7.80336 7.47565 8.20771 7.47565H9.32966C9.73401 7.47565 10.0622 7.80491 10.0622 8.2106V16.0347C10.0622 17.0907 10.819 17.9182 11.8715 17.9182H19.6994C20.1038 17.9182 20.432 18.2475 20.432 18.6532Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"128\" height=\"32\" viewBox=\"0 0 128 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M99.7401 5.56798H98.1877C97.7254 5.56798 97.3506 5.94402 97.3506 6.40789V7.79411C97.3506 8.25799 97.7254 8.63403 98.1877 8.63403H99.7401C100.202 8.63403 100.577 8.25799 100.577 7.79411V6.40789C100.577 5.94402 100.202 5.56798 99.7401 5.56798Z\" fill=\"white\"/>\n<path d=\"M43.5436 6.42995V25.6984C43.5436 26.162 43.1686 26.5383 42.7065 26.5383H41.3041C40.842 26.5383 40.467 26.162 40.467 25.6984V6.42995C40.467 5.96632 40.842 5.59003 41.3041 5.59003H42.7065C43.1686 5.59003 43.5436 5.96632 43.5436 6.42995Z\" fill=\"white\"/>\n<path d=\"M49.5469 20.1974C49.8161 22.4457 51.6672 23.9132 54.3554 23.9132C55.601 23.9132 57.1159 23.5168 58.1044 22.7951C58.4352 22.5532 58.8893 22.5814 59.184 22.8677L59.9997 23.6619C60.3573 24.01 60.3385 24.5959 59.9528 24.9103C58.4178 26.1628 56.256 26.7904 54.2951 26.7904C49.4558 26.7904 46.3497 23.7035 46.3497 18.9691C46.3497 14.2346 49.4866 11.2674 54.0861 11.2674C58.6857 11.2674 61.7637 13.9148 61.548 19.3924C61.5306 19.8426 61.1596 20.1987 60.7109 20.1987H49.5455L49.5469 20.1974ZM58.537 17.5903C58.3575 15.2533 56.6551 14.0237 54.1759 14.0237C51.935 14.0237 50.084 15.252 49.6058 17.5903H58.537Z\" fill=\"white\"/>\n<path d=\"M74.0983 25.6927V17.9071C74.0983 15.9599 72.5272 14.3378 70.5864 14.3768C68.45 14.4185 67.1079 16.23 67.1079 18.3923V25.6927C67.1079 26.1563 66.7329 26.5326 66.2708 26.5326H64.8684C64.4063 26.5326 64.0313 26.1563 64.0313 25.6927V12.4449C64.0313 11.9812 64.4063 11.6049 64.8684 11.6049H66.1462C66.5749 11.6049 66.9338 11.9288 66.9794 12.3562L67.1093 13.6874C67.9451 12.0694 69.6783 11.47 71.2307 11.47C73.1125 11.47 75.0239 12.2494 75.861 14.4373C77.0558 12.2494 78.9082 11.5009 80.9093 11.5009C84.9717 11.5009 87.1523 14.0785 87.1523 18.3345V25.6954C87.1523 26.159 86.7772 26.5353 86.3151 26.5353H84.8833C84.4212 26.5353 84.0462 26.159 84.0462 25.6954V17.7432C84.0462 15.9303 82.605 14.4117 80.7981 14.409C78.6135 14.405 77.2058 16.2045 77.2058 18.395V25.6954C77.2058 26.159 76.8307 26.5353 76.3687 26.5353H74.9368C74.4747 26.5353 74.0997 26.159 74.0997 25.6954L74.0983 25.6927Z\" fill=\"white\"/>\n<path d=\"M93.7221 6.40496V25.6959C93.7221 26.1595 93.3471 26.5358 92.885 26.5358H91.4826C91.0205 26.5358 90.6455 26.1595 90.6455 25.6959V6.40496C90.6455 5.94132 91.0205 5.56504 91.4826 5.56504H92.885C93.3471 5.56504 93.7221 5.94132 93.7221 6.40496Z\" fill=\"white\"/>\n<path d=\"M97.4256 12.4362V25.7057C97.4256 26.1693 97.8006 26.5456 98.2627 26.5456H99.6651C100.127 26.5456 100.502 26.1693 100.502 25.7057V12.4362C100.502 11.9726 100.127 11.5963 99.6651 11.5963H98.2627C97.8006 11.5963 97.4256 11.9726 97.4256 12.4362Z\" fill=\"white\"/>\n<path d=\"M114.016 14.5771C113.737 14.905 113.259 14.9575 112.905 14.7115C111.907 14.0181 110.832 13.8098 109.613 13.8098C107.731 13.7802 106.476 14.4092 106.476 15.5783C106.505 16.8066 107.79 17.2864 109.672 17.4665C112.39 17.7057 115.944 18.305 115.915 22.1122C115.885 24.8698 113.465 26.7875 109.642 26.7875C107.46 26.7875 105.277 26.3373 103.437 24.593C103.131 24.3027 103.094 23.827 103.344 23.487L103.973 22.6336C104.254 22.252 104.8 22.174 105.166 22.4751C106.493 23.569 108.219 24.0339 109.703 24.0595C111.167 24.0595 112.809 23.5206 112.84 22.1418C112.869 20.8234 111.615 20.3141 109.435 20.1031C106.657 19.833 103.461 18.934 103.432 15.6684C103.432 12.4014 106.807 11.1731 109.555 11.1731C111.501 11.1731 113.074 11.5467 114.518 12.5788C114.918 12.865 114.989 13.4348 114.671 13.8098L114.018 14.5771H114.016Z\" fill=\"white\"/>\n<path d=\"M122.289 7.09996C122.818 7.09996 123.246 7.52976 123.246 8.05996L123.26 11.6058H126.799C127.271 11.6058 127.654 11.9903 127.654 12.464V13.4733C127.654 13.947 127.271 14.3315 126.799 14.3315H123.228L123.215 21.4725C123.215 23.0653 123.917 23.9524 125.381 23.9524C125.748 23.9524 126.146 23.8755 126.539 23.7478C126.977 23.605 127.448 23.8549 127.596 24.2929L127.954 25.3489C128.106 25.7979 127.868 26.2895 127.419 26.4391C126.688 26.6835 125.983 26.8003 125.196 26.8003C121.931 26.8923 120.07 25.0234 120.07 21.4725L120.083 14.3315H118.041C117.569 14.3315 117.186 13.947 117.186 13.4733V12.464C117.186 11.9903 117.569 11.6058 118.041 11.6058H120.086L120.072 8.05996C120.072 7.52976 120.501 7.09996 121.029 7.09996H122.289Z\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.67931 0H26.2146C29.3512 0 31.8939 2.55118 31.8939 5.69821V26.3018C31.8939 29.4488 29.3512 32 26.2146 32H5.67931C2.54271 32 0 29.4488 0 26.3018V5.69821C0 2.55118 2.54271 0 5.67931 0Z\" fill=\"#1646C2\"/>\n<path d=\"M15.2985 8.60085H22.5091C22.9715 8.60085 23.3463 8.9769 23.3463 9.44079V10.7435C23.3463 11.2074 22.9715 11.5834 22.5091 11.5834H15.2985C14.8362 11.5834 14.4614 11.2074 14.4614 10.7435V9.44079C14.4614 8.9769 14.8362 8.60085 15.2985 8.60085Z\" fill=\"#0C1521\"/>\n<path d=\"M15.3054 14.5416H21.0292C21.4916 14.5416 21.8664 14.9177 21.8664 15.3816V16.6784C21.8664 17.1423 21.4916 17.5183 21.0292 17.5183H15.3054C14.843 17.5183 14.4682 17.1423 14.4682 16.6784V15.3816C14.4682 14.9177 14.843 14.5416 15.3054 14.5416Z\" fill=\"#0C1521\"/>\n<path d=\"M23.3508 21.3179V22.6164C23.3508 23.0801 22.9758 23.4564 22.5136 23.4564H11.8221C10.062 23.3435 8.65559 21.9324 8.54308 20.1665V9.38355C8.54308 8.9199 8.91813 8.5436 9.38024 8.5436H10.6625C11.1246 8.5436 11.4996 8.9199 11.4996 9.38355V18.3254C11.4996 19.5322 12.3646 20.478 13.5674 20.478H22.5136C22.9758 20.478 23.3508 20.8542 23.3508 21.3179Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59449 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59449 18.4055 0 16.4386 0Z\" fill=\"#FFB866\"/>\n<path d=\"M10.3675 6.19042H9.63166C9.34173 6.19042 9.10669 6.42546 9.10669 6.71539V10.4271C9.10669 10.7171 9.34173 10.9521 9.63166 10.9521H10.3675C10.6574 10.9521 10.8924 10.7171 10.8924 10.4271V6.71539C10.8924 6.42546 10.6574 6.19042 10.3675 6.19042Z\" fill=\"white\"/>\n<path d=\"M14.6428 5.88216V12.5866C14.5722 13.6903 13.6895 14.5723 12.5866 14.6428H7.41841C6.26768 14.5689 5.35718 13.6122 5.35718 12.443V5.88216C5.35718 5.59238 5.59236 5.35719 5.88215 5.35719H6.61794C6.90772 5.35719 7.14291 5.59238 7.14291 5.88216V11.4922C7.14291 12.2464 7.75355 12.8571 8.50782 12.8571H11.4922C12.2456 12.8571 12.8571 12.2464 12.8571 11.4922V5.88216C12.8571 5.59238 13.0923 5.35719 13.382 5.35719H14.1178C14.4076 5.35719 14.6428 5.59238 14.6428 5.88216Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#FFB866\"/>\n<path d=\"M14.5145 8.66659H13.4843C13.0784 8.66659 12.7494 8.99564 12.7494 9.40154V14.598C12.7494 15.0039 13.0784 15.3329 13.4843 15.3329H14.5145C14.9204 15.3329 15.2494 15.0039 15.2494 14.598V9.40154C15.2494 8.99564 14.9204 8.66659 14.5145 8.66659Z\" fill=\"white\"/>\n<path d=\"M20.4999 8.23502V17.6213C20.4012 19.1664 19.1653 20.4012 17.6213 20.4999H10.3858C8.77477 20.3965 7.50006 19.0571 7.50006 17.4202V8.23502C7.50006 7.82933 7.82932 7.50007 8.23502 7.50007H9.26513C9.67082 7.50007 10.0001 7.82933 10.0001 8.23502V16.089C10.0001 17.145 10.855 17.9999 11.911 17.9999H16.089C17.1438 17.9999 17.9999 17.145 17.9999 16.089V8.23502C17.9999 7.82933 18.3292 7.50007 18.7349 7.50007H19.765C20.1707 7.50007 20.4999 7.82933 20.4999 8.23502Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55118 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55118 29.4488 0 26.3018 0Z\" fill=\"#FFB866\"/>\n<path d=\"M16.588 9.90466H15.4107C14.9468 9.90466 14.5707 10.2807 14.5707 10.7446V16.6834C14.5707 17.1473 14.9468 17.5233 15.4107 17.5233H16.588C17.0518 17.5233 17.4279 17.1473 17.4279 16.6834V10.7446C17.4279 10.2807 17.0518 9.90466 16.588 9.90466Z\" fill=\"white\"/>\n<path d=\"M23.4285 9.41145V20.1386C23.3156 21.9045 21.9032 23.3156 20.1386 23.4285H11.8695C10.0283 23.3102 8.57153 21.7795 8.57153 19.9088V9.41145C8.57153 8.9478 8.94783 8.5715 9.41148 8.5715H10.5888C11.0524 8.5715 11.4287 8.9478 11.4287 9.41145V18.3875C11.4287 19.5943 12.4057 20.5713 13.6126 20.5713H18.3875C19.593 20.5713 20.5714 19.5943 20.5714 18.3875V9.41145C20.5714 8.9478 20.9477 8.5715 21.4113 8.5715H22.5886C23.0522 8.5715 23.4285 8.9478 23.4285 9.41145Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12276V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12276C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#FFB866\"/>\n<path d=\"M20.7349 12.3808H19.2633C18.6835 12.3808 18.2134 12.8509 18.2134 13.4308V20.8542C18.2134 21.4341 18.6835 21.9042 19.2633 21.9042H20.7349C21.3148 21.9042 21.7848 21.4341 21.7848 20.8542V13.4308C21.7848 12.8509 21.3148 12.3808 20.7349 12.3808Z\" fill=\"white\"/>\n<path d=\"M29.2856 11.7643V25.1732C29.1445 27.3806 27.3789 29.1445 25.1732 29.2856H14.8368C12.5354 29.1378 10.7144 27.2244 10.7144 24.886V11.7643C10.7144 11.1847 11.1847 10.7144 11.7643 10.7144H13.2359C13.8154 10.7144 14.2858 11.1847 14.2858 11.7643V22.9843C14.2858 24.4929 15.5071 25.7142 17.0156 25.7142H22.9843C24.4912 25.7142 25.7141 24.4929 25.7141 22.9843V11.7643C25.7141 11.1847 26.1845 10.7144 26.7641 10.7144H28.2357C28.8152 10.7144 29.2856 11.1847 29.2856 11.7643Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"106\" height=\"20\" viewBox=\"0 0 106 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M27.33 3.97888V16.0254C27.33 16.3153 27.0947 16.5506 26.8049 16.5506H25.9252C25.6353 16.5506 25.4001 16.3153 25.4001 16.0254V3.97888C25.4001 3.68902 25.6353 3.45377 25.9252 3.45377H26.8049C27.0947 3.45377 27.33 3.68902 27.33 3.97888Z\" fill=\"#213856\"/>\n<path d=\"M31.0958 12.5981C31.2646 14.0037 32.4258 14.9212 34.112 14.9212C34.8934 14.9212 35.8437 14.6733 36.4637 14.2221C36.6712 14.0709 36.9561 14.0885 37.1409 14.2675L37.6526 14.7641C37.8769 14.9817 37.8651 15.348 37.6232 15.5446C36.6603 16.3276 35.3043 16.72 34.0742 16.72C31.0386 16.72 29.0902 14.7901 29.0902 11.8301C29.0902 8.87017 31.058 7.01504 33.9432 7.01504C36.8284 7.01504 38.7591 8.6702 38.6238 12.0948C38.6129 12.3763 38.3802 12.5989 38.0987 12.5989H31.0949L31.0958 12.5981ZM36.7351 10.9681C36.6225 9.50703 35.5546 8.73826 33.9994 8.73826C32.5938 8.73826 31.4327 9.50619 31.1327 10.9681H36.7351Z\" fill=\"#213856\"/>\n<path d=\"M46.4963 16.0255V11.1701C46.4963 9.95268 45.5108 8.93858 44.2934 8.96294C42.9533 8.98899 42.1114 10.1216 42.1114 11.4734V16.0255C42.1114 16.3154 41.8762 16.5506 41.5863 16.5506H40.7066C40.4168 16.5506 40.1815 16.3154 40.1815 16.0255V7.74618C40.1815 7.45632 40.4168 7.22107 40.7066 7.22107H41.5082C41.777 7.22107 42.0022 7.42355 42.0308 7.69073L42.1123 8.53109C42.6365 7.51951 43.7237 7.14479 44.6984 7.14479C45.8788 7.14479 47.0778 7.63209 47.6029 8.99991C48.3523 7.63209 49.5143 7.16411 50.7695 7.16411C53.3178 7.16411 54.6856 8.77558 54.6856 11.4364V16.0264C54.6856 16.3162 54.4504 16.5515 54.1605 16.5515H53.2624C52.9725 16.5515 52.7373 16.3162 52.7373 16.0264V11.0668C52.7373 9.93336 51.8332 8.98395 50.6998 8.98227C49.3295 8.97975 48.4464 10.1048 48.4464 11.4743V16.0264C48.4464 16.3162 48.2112 16.5515 47.9213 16.5515H47.0231C46.7333 16.5515 46.498 16.3162 46.498 16.0264L46.4963 16.0255Z\" fill=\"#213856\"/>\n<path d=\"M64.1091 7.60307L66.207 14.565L68.4193 7.60089C68.4882 7.38244 68.6907 7.23289 68.9201 7.23289H69.9501C70.3114 7.23289 70.5652 7.58996 70.4458 7.93108L67.5286 16.2362C67.4547 16.447 67.2564 16.5882 67.0329 16.5882H65.529C65.3063 16.5882 65.108 16.4479 65.0341 16.2378L64.0713 13.5148L63.1723 10.2919L62.2539 13.5148L61.2911 16.2378C61.2171 16.4479 61.0189 16.5882 60.7962 16.5882H59.2914C59.0688 16.5882 58.8697 16.447 58.7957 16.237L55.8434 7.93005C55.7233 7.58894 55.977 7.23102 56.3391 7.23102H57.3869C57.6162 7.23102 57.8187 7.37973 57.8876 7.59902L60.1182 14.565L62.2161 7.60307C62.2833 7.3821 62.4875 7.23087 62.7186 7.23087H63.6075C63.8385 7.23087 64.0427 7.3821 64.1099 7.60307H64.1091Z\" fill=\"#213856\"/>\n<path d=\"M79.6778 7.22903H80.5214C80.8112 7.22903 81.0465 7.46429 81.0465 7.75415V16.0265C81.0465 16.3164 80.8112 16.5516 80.5214 16.5516H79.7039C79.4266 16.5516 79.1972 16.3357 79.1796 16.0593L79.1166 14.9967C78.4982 16.1771 77.0741 16.7392 75.9314 16.7392C73.2336 16.7577 71.1911 15.0152 71.1911 11.8678C71.1911 8.72051 73.3084 7.05275 75.9692 7.05275C77.2808 7.05275 78.536 7.67112 79.1166 8.72051L79.1535 7.73483C79.1645 7.45253 79.3964 7.22988 79.6787 7.22988L79.6778 7.22903ZM73.1202 11.8678C73.1202 13.7793 74.4695 14.9404 76.118 14.9404C80.1088 14.9404 80.1088 8.81377 76.118 8.81377C74.4695 8.81377 73.1202 9.97575 73.1202 11.8678Z\" fill=\"#213856\"/>\n<path d=\"M85.1431 7.69892L85.2238 8.53109C85.8985 7.35063 86.9479 7.10698 87.941 7.10698C88.6358 7.10698 89.3088 7.29686 89.8204 7.60017C90.0607 7.74216 90.1464 8.04798 90.017 8.295L89.6104 9.07385C89.476 9.33095 89.1592 9.42 88.9038 9.28389C88.5711 9.10662 88.2056 9.0184 87.7158 9.0184C86.3858 9.0184 85.2238 9.84262 85.2238 11.5482V16.0255C85.2238 16.3154 84.9885 16.5506 84.6987 16.5506H83.819C83.5291 16.5506 83.2939 16.3154 83.2939 16.0255V7.75521C83.2939 7.46535 83.5291 7.2301 83.819 7.2301H84.6214C84.8894 7.2301 85.1146 7.43258 85.1431 7.69892Z\" fill=\"#213856\"/>\n<path d=\"M97.477 16.0255V11.1701C97.477 9.95268 96.4915 8.93858 95.274 8.96294C93.934 8.98899 93.0921 10.1216 93.0921 11.4734V16.0255C93.0921 16.3154 92.8568 16.5506 92.567 16.5506H91.6873C91.3974 16.5506 91.1622 16.3154 91.1622 16.0255V7.74455C91.1622 7.45468 91.3974 7.21943 91.6873 7.21943H92.4888C92.7577 7.21943 92.9829 7.42192 93.0114 7.6891L93.0929 8.53109C93.6172 7.51951 94.7044 7.14479 95.679 7.14479C96.8595 7.14479 98.0584 7.63209 98.5835 8.99991C99.333 7.63209 100.495 7.16411 101.75 7.16411C104.298 7.16411 105.666 8.77558 105.666 11.4364V16.0264C105.666 16.3162 105.431 16.5515 105.141 16.5515H104.243C103.953 16.5515 103.718 16.3162 103.718 16.0264V11.0668C103.718 9.93336 102.814 8.98395 101.68 8.98227C100.31 8.97975 99.4271 10.1048 99.4271 11.4743V16.0264C99.4271 16.3162 99.1918 16.5515 98.902 16.5515H98.0038C97.7139 16.5515 97.4787 16.3162 97.4787 16.0264L97.477 16.0255Z\" fill=\"#213856\"/>\n<path d=\"M16.4387 0H3.56139C1.59449 0 0 1.59449 0 3.56138V16.4386C0 18.4055 1.59449 20 3.56139 20H16.4387C18.4056 20 20.0001 18.4055 20.0001 16.4386V3.56138C20.0001 1.59449 18.4056 0 16.4387 0Z\" fill=\"#FFB866\"/>\n<path d=\"M10.4077 6.28933H9.59735C9.30742 6.28933 9.07238 6.52437 9.07238 6.8143L9.07391 10.4067C9.07391 10.6966 9.30895 10.9317 9.59888 10.9317H10.4092C10.6991 10.9317 10.9342 10.6966 10.9342 10.4067L10.9326 6.8143C10.9326 6.52437 10.6976 6.28933 10.4077 6.28933Z\" fill=\"white\"/>\n<path d=\"M14.6427 5.88187V12.5863C14.5721 13.69 13.6894 14.572 12.5865 14.6425H7.41829C6.26756 14.5686 5.35706 13.6119 5.35706 12.4427V5.88187C5.35706 5.59208 5.59224 5.3569 5.88203 5.3569H6.69295C6.98273 5.3569 7.21791 5.59208 7.21791 5.88187V11.4211C7.21791 12.1754 7.82856 12.7861 8.58283 12.7861H11.4921C12.2455 12.7861 12.7855 12.1754 12.7855 11.4211V5.88187C12.7855 5.59208 13.0207 5.3569 13.3104 5.3569H14.1177C14.4075 5.3569 14.6427 5.59208 14.6427 5.88187Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"147\" height=\"28\" viewBox=\"0 0 147 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M38.0207 5.57044V22.4356C38.0207 22.8414 37.6934 23.1708 37.2902 23.1708H36.0664C35.6631 23.1708 35.3359 22.8414 35.3359 22.4356V5.57044C35.3359 5.16463 35.6631 4.83528 36.0664 4.83528H37.2902C37.6934 4.83528 38.0207 5.16463 38.0207 5.57044Z\" fill=\"#213856\"/>\n<path d=\"M43.2596 17.6373C43.4945 19.6052 45.1098 20.8896 47.4557 20.8896C48.5427 20.8896 49.8647 20.5426 50.7273 19.911C51.016 19.6993 51.4122 19.724 51.6694 19.9745L52.3812 20.6697C52.6933 20.9743 52.6769 21.4872 52.3403 21.7624C51.0008 22.8587 49.1143 23.408 47.4031 23.408C43.1801 23.408 40.4695 20.7061 40.4695 16.5622C40.4695 12.4182 43.207 9.82106 47.2208 9.82106C51.2346 9.82106 53.9206 12.1383 53.7324 16.9327C53.7172 17.3268 53.3934 17.6385 53.0019 17.6385H43.2584L43.2596 17.6373ZM51.1048 15.3553C50.9482 13.3098 49.4626 12.2336 47.2991 12.2336C45.3436 12.2336 43.7283 13.3087 43.311 15.3553H51.1048Z\" fill=\"#213856\"/>\n<path d=\"M64.6844 22.4357V15.6382C64.6844 13.9338 63.3134 12.514 61.6197 12.5481C59.7554 12.5846 58.5842 14.1702 58.5842 16.0628V22.4357C58.5842 22.8415 58.257 23.1709 57.8537 23.1709H56.6299C56.2267 23.1709 55.8994 22.8415 55.8994 22.4357V10.8447C55.8994 10.4388 56.2267 10.1095 56.6299 10.1095H57.745C58.119 10.1095 58.4323 10.393 58.472 10.767L58.5854 11.9435C59.3148 10.5273 60.8272 10.0027 62.1831 10.0027C63.8253 10.0027 65.4933 10.6849 66.2238 12.5999C67.2664 10.6849 68.8829 10.0298 70.6292 10.0298C74.1743 10.0298 76.0771 12.2858 76.0771 16.011V22.4369C76.0771 22.8427 75.7499 23.1721 75.3466 23.1721H74.0971C73.6939 23.1721 73.3666 22.8427 73.3666 22.4369V15.4935C73.3666 13.9067 72.1089 12.5775 70.5321 12.5752C68.6258 12.5717 67.3973 14.1467 67.3973 16.064V22.4369C67.3973 22.8427 67.07 23.1721 66.6668 23.1721H65.4173C65.014 23.1721 64.6868 22.8427 64.6868 22.4369L64.6844 22.4357Z\" fill=\"#213856\"/>\n<path d=\"M89.1867 10.6443L92.1053 20.391L95.183 10.6412C95.2789 10.3354 95.5606 10.126 95.8797 10.126H97.3127C97.8153 10.126 98.1683 10.6259 98.0023 11.1035L93.9439 22.7306C93.8411 23.0259 93.5652 23.2235 93.2543 23.2235H91.1621C90.8523 23.2235 90.5765 23.027 90.4736 22.733L89.1341 18.9207L87.8835 14.4086L86.6059 18.9207L85.2664 22.733C85.1636 23.027 84.8877 23.2235 84.578 23.2235H82.4846C82.1748 23.2235 81.8978 23.0259 81.795 22.7318L77.6878 11.1021C77.5207 10.6245 77.8737 10.1234 78.3774 10.1234H79.835C80.1541 10.1234 80.4358 10.3316 80.5316 10.6386L83.6347 20.391L86.5533 10.6443C86.6468 10.3349 86.9309 10.1232 87.2523 10.1232H88.4889C88.8104 10.1232 89.0944 10.3349 89.1879 10.6443H89.1867Z\" fill=\"#213856\"/>\n<path d=\"M110.846 10.1206H112.019C112.422 10.1206 112.75 10.45 112.75 10.8558V22.4371C112.75 22.8429 112.422 23.1722 112.019 23.1722H110.882C110.496 23.1722 110.177 22.8699 110.152 22.483L110.065 20.9954C109.204 22.648 107.223 23.4349 105.634 23.4349C101.881 23.4608 99.0391 21.0212 99.0391 16.615C99.0391 12.2087 101.985 9.87385 105.686 9.87385C107.511 9.87385 109.257 10.7396 110.065 12.2087L110.116 10.8288C110.131 10.4335 110.454 10.1218 110.847 10.1218L110.846 10.1206ZM101.723 16.615C101.723 19.291 103.6 20.9165 105.893 20.9165C111.445 20.9165 111.445 12.3393 105.893 12.3393C103.6 12.3393 101.723 13.966 101.723 16.615Z\" fill=\"#213856\"/>\n<path d=\"M118.449 10.7785L118.561 11.9435C119.5 10.2909 120.959 9.94977 122.341 9.94977C123.308 9.94977 124.244 10.2156 124.956 10.6402C125.29 10.839 125.409 11.2672 125.229 11.613L124.663 12.7034C124.476 13.0633 124.036 13.188 123.68 12.9975C123.218 12.7493 122.709 12.6258 122.028 12.6258C120.177 12.6258 118.561 13.7797 118.561 16.1675V22.4357C118.561 22.8415 118.234 23.1709 117.83 23.1709H116.607C116.203 23.1709 115.876 22.8415 115.876 22.4357V10.8573C115.876 10.4515 116.203 10.1221 116.607 10.1221H117.723C118.096 10.1221 118.409 10.4056 118.449 10.7785Z\" fill=\"#213856\"/>\n<path d=\"M135.607 22.4357V15.6382C135.607 13.9338 134.236 12.514 132.543 12.5481C130.678 12.5846 129.507 14.1702 129.507 16.0628V22.4357C129.507 22.8415 129.18 23.1709 128.777 23.1709H127.553C127.15 23.1709 126.822 22.8415 126.822 22.4357V10.8424C126.822 10.4366 127.15 10.1072 127.553 10.1072H128.668C129.042 10.1072 129.355 10.3907 129.395 10.7647L129.508 11.9435C130.238 10.5273 131.75 10.0027 133.106 10.0027C134.748 10.0027 136.416 10.6849 137.147 12.5999C138.189 10.6849 139.806 10.0298 141.552 10.0298C145.097 10.0298 147 12.2858 147 16.011V22.4369C147 22.8427 146.673 23.1721 146.269 23.1721H145.02C144.617 23.1721 144.289 22.8427 144.289 22.4369V15.4935C144.289 13.9067 143.032 12.5775 141.455 12.5752C139.549 12.5717 138.32 14.1467 138.32 16.064V22.4369C138.32 22.8427 137.993 23.1721 137.59 23.1721H136.34C135.937 23.1721 135.61 22.8427 135.61 22.4369L135.607 22.4357Z\" fill=\"#213856\"/>\n<path d=\"M22.869 0H4.9545C2.21821 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.21821 28 4.9545 28H22.869C25.6053 28 27.8235 25.7677 27.8235 23.0141V4.98593C27.8235 2.23228 25.6053 0 22.869 0Z\" fill=\"#FFB866\"/>\n<path d=\"M14.4788 8.80506H13.3516C12.9482 8.80506 12.6212 9.13412 12.6212 9.54002L12.6234 14.5694C12.6234 14.9753 12.9503 15.3043 13.3537 15.3043H14.481C14.8843 15.3043 15.2113 14.9753 15.2113 14.5694L15.2092 9.54002C15.2092 9.13412 14.8822 8.80506 14.4788 8.80506Z\" fill=\"white\"/>\n<path d=\"M20.3705 8.23461V17.6209C20.2724 19.166 19.0443 20.4008 17.51 20.4995H10.3201C8.71926 20.396 7.45259 19.0567 7.45259 17.4198V8.23461C7.45259 7.82892 7.77977 7.49966 8.18291 7.49966H9.31104C9.71418 7.49966 10.0414 7.82892 10.0414 8.23461V15.9896C10.0414 17.0456 10.8909 17.9005 11.9402 17.9005H15.9874C17.0356 17.9005 17.7868 17.0456 17.7868 15.9896V8.23461C17.7868 7.82892 18.114 7.49966 18.5171 7.49966H19.6402C20.0433 7.49966 20.3705 7.82892 20.3705 8.23461Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"169\" height=\"32\" viewBox=\"0 0 169 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M43.5739 6.36621V25.6407C43.5739 26.1045 43.1989 26.4809 42.7367 26.4809H41.3342C40.872 26.4809 40.497 26.1045 40.497 25.6407V6.36621C40.497 5.90243 40.872 5.52603 41.3342 5.52603H42.7367C43.1989 5.52603 43.5739 5.90243 43.5739 6.36621Z\" fill=\"#213856\"/>\n<path d=\"M49.578 20.1569C49.8472 22.4059 51.6985 23.8739 54.387 23.8739C55.6328 23.8739 57.1478 23.4773 58.1364 22.7554C58.4673 22.5134 58.9214 22.5417 59.2161 22.828L60.0319 23.6225C60.3896 23.9707 60.3708 24.5568 59.985 24.8713C58.4499 26.1242 56.2878 26.752 54.3267 26.752C49.4869 26.752 46.3804 23.6642 46.3804 18.9282C46.3804 14.1923 49.5177 11.2241 54.1178 11.2241C58.7178 11.2241 61.7961 13.8723 61.5805 19.3517C61.563 19.802 61.192 20.1582 60.7432 20.1582H49.5766L49.578 20.1569ZM58.5691 17.549C58.3896 15.2112 56.687 13.9812 54.2075 13.9812C51.9664 13.9812 50.1151 15.2099 49.6369 17.549H58.5691Z\" fill=\"#213856\"/>\n<path d=\"M74.1321 25.6408V17.8722C74.1321 15.9243 72.5608 14.3017 70.6198 14.3407C68.4832 14.3824 67.1409 16.1945 67.1409 18.3575V25.6408C67.1409 26.1046 66.7659 26.481 66.3037 26.481H64.9012C64.4391 26.481 64.064 26.1046 64.064 25.6408V12.3939C64.064 11.9301 64.4391 11.5537 64.9012 11.5537H66.1791C66.6078 11.5537 66.9668 11.8777 67.0124 12.3052L67.1423 13.6497C67.9782 12.0312 69.7116 11.4317 71.2655 11.4317C73.1475 11.4317 75.0591 12.2113 75.8963 14.3999C77.0912 12.2113 78.9438 11.4626 80.9451 11.4626C85.008 11.4626 87.1888 14.0409 87.1888 18.2983V25.6422C87.1888 26.106 86.8138 26.4824 86.3516 26.4824H84.9196C84.4575 26.4824 84.0824 26.106 84.0824 25.6422V17.7068C84.0824 15.8934 82.641 14.3743 80.834 14.3716C78.6491 14.3676 77.2412 16.1676 77.2412 18.3588V25.6422C77.2412 26.106 76.8662 26.4824 76.404 26.4824H74.972C74.5099 26.4824 74.1348 26.106 74.1348 25.6422L74.1321 25.6408Z\" fill=\"#213856\"/>\n<path d=\"M102.213 12.1649L105.558 23.3041L109.085 12.1614C109.195 11.8119 109.518 11.5726 109.884 11.5726H111.526C112.102 11.5726 112.507 12.1439 112.316 12.6897L107.665 25.9779C107.547 26.3153 107.231 26.5411 106.875 26.5411H104.477C104.122 26.5411 103.806 26.3166 103.688 25.9805L102.153 21.6237L100.72 16.467L99.2555 21.6237L97.7203 25.9805C97.6024 26.3166 97.2863 26.5411 96.9313 26.5411H94.5322C94.1772 26.5411 93.8597 26.3153 93.7418 25.9792L89.0348 12.6881C88.8432 12.1423 89.2478 11.5696 89.8251 11.5696H91.4956C91.8613 11.5696 92.1841 11.8076 92.2939 12.1584L95.8503 23.3041L99.1952 12.1649C99.3023 11.8114 99.6279 11.5694 99.9962 11.5694H101.413C101.782 11.5694 102.107 11.8114 102.215 12.1649H102.213Z\" fill=\"#213856\"/>\n<path d=\"M127.035 11.5665H128.38C128.843 11.5665 129.218 11.9429 129.218 12.4066V25.6424C129.218 26.1062 128.843 26.4826 128.38 26.4826H127.077C126.635 26.4826 126.269 26.1371 126.241 25.6948L126.141 23.9947C125.155 25.8834 122.884 26.7828 121.062 26.7828C116.761 26.8123 113.505 24.0243 113.505 18.9885C113.505 13.9528 116.88 11.2844 121.123 11.2844C123.214 11.2844 125.215 12.2738 126.141 13.9528L126.2 12.3757C126.217 11.924 126.587 11.5678 127.037 11.5678L127.035 11.5665ZM116.58 18.9885C116.58 22.0468 118.732 23.9046 121.36 23.9046C127.723 23.9046 127.723 14.102 121.36 14.102C118.732 14.102 116.58 15.9612 116.58 18.9885Z\" fill=\"#213856\"/>\n<path d=\"M135.749 12.3183L135.878 13.6497C136.953 11.761 138.627 11.3712 140.21 11.3712C141.318 11.3712 142.391 11.675 143.207 12.1603C143.59 12.3875 143.726 12.8768 143.52 13.272L142.872 14.5182C142.657 14.9295 142.152 15.072 141.745 14.8542C141.215 14.5706 140.632 14.4294 139.851 14.4294C137.73 14.4294 135.878 15.7482 135.878 18.4771V25.6408C135.878 26.1046 135.503 26.481 135.041 26.481H133.638C133.176 26.481 132.801 26.1046 132.801 25.6408V12.4083C132.801 11.9446 133.176 11.5682 133.638 11.5682H134.917C135.345 11.5682 135.704 11.8921 135.749 12.3183Z\" fill=\"#213856\"/>\n<path d=\"M155.414 25.6408V17.8722C155.414 15.9243 153.843 14.3017 151.902 14.3407C149.765 14.3824 148.423 16.1945 148.423 18.3575V25.6408C148.423 26.1046 148.048 26.481 147.585 26.481H146.183C145.721 26.481 145.346 26.1046 145.346 25.6408V12.3913C145.346 11.9275 145.721 11.5511 146.183 11.5511H147.461C147.89 11.5511 148.249 11.8751 148.294 12.3026L148.424 13.6497C149.26 12.0312 150.993 11.4317 152.547 11.4317C154.429 11.4317 156.341 12.2113 157.178 14.3999C158.373 12.2113 160.226 11.4626 162.227 11.4626C166.29 11.4626 168.471 14.0409 168.471 18.2983V25.6422C168.471 26.106 168.096 26.4824 167.633 26.4824H166.201C165.739 26.4824 165.364 26.106 165.364 25.6422V17.7068C165.364 15.8934 163.923 14.3743 162.116 14.3716C159.931 14.3676 158.523 16.1676 158.523 18.3588V25.6422C158.523 26.106 158.148 26.4824 157.686 26.4824H156.254C155.792 26.4824 155.417 26.106 155.417 25.6422L155.414 25.6408Z\" fill=\"#213856\"/>\n<path d=\"M26.2092 0H5.67815C2.54219 0 0 2.55118 0 5.69821V26.3018C0 29.4488 2.54219 32 5.67815 32H26.2092C29.3452 32 31.8874 29.4488 31.8874 26.3018V5.69821C31.8874 2.55118 29.3452 0 26.2092 0Z\" fill=\"#FFB866\"/>\n<path d=\"M16.5936 10.0629H15.3017C14.8394 10.0629 14.4647 10.439 14.4647 10.9029L14.4671 16.6507C14.4671 17.1146 14.8419 17.4907 15.3041 17.4907H16.596C17.0583 17.4907 17.433 17.1146 17.433 16.6507L17.4306 10.9029C17.4306 10.439 17.0559 10.0629 16.5936 10.0629Z\" fill=\"white\"/>\n<path d=\"M23.3458 9.41099V20.1381C23.2333 21.904 21.8258 23.3151 20.0675 23.428H11.8275C9.99278 23.3098 8.5411 21.779 8.5411 19.9083V9.41099C8.5411 8.94733 8.91607 8.57104 9.37809 8.57104H10.671C11.133 8.57104 11.508 8.94733 11.508 9.41099V18.2738C11.508 19.4807 12.4816 20.4577 13.6842 20.4577H18.3225C19.5238 20.4577 20.3847 19.4807 20.3847 18.2738V9.41099C20.3847 8.94733 20.7597 8.57104 21.2217 8.57104H22.5088C22.9708 8.57104 23.3458 8.94733 23.3458 9.41099Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59449 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59449 18.4055 0 16.4386 0Z\" fill=\"#FFB866\"/>\n<path d=\"M10.3675 6.19042H9.63166C9.34173 6.19042 9.10669 6.42546 9.10669 6.71539V10.4271C9.10669 10.7171 9.34173 10.9521 9.63166 10.9521H10.3675C10.6574 10.9521 10.8924 10.7171 10.8924 10.4271V6.71539C10.8924 6.42546 10.6574 6.19042 10.3675 6.19042Z\" fill=\"#0C1521\"/>\n<path d=\"M14.6428 5.88216V12.5866C14.5722 13.6903 13.6895 14.5723 12.5866 14.6428H7.41841C6.26768 14.5689 5.35718 13.6122 5.35718 12.443V5.88216C5.35718 5.59238 5.59236 5.35719 5.88215 5.35719H6.61794C6.90772 5.35719 7.14291 5.59238 7.14291 5.88216V11.4922C7.14291 12.2464 7.75355 12.8571 8.50782 12.8571H11.4922C12.2456 12.8571 12.8571 12.2464 12.8571 11.4922V5.88216C12.8571 5.59238 13.0923 5.35719 13.382 5.35719H14.1178C14.4076 5.35719 14.6428 5.59238 14.6428 5.88216Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#FFB866\"/>\n<path d=\"M14.5145 8.66659H13.4843C13.0784 8.66659 12.7494 8.99564 12.7494 9.40154V14.598C12.7494 15.0039 13.0784 15.3329 13.4843 15.3329H14.5145C14.9204 15.3329 15.2494 15.0039 15.2494 14.598V9.40154C15.2494 8.99564 14.9204 8.66659 14.5145 8.66659Z\" fill=\"#0C1521\"/>\n<path d=\"M20.4999 8.23502V17.6213C20.4012 19.1664 19.1653 20.4012 17.6213 20.4999H10.3858C8.77477 20.3965 7.50006 19.0571 7.50006 17.4202V8.23502C7.50006 7.82933 7.82932 7.50007 8.23502 7.50007H9.26513C9.67082 7.50007 10.0001 7.82933 10.0001 8.23502V16.089C10.0001 17.145 10.855 17.9999 11.911 17.9999H16.089C17.1438 17.9999 17.9999 17.145 17.9999 16.089V8.23502C17.9999 7.82933 18.3292 7.50007 18.7349 7.50007H19.765C20.1707 7.50007 20.4999 7.82933 20.4999 8.23502Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55118 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55118 29.4488 0 26.3018 0Z\" fill=\"#FFB866\"/>\n<path d=\"M16.588 9.90466H15.4107C14.9468 9.90466 14.5707 10.2807 14.5707 10.7446V16.6834C14.5707 17.1473 14.9468 17.5233 15.4107 17.5233H16.588C17.0518 17.5233 17.4279 17.1473 17.4279 16.6834V10.7446C17.4279 10.2807 17.0518 9.90466 16.588 9.90466Z\" fill=\"#0C1521\"/>\n<path d=\"M23.4285 9.41145V20.1386C23.3156 21.9045 21.9032 23.3156 20.1386 23.4285H11.8695C10.0283 23.3102 8.57153 21.7795 8.57153 19.9088V9.41145C8.57153 8.9478 8.94783 8.5715 9.41148 8.5715H10.5888C11.0524 8.5715 11.4287 8.9478 11.4287 9.41145V18.3875C11.4287 19.5943 12.4057 20.5713 13.6126 20.5713H18.3875C19.593 20.5713 20.5714 19.5943 20.5714 18.3875V9.41145C20.5714 8.9478 20.9477 8.5715 21.4113 8.5715H22.5886C23.0522 8.5715 23.4285 8.9478 23.4285 9.41145Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12276V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12276C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#FFB866\"/>\n<path d=\"M20.7349 12.3808H19.2633C18.6835 12.3808 18.2134 12.8509 18.2134 13.4308V20.8542C18.2134 21.4341 18.6835 21.9042 19.2633 21.9042H20.7349C21.3148 21.9042 21.7848 21.4341 21.7848 20.8542V13.4308C21.7848 12.8509 21.3148 12.3808 20.7349 12.3808Z\" fill=\"#0C1521\"/>\n<path d=\"M29.2856 11.7643V25.1732C29.1445 27.3806 27.3789 29.1445 25.1732 29.2856H14.8368C12.5354 29.1378 10.7144 27.2244 10.7144 24.886V11.7643C10.7144 11.1847 11.1847 10.7144 11.7643 10.7144H13.2359C13.8154 10.7144 14.2858 11.1847 14.2858 11.7643V22.9843C14.2858 24.4929 15.5071 25.7142 17.0156 25.7142H22.9843C24.4912 25.7142 25.7141 24.4929 25.7141 22.9843V11.7643C25.7141 11.1847 26.1845 10.7144 26.7641 10.7144H28.2357C28.8152 10.7144 29.2856 11.1847 29.2856 11.7643Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"106\" height=\"20\" viewBox=\"0 0 106 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M27.33 3.97888V16.0254C27.33 16.3153 27.0947 16.5506 26.8049 16.5506H25.9252C25.6353 16.5506 25.4001 16.3153 25.4001 16.0254V3.97888C25.4001 3.68902 25.6353 3.45377 25.9252 3.45377H26.8049C27.0947 3.45377 27.33 3.68902 27.33 3.97888Z\" fill=\"white\"/>\n<path d=\"M31.0958 12.5981C31.2646 14.0037 32.4258 14.9212 34.112 14.9212C34.8934 14.9212 35.8437 14.6733 36.4637 14.2221C36.6712 14.0709 36.9561 14.0885 37.1409 14.2675L37.6526 14.7641C37.8769 14.9817 37.8651 15.348 37.6232 15.5446C36.6603 16.3276 35.3043 16.72 34.0742 16.72C31.0386 16.72 29.0902 14.7901 29.0902 11.8301C29.0902 8.87017 31.058 7.01504 33.9432 7.01504C36.8284 7.01504 38.7591 8.6702 38.6238 12.0948C38.6129 12.3763 38.3802 12.5989 38.0987 12.5989H31.0949L31.0958 12.5981ZM36.7351 10.9681C36.6225 9.50703 35.5546 8.73826 33.9994 8.73826C32.5938 8.73826 31.4327 9.50619 31.1327 10.9681H36.7351Z\" fill=\"white\"/>\n<path d=\"M46.4963 16.0255V11.1701C46.4963 9.95268 45.5108 8.93858 44.2934 8.96294C42.9533 8.98899 42.1114 10.1216 42.1114 11.4734V16.0255C42.1114 16.3154 41.8762 16.5506 41.5863 16.5506H40.7066C40.4168 16.5506 40.1815 16.3154 40.1815 16.0255V7.74618C40.1815 7.45632 40.4168 7.22107 40.7066 7.22107H41.5082C41.777 7.22107 42.0022 7.42355 42.0308 7.69073L42.1123 8.53109C42.6365 7.51951 43.7237 7.14479 44.6984 7.14479C45.8788 7.14479 47.0778 7.63209 47.6029 8.99991C48.3523 7.63209 49.5143 7.16411 50.7695 7.16411C53.3178 7.16411 54.6856 8.77558 54.6856 11.4364V16.0264C54.6856 16.3162 54.4504 16.5515 54.1605 16.5515H53.2624C52.9725 16.5515 52.7373 16.3162 52.7373 16.0264V11.0668C52.7373 9.93336 51.8332 8.98395 50.6998 8.98227C49.3295 8.97975 48.4464 10.1048 48.4464 11.4743V16.0264C48.4464 16.3162 48.2112 16.5515 47.9213 16.5515H47.0231C46.7333 16.5515 46.498 16.3162 46.498 16.0264L46.4963 16.0255Z\" fill=\"white\"/>\n<path d=\"M64.1091 7.60307L66.207 14.565L68.4193 7.60089C68.4882 7.38244 68.6907 7.23289 68.9201 7.23289H69.9501C70.3114 7.23289 70.5652 7.58996 70.4458 7.93108L67.5286 16.2362C67.4547 16.447 67.2564 16.5882 67.0329 16.5882H65.529C65.3063 16.5882 65.108 16.4479 65.0341 16.2378L64.0713 13.5148L63.1723 10.2919L62.2539 13.5148L61.2911 16.2378C61.2171 16.4479 61.0189 16.5882 60.7962 16.5882H59.2914C59.0688 16.5882 58.8697 16.447 58.7957 16.237L55.8434 7.93005C55.7233 7.58894 55.977 7.23102 56.3391 7.23102H57.3869C57.6162 7.23102 57.8187 7.37973 57.8876 7.59902L60.1182 14.565L62.2161 7.60307C62.2833 7.3821 62.4875 7.23087 62.7186 7.23087H63.6075C63.8385 7.23087 64.0427 7.3821 64.1099 7.60307H64.1091Z\" fill=\"white\"/>\n<path d=\"M79.6778 7.22903H80.5214C80.8112 7.22903 81.0465 7.46429 81.0465 7.75415V16.0265C81.0465 16.3164 80.8112 16.5516 80.5214 16.5516H79.7039C79.4266 16.5516 79.1972 16.3357 79.1796 16.0593L79.1166 14.9967C78.4982 16.1771 77.0741 16.7392 75.9314 16.7392C73.2336 16.7577 71.1911 15.0152 71.1911 11.8678C71.1911 8.72051 73.3084 7.05275 75.9692 7.05275C77.2808 7.05275 78.536 7.67112 79.1166 8.72051L79.1535 7.73483C79.1645 7.45253 79.3964 7.22988 79.6787 7.22988L79.6778 7.22903ZM73.1202 11.8678C73.1202 13.7793 74.4695 14.9404 76.1179 14.9404C80.1088 14.9404 80.1088 8.81377 76.1179 8.81377C74.4695 8.81377 73.1202 9.97575 73.1202 11.8678Z\" fill=\"white\"/>\n<path d=\"M85.1431 7.69892L85.2238 8.53109C85.8985 7.35063 86.9479 7.10698 87.941 7.10698C88.6358 7.10698 89.3088 7.29686 89.8205 7.60017C90.0607 7.74216 90.1464 8.04798 90.017 8.295L89.6104 9.07385C89.476 9.33095 89.1592 9.42 88.9038 9.28389C88.5711 9.10662 88.2056 9.0184 87.7158 9.0184C86.3858 9.0184 85.2238 9.84262 85.2238 11.5482V16.0255C85.2238 16.3154 84.9885 16.5506 84.6987 16.5506H83.819C83.5291 16.5506 83.2939 16.3154 83.2939 16.0255V7.75521C83.2939 7.46535 83.5291 7.2301 83.819 7.2301H84.6214C84.8894 7.2301 85.1146 7.43258 85.1431 7.69892Z\" fill=\"white\"/>\n<path d=\"M97.477 16.0255V11.1701C97.477 9.95268 96.4915 8.93858 95.274 8.96294C93.934 8.98899 93.0921 10.1216 93.0921 11.4734V16.0255C93.0921 16.3154 92.8568 16.5506 92.567 16.5506H91.6873C91.3974 16.5506 91.1622 16.3154 91.1622 16.0255V7.74455C91.1622 7.45468 91.3974 7.21943 91.6873 7.21943H92.4888C92.7577 7.21943 92.9829 7.42192 93.0114 7.6891L93.0929 8.53109C93.6172 7.51951 94.7044 7.14479 95.679 7.14479C96.8595 7.14479 98.0584 7.63209 98.5835 8.99991C99.333 7.63209 100.495 7.16411 101.75 7.16411C104.298 7.16411 105.666 8.77558 105.666 11.4364V16.0264C105.666 16.3162 105.431 16.5515 105.141 16.5515H104.243C103.953 16.5515 103.718 16.3162 103.718 16.0264V11.0668C103.718 9.93336 102.814 8.98395 101.68 8.98227C100.31 8.97975 99.4271 10.1048 99.4271 11.4743V16.0264C99.4271 16.3162 99.1918 16.5515 98.902 16.5515H98.0038C97.7139 16.5515 97.4787 16.3162 97.4787 16.0264L97.477 16.0255Z\" fill=\"white\"/>\n<path d=\"M16.4387 0H3.56139C1.59449 0 0 1.59449 0 3.56138V16.4386C0 18.4055 1.59449 20 3.56139 20H16.4387C18.4056 20 20.0001 18.4055 20.0001 16.4386V3.56138C20.0001 1.59449 18.4056 0 16.4387 0Z\" fill=\"#FFB866\"/>\n<path d=\"M10.4077 6.28933H9.59735C9.30741 6.28933 9.07238 6.52437 9.07238 6.8143L9.07391 10.4067C9.07391 10.6966 9.30895 10.9317 9.59888 10.9317H10.4092C10.6991 10.9317 10.9342 10.6966 10.9342 10.4067L10.9326 6.8143C10.9326 6.52437 10.6976 6.28933 10.4077 6.28933Z\" fill=\"#0C1521\"/>\n<path d=\"M14.6427 5.88187V12.5863C14.5721 13.69 13.6894 14.572 12.5865 14.6425H7.41829C6.26756 14.5686 5.35706 13.6119 5.35706 12.4427V5.88187C5.35706 5.59208 5.59224 5.3569 5.88203 5.3569H6.69295C6.98273 5.3569 7.21791 5.59208 7.21791 5.88187V11.4211C7.21791 12.1754 7.82856 12.7861 8.58283 12.7861H11.4921C12.2455 12.7861 12.7855 12.1754 12.7855 11.4211V5.88187C12.7855 5.59208 13.0207 5.3569 13.3104 5.3569H14.1177C14.4075 5.3569 14.6427 5.59208 14.6427 5.88187Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"147\" height=\"28\" viewBox=\"0 0 147 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M38.0207 5.57044V22.4356C38.0207 22.8414 37.6934 23.1708 37.2902 23.1708H36.0664C35.6631 23.1708 35.3359 22.8414 35.3359 22.4356V5.57044C35.3359 5.16463 35.6631 4.83528 36.0664 4.83528H37.2902C37.6934 4.83528 38.0207 5.16463 38.0207 5.57044Z\" fill=\"white\"/>\n<path d=\"M43.2596 17.6373C43.4945 19.6052 45.1098 20.8896 47.4557 20.8896C48.5427 20.8896 49.8647 20.5426 50.7273 19.911C51.016 19.6993 51.4122 19.724 51.6694 19.9745L52.3812 20.6697C52.6933 20.9743 52.6769 21.4872 52.3403 21.7624C51.0008 22.8587 49.1143 23.408 47.4031 23.408C43.1801 23.408 40.4695 20.7061 40.4695 16.5622C40.4695 12.4182 43.207 9.82106 47.2208 9.82106C51.2346 9.82106 53.9206 12.1383 53.7324 16.9327C53.7172 17.3268 53.3934 17.6385 53.0019 17.6385H43.2584L43.2596 17.6373ZM51.1048 15.3553C50.9482 13.3098 49.4626 12.2336 47.2991 12.2336C45.3436 12.2336 43.7283 13.3087 43.311 15.3553H51.1048Z\" fill=\"white\"/>\n<path d=\"M64.6844 22.4357V15.6382C64.6844 13.9338 63.3134 12.514 61.6197 12.5481C59.7554 12.5846 58.5842 14.1702 58.5842 16.0628V22.4357C58.5842 22.8415 58.2569 23.1709 57.8537 23.1709H56.6299C56.2267 23.1709 55.8994 22.8415 55.8994 22.4357V10.8447C55.8994 10.4388 56.2267 10.1095 56.6299 10.1095H57.745C58.119 10.1095 58.4323 10.393 58.472 10.767L58.5854 11.9435C59.3148 10.5273 60.8272 10.0027 62.1831 10.0027C63.8253 10.0027 65.4933 10.6849 66.2238 12.5999C67.2664 10.6849 68.8829 10.0298 70.6292 10.0298C74.1743 10.0298 76.0771 12.2858 76.0771 16.011V22.4369C76.0771 22.8427 75.7499 23.1721 75.3466 23.1721H74.0971C73.6939 23.1721 73.3666 22.8427 73.3666 22.4369V15.4935C73.3666 13.9067 72.1089 12.5775 70.5321 12.5752C68.6258 12.5717 67.3973 14.1467 67.3973 16.064V22.4369C67.3973 22.8427 67.07 23.1721 66.6668 23.1721H65.4173C65.014 23.1721 64.6868 22.8427 64.6868 22.4369L64.6844 22.4357Z\" fill=\"white\"/>\n<path d=\"M89.1867 10.6443L92.1053 20.391L95.183 10.6412C95.2789 10.3354 95.5606 10.126 95.8797 10.126H97.3127C97.8153 10.126 98.1683 10.6259 98.0023 11.1035L93.9439 22.7306C93.8411 23.0259 93.5652 23.2235 93.2543 23.2235H91.1621C90.8523 23.2235 90.5765 23.027 90.4736 22.733L89.1341 18.9207L87.8835 14.4086L86.6059 18.9207L85.2664 22.733C85.1636 23.027 84.8877 23.2235 84.578 23.2235H82.4846C82.1748 23.2235 81.8978 23.0259 81.795 22.7318L77.6878 11.1021C77.5207 10.6245 77.8737 10.1234 78.3774 10.1234H79.835C80.1541 10.1234 80.4358 10.3316 80.5316 10.6386L83.6347 20.391L86.5533 10.6443C86.6468 10.3349 86.9309 10.1232 87.2523 10.1232H88.4889C88.8104 10.1232 89.0944 10.3349 89.1879 10.6443H89.1867Z\" fill=\"white\"/>\n<path d=\"M110.846 10.1206H112.019C112.422 10.1206 112.75 10.45 112.75 10.8558V22.4371C112.75 22.8429 112.422 23.1722 112.019 23.1722H110.882C110.496 23.1722 110.177 22.8699 110.152 22.483L110.065 20.9954C109.204 22.648 107.223 23.4349 105.634 23.4349C101.881 23.4608 99.0391 21.0212 99.0391 16.615C99.0391 12.2087 101.985 9.87385 105.686 9.87385C107.511 9.87385 109.257 10.7396 110.065 12.2087L110.116 10.8288C110.131 10.4335 110.454 10.1218 110.847 10.1218L110.846 10.1206ZM101.723 16.615C101.723 19.291 103.6 20.9165 105.893 20.9165C111.445 20.9165 111.445 12.3393 105.893 12.3393C103.6 12.3393 101.723 13.966 101.723 16.615Z\" fill=\"white\"/>\n<path d=\"M118.449 10.7785L118.561 11.9435C119.5 10.2909 120.959 9.94977 122.341 9.94977C123.308 9.94977 124.244 10.2156 124.956 10.6402C125.29 10.839 125.409 11.2672 125.229 11.613L124.663 12.7034C124.476 13.0633 124.036 13.188 123.68 12.9975C123.218 12.7493 122.709 12.6258 122.028 12.6258C120.177 12.6258 118.561 13.7797 118.561 16.1675V22.4357C118.561 22.8415 118.234 23.1709 117.83 23.1709H116.607C116.203 23.1709 115.876 22.8415 115.876 22.4357V10.8573C115.876 10.4515 116.203 10.1221 116.607 10.1221H117.723C118.096 10.1221 118.409 10.4056 118.449 10.7785Z\" fill=\"white\"/>\n<path d=\"M135.607 22.4357V15.6382C135.607 13.9338 134.236 12.514 132.543 12.5481C130.678 12.5846 129.507 14.1702 129.507 16.0628V22.4357C129.507 22.8415 129.18 23.1709 128.777 23.1709H127.553C127.15 23.1709 126.822 22.8415 126.822 22.4357V10.8424C126.822 10.4366 127.15 10.1072 127.553 10.1072H128.668C129.042 10.1072 129.355 10.3907 129.395 10.7647L129.508 11.9435C130.238 10.5273 131.75 10.0027 133.106 10.0027C134.748 10.0027 136.416 10.6849 137.147 12.5999C138.189 10.6849 139.806 10.0298 141.552 10.0298C145.097 10.0298 147 12.2858 147 16.011V22.4369C147 22.8427 146.673 23.1721 146.269 23.1721H145.02C144.617 23.1721 144.289 22.8427 144.289 22.4369V15.4935C144.289 13.9067 143.032 12.5775 141.455 12.5752C139.549 12.5717 138.32 14.1467 138.32 16.064V22.4369C138.32 22.8427 137.993 23.1721 137.59 23.1721H136.34C135.937 23.1721 135.61 22.8427 135.61 22.4369L135.607 22.4357Z\" fill=\"white\"/>\n<path d=\"M22.869 0H4.9545C2.21821 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.21821 28 4.9545 28H22.869C25.6053 28 27.8235 25.7677 27.8235 23.0141V4.98593C27.8235 2.23228 25.6053 0 22.869 0Z\" fill=\"#FFB866\"/>\n<path d=\"M14.4788 8.80506H13.3516C12.9482 8.80506 12.6212 9.13412 12.6212 9.54002L12.6234 14.5694C12.6234 14.9753 12.9503 15.3043 13.3537 15.3043H14.481C14.8843 15.3043 15.2113 14.9753 15.2113 14.5694L15.2092 9.54002C15.2092 9.13412 14.8822 8.80506 14.4788 8.80506Z\" fill=\"#0C1521\"/>\n<path d=\"M20.3705 8.23461V17.6209C20.2724 19.166 19.0443 20.4008 17.51 20.4995H10.3201C8.71926 20.396 7.45259 19.0567 7.45259 17.4198V8.23461C7.45259 7.82892 7.77977 7.49966 8.18291 7.49966H9.31104C9.71418 7.49966 10.0414 7.82892 10.0414 8.23461V15.9896C10.0414 17.0456 10.8909 17.9005 11.9402 17.9005H15.9874C17.0356 17.9005 17.7868 17.0456 17.7868 15.9896V8.23461C17.7868 7.82892 18.114 7.49966 18.5171 7.49966H19.6402C20.0433 7.49966 20.3705 7.82892 20.3705 8.23461Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"169\" height=\"32\" viewBox=\"0 0 169 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M43.5739 6.36621V25.6407C43.5739 26.1045 43.1989 26.4809 42.7367 26.4809H41.3342C40.872 26.4809 40.497 26.1045 40.497 25.6407V6.36621C40.497 5.90243 40.872 5.52603 41.3342 5.52603H42.7367C43.1989 5.52603 43.5739 5.90243 43.5739 6.36621Z\" fill=\"white\"/>\n<path d=\"M49.578 20.1569C49.8472 22.4059 51.6985 23.8739 54.387 23.8739C55.6328 23.8739 57.1478 23.4773 58.1364 22.7554C58.4673 22.5134 58.9214 22.5417 59.2161 22.828L60.0319 23.6225C60.3896 23.9707 60.3708 24.5568 59.985 24.8713C58.4499 26.1242 56.2878 26.752 54.3267 26.752C49.4869 26.752 46.3804 23.6642 46.3804 18.9282C46.3804 14.1923 49.5177 11.2241 54.1178 11.2241C58.7178 11.2241 61.7961 13.8723 61.5805 19.3517C61.563 19.802 61.192 20.1582 60.7432 20.1582H49.5766L49.578 20.1569ZM58.5691 17.549C58.3896 15.2112 56.687 13.9812 54.2075 13.9812C51.9664 13.9812 50.1151 15.2099 49.6369 17.549H58.5691Z\" fill=\"white\"/>\n<path d=\"M74.1321 25.6408V17.8722C74.1321 15.9243 72.5608 14.3017 70.6198 14.3407C68.4832 14.3824 67.1409 16.1945 67.1409 18.3575V25.6408C67.1409 26.1046 66.7659 26.481 66.3037 26.481H64.9012C64.4391 26.481 64.064 26.1046 64.064 25.6408V12.3939C64.064 11.9301 64.4391 11.5537 64.9012 11.5537H66.1791C66.6078 11.5537 66.9668 11.8777 67.0124 12.3052L67.1423 13.6497C67.9782 12.0312 69.7116 11.4317 71.2655 11.4317C73.1475 11.4317 75.0591 12.2113 75.8963 14.3999C77.0912 12.2113 78.9438 11.4626 80.9451 11.4626C85.008 11.4626 87.1888 14.0409 87.1888 18.2983V25.6422C87.1888 26.106 86.8138 26.4824 86.3516 26.4824H84.9196C84.4575 26.4824 84.0824 26.106 84.0824 25.6422V17.7068C84.0824 15.8934 82.641 14.3743 80.834 14.3716C78.6491 14.3676 77.2412 16.1676 77.2412 18.3588V25.6422C77.2412 26.106 76.8662 26.4824 76.404 26.4824H74.972C74.5099 26.4824 74.1348 26.106 74.1348 25.6422L74.1321 25.6408Z\" fill=\"white\"/>\n<path d=\"M102.213 12.1649L105.558 23.3041L109.085 12.1614C109.195 11.8119 109.518 11.5726 109.884 11.5726H111.526C112.102 11.5726 112.507 12.1439 112.316 12.6897L107.665 25.9779C107.547 26.3153 107.231 26.5411 106.875 26.5411H104.477C104.122 26.5411 103.806 26.3166 103.688 25.9805L102.153 21.6237L100.72 16.467L99.2555 21.6237L97.7203 25.9805C97.6024 26.3166 97.2863 26.5411 96.9313 26.5411H94.5322C94.1772 26.5411 93.8597 26.3153 93.7418 25.9792L89.0348 12.6881C88.8432 12.1423 89.2478 11.5696 89.8251 11.5696H91.4955C91.8613 11.5696 92.1841 11.8076 92.2939 12.1584L95.8503 23.3041L99.1952 12.1649C99.3023 11.8114 99.6279 11.5694 99.9962 11.5694H101.413C101.782 11.5694 102.107 11.8114 102.215 12.1649H102.213Z\" fill=\"white\"/>\n<path d=\"M127.035 11.5665H128.38C128.843 11.5665 129.218 11.9429 129.218 12.4066V25.6424C129.218 26.1062 128.843 26.4826 128.38 26.4826H127.077C126.635 26.4826 126.269 26.1371 126.241 25.6948L126.141 23.9947C125.155 25.8834 122.884 26.7828 121.062 26.7828C116.761 26.8123 113.505 24.0243 113.505 18.9885C113.505 13.9528 116.88 11.2844 121.123 11.2844C123.214 11.2844 125.215 12.2738 126.141 13.9528L126.2 12.3757C126.217 11.924 126.587 11.5678 127.037 11.5678L127.035 11.5665ZM116.58 18.9885C116.58 22.0468 118.732 23.9046 121.36 23.9046C127.723 23.9046 127.723 14.102 121.36 14.102C118.732 14.102 116.58 15.9612 116.58 18.9885Z\" fill=\"white\"/>\n<path d=\"M135.749 12.3183L135.878 13.6497C136.953 11.761 138.627 11.3712 140.21 11.3712C141.318 11.3712 142.391 11.675 143.207 12.1603C143.59 12.3875 143.726 12.8768 143.52 13.272L142.872 14.5182C142.657 14.9295 142.152 15.072 141.745 14.8542C141.215 14.5706 140.632 14.4294 139.851 14.4294C137.73 14.4294 135.878 15.7482 135.878 18.4771V25.6408C135.878 26.1046 135.503 26.481 135.041 26.481H133.638C133.176 26.481 132.801 26.1046 132.801 25.6408V12.4083C132.801 11.9446 133.176 11.5682 133.638 11.5682H134.917C135.345 11.5682 135.704 11.8921 135.749 12.3183Z\" fill=\"white\"/>\n<path d=\"M155.414 25.6408V17.8722C155.414 15.9243 153.843 14.3017 151.902 14.3407C149.765 14.3824 148.423 16.1945 148.423 18.3575V25.6408C148.423 26.1046 148.048 26.481 147.585 26.481H146.183C145.721 26.481 145.346 26.1046 145.346 25.6408V12.3913C145.346 11.9275 145.721 11.5511 146.183 11.5511H147.461C147.89 11.5511 148.249 11.8751 148.294 12.3026L148.424 13.6497C149.26 12.0312 150.993 11.4317 152.547 11.4317C154.429 11.4317 156.341 12.2113 157.178 14.3999C158.373 12.2113 160.226 11.4626 162.227 11.4626C166.29 11.4626 168.471 14.0409 168.471 18.2983V25.6422C168.471 26.106 168.095 26.4824 167.633 26.4824H166.201C165.739 26.4824 165.364 26.106 165.364 25.6422V17.7068C165.364 15.8934 163.923 14.3743 162.116 14.3716C159.931 14.3676 158.523 16.1676 158.523 18.3588V25.6422C158.523 26.106 158.148 26.4824 157.686 26.4824H156.254C155.792 26.4824 155.417 26.106 155.417 25.6422L155.414 25.6408Z\" fill=\"white\"/>\n<path d=\"M26.2092 0H5.67815C2.54219 0 0 2.55118 0 5.69821V26.3018C0 29.4488 2.54219 32 5.67815 32H26.2092C29.3452 32 31.8874 29.4488 31.8874 26.3018V5.69821C31.8874 2.55118 29.3452 0 26.2092 0Z\" fill=\"#FFB866\"/>\n<path d=\"M16.5936 10.0629H15.3017C14.8394 10.0629 14.4647 10.439 14.4647 10.9029L14.4671 16.6507C14.4671 17.1146 14.8419 17.4907 15.3041 17.4907H16.596C17.0583 17.4907 17.433 17.1146 17.433 16.6507L17.4306 10.9029C17.4306 10.439 17.0559 10.0629 16.5936 10.0629Z\" fill=\"#0C1521\"/>\n<path d=\"M23.3458 9.41099V20.1381C23.2333 21.904 21.8258 23.3151 20.0675 23.428H11.8275C9.99278 23.3098 8.5411 21.779 8.5411 19.9083V9.41099C8.5411 8.94733 8.91607 8.57104 9.37809 8.57104H10.671C11.133 8.57104 11.508 8.94733 11.508 9.41099V18.2738C11.508 19.4807 12.4816 20.4577 13.6842 20.4577H18.3225C19.5238 20.4577 20.3847 19.4807 20.3847 18.2738V9.41099C20.3847 8.94733 20.7597 8.57104 21.2217 8.57104H22.5088C22.9708 8.57104 23.3458 8.94733 23.3458 9.41099Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M10.5875 9.01618H9.41065C9.09842 9.01618 8.8453 9.2687 8.8453 9.58021V10.3708C8.8453 10.6823 9.09842 10.9348 9.41065 10.9348H10.5875C10.8997 10.9348 11.1529 10.6823 11.1529 10.3708V9.58021C11.1529 9.2687 10.8997 9.01618 10.5875 9.01618Z\" fill=\"white\"/>\n<path d=\"M15 8.4521V7.19679C14.9358 6.19687 14.2501 5.36661 13.3247 5.08505C13.2442 5.06068 13.161 5.03993 13.0769 5.02459V4.52824C13.0769 4.21689 12.8236 3.9642 12.5115 3.9642H11.5265C11.2144 3.9642 10.9611 4.21689 10.9611 4.52824V4.98758H9.03799V4.52824C9.03799 4.21689 8.78471 3.9642 8.47264 3.9642H7.48756C7.17549 3.9642 6.92221 4.21689 6.92221 4.52824V5.02639C6.83808 5.04173 6.75667 5.06249 6.67707 5.08685C5.70556 5.38376 5 6.28531 5 7.35111V12.6007C5 13.6665 5.70556 14.568 6.67707 14.8649C6.84984 14.9182 7.03166 14.9525 7.21981 14.9642H12.7856C12.972 14.9525 13.152 14.9191 13.3238 14.8658C14.2501 14.5852 14.9358 13.7549 15 12.755V11.4997C15 11.1883 14.7467 10.9357 14.4346 10.9357H13.6422C13.3302 10.9357 13.0769 11.1883 13.0769 11.4997V11.5791C13.0769 12.3886 12.4184 13.0456 11.607 13.0456H8.39303C7.58164 13.0456 6.92311 12.3886 6.92311 11.5791V8.37269C6.92311 7.56319 7.58164 6.9062 8.39303 6.9062H11.607C12.4184 6.9062 13.0769 7.56319 13.0769 8.37269V8.4521C13.0769 8.76345 13.3302 9.01613 13.6422 9.01613H14.4346C14.7467 9.01613 15 8.76345 15 8.4521Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M14.6709 13.1672H13.1387C12.7321 13.1672 12.4026 13.4968 12.4026 13.9033V14.935C12.4026 15.3415 12.7321 15.671 13.1387 15.671H14.6709C15.0774 15.671 15.4069 15.3415 15.4069 14.935V13.9033C15.4069 13.4968 15.0774 13.1672 14.6709 13.1672Z\" fill=\"white\"/>\n<path d=\"M20.4157 12.4311V10.7929C20.3321 9.48804 19.4394 8.40456 18.2346 8.03712C18.1298 8.00532 18.0215 7.97823 17.9119 7.95821V7.31048C17.9119 6.90417 17.5822 6.57442 17.1759 6.57442H15.8933C15.487 6.57442 15.1573 6.90417 15.1573 7.31048V7.90993H12.6535V7.31048C12.6535 6.90417 12.3237 6.57442 11.9174 6.57442H10.6349C10.2286 6.57442 9.89881 6.90417 9.89881 7.31048V7.96057C9.78928 7.98059 9.68329 8.00768 9.57965 8.03947C8.31479 8.42694 7.39618 9.60346 7.39618 10.9943V17.845C7.39618 19.2359 8.31479 20.4124 9.57965 20.7998C9.80459 20.8693 10.0413 20.9141 10.2863 20.9294H17.5327C17.7753 20.9141 18.0097 20.8705 18.2334 20.801C19.4394 20.4348 20.3321 19.3513 20.4157 18.0464V16.4082C20.4157 16.0019 20.086 15.6721 19.6797 15.6721H18.648C18.2417 15.6721 17.9119 16.0019 17.9119 16.4082V16.5118C17.9119 17.5682 17.0546 18.4256 15.9982 18.4256H11.8138C10.7574 18.4256 9.89999 17.5682 9.89999 16.5118V12.3275C9.89999 11.2711 10.7574 10.4137 11.8138 10.4137H15.9982C17.0546 10.4137 17.9119 11.2711 17.9119 12.3275V12.4311C17.9119 12.8374 18.2417 13.1672 18.648 13.1672H19.6797C20.086 13.1672 20.4157 12.8374 20.4157 12.4311Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55117 29.4488 0 26.3018 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M16.7667 15.0483H15.0156C14.551 15.0483 14.1744 15.4249 14.1744 15.8895V17.0685C14.1744 17.5331 14.551 17.9097 15.0156 17.9097H16.7667C17.2313 17.9097 17.6079 17.5331 17.6079 17.0685V15.8895C17.6079 15.4249 17.2313 15.0483 16.7667 15.0483Z\" fill=\"white\"/>\n<path d=\"M23.3323 14.207V12.3348C23.2367 10.8435 22.2165 9.6052 20.8396 9.18527C20.7198 9.14893 20.5959 9.11797 20.4708 9.09509V8.35482C20.4708 7.89047 20.0939 7.51361 19.6295 7.51361H18.1638C17.6994 7.51361 17.3226 7.89047 17.3226 8.35482V9.03991H14.4611V8.35482C14.4611 7.89047 14.0842 7.51361 13.6199 7.51361H12.1541C11.6898 7.51361 11.3129 7.89047 11.3129 8.35482V9.09778C11.1877 9.12066 11.0666 9.15162 10.9482 9.18796C9.5026 9.63078 8.45276 10.9754 8.45276 12.5649V20.3943C8.45276 21.9838 9.5026 23.3284 10.9482 23.7712C11.2052 23.8506 11.4758 23.9018 11.7557 23.9193H20.0374C20.3146 23.9018 20.5825 23.852 20.8382 23.7726C22.2165 23.354 23.2367 22.1157 23.3323 20.6244V18.7522C23.3323 18.2879 22.9554 17.911 22.491 17.911H21.312C20.8476 17.911 20.4708 18.2879 20.4708 18.7522V18.8707C20.4708 20.078 19.4909 21.0578 18.2836 21.0578H13.5014C12.2941 21.0578 11.3143 20.078 11.3143 18.8707V14.0885C11.3143 12.8812 12.2941 11.9014 13.5014 11.9014H18.2836C19.4909 11.9014 20.4708 12.8812 20.4708 14.0885V14.207C20.4708 14.6713 20.8476 15.0482 21.312 15.0482H22.491C22.9554 15.0482 23.3323 14.6713 23.3323 14.207Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12276V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12276C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M20.9583 18.8103H18.7695C18.1887 18.8103 17.7179 19.2811 17.7179 19.8618V21.3356C17.7179 21.9164 18.1887 22.3872 18.7695 22.3872H20.9583C21.539 22.3872 22.0098 21.9164 22.0098 21.3356V19.8618C22.0098 19.2811 21.539 18.8103 20.9583 18.8103Z\" fill=\"white\"/>\n<path d=\"M29.1653 17.7587V15.4185C29.0458 13.5543 27.7705 12.0065 26.0494 11.4816C25.8997 11.4362 25.7449 11.3975 25.5884 11.3689V10.4435C25.5884 9.8631 25.1173 9.39202 24.5369 9.39202H22.7047C22.1243 9.39202 21.6532 9.8631 21.6532 10.4435V11.2999H18.0763V10.4435C18.0763 9.8631 17.6052 9.39202 17.0248 9.39202H15.1926C14.6122 9.39202 14.1411 9.8631 14.1411 10.4435V11.3722C13.9846 11.4008 13.8332 11.4395 13.6852 11.485C11.8782 12.0385 10.5659 13.7192 10.5659 15.7062V25.4928C10.5659 27.4798 11.8782 29.1605 13.6852 29.714C14.0065 29.8133 14.3447 29.8772 14.6946 29.8991H25.0467C25.3933 29.8772 25.7281 29.815 26.0477 29.7157C27.7705 29.1925 29.0458 27.6447 29.1653 25.7805V23.4403C29.1653 22.8598 28.6942 22.3888 28.1138 22.3888H26.6399C26.0595 22.3888 25.5884 22.8598 25.5884 23.4403V23.5883C25.5884 25.0975 24.3636 26.3223 22.8545 26.3223H16.8767C15.3676 26.3223 14.1428 25.0975 14.1428 23.5883V17.6107C14.1428 16.1015 15.3676 14.8767 16.8767 14.8767H22.8545C24.3636 14.8767 25.5884 16.1015 25.5884 17.6107V17.7587C25.5884 18.3392 26.0595 18.8102 26.6399 18.8102H28.1138C28.6942 18.8102 29.1653 18.3392 29.1653 17.7587Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"80\" height=\"20\" viewBox=\"0 0 80 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M27.307 4.05466V16.1081C27.307 16.3981 27.0716 16.6335 26.7816 16.6335H25.9014C25.6114 16.6335 25.376 16.3981 25.376 16.1081V4.05466C25.376 3.76463 25.6114 3.52925 25.9014 3.52925H26.7816C27.0716 3.52925 27.307 3.76463 27.307 4.05466Z\" fill=\"#213856\"/>\n<path d=\"M31.1187 12.6518C31.2877 14.0583 32.4495 14.9763 34.1367 14.9763C34.9185 14.9763 35.8693 14.7283 36.4897 14.2768C36.6973 14.1255 36.9823 14.1432 37.1673 14.3222L37.6792 14.8191C37.9037 15.0368 37.8919 15.4033 37.6498 15.6C36.6864 16.3835 35.3296 16.7761 34.0989 16.7761C31.0615 16.7761 29.112 14.8451 29.112 11.8835C29.112 8.92181 31.0809 7.06562 33.9677 7.06562C36.8545 7.06562 38.7864 8.72173 38.651 12.1483C38.6401 12.4299 38.4072 12.6527 38.1256 12.6527H31.1179L31.1187 12.6518ZM36.7612 11.0209C36.6486 9.55903 35.5801 8.78982 34.024 8.78982C32.6176 8.78982 31.4558 9.55819 31.1557 11.0209H36.7612Z\" fill=\"#213856\"/>\n<path d=\"M46.4842 16.1081V11.2499C46.4842 10.0318 45.4981 9.01707 44.28 9.04145C42.9391 9.06751 42.0968 10.2007 42.0968 11.5534V16.1081C42.0968 16.3981 41.8614 16.6335 41.5714 16.6335H40.6912C40.4012 16.6335 40.1658 16.3981 40.1658 16.1081V7.82125C40.1658 7.53122 40.4012 7.29583 40.6912 7.29583H41.4932C41.7622 7.29583 41.9875 7.49843 42.0161 7.76576L42.0976 8.60935C42.6222 7.59719 43.71 7.22226 44.6852 7.22226C45.8663 7.22226 47.0659 7.70984 47.5914 9.07844C48.3412 7.70984 49.5039 7.24159 50.7598 7.24159C53.3095 7.24159 54.6781 8.85398 54.6781 11.5164V16.1089C54.6781 16.3989 54.4427 16.6343 54.1527 16.6343H53.2541C52.964 16.6343 52.7286 16.3989 52.7286 16.1089V11.1465C52.7286 10.0124 51.8241 9.06247 50.69 9.06079C49.3189 9.05826 48.4354 10.1839 48.4354 11.5542V16.1089C48.4354 16.3989 48.2 16.6343 47.91 16.6343H47.0113C46.7213 16.6343 46.4859 16.3989 46.4859 16.1089L46.4842 16.1081Z\" fill=\"#213856\"/>\n<path d=\"M64.2129 14.9546C64.4374 15.1757 64.4172 15.5439 64.1709 15.7406C63.2562 16.4729 62.2508 16.7915 61.1067 16.7915C58.4443 16.7915 56.2325 15.1227 56.2325 11.9358C56.2325 8.74884 58.4258 7.08012 61.1067 7.08012C62.2004 7.08012 63.1419 7.36931 64.0145 8.06706C64.2558 8.26042 64.281 8.61854 64.0675 8.84215L63.5429 9.39111C63.3647 9.57773 63.0755 9.608 62.8645 9.4592C62.3407 9.09099 61.7212 8.91782 61.126 8.91782C59.4573 8.91782 58.1635 10.0989 58.1635 11.9358C58.1635 13.8853 59.5136 14.9168 61.1067 14.9168C61.7556 14.9168 62.4164 14.7512 62.9645 14.3477C63.173 14.1938 63.4613 14.214 63.6455 14.3956L64.2129 14.9546Z\" fill=\"#213856\"/>\n<path d=\"M73.6661 7.29232H74.5102C74.8002 7.29232 75.0356 7.52771 75.0356 7.81773V16.1112C75.0356 16.4012 74.8002 16.6366 74.5102 16.6366H73.6922C73.4148 16.6366 73.1853 16.4205 73.1676 16.1439L73.1046 15.0143C72.4859 16.1954 71.0609 16.7578 69.9176 16.7578C67.2183 16.7763 65.1746 15.0327 65.1746 11.8836C65.1746 8.7345 67.2931 7.06578 69.9555 7.06578C71.2677 7.06578 72.5237 7.68451 73.1046 8.7345L73.1416 7.7984C73.1525 7.51594 73.3845 7.29316 73.667 7.29316L73.6661 7.29232ZM67.1048 11.8836C67.1048 13.7961 68.4549 14.9579 70.1043 14.9579C74.0974 14.9579 74.0974 8.82781 70.1043 8.82781C68.4549 8.82781 67.1048 9.99045 67.1048 11.8836Z\" fill=\"#213856\"/>\n<path d=\"M79.291 4.05466V16.1081C79.291 16.3981 79.0556 16.6335 78.7656 16.6335H77.8854C77.5954 16.6335 77.36 16.3981 77.36 16.1081V4.05466C77.36 3.76463 77.5954 3.52925 77.8854 3.52925H78.7656C79.0556 3.52925 79.291 3.76463 79.291 4.05466Z\" fill=\"#213856\"/>\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M10.465 9.14765H9.55574C9.29413 9.14765 9.08205 9.35962 9.08205 9.62111V10.5427C9.08205 10.8041 9.29413 11.0161 9.55574 11.0161H10.465C10.7266 11.0161 10.9387 10.8041 10.9387 10.5427V9.62111C10.9387 9.35962 10.7266 9.14765 10.465 9.14765Z\" fill=\"white\"/>\n<path d=\"M12.8129 8.68254V7.77316C12.8129 7.51179 12.6007 7.2997 12.3392 7.2997H8.64822C7.86375 7.2997 7.22715 7.93599 7.22715 8.72007L7.20913 11.4623C7.20913 12.2472 7.84573 12.8826 8.6302 12.8826H11.3567C12.142 12.8826 12.7778 12.3649 12.7778 11.5808V11.4639C12.7778 11.2025 12.99 10.9913 13.2514 10.9913H14.1578C14.4193 10.9913 14.6315 11.2025 14.6315 11.4639V12.4108C14.6315 13.4404 13.9581 14.3122 13.0266 14.6094C12.8052 14.6804 12.568 14.7188 12.3224 14.7188H7.65879C7.41317 14.7188 7.22287 14.6804 7.00064 14.6094C6.06997 14.3122 5.35049 13.4404 5.35049 12.4117L5.36851 7.77762C5.36851 6.74804 6.04218 5.77813 6.97369 5.48086C7.02966 5.46332 7.16611 5.44746 7.22375 5.4341L7.22427 5.04459C7.22427 4.7565 7.4582 4.5227 7.74642 4.5227H8.55958C8.8478 4.5227 9.08172 4.7565 9.08172 5.04459V5.43459H10.935V5.04459C10.935 4.7565 11.1689 4.5227 11.4571 4.5227H12.2747C12.5629 4.5227 12.7969 4.7565 12.7969 5.04459V5.42761C12.8545 5.44097 12.9878 5.45684 13.0438 5.47437C13.9753 5.77081 14.6495 6.7472 14.6495 7.77679V8.68254C14.6495 8.9439 14.4373 9.15599 14.1758 9.15599H13.2866C13.0251 9.15599 12.8129 8.9439 12.8129 8.68254Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"111\" height=\"28\" viewBox=\"0 0 111 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M38.2272 5.67653V22.5513C38.2272 22.9574 37.8977 23.2869 37.4917 23.2869H36.2596C35.8535 23.2869 35.524 22.9574 35.524 22.5513V5.67653C35.524 5.27049 35.8535 4.94095 36.2596 4.94095H37.4917C37.8977 4.94095 38.2272 5.27049 38.2272 5.67653Z\" fill=\"#213856\"/>\n<path d=\"M43.5633 17.7126C43.7998 19.6816 45.4262 20.9668 47.7882 20.9668C48.8826 20.9668 50.2136 20.6196 51.0821 19.9876C51.3728 19.7757 51.7718 19.8004 52.0307 20.0511L52.7474 20.7467C53.0616 21.0515 53.0451 21.5646 52.7062 21.84C51.3575 22.9369 49.4581 23.4866 47.7352 23.4866C43.4832 23.4866 40.7541 20.7832 40.7541 16.6368C40.7541 12.4905 43.5103 9.89187 47.5516 9.89187C51.5929 9.89187 54.2973 12.2104 54.1078 17.0076C54.0925 17.4019 53.7665 17.7137 53.3723 17.7137H43.5621L43.5633 17.7126ZM51.4623 15.4293C51.3046 13.3826 49.8088 12.3058 47.6305 12.3058C45.6616 12.3058 44.0352 13.3815 43.615 15.4293H51.4623Z\" fill=\"#213856\"/>\n<path d=\"M65.0735 22.5513V15.7498C65.0735 14.0445 63.6931 12.6239 61.9878 12.658C60.1108 12.6945 58.9316 14.281 58.9316 16.1747V22.5513C58.9316 22.9573 58.602 23.2869 58.196 23.2869H56.9639C56.5578 23.2869 56.2283 22.9573 56.2283 22.5513V10.9497C56.2283 10.5437 56.5578 10.2142 56.9639 10.2142H58.0866C58.4632 10.2142 58.7786 10.4978 58.8186 10.8721L58.9327 12.0531C59.6671 10.6361 61.1899 10.1112 62.5551 10.1112C64.2085 10.1112 65.8879 10.7938 66.6234 12.7098C67.6732 10.7938 69.3008 10.1382 71.059 10.1382C74.6283 10.1382 76.5443 12.3956 76.5443 16.1229V22.5525C76.5443 22.9585 76.2147 23.288 75.8087 23.288H74.5507C74.1447 23.288 73.8151 22.9585 73.8151 22.5525V15.6051C73.8151 14.0174 72.5489 12.6875 70.9613 12.6851C69.0419 12.6816 67.805 14.2575 67.805 16.1759V22.5525C67.805 22.9585 67.4755 23.288 67.0695 23.288H65.8114C65.4054 23.288 65.0759 22.9585 65.0759 22.5525L65.0735 22.5513Z\" fill=\"#213856\"/>\n<path d=\"M89.892 20.9365C90.2063 21.246 90.178 21.7615 89.8332 22.0369C88.5528 23.062 87.1453 23.5081 85.5436 23.5081C81.8165 23.5081 78.7202 21.1718 78.7202 16.7101C78.7202 12.2484 81.7906 9.91217 85.5436 9.91217C87.0747 9.91217 88.3927 10.317 89.6143 11.2939C89.9521 11.5646 89.9874 12.066 89.6884 12.379L88.9541 13.1475C88.7046 13.4088 88.2998 13.4512 88.0044 13.2429C87.2712 12.7274 86.4039 12.4849 85.5707 12.4849C83.2346 12.4849 81.4234 14.1385 81.4234 16.7101C81.4234 19.4394 83.3135 20.8835 85.5436 20.8835C86.4521 20.8835 87.3771 20.6516 88.1444 20.0867C88.4363 19.8713 88.8399 19.8996 89.0977 20.1538L89.892 20.9365Z\" fill=\"#213856\"/>\n<path d=\"M103.126 10.2092H104.307C104.713 10.2092 105.043 10.5388 105.043 10.9448V22.5556C105.043 22.9617 104.713 23.2912 104.307 23.2912H103.162C102.774 23.2912 102.453 22.9887 102.428 22.6015L102.34 21.02C101.473 22.6735 99.4786 23.4609 97.8781 23.4609C94.0993 23.4868 91.2383 21.0458 91.2383 16.6371C91.2383 12.2283 94.204 9.89209 97.9311 9.89209C99.7682 9.89209 101.526 10.7583 102.34 12.2283L102.391 10.9178C102.407 10.5223 102.731 10.2104 103.127 10.2104L103.126 10.2092ZM93.9404 16.6371C93.9404 19.3146 95.8304 20.9411 98.1394 20.9411C103.729 20.9411 103.729 12.3589 98.1394 12.3589C95.8304 12.3589 93.9404 13.9866 93.9404 16.6371Z\" fill=\"#213856\"/>\n<path d=\"M111 5.67653V22.5513C111 22.9574 110.67 23.2869 110.264 23.2869H109.032C108.626 23.2869 108.297 22.9574 108.297 22.5513V5.67653C108.297 5.27049 108.626 4.94095 109.032 4.94095H110.264C110.67 4.94095 111 5.27049 111 5.67653Z\" fill=\"#213856\"/>\n<path d=\"M23.0125 0H4.9856C2.23213 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23213 28 4.9856 28H23.0125C25.766 28 27.9981 25.7677 27.9981 23.0141V4.98593C27.9981 2.23228 25.766 0 23.0125 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M14.6501 12.8067H13.3771C13.0109 12.8067 12.714 13.1035 12.714 13.4696V14.7597C12.714 15.1258 13.0109 15.4226 13.3771 15.4226H14.6501C15.0163 15.4226 15.3132 15.1258 15.3132 14.7597V13.4696C15.3132 13.1035 15.0163 12.8067 14.6501 12.8067Z\" fill=\"white\"/>\n<path d=\"M17.9369 12.1556V10.8824C17.9369 10.5165 17.6398 10.2196 17.2738 10.2196H12.1067C11.0085 10.2196 10.1173 11.1104 10.1173 12.2081L10.0921 16.0472C10.0921 17.1461 10.9833 18.0357 12.0815 18.0357H15.8983C16.9976 18.0357 17.8877 17.3109 17.8877 16.2132V16.0495C17.8877 15.6836 18.1847 15.3878 18.5508 15.3878H19.8196C20.1857 15.3878 20.4827 15.6836 20.4827 16.0495V17.3752C20.4827 18.8166 19.5401 20.037 18.2361 20.4532C17.9261 20.5526 17.594 20.6064 17.2501 20.6064H10.7216C10.3777 20.6064 10.1113 20.5526 9.80025 20.4532C8.49739 20.037 7.49018 18.8166 7.49018 17.3763L7.51541 10.8887C7.51541 9.44726 8.45848 8.08938 9.76251 7.6732C9.84086 7.64865 10.0319 7.62644 10.1126 7.60774L10.1133 7.06242C10.1133 6.65911 10.4408 6.33178 10.8443 6.33178H11.9826C12.3861 6.33178 12.7136 6.65911 12.7136 7.06242V7.60843H15.308V7.06242C15.308 6.65911 15.6354 6.33178 16.0389 6.33178H17.1835C17.5869 6.33178 17.9144 6.65911 17.9144 7.06242V7.59866C17.9951 7.61736 18.1817 7.63957 18.2601 7.66412C19.5641 8.07913 20.5079 9.44609 20.5079 10.8875V12.1556C20.5079 12.5215 20.2109 12.8184 19.8448 12.8184H18.6C18.234 12.8184 17.9369 12.5215 17.9369 12.1556Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"127\" height=\"32\" viewBox=\"0 0 127 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M43.4336 6.48746V25.7729C43.4336 26.237 43.0592 26.6136 42.5979 26.6136H41.1979C40.7366 26.6136 40.3622 26.237 40.3622 25.7729V6.48746C40.3622 6.02341 40.7366 5.6468 41.1979 5.6468H42.5979C43.0592 5.6468 43.4336 6.02341 43.4336 6.48746Z\" fill=\"#213856\"/>\n<path d=\"M49.4964 20.2429C49.7651 22.4932 51.613 23.962 54.2967 23.962C55.5402 23.962 57.0525 23.5652 58.0393 22.8429C58.3696 22.6008 58.8228 22.6291 59.117 22.9156L59.9313 23.7105C60.2883 24.0589 60.2696 24.6453 59.8845 24.9601C58.3522 26.2137 56.194 26.8418 54.2365 26.8418C49.4054 26.8418 46.3046 23.7522 46.3046 19.0135C46.3046 14.2749 49.4362 11.305 54.0279 11.305C58.6196 11.305 61.6923 13.9548 61.477 19.4372C61.4597 19.8878 61.0893 20.2443 60.6413 20.2443H49.495L49.4964 20.2429ZM58.4712 17.6335C58.292 15.2944 56.5925 14.0637 54.1175 14.0637C51.8805 14.0637 50.0326 15.2931 49.5552 17.6335H58.4712Z\" fill=\"#213856\"/>\n<path d=\"M73.9362 25.7729V17.9998C73.9362 16.0508 72.3678 14.4273 70.4303 14.4663C68.2975 14.508 66.9577 16.3212 66.9577 18.4854V25.7729C66.9577 26.2369 66.5833 26.6136 66.122 26.6136H64.7221C64.2607 26.6136 63.8864 26.2369 63.8864 25.7729V12.514C63.8864 12.05 64.2607 11.6733 64.7221 11.6733H65.9977C66.4256 11.6733 66.7839 11.9975 66.8294 12.4252L66.9591 13.775C67.7934 12.1555 69.5237 11.5556 71.0748 11.5556C72.9534 11.5556 74.8615 12.3357 75.6972 14.5255C76.8899 12.3357 78.7392 11.5865 80.7368 11.5865C84.7924 11.5865 86.9692 14.1664 86.9692 18.4262V25.7742C86.9692 26.2383 86.5948 26.6149 86.1335 26.6149H84.7041C84.2428 26.6149 83.8684 26.2383 83.8684 25.7742V17.8344C83.8684 16.0199 82.4297 14.4999 80.6259 14.4973C78.445 14.4932 77.0397 16.2943 77.0397 18.4867V25.7742C77.0397 26.2383 76.6653 26.6149 76.204 26.6149H74.7746C74.3133 26.6149 73.9389 26.2383 73.9389 25.7742L73.9362 25.7729Z\" fill=\"#213856\"/>\n<path d=\"M102.135 23.9274C102.492 24.2811 102.46 24.8703 102.068 25.185C100.613 26.3566 99.014 26.8663 97.1942 26.8663C92.9595 26.8663 89.4415 24.1964 89.4415 19.0973C89.4415 13.9981 92.9301 11.3282 97.1942 11.3282C98.9338 11.3282 100.431 11.7909 101.819 12.9073C102.203 13.2167 102.243 13.7897 101.904 14.1474L101.069 15.0258C100.786 15.3244 100.326 15.3728 99.9901 15.1347C99.1571 14.5456 98.1716 14.2685 97.225 14.2685C94.5707 14.2685 92.5129 16.1583 92.5129 19.0973C92.5129 22.2165 94.6603 23.8669 97.1942 23.8669C98.2265 23.8669 99.2775 23.6019 100.149 22.9563C100.481 22.7101 100.939 22.7424 101.232 23.0329L102.135 23.9274Z\" fill=\"#213856\"/>\n<path d=\"M117.171 11.6677H118.513C118.975 11.6677 119.349 12.0443 119.349 12.5084V25.7779C119.349 26.2419 118.975 26.6185 118.513 26.6185H117.212C116.771 26.6185 116.406 26.2728 116.378 25.8303L116.278 24.0228C115.294 25.9126 113.027 26.8125 111.209 26.8125C106.915 26.842 103.665 24.0524 103.665 19.0138C103.665 13.9752 107.034 11.3052 111.269 11.3052C113.356 11.3052 115.354 12.2952 116.278 13.9752L116.337 12.4774C116.354 12.0255 116.723 11.6691 117.172 11.6691L117.171 11.6677ZM106.735 19.0138C106.735 22.0738 108.882 23.9327 111.505 23.9327C117.857 23.9327 117.857 14.1245 111.505 14.1245C108.882 14.1245 106.735 15.9847 106.735 19.0138Z\" fill=\"#213856\"/>\n<path d=\"M126.118 6.48746V25.7729C126.118 26.237 125.743 26.6136 125.282 26.6136H123.882C123.421 26.6136 123.046 26.237 123.046 25.7729V6.48746C123.046 6.02341 123.421 5.6468 123.882 5.6468H125.282C125.743 5.6468 126.118 6.02341 126.118 6.48746Z\" fill=\"#213856\"/>\n<path d=\"M26.1467 0H5.66461C2.53613 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.53613 32 5.66461 32H26.1467C29.2752 32 31.8113 29.4488 31.8113 26.3018V5.69821C31.8113 2.55117 29.2752 0 26.1467 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M16.6453 14.6362H15.199C14.7829 14.6362 14.4456 14.9754 14.4456 15.3938V16.8682C14.4456 17.2866 14.7829 17.6258 15.199 17.6258H16.6453C17.0615 17.6258 17.3988 17.2866 17.3988 16.8682V15.3938C17.3988 14.9754 17.0615 14.6362 16.6453 14.6362Z\" fill=\"white\"/>\n<path d=\"M20.3798 13.8921V12.4371C20.3798 12.0189 20.0423 11.6795 19.6264 11.6795H13.7556C12.5078 11.6795 11.4953 12.6976 11.4953 13.9521L11.4666 18.3396C11.4666 19.5955 12.4792 20.6122 13.7269 20.6122H18.0636C19.3126 20.6122 20.3239 19.7839 20.3239 18.5294V18.3423C20.3239 17.9241 20.6614 17.5861 21.0773 17.5861H22.5189C22.9348 17.5861 23.2724 17.9241 23.2724 18.3423V19.8573C23.2724 21.5047 22.2013 22.8995 20.7197 23.3751C20.3676 23.4887 19.9902 23.5501 19.5995 23.5501H12.1818C11.7911 23.5501 11.4885 23.4887 11.135 23.3751C9.65469 22.8995 8.51031 21.5047 8.51031 19.8587L8.53897 12.4442C8.53897 10.7969 9.61049 9.24501 11.0921 8.76937C11.1811 8.74132 11.3982 8.71593 11.4899 8.69456L11.4907 8.07134C11.4907 7.61041 11.8628 7.23632 12.3212 7.23632H13.6146C14.073 7.23632 14.4451 7.61041 14.4451 8.07134V8.69535H17.3929V8.07134C17.3929 7.61041 17.7649 7.23632 18.2234 7.23632H19.5238C19.9822 7.23632 20.3543 7.61041 20.3543 8.07134V8.68418C20.446 8.70556 20.658 8.73094 20.747 8.759C22.2287 9.23329 23.301 10.7955 23.301 12.4429V13.8921C23.301 14.3102 22.9635 14.6496 22.5476 14.6496H21.1332C20.7173 14.6496 20.3798 14.3102 20.3798 13.8921Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M10.5875 9.01618H9.41065C9.09842 9.01618 8.8453 9.2687 8.8453 9.58021V10.3708C8.8453 10.6823 9.09842 10.9348 9.41065 10.9348H10.5875C10.8997 10.9348 11.1529 10.6823 11.1529 10.3708V9.58021C11.1529 9.2687 10.8997 9.01618 10.5875 9.01618Z\" fill=\"#0C1521\"/>\n<path d=\"M15 8.4521V7.19679C14.9358 6.19687 14.2501 5.36661 13.3247 5.08505C13.2442 5.06068 13.161 5.03993 13.0769 5.02459V4.52824C13.0769 4.21689 12.8236 3.9642 12.5115 3.9642H11.5265C11.2144 3.9642 10.9611 4.21689 10.9611 4.52824V4.98758H9.03799V4.52824C9.03799 4.21689 8.78471 3.9642 8.47264 3.9642H7.48756C7.17549 3.9642 6.92221 4.21689 6.92221 4.52824V5.02639C6.83808 5.04173 6.75667 5.06249 6.67707 5.08685C5.70556 5.38376 5 6.28531 5 7.35111V12.6007C5 13.6665 5.70556 14.568 6.67707 14.8649C6.84984 14.9182 7.03166 14.9525 7.21981 14.9642H12.7856C12.972 14.9525 13.152 14.9191 13.3238 14.8658C14.2501 14.5852 14.9358 13.7549 15 12.755V11.4997C15 11.1883 14.7467 10.9357 14.4346 10.9357H13.6422C13.3302 10.9357 13.0769 11.1883 13.0769 11.4997V11.5791C13.0769 12.3886 12.4184 13.0456 11.607 13.0456H8.39303C7.58164 13.0456 6.92311 12.3886 6.92311 11.5791V8.37269C6.92311 7.56319 7.58164 6.9062 8.39303 6.9062H11.607C12.4184 6.9062 13.0769 7.56319 13.0769 8.37269V8.4521C13.0769 8.76345 13.3302 9.01613 13.6422 9.01613H14.4346C14.7467 9.01613 15 8.76345 15 8.4521Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M14.6709 13.1672H13.1387C12.7321 13.1672 12.4026 13.4968 12.4026 13.9033V14.935C12.4026 15.3415 12.7321 15.671 13.1387 15.671H14.6709C15.0774 15.671 15.4069 15.3415 15.4069 14.935V13.9033C15.4069 13.4968 15.0774 13.1672 14.6709 13.1672Z\" fill=\"#0C1521\"/>\n<path d=\"M20.4157 12.4311V10.7929C20.3321 9.48804 19.4394 8.40456 18.2346 8.03712C18.1298 8.00532 18.0215 7.97823 17.9119 7.95821V7.31048C17.9119 6.90417 17.5822 6.57442 17.1759 6.57442H15.8933C15.487 6.57442 15.1573 6.90417 15.1573 7.31048V7.90993H12.6535V7.31048C12.6535 6.90417 12.3237 6.57442 11.9174 6.57442H10.6349C10.2286 6.57442 9.89881 6.90417 9.89881 7.31048V7.96057C9.78928 7.98059 9.68329 8.00768 9.57965 8.03947C8.31479 8.42694 7.39618 9.60346 7.39618 10.9943V17.845C7.39618 19.2359 8.31479 20.4124 9.57965 20.7998C9.80459 20.8693 10.0413 20.9141 10.2863 20.9294H17.5327C17.7753 20.9141 18.0097 20.8705 18.2334 20.801C19.4394 20.4348 20.3321 19.3513 20.4157 18.0464V16.4082C20.4157 16.0019 20.086 15.6721 19.6797 15.6721H18.648C18.2417 15.6721 17.9119 16.0019 17.9119 16.4082V16.5118C17.9119 17.5682 17.0546 18.4256 15.9982 18.4256H11.8138C10.7574 18.4256 9.89999 17.5682 9.89999 16.5118V12.3275C9.89999 11.2711 10.7574 10.4137 11.8138 10.4137H15.9982C17.0546 10.4137 17.9119 11.2711 17.9119 12.3275V12.4311C17.9119 12.8374 18.2417 13.1672 18.648 13.1672H19.6797C20.086 13.1672 20.4157 12.8374 20.4157 12.4311Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55117 29.4488 0 26.3018 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M16.7667 15.0483H15.0156C14.551 15.0483 14.1744 15.4249 14.1744 15.8895V17.0685C14.1744 17.5331 14.551 17.9097 15.0156 17.9097H16.7667C17.2313 17.9097 17.6079 17.5331 17.6079 17.0685V15.8895C17.6079 15.4249 17.2313 15.0483 16.7667 15.0483Z\" fill=\"#0C1521\"/>\n<path d=\"M23.3323 14.207V12.3348C23.2367 10.8435 22.2165 9.6052 20.8396 9.18527C20.7198 9.14893 20.5959 9.11797 20.4708 9.09509V8.35482C20.4708 7.89047 20.0939 7.51361 19.6295 7.51361H18.1638C17.6994 7.51361 17.3226 7.89047 17.3226 8.35482V9.03991H14.4611V8.35482C14.4611 7.89047 14.0842 7.51361 13.6199 7.51361H12.1541C11.6898 7.51361 11.3129 7.89047 11.3129 8.35482V9.09778C11.1877 9.12066 11.0666 9.15162 10.9482 9.18796C9.5026 9.63078 8.45276 10.9754 8.45276 12.5649V20.3943C8.45276 21.9838 9.5026 23.3284 10.9482 23.7712C11.2052 23.8506 11.4758 23.9018 11.7557 23.9193H20.0374C20.3146 23.9018 20.5825 23.852 20.8382 23.7726C22.2165 23.354 23.2367 22.1157 23.3323 20.6244V18.7522C23.3323 18.2879 22.9554 17.911 22.491 17.911H21.312C20.8476 17.911 20.4708 18.2879 20.4708 18.7522V18.8707C20.4708 20.078 19.4909 21.0578 18.2836 21.0578H13.5014C12.2941 21.0578 11.3143 20.078 11.3143 18.8707V14.0885C11.3143 12.8812 12.2941 11.9014 13.5014 11.9014H18.2836C19.4909 11.9014 20.4708 12.8812 20.4708 14.0885V14.207C20.4708 14.6713 20.8476 15.0482 21.312 15.0482H22.491C22.9554 15.0482 23.3323 14.6713 23.3323 14.207Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12276V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12276C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M20.9583 18.8103H18.7695C18.1887 18.8103 17.7179 19.2811 17.7179 19.8618V21.3356C17.7179 21.9164 18.1887 22.3872 18.7695 22.3872H20.9583C21.539 22.3872 22.0098 21.9164 22.0098 21.3356V19.8618C22.0098 19.2811 21.539 18.8103 20.9583 18.8103Z\" fill=\"#0C1521\"/>\n<path d=\"M29.1653 17.7587V15.4185C29.0458 13.5543 27.7705 12.0065 26.0494 11.4816C25.8997 11.4362 25.7449 11.3975 25.5884 11.3689V10.4435C25.5884 9.8631 25.1173 9.39202 24.5369 9.39202H22.7047C22.1243 9.39202 21.6532 9.8631 21.6532 10.4435V11.2999H18.0763V10.4435C18.0763 9.8631 17.6052 9.39202 17.0248 9.39202H15.1926C14.6122 9.39202 14.1411 9.8631 14.1411 10.4435V11.3722C13.9846 11.4008 13.8332 11.4395 13.6852 11.485C11.8782 12.0385 10.5659 13.7192 10.5659 15.7062V25.4928C10.5659 27.4798 11.8782 29.1605 13.6852 29.714C14.0065 29.8133 14.3447 29.8772 14.6946 29.8991H25.0467C25.3933 29.8772 25.7281 29.815 26.0477 29.7157C27.7705 29.1925 29.0458 27.6447 29.1653 25.7805V23.4403C29.1653 22.8598 28.6942 22.3888 28.1138 22.3888H26.6399C26.0595 22.3888 25.5884 22.8598 25.5884 23.4403V23.5883C25.5884 25.0975 24.3636 26.3223 22.8545 26.3223H16.8767C15.3676 26.3223 14.1428 25.0975 14.1428 23.5883V17.6107C14.1428 16.1015 15.3676 14.8767 16.8767 14.8767H22.8545C24.3636 14.8767 25.5884 16.1015 25.5884 17.6107V17.7587C25.5884 18.3392 26.0595 18.8102 26.6399 18.8102H28.1138C28.6942 18.8102 29.1653 18.3392 29.1653 17.7587Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"80\" height=\"20\" viewBox=\"0 0 80 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M27.307 4.05466V16.1081C27.307 16.3981 27.0716 16.6335 26.7816 16.6335H25.9014C25.6114 16.6335 25.376 16.3981 25.376 16.1081V4.05466C25.376 3.76463 25.6114 3.52925 25.9014 3.52925H26.7816C27.0716 3.52925 27.307 3.76463 27.307 4.05466Z\" fill=\"white\"/>\n<path d=\"M31.1187 12.6518C31.2877 14.0583 32.4495 14.9763 34.1367 14.9763C34.9185 14.9763 35.8693 14.7283 36.4897 14.2768C36.6973 14.1255 36.9823 14.1432 37.1673 14.3222L37.6792 14.8191C37.9037 15.0368 37.8919 15.4033 37.6498 15.6C36.6864 16.3835 35.3296 16.7761 34.0989 16.7761C31.0615 16.7761 29.112 14.8451 29.112 11.8835C29.112 8.92181 31.0809 7.06562 33.9677 7.06562C36.8545 7.06562 38.7864 8.72173 38.651 12.1483C38.6401 12.4299 38.4072 12.6527 38.1256 12.6527H31.1179L31.1187 12.6518ZM36.7612 11.0209C36.6486 9.55903 35.5801 8.78982 34.024 8.78982C32.6176 8.78982 31.4558 9.55819 31.1557 11.0209H36.7612Z\" fill=\"white\"/>\n<path d=\"M46.4842 16.1081V11.2499C46.4842 10.0318 45.4981 9.01707 44.28 9.04145C42.9391 9.06751 42.0968 10.2007 42.0968 11.5534V16.1081C42.0968 16.3981 41.8614 16.6335 41.5714 16.6335H40.6912C40.4012 16.6335 40.1658 16.3981 40.1658 16.1081V7.82125C40.1658 7.53122 40.4012 7.29583 40.6912 7.29583H41.4932C41.7622 7.29583 41.9875 7.49843 42.0161 7.76576L42.0976 8.60935C42.6222 7.59719 43.71 7.22226 44.6852 7.22226C45.8663 7.22226 47.0659 7.70984 47.5914 9.07844C48.3412 7.70984 49.5039 7.24159 50.7598 7.24159C53.3095 7.24159 54.6781 8.85398 54.6781 11.5164V16.1089C54.6781 16.3989 54.4427 16.6343 54.1527 16.6343H53.2541C52.964 16.6343 52.7286 16.3989 52.7286 16.1089V11.1465C52.7286 10.0124 51.8241 9.06247 50.69 9.06079C49.3189 9.05826 48.4354 10.1839 48.4354 11.5542V16.1089C48.4354 16.3989 48.2 16.6343 47.91 16.6343H47.0113C46.7213 16.6343 46.4859 16.3989 46.4859 16.1089L46.4842 16.1081Z\" fill=\"white\"/>\n<path d=\"M64.2129 14.9546C64.4374 15.1757 64.4172 15.5439 64.1709 15.7406C63.2562 16.4729 62.2508 16.7915 61.1067 16.7915C58.4443 16.7915 56.2325 15.1227 56.2325 11.9358C56.2325 8.74884 58.4258 7.08012 61.1067 7.08012C62.2004 7.08012 63.1419 7.36931 64.0145 8.06706C64.2558 8.26042 64.281 8.61854 64.0675 8.84215L63.5429 9.39111C63.3647 9.57773 63.0755 9.608 62.8645 9.4592C62.3407 9.09099 61.7212 8.91782 61.126 8.91782C59.4573 8.91782 58.1635 10.0989 58.1635 11.9358C58.1635 13.8853 59.5136 14.9168 61.1067 14.9168C61.7556 14.9168 62.4164 14.7512 62.9645 14.3477C63.173 14.1938 63.4613 14.214 63.6455 14.3956L64.2129 14.9546Z\" fill=\"white\"/>\n<path d=\"M73.6661 7.29232H74.5102C74.8002 7.29232 75.0356 7.52771 75.0356 7.81773V16.1112C75.0356 16.4012 74.8002 16.6366 74.5102 16.6366H73.6922C73.4148 16.6366 73.1853 16.4205 73.1676 16.1439L73.1046 15.0143C72.4859 16.1954 71.0609 16.7578 69.9176 16.7578C67.2183 16.7763 65.1746 15.0327 65.1746 11.8836C65.1746 8.7345 67.2931 7.06578 69.9555 7.06578C71.2677 7.06578 72.5237 7.68451 73.1046 8.7345L73.1416 7.7984C73.1525 7.51594 73.3845 7.29316 73.667 7.29316L73.6661 7.29232ZM67.1048 11.8836C67.1048 13.7961 68.4549 14.9579 70.1043 14.9579C74.0974 14.9579 74.0974 8.82781 70.1043 8.82781C68.4549 8.82781 67.1048 9.99045 67.1048 11.8836Z\" fill=\"white\"/>\n<path d=\"M79.291 4.05466V16.1081C79.291 16.3981 79.0556 16.6335 78.7656 16.6335H77.8854C77.5954 16.6335 77.36 16.3981 77.36 16.1081V4.05466C77.36 3.76463 77.5954 3.52925 77.8854 3.52925H78.7656C79.0556 3.52925 79.291 3.76463 79.291 4.05466Z\" fill=\"white\"/>\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M10.465 9.14765H9.55574C9.29413 9.14765 9.08205 9.35962 9.08205 9.62111V10.5427C9.08205 10.8041 9.29413 11.0161 9.55574 11.0161H10.465C10.7266 11.0161 10.9387 10.8041 10.9387 10.5427V9.62111C10.9387 9.35962 10.7266 9.14765 10.465 9.14765Z\" fill=\"#0C1521\"/>\n<path d=\"M12.8129 8.68254V7.77316C12.8129 7.51179 12.6007 7.2997 12.3392 7.2997H8.64822C7.86375 7.2997 7.22715 7.93599 7.22715 8.72007L7.20913 11.4623C7.20913 12.2472 7.84573 12.8826 8.6302 12.8826H11.3567C12.142 12.8826 12.7778 12.3649 12.7778 11.5808V11.4639C12.7778 11.2025 12.99 10.9913 13.2514 10.9913H14.1578C14.4193 10.9913 14.6315 11.2025 14.6315 11.4639V12.4108C14.6315 13.4404 13.9581 14.3122 13.0266 14.6094C12.8052 14.6804 12.568 14.7188 12.3224 14.7188H7.65879C7.41317 14.7188 7.22287 14.6804 7.00064 14.6094C6.06997 14.3122 5.35049 13.4404 5.35049 12.4117L5.36851 7.77762C5.36851 6.74804 6.04218 5.77813 6.97369 5.48086C7.02966 5.46332 7.16611 5.44746 7.22375 5.4341L7.22427 5.04459C7.22427 4.7565 7.4582 4.5227 7.74642 4.5227H8.55958C8.8478 4.5227 9.08172 4.7565 9.08172 5.04459V5.43459H10.935V5.04459C10.935 4.7565 11.1689 4.5227 11.4571 4.5227H12.2747C12.5629 4.5227 12.7969 4.7565 12.7969 5.04459V5.42761C12.8545 5.44097 12.9878 5.45684 13.0438 5.47437C13.9753 5.77081 14.6495 6.7472 14.6495 7.77679V8.68254C14.6495 8.9439 14.4373 9.15599 14.1758 9.15599H13.2866C13.0251 9.15599 12.8129 8.9439 12.8129 8.68254Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"111\" height=\"28\" viewBox=\"0 0 111 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M38.2272 5.67653V22.5513C38.2272 22.9574 37.8977 23.2869 37.4917 23.2869H36.2596C35.8535 23.2869 35.524 22.9574 35.524 22.5513V5.67653C35.524 5.27049 35.8535 4.94095 36.2596 4.94095H37.4917C37.8977 4.94095 38.2272 5.27049 38.2272 5.67653Z\" fill=\"white\"/>\n<path d=\"M43.5633 17.7126C43.7998 19.6816 45.4262 20.9668 47.7882 20.9668C48.8826 20.9668 50.2136 20.6196 51.0821 19.9876C51.3728 19.7757 51.7718 19.8004 52.0307 20.0511L52.7474 20.7467C53.0616 21.0515 53.0451 21.5646 52.7062 21.84C51.3575 22.9369 49.4581 23.4866 47.7352 23.4866C43.4832 23.4866 40.7541 20.7832 40.7541 16.6368C40.7541 12.4905 43.5103 9.89187 47.5516 9.89187C51.5929 9.89187 54.2973 12.2104 54.1078 17.0076C54.0925 17.4019 53.7665 17.7137 53.3723 17.7137H43.5621L43.5633 17.7126ZM51.4623 15.4293C51.3046 13.3826 49.8088 12.3058 47.6305 12.3058C45.6616 12.3058 44.0352 13.3815 43.615 15.4293H51.4623Z\" fill=\"white\"/>\n<path d=\"M65.0735 22.5513V15.7498C65.0735 14.0445 63.6931 12.6239 61.9878 12.658C60.1108 12.6945 58.9316 14.281 58.9316 16.1747V22.5513C58.9316 22.9573 58.602 23.2869 58.196 23.2869H56.9639C56.5578 23.2869 56.2283 22.9573 56.2283 22.5513V10.9497C56.2283 10.5437 56.5578 10.2142 56.9639 10.2142H58.0866C58.4632 10.2142 58.7786 10.4978 58.8186 10.8721L58.9327 12.0531C59.6671 10.6361 61.1899 10.1112 62.5551 10.1112C64.2085 10.1112 65.8879 10.7938 66.6234 12.7098C67.6732 10.7938 69.3008 10.1382 71.059 10.1382C74.6284 10.1382 76.5443 12.3956 76.5443 16.1229V22.5525C76.5443 22.9585 76.2147 23.288 75.8087 23.288H74.5507C74.1447 23.288 73.8151 22.9585 73.8151 22.5525V15.6051C73.8151 14.0174 72.5489 12.6875 70.9613 12.6851C69.0419 12.6816 67.805 14.2575 67.805 16.1759V22.5525C67.805 22.9585 67.4755 23.288 67.0694 23.288H65.8114C65.4054 23.288 65.0759 22.9585 65.0759 22.5525L65.0735 22.5513Z\" fill=\"white\"/>\n<path d=\"M89.892 20.9365C90.2063 21.246 90.178 21.7615 89.8332 22.0369C88.5528 23.062 87.1453 23.5081 85.5436 23.5081C81.8165 23.5081 78.7202 21.1718 78.7202 16.7101C78.7202 12.2484 81.7906 9.91217 85.5436 9.91217C87.0747 9.91217 88.3927 10.317 89.6143 11.2939C89.9521 11.5646 89.9874 12.066 89.6884 12.379L88.9541 13.1475C88.7046 13.4088 88.2998 13.4512 88.0044 13.2429C87.2712 12.7274 86.4039 12.4849 85.5707 12.4849C83.2346 12.4849 81.4234 14.1385 81.4234 16.7101C81.4234 19.4394 83.3135 20.8835 85.5436 20.8835C86.4521 20.8835 87.3771 20.6516 88.1444 20.0867C88.4363 19.8713 88.8399 19.8996 89.0977 20.1538L89.892 20.9365Z\" fill=\"white\"/>\n<path d=\"M103.126 10.2092H104.307C104.713 10.2092 105.043 10.5388 105.043 10.9448V22.5556C105.043 22.9617 104.713 23.2912 104.307 23.2912H103.162C102.774 23.2912 102.453 22.9887 102.428 22.6015L102.34 21.02C101.473 22.6735 99.4786 23.4609 97.8781 23.4609C94.0993 23.4868 91.2383 21.0458 91.2383 16.6371C91.2383 12.2283 94.204 9.89209 97.9311 9.89209C99.7682 9.89209 101.526 10.7583 102.34 12.2283L102.391 10.9178C102.407 10.5223 102.731 10.2104 103.127 10.2104L103.126 10.2092ZM93.9404 16.6371C93.9404 19.3146 95.8304 20.9411 98.1394 20.9411C103.729 20.9411 103.729 12.3589 98.1394 12.3589C95.8304 12.3589 93.9404 13.9866 93.9404 16.6371Z\" fill=\"white\"/>\n<path d=\"M111 5.67653V22.5513C111 22.9574 110.67 23.2869 110.264 23.2869H109.032C108.626 23.2869 108.297 22.9574 108.297 22.5513V5.67653C108.297 5.27049 108.626 4.94095 109.032 4.94095H110.264C110.67 4.94095 111 5.27049 111 5.67653Z\" fill=\"white\"/>\n<path d=\"M23.0125 0H4.9856C2.23213 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23213 28 4.9856 28H23.0125C25.766 28 27.9981 25.7677 27.9981 23.0141V4.98593C27.9981 2.23228 25.766 0 23.0125 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M14.6501 12.8067H13.3771C13.0109 12.8067 12.714 13.1035 12.714 13.4696V14.7597C12.714 15.1258 13.0109 15.4226 13.3771 15.4226H14.6501C15.0163 15.4226 15.3132 15.1258 15.3132 14.7597V13.4696C15.3132 13.1035 15.0163 12.8067 14.6501 12.8067Z\" fill=\"#0C1521\"/>\n<path d=\"M17.9369 12.1556V10.8824C17.9369 10.5165 17.6398 10.2196 17.2738 10.2196H12.1067C11.0085 10.2196 10.1173 11.1104 10.1173 12.2081L10.0921 16.0472C10.0921 17.1461 10.9833 18.0357 12.0815 18.0357H15.8983C16.9976 18.0357 17.8877 17.3109 17.8877 16.2132V16.0495C17.8877 15.6836 18.1847 15.3878 18.5508 15.3878H19.8196C20.1857 15.3878 20.4827 15.6836 20.4827 16.0495V17.3752C20.4827 18.8166 19.5401 20.037 18.2361 20.4532C17.9261 20.5526 17.594 20.6064 17.2501 20.6064H10.7216C10.3777 20.6064 10.1113 20.5526 9.80025 20.4532C8.49739 20.037 7.49018 18.8166 7.49018 17.3763L7.51541 10.8887C7.51541 9.44726 8.45848 8.08938 9.76251 7.6732C9.84086 7.64865 10.0319 7.62644 10.1126 7.60774L10.1133 7.06242C10.1133 6.65911 10.4408 6.33178 10.8443 6.33178H11.9826C12.3861 6.33178 12.7136 6.65911 12.7136 7.06242V7.60843H15.308V7.06242C15.308 6.65911 15.6354 6.33178 16.0389 6.33178H17.1835C17.5869 6.33178 17.9144 6.65911 17.9144 7.06242V7.59866C17.9951 7.61736 18.1817 7.63957 18.2601 7.66412C19.5641 8.07913 20.5079 9.44609 20.5079 10.8875V12.1556C20.5079 12.5215 20.2109 12.8184 19.8448 12.8184H18.6C18.234 12.8184 17.9369 12.5215 17.9369 12.1556Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"127\" height=\"32\" viewBox=\"0 0 127 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M43.4336 6.48746V25.7729C43.4336 26.237 43.0592 26.6136 42.5979 26.6136H41.1979C40.7366 26.6136 40.3622 26.237 40.3622 25.7729V6.48746C40.3622 6.02341 40.7366 5.6468 41.1979 5.6468H42.5979C43.0592 5.6468 43.4336 6.02341 43.4336 6.48746Z\" fill=\"white\"/>\n<path d=\"M49.4964 20.2429C49.7651 22.4932 51.613 23.962 54.2967 23.962C55.5402 23.962 57.0525 23.5652 58.0393 22.8429C58.3696 22.6008 58.8228 22.6291 59.117 22.9156L59.9313 23.7105C60.2883 24.0589 60.2696 24.6453 59.8845 24.9601C58.3522 26.2137 56.194 26.8418 54.2365 26.8418C49.4054 26.8418 46.3046 23.7522 46.3046 19.0135C46.3046 14.2749 49.4362 11.305 54.0279 11.305C58.6196 11.305 61.6923 13.9548 61.477 19.4372C61.4597 19.8878 61.0893 20.2443 60.6413 20.2443H49.495L49.4964 20.2429ZM58.4712 17.6335C58.292 15.2944 56.5925 14.0637 54.1175 14.0637C51.8805 14.0637 50.0326 15.2931 49.5552 17.6335H58.4712Z\" fill=\"white\"/>\n<path d=\"M73.9362 25.7729V17.9998C73.9362 16.0508 72.3678 14.4273 70.4303 14.4663C68.2975 14.508 66.9577 16.3212 66.9577 18.4854V25.7729C66.9577 26.2369 66.5833 26.6136 66.122 26.6136H64.7221C64.2607 26.6136 63.8864 26.2369 63.8864 25.7729V12.514C63.8864 12.05 64.2607 11.6733 64.7221 11.6733H65.9977C66.4256 11.6733 66.7839 11.9975 66.8294 12.4252L66.9591 13.775C67.7934 12.1555 69.5237 11.5556 71.0748 11.5556C72.9534 11.5556 74.8615 12.3357 75.6972 14.5255C76.8899 12.3357 78.7392 11.5865 80.7369 11.5865C84.7924 11.5865 86.9692 14.1664 86.9692 18.4262V25.7742C86.9692 26.2383 86.5948 26.6149 86.1335 26.6149H84.7041C84.2428 26.6149 83.8684 26.2383 83.8684 25.7742V17.8344C83.8684 16.0199 82.4297 14.4999 80.6259 14.4973C78.445 14.4932 77.0397 16.2943 77.0397 18.4867V25.7742C77.0397 26.2383 76.6653 26.6149 76.204 26.6149H74.7746C74.3133 26.6149 73.9389 26.2383 73.9389 25.7742L73.9362 25.7729Z\" fill=\"white\"/>\n<path d=\"M102.135 23.9274C102.492 24.2811 102.46 24.8703 102.068 25.185C100.613 26.3566 99.014 26.8663 97.1942 26.8663C92.9595 26.8663 89.4415 24.1964 89.4415 19.0973C89.4415 13.9981 92.9301 11.3282 97.1942 11.3282C98.9338 11.3282 100.431 11.7909 101.819 12.9073C102.203 13.2167 102.243 13.7897 101.904 14.1474L101.069 15.0258C100.786 15.3244 100.326 15.3728 99.9901 15.1347C99.1571 14.5456 98.1716 14.2685 97.225 14.2685C94.5707 14.2685 92.5129 16.1583 92.5129 19.0973C92.5129 22.2165 94.6603 23.8669 97.1942 23.8669C98.2265 23.8669 99.2774 23.6019 100.149 22.9563C100.481 22.7101 100.939 22.7424 101.232 23.0329L102.135 23.9274Z\" fill=\"white\"/>\n<path d=\"M117.171 11.6677H118.513C118.975 11.6677 119.349 12.0443 119.349 12.5084V25.7779C119.349 26.2419 118.975 26.6185 118.513 26.6185H117.212C116.771 26.6185 116.406 26.2728 116.378 25.8303L116.278 24.0228C115.294 25.9126 113.027 26.8125 111.209 26.8125C106.915 26.842 103.665 24.0524 103.665 19.0138C103.665 13.9752 107.034 11.3052 111.269 11.3052C113.356 11.3052 115.354 12.2952 116.278 13.9752L116.337 12.4774C116.354 12.0255 116.723 11.6691 117.172 11.6691L117.171 11.6677ZM106.735 19.0138C106.735 22.0738 108.882 23.9327 111.505 23.9327C117.857 23.9327 117.857 14.1245 111.505 14.1245C108.882 14.1245 106.735 15.9847 106.735 19.0138Z\" fill=\"white\"/>\n<path d=\"M126.118 6.48746V25.7729C126.118 26.237 125.743 26.6136 125.282 26.6136H123.882C123.421 26.6136 123.046 26.237 123.046 25.7729V6.48746C123.046 6.02341 123.421 5.6468 123.882 5.6468H125.282C125.743 5.6468 126.118 6.02341 126.118 6.48746Z\" fill=\"white\"/>\n<path d=\"M26.1467 0H5.66461C2.53613 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.53613 32 5.66461 32H26.1467C29.2752 32 31.8113 29.4488 31.8113 26.3018V5.69821C31.8113 2.55117 29.2752 0 26.1467 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M16.6453 14.6362H15.199C14.7829 14.6362 14.4456 14.9754 14.4456 15.3938V16.8682C14.4456 17.2866 14.7829 17.6258 15.199 17.6258H16.6453C17.0615 17.6258 17.3988 17.2866 17.3988 16.8682V15.3938C17.3988 14.9754 17.0615 14.6362 16.6453 14.6362Z\" fill=\"#0C1521\"/>\n<path d=\"M20.3798 13.8921V12.4371C20.3798 12.0189 20.0423 11.6795 19.6264 11.6795H13.7556C12.5078 11.6795 11.4953 12.6976 11.4953 13.9521L11.4666 18.3396C11.4666 19.5955 12.4792 20.6122 13.7269 20.6122H18.0636C19.3126 20.6122 20.3239 19.7839 20.3239 18.5294V18.3423C20.3239 17.9241 20.6614 17.5861 21.0773 17.5861H22.5189C22.9348 17.5861 23.2724 17.9241 23.2724 18.3423V19.8573C23.2724 21.5047 22.2013 22.8995 20.7197 23.3751C20.3676 23.4887 19.9902 23.5501 19.5995 23.5501H12.1818C11.7911 23.5501 11.4885 23.4887 11.135 23.3751C9.65469 22.8995 8.51031 21.5047 8.51031 19.8587L8.53897 12.4442C8.53897 10.7969 9.61048 9.24501 11.0921 8.76938C11.1811 8.74132 11.3982 8.71593 11.4899 8.69456L11.4907 8.07134C11.4907 7.61041 11.8628 7.23632 12.3212 7.23632H13.6146C14.073 7.23632 14.4451 7.61041 14.4451 8.07134V8.69535H17.3929V8.07134C17.3929 7.61041 17.7649 7.23632 18.2234 7.23632H19.5238C19.9822 7.23632 20.3543 7.61041 20.3543 8.07134V8.68418C20.446 8.70556 20.658 8.73094 20.747 8.759C22.2287 9.23329 23.301 10.7955 23.301 12.4429V13.8921C23.301 14.3102 22.9635 14.6496 22.5476 14.6496H21.1332C20.7173 14.6496 20.3798 14.3102 20.3798 13.8921Z\" fill=\"#0C1521\"/>\n</svg>\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Size definitions ─────────────────────────────────────────────────────────\n\nconst avatarVariants = cva(\n \"relative inline-flex shrink-0 items-center justify-center overflow-clip\",\n {\n variants: {\n size: {\n sm: \"size-4\",\n md: \"size-5\",\n lg: \"size-6\",\n xl: \"size-8\",\n },\n shape: {\n rounded: \"rounded-full\",\n squared: \"\",\n },\n },\n compoundVariants: [\n { shape: \"squared\", size: \"sm\", class: \"rounded-xs\" },\n { shape: \"squared\", size: \"md\", class: \"rounded-sm\" },\n { shape: \"squared\", size: \"lg\", class: \"rounded-base\" },\n { shape: \"squared\", size: \"xl\", class: \"rounded-base\" },\n ],\n defaultVariants: {\n size: \"xl\",\n shape: \"rounded\",\n },\n },\n);\n\nconst initialsFontSize: Record<string, string> = {\n sm: \"text-[8px] leading-[14px]\",\n md: \"text-xs leading-2xs\",\n lg: \"text-sm leading-sm\",\n xl: \"text-base leading-base\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface AvatarProps\n extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>,\n VariantProps<typeof avatarVariants> {\n src?: string;\n alt?: string;\n initials?: string;\n badge?: React.ReactNode;\n /** `\"rounded\"` (circle) for people/users, `\"squared\"` for companies/orgs. */\n shape?: \"rounded\" | \"squared\";\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Avatar = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Root>,\n AvatarProps\n>(({ className, size = \"xl\", shape = \"rounded\", src, alt, initials, badge, ...props }, ref) => {\n return (\n <div className=\"relative inline-flex\">\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n avatarVariants({ size, shape }),\n \"bg-avatar-fallback-bg\",\n className,\n )}\n {...props}\n >\n <AvatarPrimitive.Image\n src={src}\n alt={alt ?? \"\"}\n className=\"absolute inset-0 size-full object-cover\"\n />\n <AvatarPrimitive.Fallback\n delayMs={0}\n className={cn(\n \"font-medium\",\n \"text-avatar-fallback-text\",\n \"select-none text-center\",\n initialsFontSize[size ?? \"xl\"],\n )}\n >\n {initials ?? \"??\"}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n {badge && size === \"xl\" && (\n <div className=\"absolute bottom-0 right-0 size-4 overflow-clip rounded-full\">\n {badge}\n </div>\n )}\n </div>\n );\n});\n\nAvatar.displayName = \"Avatar\";\n\nexport { Avatar, avatarVariants, type AvatarProps };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Icon, faCheckSolid } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst rootStyles = {\n base: \"peer shrink-0 size-4 rounded-sm inline-flex items-center justify-center transition-colors cursor-pointer focus-visible:outline-none\",\n unchecked: [\n \"bg-checkbox-unchecked-bg\",\n \"border border-checkbox-unchecked-border-default\",\n \"hover:border-checkbox-unchecked-border-hover\",\n \"active:border-checkbox-unchecked-border-pressed\",\n \"active:[box-shadow:0_0_0_3px_#316bff26]\",\n ],\n checked: [\n \"data-[state=checked]:bg-checkbox-checked-bg-default\",\n \"data-[state=checked]:border-transparent\",\n \"data-[state=checked]:hover:bg-checkbox-checked-bg-hover\",\n \"data-[state=checked]:active:bg-checkbox-checked-bg-pressed\",\n \"data-[state=checked]:active:[box-shadow:0_0_0_3px_#316bff26]\",\n ],\n disabled: [\n \"disabled:pointer-events-none\",\n \"disabled:bg-checkbox-disabled-bg\",\n \"disabled:border-checkbox-disabled-border\",\n \"data-[state=checked]:disabled:bg-checkbox-disabled-bg\",\n \"data-[state=checked]:disabled:border-transparent\",\n ],\n};\n\nconst iconStyle = {\n default: \"text-checkbox-checked-icon\",\n disabled: \"text-checkbox-disabled-icon\",\n};\n\nconst labelBase =\n \"cursor-pointer select-none overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium leading-sm\";\n\nconst labelColor = {\n default: \"text-checkbox-label-default\",\n disabled: \"pointer-events-none text-checkbox-label-disabled\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n label?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Checkbox = React.forwardRef<\n React.ComponentRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, label, disabled, id, ...props }, ref) => {\n const innerId = id ?? React.useId();\n\n return (\n <div className=\"inline-flex items-center gap-base\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={innerId}\n disabled={disabled}\n className={cn(\n rootStyles.base,\n rootStyles.unchecked,\n rootStyles.checked,\n rootStyles.disabled,\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n forceMount\n className={cn(\n \"flex items-center justify-center transition-opacity\",\n \"data-[state=unchecked]:opacity-0\",\n \"data-[state=checked]:opacity-100\",\n \"data-[state=indeterminate]:opacity-100\",\n )}\n >\n <Icon\n icon={faCheckSolid}\n size=\"xs\"\n className={iconStyle[disabled ? \"disabled\" : \"default\"]}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label\n htmlFor={innerId}\n className={cn(labelBase, labelColor[disabled ? \"disabled\" : \"default\"])}\n >\n {label}\n </label>\n )}\n </div>\n );\n});\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox, type CheckboxProps };\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst itemStyles = {\n base: \"peer shrink-0 size-4 rounded-full inline-flex items-center justify-center transition-colors cursor-pointer focus-visible:outline-none\",\n unselected: [\n \"bg-radio-unselected-bg\",\n \"border border-radio-unselected-border-default\",\n \"hover:border-radio-unselected-border-hover\",\n \"active:border-radio-unselected-border-pressed\",\n \"active:[box-shadow:0_0_0_3px_#316bff26]\",\n ],\n selected: [\n \"data-[state=checked]:bg-radio-selected-bg-default\",\n \"data-[state=checked]:border-transparent\",\n \"data-[state=checked]:hover:bg-radio-selected-bg-hover\",\n \"data-[state=checked]:active:bg-radio-selected-bg-pressed\",\n \"data-[state=checked]:active:[box-shadow:0_0_0_3px_#316bff26]\",\n ],\n disabled: [\n \"disabled:pointer-events-none\",\n \"disabled:bg-radio-disabled-bg\",\n \"disabled:border-radio-disabled-border\",\n \"data-[state=checked]:disabled:bg-radio-disabled-bg\",\n \"data-[state=checked]:disabled:border-transparent\",\n ],\n};\n\nconst dotStyle = {\n default: \"bg-radio-selected-dot\",\n disabled: \"bg-radio-disabled-dot\",\n};\n\nconst labelBase =\n \"cursor-pointer select-none overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium leading-sm\";\n\nconst labelColor = {\n default: \"text-radio-label-default\",\n disabled: \"pointer-events-none text-radio-label-disabled\",\n};\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\ninterface RadioGroupProps\n extends React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {}\n\ninterface RadioGroupItemProps\n extends React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item> {\n label?: string;\n}\n\n// ── RadioGroup ──────────────────────────────────────────────────────────────\n\nconst RadioGroup = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(\"flex flex-col gap-base\", className)}\n {...props}\n />\n));\nRadioGroup.displayName = \"RadioGroup\";\n\n// ── RadioGroupItem ──────────────────────────────────────────────────────────\n\nconst RadioGroupItem = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({ className, label, disabled, id, ...props }, ref) => {\n const innerId = id ?? React.useId();\n\n return (\n <div className=\"inline-flex items-center gap-base\">\n <RadioGroupPrimitive.Item\n ref={ref}\n id={innerId}\n disabled={disabled}\n className={cn(\n itemStyles.base,\n itemStyles.unselected,\n itemStyles.selected,\n itemStyles.disabled,\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span\n className={cn(\n \"size-1.5 rounded-full transition-opacity\",\n dotStyle[disabled ? \"disabled\" : \"default\"],\n )}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n {label && (\n <label\n htmlFor={innerId}\n className={cn(labelBase, labelColor[disabled ? \"disabled\" : \"default\"])}\n >\n {label}\n </label>\n )}\n </div>\n );\n});\nRadioGroupItem.displayName = \"RadioGroupItem\";\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n RadioGroup,\n RadioGroupItem,\n type RadioGroupProps,\n type RadioGroupItemProps,\n};\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst cardStyles = {\n base: [\n \"group relative flex w-full items-start gap-base rounded-lg border border-solid p-lg text-left transition-colors\",\n \"focus-visible:outline-none focus-visible:shadow-focus-ring\",\n \"disabled:pointer-events-none disabled:opacity-60\",\n \"cursor-pointer\",\n ],\n bg: [\n \"bg-radio-card-bg-default\",\n \"hover:bg-radio-card-bg-hover\",\n \"active:bg-radio-card-bg-pressed\",\n ],\n border: [\n \"border-radio-card-border-unselected\",\n \"data-[state=checked]:border-radio-card-border-selected-default\",\n \"data-[state=checked]:hover:border-radio-card-border-selected-hover\",\n \"data-[state=checked]:active:border-radio-card-border-selected-pressed\",\n \"data-[state=checked]:shadow-sm\",\n ],\n};\n\nconst indicatorStyles = {\n base: \"shrink-0 size-4 rounded-full inline-flex items-center justify-center transition-colors\",\n unselected: \"bg-radio-unselected-bg border border-radio-unselected-border-default\",\n selected: [\n \"group-data-[state=checked]:bg-radio-selected-bg-default\",\n \"group-data-[state=checked]:border-transparent\",\n ],\n};\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\ninterface RadioCardProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>,\n \"title\"\n > {\n title: string;\n description?: string;\n icon?: IconDefinition;\n hideIndicator?: boolean;\n}\n\ninterface RadioCardGroupProps\n extends React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {\n label?: string;\n orientation?: \"horizontal\" | \"vertical\";\n}\n\n// ── RadioCardGroup ──────────────────────────────────────────────────────────\n\nconst RadioCardGroup = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Root>,\n RadioCardGroupProps\n>(({ className, label, orientation = \"horizontal\", ...props }, ref) => (\n <div className=\"flex flex-col gap-xs w-full\">\n {label && (\n <span className=\"text-xs font-medium leading-xs text-radio-card-group-label\">\n {label}\n </span>\n )}\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(\n \"flex gap-base w-full\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n className,\n )}\n {...props}\n />\n </div>\n));\nRadioCardGroup.displayName = \"RadioCardGroup\";\n\n// ── RadioCard ───────────────────────────────────────────────────────────────\n\nconst RadioCard = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Item>,\n RadioCardProps\n>(({ className, title, description, icon, hideIndicator, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n cardStyles.base,\n cardStyles.bg,\n cardStyles.border,\n \"flex-1 min-w-0\",\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-1 items-center gap-base min-w-0\">\n {icon && (\n <Icon\n icon={icon}\n size=\"xs\"\n className=\"shrink-0 text-radio-card-icon\"\n />\n )}\n <div className=\"flex flex-1 flex-col gap-2xs min-w-0 text-left\">\n <span className=\"truncate text-sm font-medium leading-sm text-radio-card-title\">\n {title}\n </span>\n {description && (\n <span className=\"truncate text-xs font-regular leading-xs text-radio-card-description\">\n {description}\n </span>\n )}\n </div>\n </div>\n {!hideIndicator && (\n <span\n className={cn(\n indicatorStyles.base,\n indicatorStyles.unselected,\n indicatorStyles.selected,\n )}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span className=\"size-1.5 rounded-full bg-radio-selected-dot\" />\n </RadioGroupPrimitive.Indicator>\n </span>\n )}\n </RadioGroupPrimitive.Item>\n));\nRadioCard.displayName = \"RadioCard\";\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n RadioCard,\n RadioCardGroup,\n type RadioCardProps,\n type RadioCardGroupProps,\n};\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useSidebarContext } from \"./sidebar\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SidebarHeadingItemProps extends React.HTMLAttributes<HTMLDivElement> {\n label: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst SidebarHeadingItem = React.forwardRef<HTMLDivElement, SidebarHeadingItemProps>(\n ({ className, label, ...props }, ref) => {\n const { isCollapsed } = useSidebarContext();\n\n if (isCollapsed) {\n // In collapsed mode, render as a small spacer (matches Figma: empty heading)\n return <div ref={ref} className=\"h-xs w-full\" {...props} />;\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center w-full\",\n \"text-xs leading-xs font-medium text-sidebar-heading-text mb-base\",\n className,\n )}\n {...props}\n >\n {label}\n </div>\n );\n },\n);\n\nSidebarHeadingItem.displayName = \"SidebarHeadingItem\";\n\nexport { SidebarHeadingItem, type SidebarHeadingItemProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faChevronDownSolid, faStarsOutline, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge } from \"./badge\";\nimport { useSidebarContext } from \"./sidebar\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst sidebarItemVariants = cva(\n [\n \"flex items-center gap-base rounded-base transition-colors cursor-pointer\",\n ],\n {\n variants: {\n state: {\n default: \"\",\n hover: \"bg-sidebar-item-hover-bg\",\n active: \"bg-sidebar-item-active-bg\",\n },\n type: {\n default: \"px-xl py-base\",\n collapsed: \"p-base justify-center\",\n },\n },\n defaultVariants: {\n state: \"default\",\n type: \"default\",\n },\n },\n);\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SidebarItemProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"type\">,\n VariantProps<typeof sidebarItemVariants> {\n icon?: IconDefinition;\n solidIcon?: IconDefinition;\n avatar?: React.ReactNode;\n label?: string;\n hasBadge?: boolean;\n badgeCount?: string;\n hasSubItems?: boolean;\n isNew?: boolean;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst SidebarItem = React.forwardRef<HTMLDivElement, SidebarItemProps>(\n (\n {\n className,\n state = \"default\",\n type,\n icon,\n solidIcon,\n avatar,\n label,\n hasBadge = false,\n badgeCount = \"+99\",\n hasSubItems = false,\n isNew = false,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const sidebarCtx = useSidebarContext();\n const isActive = state === \"active\";\n const resolvedType = type ?? (sidebarCtx.isCollapsed ? \"collapsed\" : \"default\");\n const isCollapsed = resolvedType === \"collapsed\";\n\n const useSolid = isActive || state === \"hover\" || isHovered;\n\n const iconColorClass = isActive\n ? \"text-sidebar-item-active-icon\"\n : \"text-sidebar-item-default-icon\";\n\n const textColorClass = isActive\n ? \"text-sidebar-item-active-text\"\n : \"text-sidebar-item-default-text\";\n\n return (\n <div\n ref={ref}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n sidebarItemVariants({ state, type: resolvedType }),\n \"group hover:bg-sidebar-item-hover-bg\",\n isActive && \"hover:bg-sidebar-item-active-bg\",\n className,\n )}\n {...props}\n >\n {avatar ? (\n <span className=\"shrink-0\">{avatar}</span>\n ) : icon ? (\n <Icon\n icon={icon}\n solidIcon={solidIcon}\n solid={useSolid}\n size=\"sm\"\n className={cn(\"shrink-0\", iconColorClass)}\n />\n ) : null}\n\n {!isCollapsed && (\n <>\n <span\n className={cn(\n \"flex-1 min-w-0 truncate text-sm leading-sm font-medium\",\n textColorClass,\n )}\n >\n {label}\n </span>\n\n {(isNew || hasBadge) && (\n <div className=\"flex items-center gap-xs shrink-0\">\n {isNew && (\n <Badge variant=\"light\" type=\"primary\" size=\"sm\" icon={faStarsOutline}>\n New\n </Badge>\n )}\n {hasBadge && (\n <Badge variant=\"solid\" type=\"critical\" size=\"sm\">\n {badgeCount}\n </Badge>\n )}\n </div>\n )}\n\n {hasSubItems && (\n <Icon\n icon={faChevronDownSolid}\n size=\"sm\"\n className=\"shrink-0 text-sidebar-item-chevron\"\n />\n )}\n </>\n )}\n </div>\n );\n },\n);\n\nSidebarItem.displayName = \"SidebarItem\";\n\nexport { SidebarItem, sidebarItemVariants, type SidebarItemProps };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faChevronDownSolid,\n faChevronUpSolid,\n faCircleExclamationOutline,\n faXmarkSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\nimport { TruncatedText } from \"./truncated-text\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst selectVariants = cva(\n [\n \"flex items-center w-full border cursor-pointer transition-colors\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"disabled:pointer-events-none\",\n ],\n {\n variants: {\n size: {\n sm: \"px-base gap-base rounded-base min-w-[80px]\",\n md: \"px-lg gap-base rounded-md\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// Height for each size (total outer height in px, including border)\nconst selectHeight = { sm: 32, md: 40 } as const;\n\n// Chip height per select size\nconst chipHeight = { sm: 20, md: 24 } as const;\n\n// ── State style maps ─────────────────────────────────────────────────────────\n\nconst triggerStates = {\n default: [\n \"bg-gradient-to-t from-select-bg-default from-[10%] to-select-bg-gradient-to\",\n \"border-select-border-default\",\n \"shadow-sm\",\n \"hover:from-select-bg-hover hover:from-[0%] hover:to-select-bg-gradient-to\",\n \"hover:border-select-border-hover\",\n ],\n active: [\n \"from-select-bg-hover from-[0%] to-select-bg-gradient-to\",\n \"border-select-border-hover\",\n ],\n error: [\n \"bg-select-bg-error\",\n \"border-select-border-error\",\n \"shadow-sm\",\n ],\n disabled: [\n \"bg-select-bg-disabled\",\n \"border-select-border-disabled\",\n \"shadow-none\",\n ],\n};\n\nconst textColor = {\n value: \"text-select-text-default\",\n placeholder: \"text-select-text-placeholder\",\n disabled: \"text-select-text-disabled\",\n};\n\nconst iconColor = {\n default: \"text-select-icon\",\n disabled: \"text-select-text-disabled\",\n};\n\nconst errorGuidance = {\n icon: \"shrink-0 text-select-error-icon\",\n text: \"text-xs font-medium leading-xs text-select-error-text\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SelectProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"type\">,\n VariantProps<typeof selectVariants> {\n error?: boolean;\n errorMessage?: string;\n placeholder?: string;\n value?: string;\n /** @deprecated Use `tags` instead for multi-select display. */\n multiCount?: number;\n tags?: string[];\n onTagRemove?: (tag: string) => void;\n icon?: IconDefinition;\n avatar?: React.ReactNode;\n flag?: React.ReactNode;\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\n// ── SelectChips (overflow-aware tag row) ─────────────────────────────────────\n\ninterface SelectChipsProps {\n tags: string[];\n onTagRemove?: (tag: string) => void;\n chipHeightPx: number;\n}\n\nfunction SelectChips({ tags, onTagRemove, chipHeightPx }: SelectChipsProps) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const measureRef = React.useRef<HTMLDivElement>(null);\n const [visibleCount, setVisibleCount] = React.useState(tags.length);\n\n React.useLayoutEffect(() => {\n const container = containerRef.current;\n const measureRow = measureRef.current;\n if (!container || !measureRow) return;\n\n const measure = () => {\n const containerWidth = container.getBoundingClientRect().width;\n const chips = Array.from(\n measureRow.children,\n ) as HTMLElement[];\n\n // How much space does the +X chip need? ~32px\n const overflowChipWidth = 32;\n let usedWidth = 0;\n let count = 0;\n\n for (const chip of chips) {\n const chipWidth = chip.getBoundingClientRect().width;\n const gapWidth = count > 0 ? 4 : 0; // gap-xs = 4px\n const projectedWidth = usedWidth + gapWidth + chipWidth;\n\n // Check: would adding this chip + the overflow chip still fit?\n const remaining = tags.length - (count + 1);\n const needsOverflow = remaining > 0;\n const totalNeeded = projectedWidth + (needsOverflow ? 4 + overflowChipWidth : 0);\n\n if (totalNeeded <= containerWidth) {\n usedWidth = projectedWidth;\n count++;\n } else {\n break;\n }\n }\n\n setVisibleCount(Math.max(1, count));\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n observer.observe(container);\n return () => observer.disconnect();\n }, [tags]);\n\n const overflowCount = tags.length - visibleCount;\n const overflowTags = tags.slice(visibleCount);\n\n const chipClass = cn(\n \"inline-flex items-center gap-xs shrink-0\",\n \"px-sm rounded-base\",\n \"bg-tag-neutral-bg text-tag-neutral-text\",\n \"text-xs font-medium leading-xs\",\n \"whitespace-nowrap\",\n );\n\n return (\n <div className=\"flex flex-1 items-center gap-xs min-w-0 overflow-hidden relative\">\n {/* Hidden measurement row — renders all chips off-screen to measure widths */}\n <div\n ref={measureRef}\n aria-hidden\n className=\"absolute flex items-center gap-xs pointer-events-none\"\n style={{ visibility: \"hidden\", whiteSpace: \"nowrap\", top: 0, left: 0 }}\n >\n {tags.map((tag) => (\n <span key={tag} className={chipClass} style={{ height: chipHeightPx }}>\n <span className=\"truncate max-w-[100px]\">{tag}</span>\n {onTagRemove && (\n <span className=\"inline-flex shrink-0 w-3 h-3\" />\n )}\n </span>\n ))}\n </div>\n\n {/* Visible row */}\n <div ref={containerRef} className=\"flex flex-1 items-center gap-xs overflow-hidden\">\n {tags.slice(0, visibleCount).map((tag) => (\n <span\n key={tag}\n className={chipClass}\n style={{ height: chipHeightPx }}\n >\n <TruncatedText className=\"max-w-[100px]\">{tag}</TruncatedText>\n {onTagRemove && (\n <button\n type=\"button\"\n aria-label={`Remove ${tag}`}\n className=\"inline-flex shrink-0 items-center justify-center cursor-pointer rounded-sm hover:opacity-70\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n onTagRemove(tag);\n }}\n >\n <Icon icon={faXmarkSolid} size=\"xs\" />\n </button>\n )}\n </span>\n ))}\n {overflowCount > 0 && (\n <TooltipPrimitive.Provider>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span\n className={cn(chipClass, \"cursor-default\")}\n style={{ height: chipHeightPx }}\n >\n +{overflowCount}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className={cn(\n \"z-50 px-base py-sm rounded-lg shadow-lg\",\n \"bg-tooltip-default-bg text-tooltip-default-text\",\n \"text-xs font-regular leading-xs\",\n \"flex flex-col gap-xs\",\n \"data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out]\",\n \"data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\",\n )}\n >\n {overflowTags.map((t) => (\n <span key={t}>{t}</span>\n ))}\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n )}\n </div>\n </div>\n );\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Select = React.forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n className,\n size,\n error,\n errorMessage,\n placeholder = \"Select...\",\n value,\n multiCount,\n tags,\n onTagRemove,\n icon,\n avatar,\n flag,\n label,\n labelType,\n isOpen: controlledOpen,\n onOpenChange,\n disabled,\n children,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const triggerId = props.id ?? autoId;\n const errorId = error && errorMessage ? `${triggerId}-error` : undefined;\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isOpen = controlledOpen ?? internalOpen;\n\n const handleOpenChange = (open: boolean) => {\n if (disabled) return;\n setInternalOpen(open);\n onOpenChange?.(open);\n };\n\n const resolvedSize = size ?? \"md\";\n const hasTags = tags != null && tags.length > 0;\n const hasValue = hasTags || (value != null && value !== \"\");\n const isActive = isOpen && !error && !disabled;\n const icColor = iconColor[disabled ? \"disabled\" : \"default\"];\n\n // Resolve trigger state\n const triggerState = disabled\n ? triggerStates.disabled\n : error\n ? triggerStates.error\n : triggerStates.default;\n\n // Fixed height + vertical centering, padding adapts for tags\n const heightPx = selectHeight[resolvedSize];\n\n return (\n <PopoverPrimitive.Root\n open={isOpen}\n onOpenChange={handleOpenChange}\n >\n <div className=\"relative flex flex-col gap-xs\">\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n style={{ height: heightPx }}\n className={cn(\n selectVariants({ size }),\n triggerState,\n isActive && triggerStates.active,\n // Reduce vertical padding when tags are present\n hasTags ? \"py-xs\" : resolvedSize === \"sm\" ? \"py-sm\" : \"py-[10px]\",\n className,\n )}\n {...props}\n >\n {avatar}\n {flag}\n {icon && (\n <Icon icon={icon} size=\"sm\" className={cn(\"shrink-0\", icColor)} />\n )}\n\n {tags && tags.length > 0 ? (\n <SelectChips\n tags={tags}\n onTagRemove={onTagRemove}\n chipHeightPx={chipHeight[resolvedSize]}\n />\n ) : (\n <span\n className={cn(\n \"flex-1 truncate text-left\",\n disabled\n ? textColor.disabled\n : hasValue\n ? textColor.value\n : textColor.placeholder,\n )}\n >\n {hasValue ? value : placeholder}\n </span>\n )}\n\n <Icon\n icon={isOpen ? faChevronUpSolid : faChevronDownSolid}\n size=\"sm\"\n className={cn(\"shrink-0\", icColor)}\n />\n </button>\n </PopoverPrimitive.Trigger>\n\n {error && errorMessage && (\n <div className=\"flex items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n </div>\n\n {children && (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className={cn(\n \"z-50 w-[var(--radix-popover-trigger-width)]\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n )}\n </PopoverPrimitive.Root>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select, selectVariants, type SelectProps };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge } from \"./badge\";\n\n// ── Tabs (root + list) ──────────────────────────────────────────────────────\n\ninterface TabsProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root> {}\n\nconst Tabs = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Root>,\n TabsProps\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Root ref={ref} className={cn(\"flex flex-col\", className)} {...props} />\n));\nTabs.displayName = \"Tabs\";\n\n// ── TabList ─────────────────────────────────────────────────────────────────\n\ninterface TabListProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> {\n /** Add horizontal padding (px-xl) when used inline within a page section. */\n hasOffset?: boolean;\n}\n\nconst TabList = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.List>,\n TabListProps\n>(({ className, hasOffset = false, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"flex items-center gap-base pt-base border-b border-tab-border\",\n hasOffset && \"px-xl\",\n className,\n )}\n {...props}\n />\n));\nTabList.displayName = \"TabList\";\n\n// ── TabTrigger ──────────────────────────────────────────────────────────────\n\ninterface TabTriggerProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> {\n badge?: string;\n}\n\nconst TabTrigger = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Trigger>,\n TabTriggerProps\n>(({ className, badge, children, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"group flex flex-col items-start pb-base cursor-pointer\",\n \"data-[state=active]:border-b data-[state=active]:border-tab-item-active-border\",\n \"data-[state=active]:mb-[-1px] data-[state=active]:z-10\",\n className,\n )}\n {...props}\n >\n <div\n className={cn(\n \"flex items-center justify-center gap-sm px-base py-xs rounded-base\",\n \"group-hover:bg-tab-item-hover-bg\",\n \"group-data-[state=active]:bg-tab-item-active-bg\",\n )}\n >\n <span\n className={cn(\n \"text-sm font-medium leading-sm whitespace-nowrap\",\n \"text-tab-item-default-text\",\n \"group-data-[state=active]:text-tab-item-active-text\",\n )}\n >\n {children}\n </span>\n {badge && (\n <Badge variant=\"light\" type=\"neutral\" size=\"sm\">\n {badge}\n </Badge>\n )}\n </div>\n </TabsPrimitive.Trigger>\n));\nTabTrigger.displayName = \"TabTrigger\";\n\n// ── TabContent ──────────────────────────────────────────────────────────────\n\ninterface TabContentProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content> {}\n\nconst TabContent = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Content>,\n TabContentProps\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\"outline-none\", className)}\n {...props}\n />\n));\nTabContent.displayName = \"TabContent\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n Tabs,\n TabList,\n TabTrigger,\n TabContent,\n type TabsProps,\n type TabListProps,\n type TabTriggerProps,\n type TabContentProps,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faXmarkSolid, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst tagVariants = cva(\n [\n \"inline-flex items-center\",\n \"gap-xs\",\n \"rounded-base\",\n \"font-medium\",\n \"whitespace-nowrap\",\n ],\n {\n variants: {\n variant: {\n brand: [\n \"bg-tag-brand-bg\",\n \"text-tag-brand-text\",\n ],\n neutral: [\n \"bg-tag-neutral-bg\",\n \"text-tag-neutral-text\",\n ],\n },\n // Categorical tones — soft style with a subtle border.\n // When `tone` is set it overrides `variant` (handled in the component).\n tone: {\n indigo: \"bg-tag-indigo-bg text-tag-indigo-text border border-tag-indigo-border\",\n rose: \"bg-tag-rose-bg text-tag-rose-text border border-tag-rose-border\",\n lime: \"bg-tag-lime-bg text-tag-lime-text border border-tag-lime-border\",\n violet: \"bg-tag-violet-bg text-tag-violet-text border border-tag-violet-border\",\n cyan: \"bg-tag-cyan-bg text-tag-cyan-text border border-tag-cyan-border\",\n orange: \"bg-tag-orange-bg text-tag-orange-text border border-tag-orange-border\",\n emerald: \"bg-tag-emerald-bg text-tag-emerald-text border border-tag-emerald-border\",\n fuchsia: \"bg-tag-fuchsia-bg text-tag-fuchsia-text border border-tag-fuchsia-border\",\n amber: \"bg-tag-amber-bg text-tag-amber-text border border-tag-amber-border\",\n slate: \"bg-tag-slate-bg text-tag-slate-text border border-tag-slate-border\",\n },\n size: {\n sm: [\n \"p-xs\",\n \"text-xs\",\n \"leading-xs\",\n ],\n md: [\n \"p-sm\",\n \"text-sm\",\n \"leading-sm\",\n ],\n },\n },\n // variant default is applied in the component so `tone` can suppress it.\n defaultVariants: {\n size: \"sm\",\n },\n },\n);\n\n// ── Icon size mapping ────────────────────────────────────────────────────────\n\nconst iconSizeMap = { sm: \"xs\", md: \"sm\" } as const;\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TagProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"type\">,\n VariantProps<typeof tagVariants> {\n icon?: IconDefinition;\n onClose?: () => void;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Tag = React.forwardRef<HTMLSpanElement, TagProps>(\n ({ className, variant, tone, size, icon, onClose, children, ...props }, ref) => {\n const iconSize = iconSizeMap[size ?? \"sm\"];\n\n return (\n <span\n ref={ref}\n className={cn(\n tagVariants({\n // A categorical tone is self-contained and overrides variant.\n variant: tone != null ? undefined : variant ?? \"brand\",\n tone,\n size,\n }),\n className,\n )}\n {...props}\n >\n {icon && (\n <Icon icon={icon} size={iconSize} className=\"shrink-0\" />\n )}\n {children}\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center\",\n \"rounded-base cursor-pointer\",\n \"p-xs\",\n size === \"md\" && \"p-sm rounded-lg\",\n )}\n aria-label=\"Remove\"\n >\n <Icon icon={faXmarkSolid} size={iconSize} />\n </button>\n )}\n </span>\n );\n },\n);\n\nTag.displayName = \"Tag\";\n\nexport { Tag, tagVariants, type TagProps };\n","import * as React from \"react\";\nimport { Icon, faCircleExclamationOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\n\n// ── State style maps ─────────────────────────────────────────────────────────\n\nconst fieldStates = {\n default: [\n \"bg-textarea-bg-default\",\n \"border-textarea-border-default\",\n \"text-textarea-text-default\",\n \"placeholder:text-textarea-text-placeholder\",\n \"hover:border-textarea-border-hover\",\n \"focus:border-textarea-border-hover\",\n \"focus:shadow-focus-ring\",\n ],\n success: [\n \"bg-textarea-bg-default\",\n \"border-textarea-border-success\",\n \"text-textarea-text-default\",\n \"placeholder:text-textarea-text-placeholder\",\n ],\n error: [\n \"bg-textarea-bg-default\",\n \"border-textarea-border-error\",\n \"text-textarea-text-default\",\n \"placeholder:text-textarea-text-placeholder\",\n ],\n disabled: [\n \"bg-textarea-bg-disabled\",\n \"border-textarea-border-disabled\",\n \"text-textarea-text-disabled\",\n \"placeholder:text-textarea-text-disabled\",\n \"cursor-not-allowed resize-none\",\n ],\n};\n\nconst errorGuidance = {\n icon: \"shrink-0 text-textarea-error-icon\",\n text: \"text-xs font-medium leading-xs text-textarea-error-text\",\n};\n\nconst charLimitStyle =\n \"shrink-0 text-right text-xs font-regular leading-xs text-textarea-char-limit\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TextAreaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"type\"> {\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n error?: boolean;\n errorMessage?: string;\n success?: boolean;\n characterLimit?: string;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction resolveState(error?: boolean, success?: boolean, disabled?: boolean) {\n if (disabled) return \"disabled\" as const;\n if (error) return \"error\" as const;\n if (success) return \"success\" as const;\n return \"default\" as const;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n className,\n label,\n labelType,\n error,\n errorMessage,\n success,\n characterLimit,\n disabled,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const textareaId = props.id ?? autoId;\n const errorId = error && errorMessage ? `${textareaId}-error` : undefined;\n const state = resolveState(error, success, disabled);\n\n return (\n <div className=\"flex flex-col gap-[4px]\">\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <textarea\n ref={ref}\n id={textareaId}\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n className={cn(\n \"w-full min-h-[120px] resize-vertical\",\n \"px-lg py-base\",\n \"rounded-md border overflow-clip outline-none\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n fieldStates[state],\n className,\n )}\n {...props}\n />\n\n {(error && errorMessage) || characterLimit ? (\n <div className=\"flex gap-base items-start w-full\">\n {error && errorMessage && (\n <div className=\"flex flex-1 items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n {characterLimit && (\n <span className={cn(charLimitStyle, !error && \"w-full\")}>\n {characterLimit}\n </span>\n )}\n </div>\n ) : null}\n </div>\n );\n },\n);\n\nTextArea.displayName = \"TextArea\";\n\nexport { TextArea, type TextAreaProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faCircleExclamationOutline,\n faCircleXmarkSolid,\n faPlusSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst textInputVariants = cva(\n [\n \"flex items-center w-full border transition-colors\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n ],\n {\n variants: {\n size: {\n sm: \"px-base py-sm gap-base rounded-base\",\n md: \"px-lg py-[10px] gap-base rounded-md\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// ── State style maps ─────────────────────────────────────────────────────────\n\nconst wrapperStates = {\n default: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-default\",\n \"text-text-input-text-default\",\n \"hover:border-text-input-border-hover\",\n \"focus-within:border-text-input-border-hover\",\n \"focus-within:shadow-focus-ring\",\n ],\n success: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-success\",\n \"text-text-input-text-default\",\n ],\n error: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-error\",\n \"text-text-input-text-default\",\n ],\n disabled: [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"text-text-input-text-disabled\",\n \"cursor-not-allowed\",\n ],\n};\n\nconst iconColor = {\n default: \"text-text-input-icon\",\n disabled: \"text-text-input-text-disabled\",\n};\n\nconst attachedButtonStyles = {\n enabled: [\n \"bg-gradient-to-t from-text-input-button-bg from-[10%] to-text-input-button-gradient-to\",\n \"border-text-input-button-border\",\n \"shadow-sm\",\n \"hover:from-text-input-button-bg-hover hover:from-[0%] hover:to-text-input-button-gradient-to\",\n ],\n disabled: [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"cursor-not-allowed\",\n ],\n};\n\nconst errorGuidance = {\n icon: \"shrink-0 text-text-input-error-icon\",\n text: \"text-xs font-medium leading-xs text-text-input-error-text\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TextInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\">,\n VariantProps<typeof textInputVariants> {\n type?: \"text\" | \"email\" | \"password\" | \"number\" | \"tel\" | \"url\" | \"search\";\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n error?: boolean;\n errorMessage?: string;\n success?: boolean;\n iconLeft?: IconDefinition;\n iconRight?: IconDefinition;\n onClear?: () => void;\n hasButton?: boolean;\n buttonIcon?: IconDefinition;\n onButtonClick?: () => void;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction resolveState(error?: boolean, success?: boolean, disabled?: boolean) {\n if (disabled) return \"disabled\" as const;\n if (error) return \"error\" as const;\n if (success) return \"success\" as const;\n return \"default\" as const;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst TextInput = React.forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n className,\n size,\n type = \"text\",\n label,\n labelType,\n error,\n errorMessage,\n success,\n disabled,\n iconLeft,\n iconRight,\n onClear,\n hasButton,\n buttonIcon,\n onButtonClick,\n value,\n defaultValue,\n onChange,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const inputId = props.id ?? autoId;\n const errorId = error && errorMessage ? `${inputId}-error` : undefined;\n\n const isControlled = value !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n (defaultValue as string) ?? \"\",\n );\n const displayValue = isControlled ? (value as string) : uncontrolledValue;\n const showClear = onClear != null && displayValue !== \"\" && !disabled;\n const state = resolveState(error, success, disabled);\n const icColor = iconColor[disabled ? \"disabled\" : \"default\"];\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n };\n\n return (\n <div className=\"flex flex-col gap-xs\">\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <div className=\"flex\">\n <div\n className={cn(\n textInputVariants({ size }),\n wrapperStates[state],\n hasButton && \"rounded-r-none border-r-0\",\n className,\n )}\n >\n {iconLeft && (\n <Icon icon={iconLeft} size=\"sm\" className={cn(\"shrink-0\", icColor)} />\n )}\n\n <input\n ref={ref}\n id={inputId}\n type={type}\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? defaultValue : undefined}\n onChange={handleChange}\n className={cn(\n \"flex-1 min-w-0 bg-transparent outline-none\",\n \"[font-size:inherit] font-[inherit] leading-[inherit] [color:inherit]\",\n disabled\n ? \"placeholder:text-text-input-text-disabled cursor-not-allowed\"\n : \"placeholder:text-text-input-text-placeholder\",\n )}\n {...props}\n />\n\n {showClear ? (\n <button\n type=\"button\"\n onClick={onClear}\n className=\"shrink-0 flex items-center justify-center\"\n tabIndex={-1}\n >\n <Icon icon={faCircleXmarkSolid} size=\"xs\" className={iconColor.default} />\n </button>\n ) : (\n iconRight &&\n !onClear && (\n <Icon icon={iconRight} size=\"xs\" className={cn(\"shrink-0\", icColor)} />\n )\n )}\n </div>\n\n {hasButton && (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onButtonClick}\n className={cn(\n \"shrink-0 flex items-center justify-center border\",\n size === \"sm\"\n ? \"px-base rounded-r-base\"\n : \"px-lg rounded-r-md\",\n attachedButtonStyles[disabled ? \"disabled\" : \"enabled\"],\n )}\n >\n <Icon icon={buttonIcon ?? faPlusSolid} size=\"sm\" className={icColor} />\n </button>\n )}\n </div>\n\n {error && errorMessage && (\n <div className=\"flex items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nTextInput.displayName = \"TextInput\";\n\nexport { TextInput, textInputVariants, type TextInputProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faCircleExclamationOutline,\n faXmarkSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\nimport { TruncatedText } from \"./truncated-text\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst chipInputVariants = cva(\n [\n \"flex flex-wrap items-center w-full border transition-colors\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n \"gap-xs\",\n ],\n {\n variants: {\n size: {\n sm: \"px-base py-sm rounded-base\",\n md: \"px-lg py-[10px] rounded-md\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// ── State style maps ─────────────────────────────────────────────────────────\n\nconst wrapperStates = {\n default: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-default\",\n \"text-text-input-text-default\",\n \"hover:border-text-input-border-hover\",\n \"focus-within:border-text-input-border-hover\",\n \"focus-within:shadow-focus-ring\",\n ],\n success: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-success\",\n \"text-text-input-text-default\",\n ],\n error: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-error\",\n \"text-text-input-text-default\",\n ],\n disabled: [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"text-text-input-text-disabled\",\n \"cursor-not-allowed\",\n ],\n};\n\nfunction resolveState(error?: boolean, success?: boolean, disabled?: boolean) {\n if (disabled) return \"disabled\" as const;\n if (error) return \"error\" as const;\n if (success) return \"success\" as const;\n return \"default\" as const;\n}\n\nconst chipStyle = [\n \"inline-flex items-center gap-xs shrink-0\",\n \"h-6 px-sm rounded-base\",\n \"bg-tag-neutral-bg text-tag-neutral-text\",\n \"text-xs font-medium leading-xs\",\n \"whitespace-nowrap\",\n];\n\nconst errorGuidance = {\n icon: \"shrink-0 text-text-input-error-icon\",\n text: \"text-xs font-medium leading-xs text-text-input-error-text\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface ChipInputProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">,\n VariantProps<typeof chipInputVariants> {\n values: string[];\n onChange: (values: string[]) => void;\n placeholder?: string;\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n error?: boolean;\n errorMessage?: string;\n success?: boolean;\n disabled?: boolean;\n iconLeft?: IconDefinition;\n /** Max number of chips (0 = unlimited) */\n max?: number;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst ChipInput = React.forwardRef<HTMLDivElement, ChipInputProps>(\n (\n {\n className,\n size,\n values,\n onChange,\n placeholder = \"Type a value and press Enter\",\n label,\n labelType,\n error,\n errorMessage,\n success,\n disabled,\n iconLeft,\n max = 0,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const inputId = props.id ?? autoId;\n const errorId = error && errorMessage ? `${inputId}-error` : undefined;\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = React.useState(\"\");\n\n const state = resolveState(error, success, disabled);\n\n const addChip = (val: string) => {\n const trimmed = val.trim();\n if (!trimmed) return;\n if (values.includes(trimmed)) return;\n if (max > 0 && values.length >= max) return;\n onChange([...values, trimmed]);\n setInputValue(\"\");\n };\n\n const removeChip = (val: string) => {\n onChange(values.filter((v) => v !== val));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addChip(inputValue);\n } else if (e.key === \"Backspace\" && inputValue === \"\" && values.length > 0) {\n removeChip(values[values.length - 1]);\n }\n };\n\n const handleWrapperClick = () => {\n inputRef.current?.focus();\n };\n\n return (\n <div className=\"flex flex-col gap-xs\">\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <div\n ref={ref}\n role=\"textbox\"\n aria-disabled={disabled || undefined}\n className={cn(\n chipInputVariants({ size }),\n wrapperStates[state],\n \"cursor-text\",\n className,\n )}\n onClick={handleWrapperClick}\n {...props}\n >\n {iconLeft && (\n <Icon\n icon={iconLeft}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n disabled ? \"text-text-input-text-disabled\" : \"text-text-input-icon\",\n )}\n />\n )}\n\n {values.map((val) => (\n <span key={val} className={cn(chipStyle)}>\n <TruncatedText className=\"max-w-[150px]\">{val}</TruncatedText>\n {!disabled && (\n <button\n type=\"button\"\n aria-label={`Remove ${val}`}\n className=\"inline-flex shrink-0 items-center justify-center cursor-pointer rounded-sm hover:opacity-70\"\n onClick={(e) => {\n e.stopPropagation();\n removeChip(val);\n }}\n >\n <Icon icon={faXmarkSolid} size=\"xs\" />\n </button>\n )}\n </span>\n ))}\n\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className={cn(\n \"flex-1 min-w-[120px] bg-transparent outline-none\",\n \"[font-size:inherit] font-[inherit] leading-[inherit] [color:inherit]\",\n disabled\n ? \"placeholder:text-text-input-text-disabled cursor-not-allowed\"\n : \"placeholder:text-text-input-text-placeholder\",\n )}\n />\n </div>\n\n {error && errorMessage && (\n <div className=\"flex items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nChipInput.displayName = \"ChipInput\";\n\nexport { ChipInput, chipInputVariants, type ChipInputProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faMinusOutline,\n faPlusOutline,\n faCircleExclamationOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\n\n// ── Stepper button styles ────────────────────────────────────────────────────\n\nconst stepperButtonVariants = cva(\n [\n \"shrink-0 flex items-center justify-center\",\n \"border border-text-input-border-default\",\n \"cursor-pointer transition-colors\",\n ],\n {\n variants: {\n size: {\n sm: \"p-sm\",\n md: \"p-[10px]\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nconst stepperButtonStates = {\n enabled: [\n \"bg-gradient-to-t from-text-input-button-bg from-[10%] to-text-input-button-gradient-to\",\n \"hover:from-text-input-button-bg-hover hover:from-[0%] hover:to-text-input-button-gradient-to\",\n \"active:from-text-input-button-bg-hover active:from-[0%] active:to-text-input-button-gradient-to\",\n ],\n disabled: [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"cursor-not-allowed\",\n ],\n};\n\n// ── Input styles ─────────────────────────────────────────────────────────────\n\nconst inputVariants = cva(\n [\n \"min-w-[48px] text-center border-y border-text-input-border-default\",\n \"bg-text-input-bg-default\",\n \"text-sm font-regular leading-sm\",\n \"text-text-input-text-default\",\n \"outline-none\",\n \"[appearance:textfield]\",\n \"[&::-webkit-outer-spin-button]:appearance-none\",\n \"[&::-webkit-inner-spin-button]:appearance-none\",\n ],\n {\n variants: {\n size: {\n sm: \"px-base py-sm\",\n md: \"px-lg py-[10px]\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// ── Wrapper styles (for focus ring) ──────────────────────────────────────────\n\nconst wrapperStates = {\n default: [\n \"focus-within:shadow-focus-ring\",\n \"focus-within:[&_button]:border-text-input-border-hover\",\n \"focus-within:[&_input]:border-text-input-border-hover\",\n ],\n error: [\n \"[&_button]:border-text-input-border-error\",\n \"[&_input]:border-text-input-border-error\",\n ],\n disabled: [],\n};\n\nconst errorGuidance = {\n icon: \"shrink-0 text-text-input-error-icon\",\n text: \"text-xs font-medium leading-xs text-text-input-error-text\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface NumberInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\" | \"onChange\">,\n VariantProps<typeof inputVariants> {\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n error?: boolean;\n errorMessage?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n className,\n size,\n value: controlledValue,\n defaultValue = 0,\n onChange,\n min,\n max,\n step = 1,\n label,\n labelType,\n error,\n errorMessage,\n disabled,\n id,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n const errorId = error && errorMessage ? `${inputId}-error` : undefined;\n\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const currentValue = isControlled ? controlledValue : internalValue;\n\n const resolvedSize = size ?? \"md\";\n const state = disabled ? \"disabled\" : error ? \"error\" : \"default\";\n\n const clamp = (val: number) => {\n let clamped = val;\n if (min != null) clamped = Math.max(min, clamped);\n if (max != null) clamped = Math.min(max, clamped);\n return clamped;\n };\n\n const setValue = (val: number) => {\n const clamped = clamp(val);\n if (!isControlled) setInternalValue(clamped);\n onChange?.(clamped);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const parsed = parseInt(e.target.value, 10);\n if (!isNaN(parsed)) {\n setValue(parsed);\n } else if (e.target.value === \"\" || e.target.value === \"-\") {\n // Allow typing negative sign or clearing\n if (!isControlled) setInternalValue(0);\n }\n };\n\n const handleBlur = () => {\n // Re-clamp on blur\n setValue(currentValue);\n };\n\n const decrement = () => {\n if (disabled) return;\n setValue(currentValue - step);\n };\n\n const increment = () => {\n if (disabled) return;\n setValue(currentValue + step);\n };\n\n const atMin = min != null && currentValue <= min;\n const atMax = max != null && currentValue >= max;\n\n // Auto-size the input: 48px base, grow only when content would overflow\n const valueStr = String(currentValue);\n const charCount = valueStr.length;\n // 48px fits ~3 chars comfortably; grow beyond that\n const inputWidth = charCount > 3 ? `${48 + (charCount - 3) * 9}px` : undefined;\n\n return (\n <div className={cn(\"flex flex-col gap-xs\", className)}>\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <div\n className={cn(\n \"inline-flex w-fit rounded-md shadow-sm\",\n wrapperStates[state],\n )}\n >\n <button\n type=\"button\"\n disabled={disabled || atMin}\n onClick={decrement}\n aria-label=\"Decrease\"\n className={cn(\n stepperButtonVariants({ size: resolvedSize }),\n \"rounded-l-md -mr-px\",\n stepperButtonStates[disabled || atMin ? \"disabled\" : \"enabled\"],\n )}\n >\n <Icon\n icon={faMinusOutline}\n size=\"sm\"\n className={cn(\n disabled || atMin\n ? \"text-text-input-text-disabled\"\n : \"text-text-input-text-default\",\n )}\n />\n </button>\n\n <input\n ref={ref}\n id={inputId}\n type=\"number\"\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n value={currentValue}\n onChange={handleInputChange}\n onBlur={handleBlur}\n min={min}\n max={max}\n step={step}\n style={inputWidth ? { width: inputWidth } : undefined}\n className={cn(\n inputVariants({ size: resolvedSize }),\n \"-mx-px\",\n disabled && [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"text-text-input-text-disabled\",\n \"cursor-not-allowed\",\n ],\n error && \"border-text-input-border-error\",\n )}\n {...props}\n />\n\n <button\n type=\"button\"\n disabled={disabled || atMax}\n onClick={increment}\n aria-label=\"Increase\"\n className={cn(\n stepperButtonVariants({ size: resolvedSize }),\n \"rounded-r-md -ml-px\",\n stepperButtonStates[disabled || atMax ? \"disabled\" : \"enabled\"],\n )}\n >\n <Icon\n icon={faPlusOutline}\n size=\"sm\"\n className={cn(\n disabled || atMax\n ? \"text-text-input-text-disabled\"\n : \"text-text-input-text-default\",\n )}\n />\n </button>\n </div>\n\n {error && errorMessage && (\n <div className=\"flex items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = \"NumberInput\";\n\nexport { NumberInput, type NumberInputProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst typographyVariants = cva(\"\", {\n variants: {\n variant: {\n h1: \"text-xl leading-lg\",\n h2: \"text-lg leading-md\",\n h3: \"text-md leading-base\",\n lg: \"text-base leading-base\",\n md: \"text-sm leading-sm\",\n sm: \"text-xs leading-xs\",\n xs: \"text-xxs leading-2xs\",\n },\n weight: {\n regular: \"font-regular\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n },\n },\n defaultVariants: {\n variant: \"md\",\n weight: \"regular\",\n },\n});\n\n// ── Default element mapping ──────────────────────────────────────────────────\n\nconst defaultElementMap: Record<string, React.ElementType> = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n lg: \"p\",\n md: \"p\",\n sm: \"p\",\n xs: \"p\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TypographyProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof typographyVariants> {\n as?: React.ElementType;\n asChild?: boolean;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Typography = React.forwardRef<HTMLElement, TypographyProps>(\n ({ className, variant = \"md\", weight, as, asChild = false, ...props }, ref) => {\n const isHeading = variant === \"h1\" || variant === \"h2\" || variant === \"h3\";\n const resolvedWeight = weight ?? (isHeading ? \"semibold\" : \"regular\");\n const Comp = asChild ? Slot : as ?? defaultElementMap[variant ?? \"md\"] ?? \"p\";\n\n return (\n <Comp\n ref={ref}\n className={cn(typographyVariants({ variant, weight: resolvedWeight }), className)}\n {...props}\n />\n );\n },\n);\n\nTypography.displayName = \"Typography\";\n\nexport { Typography, typographyVariants, type TypographyProps };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n// ── UserMenu (container) ────────────────────────────────────────────────────\n\ninterface UserMenuProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst UserMenu = React.forwardRef<HTMLDivElement, UserMenuProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col w-[260px] overflow-clip\",\n \"bg-user-menu-bg\",\n \"border border-user-menu-border\",\n \"rounded-lg\",\n \"shadow-lg\",\n \"divide-y divide-user-menu-border\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n ),\n);\nUserMenu.displayName = \"UserMenu\";\n\n// ── UserMenuInfoRow (header / footer) ───────────────────────────────────────\n\ninterface UserMenuInfoRowProps extends React.HTMLAttributes<HTMLDivElement> {\n avatar: React.ReactNode;\n name: React.ReactNode;\n subtitle?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nconst UserMenuInfoRow = React.forwardRef<HTMLDivElement, UserMenuInfoRowProps>(\n ({ className, avatar, name, subtitle, action, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-base p-xl\", className)}\n {...props}\n >\n {avatar}\n <div className=\"flex flex-1 flex-col min-w-0\">\n <span className=\"text-sm font-medium leading-sm text-user-menu-name truncate\">\n {name}\n </span>\n {subtitle && (\n <span className=\"text-xs font-regular leading-xs text-user-menu-subtitle truncate\">\n {subtitle}\n </span>\n )}\n </div>\n {action}\n </div>\n ),\n);\nUserMenuInfoRow.displayName = \"UserMenuInfoRow\";\n\n// ── UserMenuSection (items wrapper) ─────────────────────────────────────────\n\ninterface UserMenuSectionProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst UserMenuSection = React.forwardRef<HTMLDivElement, UserMenuSectionProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col p-base\", className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nUserMenuSection.displayName = \"UserMenuSection\";\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n UserMenu,\n UserMenuInfoRow,\n UserMenuSection,\n type UserMenuProps,\n type UserMenuInfoRowProps,\n type UserMenuSectionProps,\n};\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faXmarkSolid, faCircleInfoSolid } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Size variant for the modal panel ─────────────────────────────────────────\n\nconst modalVariants = cva(\n [\n \"fixed top-[50%] left-[50%] -translate-x-1/2 -translate-y-1/2 z-50\",\n \"flex flex-col\",\n \"bg-modal-bg border border-modal-border rounded-lg shadow-sm overflow-clip\",\n \"outline-none\",\n \"data-[state=open]:animate-modal-in data-[state=closed]:animate-modal-out\",\n ],\n {\n variants: {\n size: {\n sm: \"w-[500px] max-h-[80vh]\",\n md: \"w-[800px] max-h-[85vh]\",\n lg: \"w-[1100px] max-h-[90vh]\",\n full: \"w-[calc(100%-32px)] h-[calc(100%-32px)]\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// ── Modal (Root) ─────────────────────────────────────────────────────────────\n\nconst Modal = DialogPrimitive.Root;\n\n// ── ModalTrigger ─────────────────────────────────────────────────────────────\n\nconst ModalTrigger = DialogPrimitive.Trigger;\n\n// ── ModalClose ───────────────────────────────────────────────────────────────\n\nconst ModalClose = DialogPrimitive.Close;\n\n// ── ModalOverlay ─────────────────────────────────────────────────────────────\n\nconst ModalOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-modal-overlay/50\",\n \"data-[state=open]:animate-modal-overlay-in data-[state=closed]:animate-modal-overlay-out\",\n className,\n )}\n {...props}\n />\n));\nModalOverlay.displayName = \"ModalOverlay\";\n\n// ── ModalContent ─────────────────────────────────────────────────────────────\n\ninterface ModalContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof modalVariants> {}\n\nconst ModalContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n ModalContentProps\n>(({ className, size, children, ...props }, ref) => (\n <DialogPrimitive.Portal>\n <ModalOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(modalVariants({ size }), className)}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n));\nModalContent.displayName = \"ModalContent\";\n\n// ── ModalHeader ──────────────────────────────────────────────────────────────\n\ninterface ModalHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether to show the bottom border. Defaults to true. */\n showBorder?: boolean;\n /** Called when the close button is clicked. If omitted, no close button is shown. */\n onClose?: () => void;\n}\n\nconst ModalHeader = React.forwardRef<HTMLDivElement, ModalHeaderProps>(\n ({ className, showBorder = true, onClose, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-start gap-xl p-xl\",\n showBorder && \"border-b border-modal-header-border\",\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-1 flex-col gap-2xs\">{children}</div>\n {onClose && (\n <DialogPrimitive.Close asChild>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"inline-flex shrink-0 items-center justify-center p-xs rounded-base text-modal-header-close hover:bg-black/5 transition-colors cursor-pointer\"\n aria-label=\"Close\"\n >\n <Icon icon={faXmarkSolid} size=\"sm\" />\n </button>\n </DialogPrimitive.Close>\n )}\n </div>\n ),\n);\nModalHeader.displayName = \"ModalHeader\";\n\n// ── ModalTitle ───────────────────────────────────────────────────────────────\n\nconst ModalTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-base font-medium leading-base text-modal-header-title\", className)}\n {...props}\n />\n));\nModalTitle.displayName = \"ModalTitle\";\n\n// ── ModalDescription ─────────────────────────────────────────────────────────\n\nconst ModalDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm font-regular leading-sm text-modal-header-description\", className)}\n {...props}\n />\n));\nModalDescription.displayName = \"ModalDescription\";\n\n// ── ModalBody ────────────────────────────────────────────────────────────────\n\nconst ModalBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex-1 overflow-y-auto p-xl\", className)}\n {...props}\n />\n));\nModalBody.displayName = \"ModalBody\";\n\n// ── ModalFooter ──────────────────────────────────────────────────────────────\n\ninterface ModalFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether to show the top border. Defaults to true. */\n showBorder?: boolean;\n /** Optional info message to show on the left side of the footer. */\n infoMessage?: string;\n}\n\nconst ModalFooter = React.forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, showBorder = true, infoMessage, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-between gap-lg p-xl\",\n showBorder && \"border-t border-modal-footer-border\",\n className,\n )}\n {...props}\n >\n {infoMessage && (\n <div className=\"flex flex-1 items-center gap-base\">\n <Icon icon={faCircleInfoSolid} size=\"sm\" className=\"shrink-0 text-modal-footer-icon\" />\n <span className=\"text-sm font-regular leading-sm text-modal-footer-text\">{infoMessage}</span>\n </div>\n )}\n {children}\n </div>\n ),\n);\nModalFooter.displayName = \"ModalFooter\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n Modal,\n ModalTrigger,\n ModalClose,\n ModalOverlay,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalBody,\n ModalFooter,\n modalVariants,\n type ModalContentProps,\n type ModalHeaderProps,\n type ModalFooterProps,\n};\n","import * as React from \"react\";\nimport {\n Modal,\n ModalClose,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalFooter,\n} from \"./modal\";\nimport { Button } from \"./button\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface DialogProps {\n /** Controls whether the dialog is open. */\n open?: boolean;\n /** Called when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** The dialog title. */\n title: string;\n /** Optional description below the title. */\n description?: string;\n /** Intent controls the primary action button color. */\n intent?: \"brand\" | \"alert\";\n /** Label for the primary action button. */\n primaryLabel?: string;\n /** Callback when the primary action is clicked. */\n onPrimaryAction?: () => void;\n /** Whether the primary action is disabled. */\n primaryDisabled?: boolean;\n /** Label for the cancel button. Defaults to \"Cancel\". */\n cancelLabel?: string;\n /** Callback when cancel is clicked. Defaults to closing the dialog. */\n onCancel?: () => void;\n /** Optional secondary action (rendered between cancel and primary). */\n secondaryLabel?: string;\n /** Callback for the secondary action. */\n onSecondaryAction?: () => void;\n /** Additional className for the content container. */\n className?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Dialog = React.forwardRef<HTMLDivElement, DialogProps>(\n (\n {\n open,\n onOpenChange,\n title,\n description,\n intent = \"brand\",\n primaryLabel = \"Confirm\",\n onPrimaryAction,\n primaryDisabled,\n cancelLabel = \"Cancel\",\n onCancel,\n secondaryLabel,\n onSecondaryAction,\n className,\n },\n ref,\n ) => {\n const handleCancel = onCancel ?? (() => onOpenChange?.(false));\n\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size=\"sm\" ref={ref} className={className}>\n <ModalHeader showBorder={false} onClose={handleCancel}>\n <ModalTitle>{title}</ModalTitle>\n {description && <ModalDescription>{description}</ModalDescription>}\n </ModalHeader>\n\n <ModalFooter>\n <ModalClose asChild>\n <Button appearance=\"ghost\" intent=\"brand\" size=\"md\" onClick={handleCancel}>\n {cancelLabel}\n </Button>\n </ModalClose>\n <div className=\"flex items-center gap-lg\">\n {secondaryLabel && (\n <Button appearance=\"outlined\" intent=\"brand\" size=\"md\" onClick={onSecondaryAction}>\n {secondaryLabel}\n </Button>\n )}\n <Button\n appearance=\"solid\"\n intent={intent}\n size=\"md\"\n onClick={onPrimaryAction}\n disabled={primaryDisabled}\n >\n {primaryLabel}\n </Button>\n </div>\n </ModalFooter>\n </ModalContent>\n </Modal>\n );\n },\n);\n\nDialog.displayName = \"Dialog\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport { Dialog, type DialogProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Button, type ButtonProps } from \"./button\";\n\n/* ── CVA ───────────────────────────────────────────────────────────────────── */\n\nconst emptyStateVariants = cva(\n \"flex flex-col items-center text-center\",\n {\n variants: {\n size: {\n md: \"gap-xl\",\n sm: \"gap-lg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst iconContainerVariants = cva(\n [\n \"flex items-center justify-center shrink-0\",\n \"bg-table-bg border border-table-border\",\n \"overflow-hidden\",\n ],\n {\n variants: {\n size: {\n md: \"size-10 rounded-[14px] shadow-md\",\n sm: \"size-12 rounded-[16px] shadow-sm\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface EmptyStateProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof emptyStateVariants> {\n /** FontAwesome icon to display */\n icon?: IconDefinition;\n /** Title text */\n title: string;\n /** Optional description text */\n description?: string;\n /** Primary action button props */\n primaryAction?: ButtonProps & { label: string };\n /** Secondary action button props */\n secondaryAction?: ButtonProps & { label: string };\n}\n\n/* ── Component ─────────────────────────────────────────────────────────────── */\n\nconst EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n (\n {\n className,\n size = \"md\",\n icon,\n title,\n description,\n primaryAction,\n secondaryAction,\n ...props\n },\n ref,\n ) => {\n const isMd = size === \"md\";\n\n return (\n <div\n ref={ref}\n className={cn(emptyStateVariants({ size }), className)}\n {...props}\n >\n {/* Icon container */}\n {icon && (\n <div className={iconContainerVariants({ size })}>\n <Icon\n icon={icon}\n size={isMd ? \"md\" : \"sm\"}\n className=\"text-table-cell-text-secondary\"\n />\n </div>\n )}\n\n {/* Text content */}\n <div className=\"flex flex-col gap-xs w-full\">\n <p\n className={cn(\n \"font-medium text-table-cell-text-primary\",\n isMd ? \"text-base leading-base\" : \"text-sm leading-sm\",\n )}\n >\n {title}\n </p>\n {description && (\n <p\n className={cn(\n \"font-regular text-table-cell-text-secondary\",\n isMd ? \"text-sm leading-sm\" : \"text-xs leading-xs\",\n )}\n >\n {description}\n </p>\n )}\n </div>\n\n {/* Actions */}\n {(primaryAction || secondaryAction) && (\n <div\n className={cn(\n \"flex items-center\",\n isMd ? \"gap-xl\" : \"gap-base\",\n )}\n >\n {secondaryAction && (\n <Button\n appearance=\"outlined\"\n intent=\"brand\"\n size={isMd ? \"lg\" : \"md\"}\n {...secondaryAction}\n >\n {secondaryAction.label}\n </Button>\n )}\n {primaryAction && (\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size={isMd ? \"lg\" : \"md\"}\n {...primaryAction}\n >\n {primaryAction.label}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n },\n);\nEmptyState.displayName = \"EmptyState\";\n\n/* ── Exports ───────────────────────────────────────────────────────────────── */\n\nexport { EmptyState, emptyStateVariants };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Avatar } from \"./avatar\";\nimport { Badge, type BadgeProps } from \"./badge\";\nimport { Link } from \"./link\";\nimport { Button, type ButtonProps } from \"./button\";\n\n/* ── AvatarCell ────────────────────────────────────────────────────────────── */\n\nexport interface AvatarCellProps {\n name: string;\n subtitle?: string;\n src?: string;\n className?: string;\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .map((part) => part[0])\n .filter(Boolean)\n .slice(0, 2)\n .join(\"\")\n .toUpperCase();\n}\n\nconst AvatarCell: React.FC<AvatarCellProps> = ({\n name,\n subtitle,\n src,\n className,\n}) => (\n <div className={cn(\"flex items-center gap-lg\", className)}>\n <Avatar initials={getInitials(name)} src={src} alt={name} size=\"lg\" shape=\"rounded\" />\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-table-cell-text-primary leading-sm\">\n {name}\n </span>\n {subtitle && (\n <span className=\"text-xs font-regular text-table-cell-text-secondary leading-xs\">\n {subtitle}\n </span>\n )}\n </div>\n </div>\n);\nAvatarCell.displayName = \"AvatarCell\";\n\n/* ── StatusCell ─────────────────────────────────────────────────────────────── */\n\nexport interface StatusCellProps {\n label: string;\n variant?: BadgeProps[\"variant\"];\n type?: BadgeProps[\"type\"];\n size?: BadgeProps[\"size\"];\n className?: string;\n}\n\nconst StatusCell: React.FC<StatusCellProps> = ({\n label,\n variant = \"light\",\n type = \"primary\",\n size = \"md\",\n className,\n}) => (\n <div className={cn(\"flex items-center\", className)}>\n <Badge variant={variant} type={type} size={size}>\n {label}\n </Badge>\n </div>\n);\nStatusCell.displayName = \"StatusCell\";\n\n/* ── NumberCell ──────────────────────────────────────────────────────────────── */\n\nexport interface NumberCellProps {\n value: number | string;\n /** Optional secondary stat (e.g., \"+12%\") */\n secondaryStat?: string;\n /** Color intent for the secondary stat */\n secondaryIntent?: \"success\" | \"warning\" | \"critical\" | \"neutral\";\n /** Number formatting options */\n formatOptions?: Intl.NumberFormatOptions;\n locale?: string;\n align?: \"left\" | \"right\";\n className?: string;\n}\n\nconst secondaryIntentColors = {\n success: \"text-badge-light-success-text\",\n warning: \"text-badge-light-warning-text\",\n critical: \"text-badge-light-critical-text\",\n neutral: \"text-table-cell-text-secondary\",\n} as const;\n\nconst NumberCell: React.FC<NumberCellProps> = ({\n value,\n secondaryStat,\n secondaryIntent = \"neutral\",\n formatOptions,\n locale,\n align = \"right\",\n className,\n}) => {\n const formatted =\n typeof value === \"number\" && formatOptions\n ? new Intl.NumberFormat(locale, formatOptions).format(value)\n : String(value);\n\n return (\n <div\n className={cn(\n \"flex items-center gap-sm\",\n align === \"right\" && \"justify-end\",\n className,\n )}\n >\n <span className=\"text-sm font-medium text-table-cell-text-primary\">\n {formatted}\n </span>\n {secondaryStat && (\n <span\n className={cn(\n \"text-xs font-regular\",\n secondaryIntentColors[secondaryIntent],\n )}\n >\n {secondaryStat}\n </span>\n )}\n </div>\n );\n};\nNumberCell.displayName = \"NumberCell\";\n\n/* ── DateCell ───────────────────────────────────────────────────────────────── */\n\nexport interface DateCellProps {\n date: Date | string;\n format?: Intl.DateTimeFormatOptions;\n locale?: string;\n className?: string;\n}\n\nconst defaultDateFormat: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n};\n\nconst DateCell: React.FC<DateCellProps> = ({\n date,\n format = defaultDateFormat,\n locale,\n className,\n}) => {\n const d = typeof date === \"string\" ? new Date(date) : date;\n const formatted = d.toLocaleDateString(locale, format);\n\n return (\n <span\n className={cn(\n \"text-sm font-regular text-table-cell-text-primary\",\n className,\n )}\n >\n {formatted}\n </span>\n );\n};\nDateCell.displayName = \"DateCell\";\n\n/* ── EmailCell ──────────────────────────────────────────────────────────────── */\n\nexport interface EmailCellProps {\n email: string;\n className?: string;\n}\n\nconst EmailCell: React.FC<EmailCellProps> = ({ email, className }) => (\n <Link\n intent=\"neutral\"\n size=\"sm\"\n href={`mailto:${email}`}\n className={cn(\"font-regular\", className)}\n >\n {email}\n </Link>\n);\nEmailCell.displayName = \"EmailCell\";\n\n/* ── LinkCell ───────────────────────────────────────────────────────────────── */\n\nexport interface LinkCellProps {\n href: string;\n label?: string;\n target?: string;\n className?: string;\n}\n\nconst LinkCell: React.FC<LinkCellProps> = ({\n href,\n label,\n target = \"_blank\",\n className,\n}) => (\n <Link intent=\"brand\" size=\"sm\" href={href} target={target} className={className}>\n {label ?? href}\n </Link>\n);\nLinkCell.displayName = \"LinkCell\";\n\n/* ── TextCell ───────────────────────────────────────────────────────────────── */\n\nexport interface TextCellProps {\n value: string;\n secondary?: boolean;\n className?: string;\n}\n\nconst TextCell: React.FC<TextCellProps> = ({\n value,\n secondary = false,\n className,\n}) => (\n <span\n className={cn(\n \"text-sm\",\n secondary\n ? \"font-regular text-table-cell-text-secondary\"\n : \"font-medium text-table-cell-text-primary\",\n className,\n )}\n >\n {value}\n </span>\n);\nTextCell.displayName = \"TextCell\";\n\n/* ── ButtonCell ─────────────────────────────────────────────────────────────── */\n\nexport interface ButtonCellProps extends ButtonProps {\n className?: string;\n}\n\nconst ButtonCell: React.FC<ButtonCellProps> = ({\n className,\n children,\n ...props\n}) => (\n <div className={cn(\"flex items-center\", className)}>\n <Button size=\"sm\" appearance=\"ghost\" intent=\"brand\" {...props}>\n {children}\n </Button>\n </div>\n);\nButtonCell.displayName = \"ButtonCell\";\n\n/* ── EditableCell ──────────────────────────────────────────────────────────── */\n\nexport interface EditableCellProps {\n value: string;\n onSave: (value: string) => void;\n className?: string;\n}\n\nconst EditableCell: React.FC<EditableCellProps> = ({\n value,\n onSave,\n className,\n}) => {\n const [isEditing, setIsEditing] = React.useState(false);\n const [draft, setDraft] = React.useState(value);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n setDraft(value);\n }, [value]);\n\n React.useEffect(() => {\n if (isEditing) {\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n }, [isEditing]);\n\n const handleSave = () => {\n setIsEditing(false);\n if (draft !== value) {\n onSave(draft);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") {\n setDraft(value);\n setIsEditing(false);\n }\n };\n\n if (isEditing) {\n return (\n <input\n ref={inputRef}\n className={cn(\n \"w-full bg-transparent text-sm font-medium text-table-cell-text-primary\",\n \"outline-none border-b border-table-border py-0 h-[20px]\",\n className,\n )}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n />\n );\n }\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"text-sm font-medium text-table-cell-text-primary cursor-text leading-sm h-[20px] inline-block\",\n className,\n )}\n onDoubleClick={() => setIsEditing(true)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setIsEditing(true);\n }\n }}\n aria-label={`Edit ${value}`}\n >\n {value}\n </span>\n );\n};\nEditableCell.displayName = \"EditableCell\";\n\n/* ── RowActions ────────────────────────────────────────────────────────────── */\n\nexport interface RowActionsProps {\n children: React.ReactNode;\n className?: string;\n}\n\nconst RowActions: React.FC<RowActionsProps> = ({ children, className }) => (\n <div\n className={cn(\n \"flex items-center gap-xs opacity-0 transition-opacity\",\n \"group-hover/row:opacity-100\",\n className,\n )}\n >\n {children}\n </div>\n);\nRowActions.displayName = \"RowActions\";\n\n/* ── Exports ───────────────────────────────────────────────────────────────── */\n\nexport {\n AvatarCell,\n StatusCell,\n NumberCell,\n DateCell,\n EmailCell,\n LinkCell,\n TextCell,\n ButtonCell,\n EditableCell,\n RowActions,\n};\n","import * as React from \"react\";\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n type RowSelectionState,\n type ColumnOrderState,\n type ColumnPinningState,\n type ColumnSizingState,\n type PaginationState,\n type OnChangeFn,\n type Table as TanstackTable,\n type Header,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n horizontalListSortingStrategy,\n useSortable,\n arrayMove,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport {\n Icon,\n faChevronLeftOutline,\n faChevronRightOutline,\n faSortSolid,\n faSortUpSolid,\n faSortDownSolid,\n faFilterSolid,\n faFilterOutline,\n faGripDotsVerticalSolid,\n faEllipsisVerticalSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"./table\";\nimport { DataTableSettingsModal } from \"./data-table-settings-modal\";\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface DataTableProps<TData, TValue> {\n /** Column definitions — see TanStack Table docs */\n columns: ColumnDef<TData, TValue>[];\n /** Row data array */\n data: TData[];\n\n /** Enable client-side sorting */\n enableSorting?: boolean;\n /** Enable client-side column filtering */\n enableFiltering?: boolean;\n /** Enable client-side pagination */\n enablePagination?: boolean;\n /** Enable row selection via checkbox */\n enableRowSelection?: boolean;\n /** Enable column visibility toggling */\n enableColumnVisibility?: boolean;\n /** Enable column pinning */\n enableColumnPinning?: boolean;\n /** Enable column resizing */\n enableColumnResizing?: boolean;\n /** Enable column drag reordering */\n enableColumnDrag?: boolean;\n /**\n * Render a sticky-right \"Manage table\" button in the header row that opens\n * a modal letting the user toggle column visibility. Reads/writes the\n * controlled `columnVisibility` + `onColumnVisibilityChange` props.\n *\n * Implies `enableColumnVisibility`.\n */\n enableTableSettings?: boolean;\n /**\n * Column IDs that cannot be hidden from the manage-table modal.\n * Defaults to columns with `enableHiding: false`, plus any column with id `select`.\n */\n lockedColumnIds?: string[];\n /** Override the manage-table modal title. Defaults to \"Manage table\". */\n tableSettingsTitle?: string;\n\n /** Controlled sorting state */\n sorting?: SortingState;\n onSortingChange?: OnChangeFn<SortingState>;\n\n /** Controlled column filters state */\n columnFilters?: ColumnFiltersState;\n onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>;\n\n /** Controlled pagination state */\n pagination?: PaginationState;\n onPaginationChange?: OnChangeFn<PaginationState>;\n\n /** Controlled row selection state */\n rowSelection?: RowSelectionState;\n onRowSelectionChange?: OnChangeFn<RowSelectionState>;\n\n /** Controlled column visibility state */\n columnVisibility?: VisibilityState;\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>;\n\n /** Controlled column order state */\n columnOrder?: ColumnOrderState;\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>;\n\n /** Controlled column pinning state */\n columnPinning?: ColumnPinningState;\n onColumnPinningChange?: OnChangeFn<ColumnPinningState>;\n\n /** Render prop to access the table instance for external controls */\n children?: (table: TanstackTable<TData>) => React.ReactNode;\n\n /** className for the table wrapper */\n className?: string;\n\n /** Custom empty state (renders inside a full-width cell) */\n emptyState?: React.ReactNode;\n\n /** Simple empty message string (fallback if emptyState not provided) */\n emptyMessage?: React.ReactNode;\n\n /** Add border-top to the header (useful in full-width / no container layouts) */\n bordered?: boolean;\n}\n\n/* ── Column meta augmentation ─────────────────────────────────────────────── */\n\ndeclare module \"@tanstack/react-table\" {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ColumnMeta<TData extends unknown, TValue> {\n icon?: IconDefinition;\n enableDrag?: boolean;\n filterType?: \"string\" | \"number\" | \"date\" | \"select\";\n filterOptions?: string[];\n }\n}\n\n/* ── Filter operators by type ─────────────────────────────────────────────── */\n\nexport type FilterOperator =\n | \"contains\"\n | \"does_not_contain\"\n | \"is\"\n | \"is_not\"\n | \"starts_with\"\n | \"ends_with\"\n | \"is_empty\"\n | \"is_not_empty\"\n | \"equals\"\n | \"not_equals\"\n | \"greater_than\"\n | \"less_than\"\n | \"greater_than_or_equal\"\n | \"less_than_or_equal\"\n | \"between\"\n | \"is_before\"\n | \"is_after\"\n | \"is_between\"\n | \"is_any_of\"\n | \"is_none_of\";\n\nconst filterOperatorsByType: Record<\n string,\n { value: FilterOperator; label: string }[]\n> = {\n string: [\n { value: \"contains\", label: \"Contains\" },\n { value: \"does_not_contain\", label: \"Does not contain\" },\n { value: \"is\", label: \"Is\" },\n { value: \"is_not\", label: \"Is not\" },\n { value: \"starts_with\", label: \"Starts with\" },\n { value: \"ends_with\", label: \"Ends with\" },\n { value: \"is_empty\", label: \"Is empty\" },\n { value: \"is_not_empty\", label: \"Is not empty\" },\n ],\n number: [\n { value: \"equals\", label: \"Equals\" },\n { value: \"not_equals\", label: \"Does not equal\" },\n { value: \"greater_than\", label: \"Greater than\" },\n { value: \"less_than\", label: \"Less than\" },\n { value: \"greater_than_or_equal\", label: \"Greater than or equal\" },\n { value: \"less_than_or_equal\", label: \"Less than or equal\" },\n { value: \"between\", label: \"Between\" },\n { value: \"is_empty\", label: \"Is empty\" },\n { value: \"is_not_empty\", label: \"Is not empty\" },\n ],\n date: [\n { value: \"is\", label: \"Is\" },\n { value: \"is_before\", label: \"Is before\" },\n { value: \"is_after\", label: \"Is after\" },\n { value: \"is_between\", label: \"Is between\" },\n { value: \"is_empty\", label: \"Is empty\" },\n { value: \"is_not_empty\", label: \"Is not empty\" },\n ],\n select: [\n { value: \"is\", label: \"Is\" },\n { value: \"is_not\", label: \"Is not\" },\n { value: \"is_any_of\", label: \"Is any of\" },\n { value: \"is_none_of\", label: \"Is none of\" },\n ],\n};\n\nconst noValueOperators = new Set<FilterOperator>([\n \"is_empty\",\n \"is_not_empty\",\n]);\n\n/* ── ColumnFilterPopover ──────────────────────────────────────────────────── */\n\nfunction ColumnFilterPopover({\n filterType = \"string\",\n filterValue,\n onApply,\n onClear,\n children,\n}: {\n filterType?: \"string\" | \"number\" | \"date\" | \"select\";\n filterValue: unknown;\n onApply: (value: { operator: FilterOperator; value: string }) => void;\n onClear: () => void;\n children: React.ReactNode;\n}) {\n const operators =\n filterOperatorsByType[filterType] ?? filterOperatorsByType.string;\n const [operator, setOperator] = React.useState<FilterOperator>(\n operators[0].value,\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n if (open && filterValue && typeof filterValue === \"object\") {\n const fv = filterValue as { operator?: FilterOperator; value?: string };\n if (fv.operator) setOperator(fv.operator);\n if (fv.value) setInputValue(fv.value);\n } else if (open && !filterValue) {\n setOperator(operators[0].value);\n setInputValue(\"\");\n }\n }, [open, filterValue, operators]);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className={cn(\n \"z-50 w-[240px] rounded-lg border border-table-border bg-table-bg p-lg shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex flex-col gap-sm\">\n <span className=\"text-xs font-medium text-table-head-text\">\n Filter\n </span>\n <select\n className={cn(\n \"h-8 w-full rounded-base border border-table-border bg-table-bg\",\n \"px-sm text-xs text-table-cell-text-primary\",\n \"cursor-pointer outline-none\",\n )}\n value={operator}\n onChange={(e) => setOperator(e.target.value as FilterOperator)}\n >\n {operators.map((op) => (\n <option key={op.value} value={op.value}>\n {op.label}\n </option>\n ))}\n </select>\n {!noValueOperators.has(operator) && (\n <input\n type={\n filterType === \"number\"\n ? \"number\"\n : filterType === \"date\"\n ? \"date\"\n : \"text\"\n }\n placeholder=\"Value...\"\n className={cn(\n \"h-8 w-full rounded-base border border-table-border bg-table-bg\",\n \"px-sm text-xs text-table-cell-text-primary\",\n \"outline-none placeholder:text-table-cell-text-secondary\",\n )}\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n onApply({ operator, value: inputValue });\n setOpen(false);\n }\n }}\n />\n )}\n <div className=\"flex items-center justify-end gap-xs pt-xs\">\n <Button\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n onClick={() => {\n onClear();\n setOpen(false);\n }}\n >\n Clear\n </Button>\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size=\"sm\"\n onClick={() => {\n onApply({ operator, value: inputValue });\n setOpen(false);\n }}\n >\n Apply\n </Button>\n </div>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\n/* ── Draggable header cell ────────────────────────────────────────────────── */\n\nfunction DraggableHeaderCell<TData>({\n header,\n enableSorting,\n enableFiltering,\n enableColumnResizing,\n isDragEnabled,\n}: {\n header: Header<TData, unknown>;\n enableSorting?: boolean;\n enableFiltering?: boolean;\n enableColumnResizing?: boolean;\n isDragEnabled?: boolean;\n}) {\n const meta = header.column.columnDef.meta;\n const canSort = enableSorting && header.column.getCanSort();\n const isSorted = header.column.getIsSorted();\n const isFiltered = header.column.getIsFiltered();\n const leadingIcon = meta?.icon;\n const canDrag = isDragEnabled && meta?.enableDrag !== false;\n const filterType = meta?.filterType ?? \"string\";\n const [isHovered, setIsHovered] = React.useState(false);\n\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id: header.column.id,\n disabled: !canDrag,\n });\n\n const style: React.CSSProperties = {\n width: enableColumnResizing ? header.getSize() : undefined,\n minWidth: enableColumnResizing\n ? header.column.columnDef.minSize\n : undefined,\n maxWidth: enableColumnResizing\n ? header.column.columnDef.maxSize\n : undefined,\n position: \"relative\",\n transform: CSS.Translate.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n zIndex: isDragging ? 1 : undefined,\n };\n\n return (\n <TableHead\n ref={setNodeRef}\n colSpan={header.colSpan}\n style={style}\n className={cn(\n canSort && \"cursor-pointer select-none\",\n enableColumnResizing && \"relative\",\n )}\n onClick={canSort ? header.column.getToggleSortingHandler() : undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div className=\"flex items-center gap-xs\">\n {/* Leading: icon by default, drag handle on hover */}\n {leadingIcon && (\n canDrag ? (\n <div\n {...attributes}\n {...listeners}\n className=\"shrink-0 flex items-center cursor-grab\"\n onClick={(e) => e.stopPropagation()}\n >\n <Icon\n icon={isHovered ? faGripDotsVerticalSolid : leadingIcon}\n size=\"xs\"\n className=\"text-table-head-icon\"\n />\n </div>\n ) : (\n <Icon\n icon={leadingIcon}\n size=\"xs\"\n className=\"shrink-0 text-table-head-icon\"\n />\n )\n )}\n {!leadingIcon && canDrag && isHovered && (\n <div\n {...attributes}\n {...listeners}\n className=\"shrink-0 flex items-center cursor-grab\"\n onClick={(e) => e.stopPropagation()}\n >\n <Icon\n icon={faGripDotsVerticalSolid}\n size=\"xs\"\n className=\"text-table-head-icon\"\n />\n </div>\n )}\n\n {/* Label — fills remaining space */}\n <span className=\"flex-1 truncate\">\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </span>\n\n {/* Sort icon — visible on hover or when active */}\n {canSort && (isSorted || isHovered) && (\n <Icon\n icon={\n isSorted === \"asc\"\n ? faSortUpSolid\n : isSorted === \"desc\"\n ? faSortDownSolid\n : faSortSolid\n }\n size=\"xs\"\n className=\"shrink-0 text-table-head-icon\"\n />\n )}\n\n {/* Filter popover — visible on hover or when filtered */}\n {enableFiltering && (isFiltered || isHovered) && (\n <ColumnFilterPopover\n filterType={filterType}\n filterValue={header.column.getFilterValue()}\n onApply={(val) => header.column.setFilterValue(val)}\n onClear={() => header.column.setFilterValue(undefined)}\n >\n <button\n type=\"button\"\n onClick={(e) => e.stopPropagation()}\n className=\"shrink-0 p-0 border-0 bg-transparent cursor-pointer\"\n >\n <Icon\n icon={isFiltered ? faFilterSolid : faFilterOutline}\n size=\"xs\"\n className=\"text-table-head-icon\"\n />\n </button>\n </ColumnFilterPopover>\n )}\n </div>\n\n {/* Resize handle */}\n {enableColumnResizing && header.column.getCanResize() && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onDoubleClick={() => header.column.resetSize()}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"absolute right-0 top-0 h-full w-[4px] cursor-col-resize select-none touch-none\",\n \"hover:bg-table-head-text/20\",\n header.column.getIsResizing() && \"bg-table-head-text/30\",\n )}\n />\n )}\n </TableHead>\n );\n}\n\n/* ── Custom filter function ───────────────────────────────────────────────── */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction operatorFilterFn(\n row: any,\n columnId: string,\n filterValue: any,\n): boolean {\n if (typeof filterValue === \"string\") {\n const cellValue = String(row.getValue(columnId) ?? \"\").toLowerCase();\n return cellValue.includes(filterValue.toLowerCase());\n }\n\n if (!filterValue || typeof filterValue !== \"object\") return true;\n\n const { operator, value } = filterValue as {\n operator: FilterOperator;\n value: string;\n };\n const cellValue = row.getValue(columnId);\n const cellStr = String(cellValue ?? \"\").toLowerCase();\n const filterStr = (value ?? \"\").toLowerCase();\n\n switch (operator) {\n case \"contains\":\n return cellStr.includes(filterStr);\n case \"does_not_contain\":\n return !cellStr.includes(filterStr);\n case \"is\":\n case \"equals\":\n return cellStr === filterStr;\n case \"is_not\":\n case \"not_equals\":\n return cellStr !== filterStr;\n case \"starts_with\":\n return cellStr.startsWith(filterStr);\n case \"ends_with\":\n return cellStr.endsWith(filterStr);\n case \"is_empty\":\n return cellStr === \"\";\n case \"is_not_empty\":\n return cellStr !== \"\";\n case \"greater_than\":\n return Number(cellValue) > Number(value);\n case \"less_than\":\n return Number(cellValue) < Number(value);\n case \"greater_than_or_equal\":\n return Number(cellValue) >= Number(value);\n case \"less_than_or_equal\":\n return Number(cellValue) <= Number(value);\n case \"is_before\": {\n const d = new Date(String(cellValue));\n return d < new Date(value);\n }\n case \"is_after\": {\n const d = new Date(String(cellValue));\n return d > new Date(value);\n }\n case \"between\": {\n const parts = value.split(\",\").map((s) => Number(s.trim()));\n if (parts.length !== 2) return true;\n const num = Number(cellValue);\n return num >= parts[0] && num <= parts[1];\n }\n case \"is_between\": {\n const parts = value.split(\",\").map((s) => s.trim());\n if (parts.length !== 2) return true;\n const d = new Date(String(cellValue));\n return d >= new Date(parts[0]) && d <= new Date(parts[1]);\n }\n case \"is_any_of\": {\n const options = value.split(\",\").map((s) => s.trim().toLowerCase());\n return options.includes(cellStr);\n }\n case \"is_none_of\": {\n const options = value.split(\",\").map((s) => s.trim().toLowerCase());\n return !options.includes(cellStr);\n }\n default:\n return true;\n }\n}\n\n/* ── DataTable ─────────────────────────────────────────────────────────────── */\n\nfunction DataTableInner<TData, TValue>({\n columns,\n data,\n enableSorting = false,\n enableFiltering = false,\n enablePagination = false,\n enableRowSelection = false,\n enableColumnVisibility = false,\n enableColumnPinning = false,\n enableColumnResizing = false,\n enableColumnDrag = false,\n enableTableSettings = false,\n lockedColumnIds,\n tableSettingsTitle,\n sorting: sortingProp,\n onSortingChange,\n columnFilters: columnFiltersProp,\n onColumnFiltersChange,\n pagination: paginationProp,\n onPaginationChange,\n rowSelection: rowSelectionProp,\n onRowSelectionChange,\n columnVisibility: columnVisibilityProp,\n onColumnVisibilityChange,\n columnOrder: columnOrderProp,\n onColumnOrderChange,\n columnPinning: columnPinningProp,\n onColumnPinningChange,\n children,\n className,\n emptyState,\n emptyMessage = \"No results.\",\n bordered = false,\n}: DataTableProps<TData, TValue>) {\n // enableTableSettings implies enableColumnVisibility — the modal needs the\n // controlled visibility map to be in sync with the table state.\n const effectiveColumnVisibility =\n enableColumnVisibility || enableTableSettings;\n\n // Modal state for the manage-table button (only used when enabled).\n const [tableSettingsOpen, setTableSettingsOpen] = React.useState(false);\n\n // Internal state (used when not controlled)\n const [internalSorting, setInternalSorting] =\n React.useState<SortingState>([]);\n const [internalColumnFilters, setInternalColumnFilters] =\n React.useState<ColumnFiltersState>([]);\n const [internalPagination, setInternalPagination] =\n React.useState<PaginationState>({ pageIndex: 0, pageSize: 10 });\n const [internalRowSelection, setInternalRowSelection] =\n React.useState<RowSelectionState>({});\n const [internalColumnVisibility, setInternalColumnVisibility] =\n React.useState<VisibilityState>({});\n const [internalColumnOrder, setInternalColumnOrder] =\n React.useState<ColumnOrderState>([]);\n const [internalColumnPinning, setInternalColumnPinning] =\n React.useState<ColumnPinningState>({});\n const [internalColumnSizing, setInternalColumnSizing] =\n React.useState<ColumnSizingState>({});\n\n // Derive column order: controlled > internal > default from column defs\n const columnOrder =\n columnOrderProp ?? internalColumnOrder;\n const setColumnOrder = onColumnOrderChange ?? setInternalColumnOrder;\n\n // Initialize column order from column defs if empty\n React.useEffect(() => {\n if (enableColumnDrag && columnOrder.length === 0) {\n const ids = columns.map((c) => {\n if (\"accessorKey\" in c && c.accessorKey) return String(c.accessorKey);\n if (\"id\" in c && c.id) return c.id;\n return \"\";\n }).filter(Boolean);\n setColumnOrder(ids);\n }\n }, [enableColumnDrag, columnOrder.length, columns, setColumnOrder]);\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n ...(enableSorting && {\n enableSorting: true,\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: onSortingChange ?? setInternalSorting,\n }),\n\n // Filtering\n ...(enableFiltering && {\n enableColumnFilters: true,\n getFilteredRowModel: getFilteredRowModel(),\n onColumnFiltersChange:\n onColumnFiltersChange ?? setInternalColumnFilters,\n filterFns: {\n operator: operatorFilterFn,\n },\n globalFilterFn: operatorFilterFn,\n }),\n defaultColumn: {\n filterFn: operatorFilterFn,\n },\n\n // Pagination\n ...(enablePagination && {\n getPaginationRowModel: getPaginationRowModel(),\n onPaginationChange: onPaginationChange ?? setInternalPagination,\n }),\n\n // Row selection\n ...(enableRowSelection && {\n enableRowSelection: true,\n onRowSelectionChange:\n onRowSelectionChange ?? setInternalRowSelection,\n }),\n\n // Column visibility\n ...(effectiveColumnVisibility && {\n onColumnVisibilityChange:\n onColumnVisibilityChange ?? setInternalColumnVisibility,\n }),\n\n // Column order (always wire up for drag reorder)\n onColumnOrderChange: setColumnOrder,\n\n // Column pinning\n ...(enableColumnPinning && {\n enableColumnPinning: true,\n onColumnPinningChange:\n onColumnPinningChange ?? setInternalColumnPinning,\n }),\n\n // Column resizing\n ...(enableColumnResizing && {\n enableColumnResizing: true,\n columnResizeMode: \"onChange\" as const,\n onColumnSizingChange: setInternalColumnSizing,\n }),\n\n state: {\n ...(enableSorting && {\n sorting: sortingProp ?? internalSorting,\n }),\n ...(enableFiltering && {\n columnFilters: columnFiltersProp ?? internalColumnFilters,\n }),\n ...(enablePagination && {\n pagination: paginationProp ?? internalPagination,\n }),\n ...(enableRowSelection && {\n rowSelection: rowSelectionProp ?? internalRowSelection,\n }),\n ...(effectiveColumnVisibility && {\n columnVisibility: columnVisibilityProp ?? internalColumnVisibility,\n }),\n columnOrder,\n ...(enableColumnPinning && {\n columnPinning: columnPinningProp ?? internalColumnPinning,\n }),\n ...(enableColumnResizing && {\n columnSizing: internalColumnSizing,\n }),\n },\n });\n\n // dnd-kit sensors — activate after 5px movement to avoid conflicts with clicks\n const sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: { distance: 5 },\n }),\n useSensor(TouchSensor, {\n activationConstraint: { delay: 150, tolerance: 5 },\n }),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const currentOrder = table.getState().columnOrder;\n const ids =\n currentOrder.length > 0\n ? currentOrder\n : table.getAllLeafColumns().map((c) => c.id);\n\n const oldIndex = ids.indexOf(String(active.id));\n const newIndex = ids.indexOf(String(over.id));\n if (oldIndex === -1 || newIndex === -1) return;\n\n const newOrder = arrayMove(ids, oldIndex, newIndex);\n setColumnOrder(newOrder);\n },\n [table, setColumnOrder],\n );\n\n // Column IDs for sortable context\n const columnIds = React.useMemo(\n () => table.getAllLeafColumns().map((c) => c.id),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [table.getAllLeafColumns().length, columnOrder],\n );\n\n // CSS variables for column sizing (performance: avoids inline style recalc per cell)\n const columnSizeVars = React.useMemo(() => {\n if (!enableColumnResizing) return {};\n const headers = table.getFlatHeaders();\n const vars: Record<string, string> = {};\n for (const header of headers) {\n vars[`--header-${header.id}-size`] = `${header.getSize()}px`;\n vars[`--col-${header.column.id}-size`] = `${header.column.getSize()}px`;\n }\n return vars;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enableColumnResizing, table.getState().columnSizing]);\n\n // Total table width for column resizing — allows horizontal overflow\n const totalSize = enableColumnResizing\n ? table.getTotalSize()\n : undefined;\n\n const tableContent = (\n <div className={cn(\"w-full\", className)} style={columnSizeVars as React.CSSProperties}>\n <Table\n style={totalSize ? { width: totalSize, tableLayout: \"fixed\" } : undefined}\n className={totalSize ? \"w-auto\" : undefined}\n >\n <TableHeader\n className={cn(bordered && \"border-t border-table-border\")}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {enableColumnDrag ? (\n <SortableContext\n items={columnIds}\n strategy={horizontalListSortingStrategy}\n >\n {headerGroup.headers.map((header) => (\n <DraggableHeaderCell\n key={header.id}\n header={header}\n enableSorting={enableSorting}\n enableFiltering={enableFiltering}\n enableColumnResizing={enableColumnResizing}\n isDragEnabled={enableColumnDrag}\n />\n ))}\n </SortableContext>\n ) : (\n headerGroup.headers.map((header) => (\n <DraggableHeaderCell\n key={header.id}\n header={header}\n enableSorting={enableSorting}\n enableFiltering={enableFiltering}\n enableColumnResizing={enableColumnResizing}\n isDragEnabled={false}\n />\n ))\n )}\n {enableTableSettings && (\n <th\n role=\"button\"\n aria-label={tableSettingsTitle ?? \"Manage table\"}\n onClick={() => setTableSettingsOpen(true)}\n className={cn(\n \"sticky right-0 z-[4] w-10 min-w-10 p-0 cursor-pointer\",\n \"bg-table-head-bg-default border-b border-l border-table-border\",\n \"text-table-head-icon\",\n \"opacity-0 pointer-events-none\",\n \"transition-[opacity,color,background-color] duration-150\",\n \"group-hover/row:opacity-100 group-hover/row:pointer-events-auto\",\n \"hover:bg-table-head-bg-hover hover:text-table-cell-text-primary\",\n )}\n >\n <span className=\"flex items-center justify-center h-full\">\n <Icon icon={faEllipsisVerticalSolid} size=\"xs\" />\n </span>\n </th>\n )}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={\n enableColumnResizing\n ? { width: `var(--col-${cell.column.id}-size)` }\n : undefined\n }\n className={cn(enableColumnResizing && \"truncate\")}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell\n colSpan={columns.length}\n className=\"h-48 text-center border-b-0\"\n >\n {emptyState ?? (\n <span className=\"text-sm text-table-cell-text-secondary\">\n {emptyMessage}\n </span>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n {children?.(table)}\n {enableTableSettings && (\n <DataTableSettingsModal\n open={tableSettingsOpen}\n onOpenChange={setTableSettingsOpen}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns={columns as ColumnDef<any, any>[]}\n columnVisibility={columnVisibilityProp ?? internalColumnVisibility}\n onApply={(next) => {\n const apply =\n onColumnVisibilityChange ?? setInternalColumnVisibility;\n apply(next as VisibilityState);\n }}\n lockedColumnIds={lockedColumnIds}\n title={tableSettingsTitle}\n />\n )}\n </div>\n );\n\n if (enableColumnDrag) {\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n {tableContent}\n </DndContext>\n );\n }\n\n return tableContent;\n}\n\n/* ── DataTablePagination ──────────────────────────────────────────────────── */\n\nexport interface DataTablePaginationProps<TData> {\n table: TanstackTable<TData>;\n pageSizeOptions?: number[];\n className?: string;\n}\n\nfunction DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 20, 30, 50, 100],\n className,\n}: DataTablePaginationProps<TData>) {\n const selectedCount = table.getFilteredSelectedRowModel().rows.length;\n const totalCount = table.getFilteredRowModel().rows.length;\n const pageIndex = table.getState().pagination.pageIndex;\n const pageCount = table.getPageCount();\n\n return (\n <div\n className={cn(\n \"flex items-center justify-between px-xl py-lg\",\n className,\n )}\n >\n {/* Left: selection info */}\n <div className=\"text-xs text-table-cell-text-secondary\">\n {selectedCount > 0 && (\n <span>\n {selectedCount} of {totalCount} row(s) selected\n </span>\n )}\n </div>\n\n {/* Right: page size + navigation */}\n <div className=\"flex items-center gap-xl\">\n {/* Rows per page */}\n <div className=\"flex items-center gap-sm\">\n <span className=\"text-xs text-table-cell-text-secondary whitespace-nowrap\">\n Rows per page\n </span>\n <select\n className={cn(\n \"h-8 rounded-base border border-table-border bg-table-bg\",\n \"px-sm text-xs text-table-cell-text-primary\",\n \"cursor-pointer outline-none\",\n )}\n value={table.getState().pagination.pageSize}\n onChange={(e) => table.setPageSize(Number(e.target.value))}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n\n {/* Page indicator */}\n <span className=\"text-xs text-table-cell-text-secondary whitespace-nowrap\">\n Page {pageIndex + 1} of {pageCount}\n </span>\n\n {/* Navigation buttons */}\n <div className=\"flex items-center gap-xs\">\n <Button\n appearance=\"outlined\"\n intent=\"brand\"\n size=\"md\"\n leftIcon={faChevronLeftOutline}\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Previous page\"\n />\n <Button\n appearance=\"outlined\"\n intent=\"brand\"\n size=\"md\"\n leftIcon={faChevronRightOutline}\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Next page\"\n />\n </div>\n </div>\n </div>\n );\n}\n\n/* ── Exports ──────────────────────────────────────────────────────────────── */\n\nconst DataTable = Object.assign(DataTableInner, { displayName: \"DataTable\" });\nObject.assign(DataTablePagination, { displayName: \"DataTablePagination\" });\n\nexport { DataTable, DataTablePagination, flexRender };\nexport {\n DataTableSettingsModal,\n type DataTableSettingsModalProps,\n} from \"./data-table-settings-modal\";\nexport type {\n ColumnDef,\n SortingState,\n ColumnFiltersState,\n RowSelectionState,\n};\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Table ─────────────────────────────────────────────────────────────────── */\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom border-collapse text-sm\", className)}\n {...props}\n />\n </div>\n));\nTable.displayName = \"Table\";\n\n/* ── TableHeader ───────────────────────────────────────────────────────────── */\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn(\"bg-table-head-bg-default\", className)}\n {...props}\n />\n));\nTableHeader.displayName = \"TableHeader\";\n\n/* ── TableBody ─────────────────────────────────────────────────────────────── */\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"[&_tr:last-child_td]:border-b-0\", className)} {...props} />\n));\nTableBody.displayName = \"TableBody\";\n\n/* ── TableFooter ───────────────────────────────────────────────────────────── */\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t border-table-border bg-table-bg font-medium\",\n className,\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\n/* ── TableRow ──────────────────────────────────────────────────────────────── */\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"group/row border-b border-table-border bg-table-row-bg-default transition-colors\",\n \"hover:bg-table-row-bg-hover\",\n \"data-[state=selected]:bg-table-row-bg-selected\",\n className,\n )}\n {...props}\n />\n));\nTableRow.displayName = \"TableRow\";\n\n/* ── TableHead ─────────────────────────────────────────────────────────────── */\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"group/head h-10 px-lg py-lg text-left align-middle text-xs font-medium leading-xs\",\n \"text-table-head-text bg-table-head-bg-default\",\n \"hover:bg-table-head-bg-hover\",\n \"border-b border-r border-table-border last:border-r-0\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = \"TableHead\";\n\n/* ── TableCell ─────────────────────────────────────────────────────────────── */\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"px-lg py-lg align-middle text-sm font-medium max-h-[52px]\",\n \"text-table-cell-text-primary\",\n \"border-b border-r border-table-border last:border-r-0\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n));\nTableCell.displayName = \"TableCell\";\n\n/* ── TableCaption ──────────────────────────────────────────────────────────── */\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-lg text-sm text-table-cell-text-secondary\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\n/* ── Exports ───────────────────────────────────────────────────────────────── */\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableRow,\n TableHead,\n TableCell,\n TableCaption,\n};\n","import * as React from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport {\n Modal,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalBody,\n ModalFooter,\n ModalClose,\n} from \"./modal\";\nimport { Button } from \"./button\";\nimport { SearchBar } from \"./search-bar\";\nimport { Checkbox } from \"./checkbox\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyColumnDef = ColumnDef<any, any>;\n\nexport interface DataTableSettingsModalProps {\n /** Controlled open state */\n open: boolean;\n /** Open-state change handler */\n onOpenChange: (open: boolean) => void;\n /** All column definitions to expose for hide/show */\n columns: AnyColumnDef[];\n /** Current visibility map: `{ [columnId]: boolean }` */\n columnVisibility: Record<string, boolean>;\n /** Called when the user presses Apply with the next visibility map */\n onApply: (visibility: Record<string, boolean>) => void;\n /**\n * Column IDs the user cannot hide (filtered out of the list).\n * Defaults to columns whose `enableHiding` is `false`, plus any column with id `select`.\n */\n lockedColumnIds?: string[];\n /** Modal title — defaults to \"Manage table\" */\n title?: string;\n /** Optional class for the modal content */\n className?: string;\n}\n\n/* ── Helpers ───────────────────────────────────────────────────────────────── */\n\nfunction getColKey(col: AnyColumnDef): string {\n return col.id ?? (col as { accessorKey?: string }).accessorKey ?? \"\";\n}\n\nfunction getColLabel(col: AnyColumnDef): string {\n const h = col.header;\n if (typeof h === \"string\") return h;\n return getColKey(col);\n}\n\nfunction inferLockedIds(columns: AnyColumnDef[]): string[] {\n const ids: string[] = [\"select\"];\n for (const c of columns) {\n if (c.enableHiding === false) {\n const key = getColKey(c);\n if (key) ids.push(key);\n }\n }\n return ids;\n}\n\n/* ── DataTableSettingsModal ────────────────────────────────────────────────── */\n\nexport function DataTableSettingsModal({\n open,\n onOpenChange,\n columns,\n columnVisibility,\n onApply,\n lockedColumnIds,\n title = \"Manage table\",\n className,\n}: DataTableSettingsModalProps) {\n const [draft, setDraft] = React.useState(columnVisibility);\n const [search, setSearch] = React.useState(\"\");\n\n // Re-seed draft + clear search whenever the modal opens.\n const prevOpen = React.useRef(open);\n if (open && !prevOpen.current) {\n setDraft(columnVisibility);\n setSearch(\"\");\n }\n prevOpen.current = open;\n\n const lockedIds = React.useMemo(\n () => lockedColumnIds ?? inferLockedIds(columns),\n [lockedColumnIds, columns],\n );\n\n const editable = React.useMemo(\n () =>\n columns.filter((c) => {\n const key = getColKey(c);\n return key && !lockedIds.includes(key);\n }),\n [columns, lockedIds],\n );\n\n const filtered = React.useMemo(() => {\n if (!search) return editable;\n const q = search.toLowerCase();\n return editable.filter((c) => getColLabel(c).toLowerCase().includes(q));\n }, [editable, search]);\n\n const visibleCount = editable.filter(\n (c) => draft[getColKey(c)] !== false,\n ).length;\n const totalCount = editable.length;\n\n const toggle = (key: string) =>\n setDraft((p) => ({ ...p, [key]: p[key] === false ? true : false }));\n\n const showAll = () => {\n const next = { ...draft };\n for (const c of editable) next[getColKey(c)] = true;\n setDraft(next);\n };\n\n const hideAll = () => {\n const next = { ...draft };\n for (const c of editable) next[getColKey(c)] = false;\n setDraft(next);\n };\n\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size=\"sm\" className={className}>\n <ModalHeader onClose={() => onOpenChange(false)}>\n <ModalTitle>{title}</ModalTitle>\n </ModalHeader>\n <ModalBody>\n <div className=\"flex flex-col gap-lg\">\n <div className=\"flex items-center justify-between gap-base\">\n <span className=\"text-sm font-medium text-table-cell-text-secondary\">\n Columns {visibleCount} / {totalCount}\n </span>\n <div className=\"flex items-center gap-sm\">\n <button\n type=\"button\"\n onClick={showAll}\n className=\"text-xs font-medium text-link-brand-text-default hover:text-link-brand-text-hover hover:underline cursor-pointer bg-transparent border-0 p-0\"\n >\n Show all\n </button>\n <span className=\"text-xs text-table-cell-text-secondary\">·</span>\n <button\n type=\"button\"\n onClick={hideAll}\n className=\"text-xs font-medium text-link-brand-text-default hover:text-link-brand-text-hover hover:underline cursor-pointer bg-transparent border-0 p-0\"\n >\n Hide all\n </button>\n </div>\n </div>\n\n <SearchBar\n size=\"sm\"\n placeholder=\"Search columns\"\n value={search}\n onChange={(e) =>\n setSearch((e.target as HTMLInputElement).value)\n }\n onClear={() => setSearch(\"\")}\n />\n\n <div\n className={cn(\n \"flex flex-col max-h-[360px] overflow-auto rounded-base\",\n \"border border-table-border\",\n )}\n >\n {filtered.length === 0 ? (\n <div className=\"py-lg text-center text-sm text-table-cell-text-secondary\">\n No columns found\n </div>\n ) : (\n filtered.map((c) => {\n const key = getColKey(c);\n const label = getColLabel(c);\n const checked = draft[key] !== false;\n return (\n <label\n key={key}\n className={cn(\n \"flex items-center gap-base px-base py-sm cursor-pointer\",\n \"border-b border-table-border last:border-b-0\",\n \"hover:bg-table-row-bg-hover transition-colors\",\n )}\n >\n <Checkbox\n checked={checked}\n onCheckedChange={() => toggle(key)}\n />\n <span className=\"text-sm text-table-cell-text-primary\">\n {label}\n </span>\n </label>\n );\n })\n )}\n </div>\n </div>\n </ModalBody>\n <ModalFooter>\n <ModalClose asChild>\n <Button appearance=\"ghost\" intent=\"brand\" size=\"md\">\n Cancel\n </Button>\n </ModalClose>\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size=\"md\"\n onClick={() => {\n onApply(draft);\n onOpenChange(false);\n }}\n >\n Apply\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n );\n}\n\nDataTableSettingsModal.displayName = \"DataTableSettingsModal\";\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cn } from \"../../lib/utils\";\nimport { ModalOverlay } from \"./modal\";\n\n// ── SidePanel (Root) ─────────────────────────────────────────────────────────\n\nconst SidePanel = DialogPrimitive.Root;\n\n// ── SidePanelTrigger ─────────────────────────────────────────────────────────\n\nconst SidePanelTrigger = DialogPrimitive.Trigger;\n\n// ── SidePanelClose ───────────────────────────────────────────────────────────\n\nconst SidePanelClose = DialogPrimitive.Close;\n\n// ── SidePanelContent ─────────────────────────────────────────────────────────\n\ninterface SidePanelContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Whether to show the overlay behind the panel. Defaults to true. */\n overlay?: boolean;\n}\n\nconst SidePanelContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n SidePanelContentProps\n>(({ className, overlay = true, children, ...props }, ref) => (\n <DialogPrimitive.Portal>\n {overlay && <ModalOverlay />}\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-y-0 right-0 z-50\",\n \"flex flex-col\",\n \"min-w-[500px] w-[500px]\",\n \"bg-modal-bg border-l border-modal-border shadow-lg\",\n \"outline-none\",\n \"data-[state=open]:animate-sidepanel-in data-[state=closed]:animate-sidepanel-out\",\n className,\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n));\nSidePanelContent.displayName = \"SidePanelContent\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n SidePanel,\n SidePanelTrigger,\n SidePanelClose,\n SidePanelContent,\n type SidePanelContentProps,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { TruncatedText } from \"../truncated-text\";\n\n// ── Segment variants ────────────────────────────────────────────────────────\n\nconst filterChipSegmentVariants = cva(\n [\"flex items-center shrink-0 transition-colors\"],\n {\n variants: {\n type: {\n property: \"gap-xs px-base py-sm\",\n operator: \"gap-0 px-base py-sm\",\n value: \"gap-xs px-base py-sm\",\n placeholder: \"gap-0 px-base py-sm\",\n button: \"gap-0 p-0\",\n },\n hasBorder: {\n true: \"border-r border-filter-chip-segment-border\",\n false: \"\",\n },\n },\n defaultVariants: {\n type: \"property\",\n hasBorder: false,\n },\n },\n);\n\n// ── FilterChipSegment ───────────────────────────────────────────────────────\n\nexport interface FilterChipSegmentProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"type\">,\n VariantProps<typeof filterChipSegmentVariants> {\n /** Segment type determines content layout and text styling. */\n segmentType?: \"property\" | \"operator\" | \"value\" | \"placeholder\" | \"button\";\n /** Icon definition for Property segments. */\n icon?: IconDefinition;\n /** Text label for the segment. */\n label?: string;\n /** Optional badge count (shown on Value segments). */\n badgeCount?: number;\n /** Custom content slot (e.g., avatar in Value segment). */\n adornment?: React.ReactNode;\n /** Called when the kebab button is clicked (Button segment). */\n onKebabClick?: (e: React.MouseEvent) => void;\n}\n\n// ── Truncated label with overflow tooltip ──────────────────────────────────\n//\n// Thin wrapper around the shared TruncatedText helper that adds the\n// per-segment `max-w-[160px]` constraint when the `truncate` flag is set.\n\nfunction TruncatedLabel({\n label,\n truncate,\n className,\n}: {\n label: string;\n truncate: boolean;\n className?: string;\n}) {\n if (!truncate) return <span className={className}>{label}</span>;\n return (\n <TruncatedText className={cn(className, \"max-w-[160px]\")}>\n {label}\n </TruncatedText>\n );\n}\n\n// ── FilterChipSegment ───────────────────────────────────────────────────────\n\nconst FilterChipSegment = React.forwardRef<\n HTMLDivElement,\n FilterChipSegmentProps\n>(\n (\n {\n className,\n segmentType = \"property\",\n hasBorder,\n icon,\n label,\n badgeCount,\n adornment,\n onKebabClick,\n children,\n ...props\n },\n ref,\n ) => {\n if (segmentType === \"button\") {\n return (\n <div\n ref={ref}\n className={cn(filterChipSegmentVariants({ type: \"button\", hasBorder: false }), className)}\n {...props}\n >\n <button\n type=\"button\"\n onClick={onKebabClick}\n className=\"flex items-center justify-center p-sm cursor-pointer hover:bg-filter-chip-segment-bg-hover active:bg-filter-chip-segment-bg-pressed transition-colors\"\n aria-label=\"Filter actions\"\n >\n <span className=\"size-5 flex items-center justify-center text-sm leading-sm text-filter-chip-kebab-text\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <circle cx=\"10\" cy=\"4.5\" r=\"1.5\" />\n <circle cx=\"10\" cy=\"10\" r=\"1.5\" />\n <circle cx=\"10\" cy=\"15.5\" r=\"1.5\" />\n </svg>\n </span>\n </button>\n {children}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n filterChipSegmentVariants({ type: segmentType, hasBorder }),\n \"cursor-pointer hover:bg-filter-chip-segment-bg-hover active:bg-filter-chip-segment-bg-pressed\",\n className,\n )}\n {...props}\n >\n {/* Slot (avatar, custom icon — Value type) */}\n {adornment && segmentType === \"value\" && (\n <span className=\"shrink-0 inline-flex items-center justify-center leading-none\">\n {adornment}\n </span>\n )}\n\n {/* Property icon */}\n {icon && segmentType === \"property\" && (\n <Icon\n icon={icon}\n size=\"sm\"\n className=\"shrink-0 text-filter-chip-segment-icon\"\n />\n )}\n\n {/* Label */}\n {label && (\n <TruncatedLabel\n label={label}\n truncate={segmentType === \"value\"}\n className={cn(\n \"text-sm font-medium leading-sm whitespace-nowrap\",\n segmentType === \"placeholder\"\n ? \"text-filter-chip-segment-placeholder\"\n : \"text-filter-chip-segment-text\",\n )}\n />\n )}\n\n {/* Badge count */}\n {badgeCount != null && badgeCount > 0 && (\n <span className=\"flex items-center gap-2xs p-2xs rounded-xs bg-filter-chip-badge-bg\">\n <span className=\"text-[10px] font-medium leading-2xs text-filter-chip-badge-text\">\n {badgeCount}\n </span>\n </span>\n )}\n\n {children}\n </div>\n );\n },\n);\nFilterChipSegment.displayName = \"FilterChipSegment\";\n\nexport { FilterChipSegment, filterChipSegmentVariants };\n","import * as React from \"react\";\nimport type { IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { FilterChipSegment } from \"./filter-chip-segment\";\n\n// ── FilterChip ──────────────────────────────────────────────────────────────\n\nexport interface FilterChipProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Icon for the property segment. */\n icon?: IconDefinition;\n /** Property label. */\n property: string;\n /** Operator label (e.g., \"Contains\"). Omit for incomplete chips. */\n operator?: string;\n /** Value label. Omit if the filter has no value yet. */\n value?: string;\n /** Optional badge count on the value segment (e.g., multi-select count). */\n badgeCount?: number;\n /** Optional adornment in the value segment (e.g., avatar). */\n valueAdornment?: React.ReactNode;\n /** Called when the property segment is clicked. */\n onPropertyClick?: () => void;\n /** Called when the operator segment is clicked. */\n onOperatorClick?: () => void;\n /** Called when the value segment is clicked. */\n onValueClick?: () => void;\n /** Called when the kebab button is clicked. */\n onKebabClick?: (e: React.MouseEvent) => void;\n}\n\nconst FilterChip = React.forwardRef<HTMLDivElement, FilterChipProps>(\n (\n {\n className,\n icon,\n property,\n operator,\n value,\n badgeCount,\n valueAdornment,\n onPropertyClick,\n onOperatorClick,\n onValueClick,\n onKebabClick,\n ...props\n },\n ref,\n ) => {\n const hasOperator = !!operator;\n const hasValue = hasOperator && value != null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center overflow-clip\",\n \"bg-filter-chip-bg border border-filter-chip-border rounded-md shadow-sm\",\n className,\n )}\n {...props}\n >\n {/* Property segment — always visible */}\n <FilterChipSegment\n segmentType=\"property\"\n hasBorder\n icon={icon}\n label={property}\n onClick={onPropertyClick}\n />\n\n {/* Operator or placeholder */}\n <FilterChipSegment\n segmentType={hasOperator ? \"operator\" : \"placeholder\"}\n hasBorder\n label={hasOperator ? operator : \"Select condition\"}\n onClick={onOperatorClick}\n />\n\n {/* Value, placeholder, or hidden */}\n {hasOperator && (\n <FilterChipSegment\n segmentType={hasValue ? \"value\" : \"placeholder\"}\n hasBorder\n label={hasValue ? value : \"Select condition\"}\n adornment={valueAdornment}\n badgeCount={badgeCount}\n onClick={onValueClick}\n />\n )}\n\n {/* Kebab button — only when operator is set */}\n {hasOperator && (\n <FilterChipSegment\n segmentType=\"button\"\n onKebabClick={onKebabClick}\n />\n )}\n </div>\n );\n },\n);\nFilterChip.displayName = \"FilterChip\";\n\nexport { FilterChip };\n","import type {\n DataType,\n OperatorType,\n FilterCondition,\n FilterGroup,\n FilterNode,\n FilterValue,\n EnumOption,\n EnumOptionIntent,\n} from \"./types\";\n\n// ── Enum option helpers ────────────────────────────────────────────────────\n\nexport interface ResolvedEnumOption {\n value: string;\n label: string;\n icon?: import(\"@l3mpire/icons\").IconDefinition;\n intent?: EnumOptionIntent;\n}\n\n/**\n * Normalize an `EnumOption` (string or object form) to a `ResolvedEnumOption`\n * with a guaranteed label.\n */\nexport function resolveEnumOption(opt: EnumOption): ResolvedEnumOption {\n if (typeof opt === \"string\") return { value: opt, label: opt };\n return {\n value: opt.value,\n label: opt.label ?? opt.value,\n icon: opt.icon,\n intent: opt.intent,\n };\n}\n\n/** Find the resolved option matching a raw filter value. */\nexport function findEnumOption(\n value: string,\n options?: EnumOption[],\n): ResolvedEnumOption | undefined {\n if (!options) return undefined;\n for (const opt of options) {\n const r = resolveEnumOption(opt);\n if (r.value === value) return r;\n }\n return undefined;\n}\n\nexport const OPERATORS_BY_TYPE: Record<DataType, OperatorType[]> = {\n text: [\n \"contains\", \"does not contain\", \"is\", \"is not\",\n \"starts with\", \"ends with\", \"is empty\", \"is not empty\",\n ],\n number: [\"=\", \"≠\", \">\", \"<\", \"≥\", \"≤\", \"is between\", \"is empty\", \"is not empty\"],\n date: [\n \"is\", \"is before\", \"is after\", \"is on or before\", \"is on or after\",\n \"is between\", \"is empty\", \"is not empty\",\n ],\n enum: [\"is\", \"is not\", \"is any of\", \"is none of\", \"is empty\", \"is not empty\"],\n tags: [\n \"contains\", \"does not contain\", \"contains any of\", \"contains all of\",\n \"is empty\", \"is not empty\",\n ],\n boolean: [\"is true\", \"is false\"],\n relation: [\"is\", \"is not\", \"is any of\", \"is none of\", \"is empty\", \"is not empty\"],\n};\n\nexport const DEFAULT_OPERATOR_BY_TYPE: Record<DataType, OperatorType> = {\n text: \"contains\",\n number: \"=\",\n date: \"is between\",\n enum: \"is any of\",\n tags: \"contains\",\n boolean: \"is true\",\n relation: \"is\",\n};\n\nexport function isNoValueOperator(operator: OperatorType): boolean {\n return [\"is empty\", \"is not empty\", \"is true\", \"is false\"].includes(operator);\n}\n\nexport function getDefaultOperator(type: DataType): OperatorType {\n return DEFAULT_OPERATOR_BY_TYPE[type];\n}\n\nexport function createFilterWithDefaults(\n propertyId: string,\n type: DataType,\n): FilterCondition {\n const operator = getDefaultOperator(type);\n return {\n id: crypto.randomUUID(),\n propertyId,\n operator,\n value: type === \"boolean\" ? true : null,\n };\n}\n\nexport function getValueInputType(\n type: DataType,\n operator: OperatorType,\n): string | null {\n if (isNoValueOperator(operator)) return null;\n if (type === \"text\") return \"TextInput\";\n if (type === \"number\")\n return operator === \"is between\" ? \"NumberRange\" : \"NumberInput\";\n if (type === \"date\") {\n if (operator === \"is between\") return \"DateRange\";\n return \"DatePicker\";\n }\n if (type === \"enum\")\n return [\"is any of\", \"is none of\"].includes(operator)\n ? \"MultiSelect\"\n : \"SingleSelect\";\n if (type === \"tags\")\n return [\"contains any of\", \"contains all of\"].includes(operator)\n ? \"MultiSelect\"\n : \"SingleSelect\";\n if (type === \"relation\")\n return [\"is any of\", \"is none of\"].includes(operator)\n ? \"MultiRelationPicker\"\n : \"RelationPicker\";\n return null;\n}\n\n// ── Display formatting ─────────────────────────────────────────────────────\n\nexport function formatFilterValue(\n value: FilterValue,\n dynamicOptions?: import(\"./types\").DynamicOption[],\n full?: boolean,\n options?: EnumOption[],\n): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n if (value instanceof Date) {\n return value.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return undefined;\n if (value.length === 2 && typeof value[0] === \"number\") {\n return `${value[0]} – ${value[1]}`;\n }\n if (value.length === 2 && value[0] instanceof Date) {\n const fmt = (d: Date) =>\n d.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", year: \"numeric\" });\n return `${fmt(value[0])} – ${value[1] instanceof Date ? fmt(value[1]) : \"…\"}`;\n }\n if (full) {\n return (value as string[])\n .map((v) => resolveLabel(String(v), dynamicOptions, options))\n .join(\", \");\n }\n return resolveLabel(String(value[0]), dynamicOptions, options);\n }\n return resolveLabel(String(value), dynamicOptions, options);\n}\n\nfunction resolveLabel(\n raw: string,\n dynamicOptions?: import(\"./types\").DynamicOption[],\n options?: EnumOption[],\n): string {\n if (dynamicOptions) {\n const dyn = dynamicOptions.find((o) => o.value === raw);\n if (dyn) return dyn.label;\n }\n const enumOpt = findEnumOption(raw, options);\n if (enumOpt) return enumOpt.label;\n return raw;\n}\n\nexport function getBadgeCount(value: FilterValue): number | undefined {\n if (\n Array.isArray(value) &&\n value.length > 1 &&\n typeof value[0] === \"string\"\n ) {\n return value.length;\n }\n return undefined;\n}\n\n// ── Tree helpers for nested filter groups ──────────────────────────────────\n\n/** Type guard: is this node a FilterGroup? */\nexport function isFilterGroup(node: FilterNode): node is FilterGroup {\n return (node as FilterGroup).type === \"group\";\n}\n\n/** Create an empty group (no children — the popover will show a draft row). */\nexport function createEmptyGroup(): FilterGroup {\n return {\n id: crypto.randomUUID(),\n type: \"group\",\n children: [],\n };\n}\n\n/** Deep clone a node tree, assigning fresh UUIDs to every node. */\nexport function duplicateNode(node: FilterNode): FilterNode {\n if (isFilterGroup(node)) {\n return {\n ...node,\n id: crypto.randomUUID(),\n children: node.children.map(duplicateNode),\n };\n }\n return { ...node, id: crypto.randomUUID() };\n}\n\n/** Wrap a single condition inside a new group. */\nexport function wrapInGroup(condition: FilterCondition): FilterGroup {\n return {\n id: crypto.randomUUID(),\n type: \"group\",\n logicOperator: condition.logicOperator,\n children: [{ ...condition, logicOperator: undefined }],\n };\n}\n\n/** Unwrap a group — returns the first condition inside, or null if empty. */\nexport function unwrapGroup(group: FilterGroup): FilterCondition | null {\n const first = group.children.find((c) => !isFilterGroup(c)) as\n | FilterCondition\n | undefined;\n if (!first) return null;\n return { ...first, logicOperator: group.logicOperator };\n}\n\n/** Immutable: update a node by id anywhere in the tree. */\nexport function updateNodeInTree(\n nodes: FilterNode[],\n id: string,\n updater: (node: FilterNode) => FilterNode,\n): FilterNode[] {\n return nodes.map((node) => {\n if (node.id === id) return updater(node);\n if (isFilterGroup(node)) {\n const updated = updateNodeInTree(node.children, id, updater);\n if (updated !== node.children) return { ...node, children: updated };\n }\n return node;\n });\n}\n\n/**\n * Immutable: toggle the logic operator for ALL siblings at the same level as\n * the node with `id`. Within a group every connector must be the same — toggling\n * one flips them all.\n */\nexport function toggleGroupLogicInTree(\n nodes: FilterNode[],\n id: string,\n): FilterNode[] {\n const idx = nodes.findIndex((n) => n.id === id);\n if (idx >= 0) {\n const current = nodes[idx].logicOperator ?? \"and\";\n const next = current === \"and\" ? \"or\" : \"and\";\n return nodes.map((n, i) =>\n i === 0 ? n : { ...n, logicOperator: next },\n );\n }\n return nodes.map((node) => {\n if (isFilterGroup(node)) {\n const updated = toggleGroupLogicInTree(node.children, id);\n if (updated !== node.children) return { ...node, children: updated };\n }\n return node;\n });\n}\n\n/** Immutable: remove a node by id anywhere in the tree. */\nexport function removeNodeFromTree(\n nodes: FilterNode[],\n id: string,\n): FilterNode[] {\n const result: FilterNode[] = [];\n for (const node of nodes) {\n if (node.id === id) continue;\n if (isFilterGroup(node)) {\n const updated = removeNodeFromTree(node.children, id);\n result.push(updated !== node.children ? { ...node, children: updated } : node);\n } else {\n result.push(node);\n }\n }\n return result;\n}\n\n/** Immutable: insert a node after the node with `afterId` in the same array. */\nexport function insertAfterInTree(\n nodes: FilterNode[],\n afterId: string,\n newNode: FilterNode,\n): FilterNode[] {\n const result: FilterNode[] = [];\n let inserted = false;\n for (const node of nodes) {\n result.push(node);\n if (node.id === afterId) {\n result.push(newNode);\n inserted = true;\n } else if (!inserted && isFilterGroup(node)) {\n const updated = insertAfterInTree(node.children, afterId, newNode);\n if (updated.length !== node.children.length) {\n result[result.length - 1] = { ...node, children: updated };\n inserted = true;\n }\n }\n }\n return result;\n}\n\n/** Immutable: replace a node by id with another node. */\nexport function replaceNodeInTree(\n nodes: FilterNode[],\n id: string,\n replacement: FilterNode,\n): FilterNode[] {\n return nodes.map((node) => {\n if (node.id === id) return replacement;\n if (isFilterGroup(node)) {\n const updated = replaceNodeInTree(node.children, id, replacement);\n if (updated !== node.children) return { ...node, children: updated };\n }\n return node;\n });\n}\n\n/** Count all leaf conditions in a tree. */\nexport function countConditions(nodes: FilterNode[]): number {\n let count = 0;\n for (const node of nodes) {\n if (isFilterGroup(node)) {\n count += countConditions(node.children);\n } else {\n count++;\n }\n }\n return count;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── FilterBar ───────────────────────────────────────────────────────────────\n\nexport interface FilterBarProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Composable filter bar layout. Splits into a left group (search, sort, chips,\n * filters button) and a right group (discard, save). Pass children for the left\n * side and use `actions` slot for the right side.\n *\n * ```tsx\n * <FilterBar>\n * <FilterBarLeft>\n * <SearchBar ... />\n * <SortButton ... />\n * <FilterChip ... />\n * <FilterBarButton ... />\n * </FilterBarLeft>\n * <FilterBarRight>\n * <Button>Discard changes</Button>\n * <SaveViewButton ... />\n * </FilterBarRight>\n * </FilterBar>\n * ```\n */\nconst FilterBar = React.forwardRef<HTMLDivElement, FilterBarProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-start justify-between w-full\",\n className,\n )}\n role=\"toolbar\"\n aria-label=\"Filters\"\n aria-orientation=\"horizontal\"\n {...props}\n >\n {children}\n </div>\n ),\n);\nFilterBar.displayName = \"FilterBar\";\n\n// ── FilterBarLeft ───────────────────────────────────────────────────────────\n\nexport interface FilterBarLeftProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FilterBarLeft = React.forwardRef<HTMLDivElement, FilterBarLeftProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-base flex-wrap\", className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nFilterBarLeft.displayName = \"FilterBarLeft\";\n\n// ── FilterBarRight ──────────────────────────────────────────────────────────\n\nexport interface FilterBarRightProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FilterBarRight = React.forwardRef<HTMLDivElement, FilterBarRightProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-base shrink-0\", className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nFilterBarRight.displayName = \"FilterBarRight\";\n\nexport { FilterBar, FilterBarLeft, FilterBarRight };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport {\n faArrowUpSmallBigOutline,\n faArrowDownBigSmallOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SortField {\n id: string;\n label: string;\n icon: IconDefinition;\n}\n\nexport interface SortButtonProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n fields: SortField[];\n activeField: string;\n direction: \"asc\" | \"desc\";\n onChange?: (field: string, direction: \"asc\" | \"desc\") => void;\n /** Show only the sort icon, no label. */\n iconOnly?: boolean;\n}\n\n// ── SortButton ──────────────────────────────────────────────────────────────\n\nconst SortButton: React.FC<SortButtonProps> = ({\n className,\n fields,\n activeField,\n direction,\n onChange,\n iconOnly = false,\n ...props\n}) => {\n const [open, setOpen] = React.useState(false);\n\n const activeFieldDef = fields.find((f) => f.id === activeField);\n const activeLabel = activeFieldDef?.label ?? activeField;\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex items-center gap-xs\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n iconOnly ? \"size-8 justify-center p-0\" : \"px-lg py-sm min-w-[80px]\",\n className,\n )}\n >\n <Icon\n icon={\n direction === \"asc\"\n ? faArrowUpSmallBigOutline\n : faArrowDownBigSmallOutline\n }\n size=\"sm\"\n className=\"shrink-0 text-foreground\"\n />\n {!iconOnly && (\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap\">\n <span className=\"text-muted-foreground\">\n Sort by{\" \"}\n </span>\n <span className=\"text-foreground\">\n {activeLabel}\n </span>\n </span>\n )}\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col gap-xs overflow-clip p-xs\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[180px]\",\n )}\n >\n {/* Field list */}\n <div className=\"flex flex-col\">\n {fields.map((field) => (\n <button\n key={field.id}\n type=\"button\"\n onClick={() => {\n onChange?.(field.id, direction);\n setOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors\",\n \"hover:bg-dropdown-item-hover\",\n field.id === activeField\n ? \"bg-dropdown-item-hover\"\n : \"\",\n )}\n >\n <Icon\n icon={field.icon}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n field.id === activeField\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n />\n <span\n className={cn(\n \"flex-1 text-sm font-regular leading-sm text-left truncate\",\n field.id === activeField\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n >\n {field.label}\n </span>\n </button>\n ))}\n </div>\n\n {/* Separator */}\n <div className=\"h-px bg-border\" />\n\n {/* Direction toggle */}\n <div className=\"flex flex-col\">\n <button\n type=\"button\"\n onClick={() => {\n onChange?.(activeField, \"asc\");\n setOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors\",\n \"hover:bg-dropdown-item-hover\",\n direction === \"asc\"\n ? \"bg-dropdown-item-hover\"\n : \"\",\n )}\n >\n <Icon\n icon={faArrowUpSmallBigOutline}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n direction === \"asc\"\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n />\n <span\n className={cn(\n \"flex-1 text-sm font-regular leading-sm text-left\",\n direction === \"asc\"\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n >\n Ascending\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => {\n onChange?.(activeField, \"desc\");\n setOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors\",\n \"hover:bg-dropdown-item-hover\",\n direction === \"desc\"\n ? \"bg-dropdown-item-hover\"\n : \"\",\n )}\n >\n <Icon\n icon={faArrowDownBigSmallOutline}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n direction === \"desc\"\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n />\n <span\n className={cn(\n \"flex-1 text-sm font-regular leading-sm text-left\",\n direction === \"desc\"\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n >\n Descending\n </span>\n </button>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nSortButton.displayName = \"SortButton\";\n\nexport { SortButton };\n","import * as React from \"react\";\nimport { Icon, faFilterOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── FilterBarButton ─────────────────────────────────────────────────────────\n\nexport interface FilterBarButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Number of active filters (shown as badge if > 0). */\n count?: number;\n /** Show only the icon, no label. */\n iconOnly?: boolean;\n}\n\nconst FilterBarButton = React.forwardRef<\n HTMLButtonElement,\n FilterBarButtonProps\n>(({ className, count, iconOnly = false, children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"shrink-0 flex items-center gap-sm overflow-hidden\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n iconOnly\n ? count ? \"px-sm justify-center\" : \"size-8 justify-center p-0\"\n : \"px-base py-sm min-w-[80px]\",\n className,\n )}\n {...props}\n >\n <Icon\n icon={faFilterOutline}\n size=\"sm\"\n className=\"shrink-0 text-foreground\"\n />\n {!iconOnly && (\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap text-foreground\">\n {children ?? \"Filters\"}\n </span>\n )}\n {count != null && count > 0 && (\n <span className=\"flex items-center p-2xs rounded-xs bg-filter-chip-badge-bg\">\n <span className=\"text-[10px] font-medium leading-2xs text-filter-chip-badge-text\">\n {count}\n </span>\n </span>\n )}\n </button>\n));\nFilterBarButton.displayName = \"FilterBarButton\";\n\nexport { FilterBarButton };\n","import * as React from \"react\";\nimport { Icon, faChevronDownOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── SaveViewButton ──────────────────────────────────────────────────────────\n\nexport interface SaveViewButtonProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Label for the main action. */\n label?: string;\n /** Called when the main \"Save view\" button is clicked. */\n onSave?: () => void;\n /** Called when the chevron dropdown is clicked. */\n onDropdown?: () => void;\n}\n\n/**\n * Split button for saving filtered views (outlined, neutral).\n * Left side: \"Save view\" (rounded-left).\n * Right side: chevron-down dropdown (e.g. Save for me / Save for everyone).\n */\nconst SaveViewButton = React.forwardRef<HTMLDivElement, SaveViewButtonProps>(\n ({ className, label = \"Save view\", onSave, onDropdown, ...props }, ref) => {\n const sharedStyle = [\n \"relative flex items-center justify-center\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default\",\n \"shadow-sm cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:from-[0%] hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n \"hover:border-btn-outlined-neutral-border-hover\",\n ];\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center\", className)}\n {...props}\n >\n {/* Main button */}\n <button\n type=\"button\"\n onClick={onSave}\n className={cn(\n sharedStyle,\n \"gap-sm px-base py-sm min-w-[80px]\",\n \"rounded-l-md -mr-px\",\n )}\n >\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap text-btn-outlined-neutral-text-default\">\n {label}\n </span>\n </button>\n\n {/* Dropdown chevron */}\n <button\n type=\"button\"\n onClick={onDropdown}\n aria-label=\"More save options\"\n className={cn(\n sharedStyle,\n \"p-sm\",\n \"rounded-r-md -ml-px\",\n )}\n >\n <Icon\n icon={faChevronDownOutline}\n size=\"sm\"\n className=\"text-btn-outlined-neutral-text-default\"\n />\n </button>\n </div>\n );\n },\n);\nSaveViewButton.displayName = \"SaveViewButton\";\n\nexport { SaveViewButton };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../../lib/utils\";\nimport { OPERATORS_BY_TYPE, isNoValueOperator } from \"./utils\";\nimport type { DataType, OperatorType } from \"./types\";\n\n// ── OperatorSelector ────────────────────────────────────────────────────────\n\nexport interface OperatorSelectorProps {\n dataType: DataType;\n activeOperator: OperatorType | null;\n onSelect: (operator: OperatorType) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst OperatorSelector: React.FC<OperatorSelectorProps> = ({\n dataType,\n activeOperator,\n onSelect,\n open,\n onOpenChange,\n children,\n}) => {\n const operators = OPERATORS_BY_TYPE[dataType];\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[180px]\",\n )}\n >\n {operators.map((op) => (\n <button\n key={op}\n type=\"button\"\n onClick={() => onSelect(op)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n op === activeOperator && \"bg-dropdown-item-hover\",\n )}\n >\n <span\n className={cn(\n \"text-sm font-regular leading-sm\",\n op === activeOperator\n ? \"text-foreground font-medium\"\n : \"text-dropdown-item-text\",\n )}\n >\n {op}\n </span>\n {isNoValueOperator(op) && (\n <span className=\"ml-auto text-xs text-muted-foreground\">\n instant\n </span>\n )}\n </button>\n ))}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nOperatorSelector.displayName = \"OperatorSelector\";\n\n// ── OperatorList (inline, no popover) ───────────────────────────────────────\n// Used inside FilterEditor where we render operators inline, not in a popover.\n\nexport interface OperatorListProps {\n dataType: DataType;\n activeOperator: OperatorType | null;\n onSelect: (operator: OperatorType) => void;\n}\n\nconst OperatorList: React.FC<OperatorListProps> = ({\n dataType,\n activeOperator,\n onSelect,\n}) => {\n const operators = OPERATORS_BY_TYPE[dataType];\n\n return (\n <div className=\"flex flex-col\">\n {operators.map((op) => (\n <button\n key={op}\n type=\"button\"\n onClick={() => onSelect(op)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n op === activeOperator && \"bg-dropdown-item-hover\",\n )}\n >\n <span\n className={cn(\n \"text-sm font-regular leading-sm\",\n op === activeOperator\n ? \"text-foreground font-medium\"\n : \"text-dropdown-item-text\",\n )}\n >\n {op}\n </span>\n </button>\n ))}\n </div>\n );\n};\nOperatorList.displayName = \"OperatorList\";\n\nexport { OperatorSelector, OperatorList };\n","export const inputClasses = [\n \"w-full px-base py-sm rounded-base border border-input\",\n \"bg-background text-sm font-regular leading-sm text-foreground\",\n \"placeholder:text-muted-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-0\",\n].join(\" \");\n\nexport const halfInputClasses = [\n \"flex-1 px-base py-sm rounded-base border border-input\",\n \"bg-background text-sm font-regular leading-sm text-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring\",\n].join(\" \");\n","import * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { inputClasses } from \"./shared\";\nimport { Button } from \"../../button\";\nimport type { FilterValue } from \"../types\";\n\nexport interface TextValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst TextValueInput: React.FC<TextValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") onSubmit?.();\n };\n\n return (\n <div className={cn(\"flex flex-col gap-base p-xs\", className)}>\n <input\n type=\"text\"\n value={(value as string) ?? \"\"}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Enter value...\"\n autoFocus\n className={inputClasses}\n />\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nTextValueInput.displayName = \"TextValueInput\";\n\nexport { TextValueInput };\n","import * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { inputClasses, halfInputClasses } from \"./shared\";\nimport { Button } from \"../../button\";\nimport type { FilterValue } from \"../types\";\n\nexport interface NumberValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst NumberValueInput: React.FC<NumberValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") onSubmit?.();\n };\n\n return (\n <div className={cn(\"flex flex-col gap-base p-xs\", className)}>\n <input\n type=\"number\"\n value={(value as number) ?? \"\"}\n onChange={(e) => onChange(e.target.value ? Number(e.target.value) : null)}\n onKeyDown={handleKeyDown}\n placeholder=\"Enter number...\"\n autoFocus\n className={inputClasses}\n />\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nNumberValueInput.displayName = \"NumberValueInput\";\n\nexport interface NumberRangeValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst NumberRangeValueInput: React.FC<NumberRangeValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const rangeVal = (value as [number, number]) ?? [0, 0];\n\n return (\n <div className={cn(\"flex flex-col gap-base p-xs\", className)}>\n <div className=\"flex items-center gap-base\">\n <input\n type=\"number\"\n value={rangeVal[0] ?? \"\"}\n onChange={(e) => onChange([Number(e.target.value), rangeVal[1]])}\n placeholder=\"Min\"\n autoFocus\n className={halfInputClasses}\n />\n <span className=\"text-sm text-muted-foreground\">and</span>\n <input\n type=\"number\"\n value={rangeVal[1] ?? \"\"}\n onChange={(e) => onChange([rangeVal[0], Number(e.target.value)])}\n placeholder=\"Max\"\n className={halfInputClasses}\n />\n </div>\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nNumberRangeValueInput.displayName = \"NumberRangeValueInput\";\n\nexport { NumberValueInput, NumberRangeValueInput };\n","import * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport {\n DatePicker,\n DatePickerCalendar,\n DatePickerSelects,\n DatePickerSuggestions,\n DatePickerPanel,\n DatePickerFooter,\n getDefaultSuggestions,\n type DateRange,\n} from \"../../date-picker\";\nimport { Button } from \"../../button\";\nimport type { FilterValue, OperatorType } from \"../types\";\n\n// ── Relative date presets (for \"is relative\" operator) ──────────────────────\n\nexport const RELATIVE_DATE_PRESETS = [\n { group: \"Past\", options: [\"Today\", \"Yesterday\", \"Last 7 days\", \"Last 14 days\", \"Last 30 days\", \"Last 90 days\"] },\n { group: \"Current\", options: [\"This week\", \"This month\", \"This quarter\", \"This year\"] },\n { group: \"Future\", options: [\"Tomorrow\", \"Next 7 days\", \"Next 14 days\", \"Next 30 days\", \"Next week\", \"Next month\", \"Next quarter\"] },\n];\n\n// ── DateCalendarValueInput ──────────────────────────────────────────────────\n// Handles all calendar-based date operators: single date (is, is before, etc.)\n// and range (is between). Uses the real DatePicker compound component.\n\nexport interface DateCalendarValueInputProps {\n operator: OperatorType;\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst DateCalendarValueInput: React.FC<DateCalendarValueInputProps> = ({\n operator,\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const isRange = operator === \"is between\";\n\n // Convert FilterValue ↔ DatePicker value types\n const pickerValue = React.useMemo(() => {\n if (isRange) {\n if (Array.isArray(value) && value.length === 2) {\n const [from, to] = value as [Date | null, Date | null];\n if (from instanceof Date) {\n return { from, to: to instanceof Date ? to : undefined } as DateRange;\n }\n }\n return undefined;\n }\n return value instanceof Date ? value : undefined;\n }, [value, isRange]);\n\n const handleValueChange = (v: Date | DateRange) => {\n if (v instanceof Date) {\n onChange(v);\n if (!isRange) onSubmit?.();\n } else {\n const range = v as DateRange;\n if (range.from && range.to) {\n onChange([range.from, range.to]);\n } else if (range.from) {\n onChange([range.from, null as unknown as Date]);\n }\n }\n };\n\n const suggestions = React.useMemo(() => getDefaultSuggestions(), []);\n\n return (\n <div className={cn(\"flex flex-col\", className)}>\n <DatePicker\n mode={isRange ? \"range\" : \"single\"}\n value={pickerValue}\n onValueChange={handleValueChange}\n >\n {isRange && <DatePickerSelects />}\n {isRange ? (\n <DatePickerPanel>\n <DatePickerCalendar />\n <DatePickerSuggestions suggestions={suggestions} />\n </DatePickerPanel>\n ) : (\n <DatePickerCalendar />\n )}\n {isRange && (\n <DatePickerFooter>\n <div />\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" onClick={onSubmit}>\n Apply\n </Button>\n </DatePickerFooter>\n )}\n </DatePicker>\n </div>\n );\n};\nDateCalendarValueInput.displayName = \"DateCalendarValueInput\";\n\n// ── PresetTagsValueInput (unchanged — for \"is relative\") ───────────────────\n\nexport interface PresetTagsValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst PresetTagsValueInput: React.FC<PresetTagsValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => (\n <div className={cn(\"flex flex-col gap-base p-xs max-w-[280px]\", className)}>\n {RELATIVE_DATE_PRESETS.map((group) => (\n <div key={group.group} className=\"flex flex-col gap-xs\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground uppercase px-xs\">\n {group.group}\n </span>\n <div className=\"flex flex-wrap gap-xs\">\n {group.options.map((preset) => (\n <button\n key={preset}\n type=\"button\"\n onClick={() => {\n onChange(preset);\n onSubmit?.();\n }}\n className={cn(\n \"px-base py-2xs rounded-base border cursor-pointer transition-colors text-sm font-regular leading-sm\",\n value === preset\n ? \"border-ring bg-primary text-primary-foreground\"\n : \"border-input bg-background text-foreground hover:bg-accent\",\n )}\n >\n {preset}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n);\nPresetTagsValueInput.displayName = \"PresetTagsValueInput\";\n\nexport { DateCalendarValueInput, PresetTagsValueInput };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n Icon,\n faChevronLeftOutline,\n faChevronRightOutline,\n faArrowRightOutline,\n faCalendarOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport type DateRange = { from: Date; to?: Date };\n\nexport type DatePickerMode = \"single\" | \"range\";\n\nexport interface DatePickerSuggestion {\n label: string;\n getValue: () => Date | DateRange;\n}\n\n// ── Calendar utilities ──────────────────────────────────────────────────────\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\n/** 0 = Mon, 6 = Sun (ISO week) */\nfunction getWeekdayIndex(date: Date): number {\n return (date.getDay() + 6) % 7;\n}\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction isInRange(date: Date, from: Date, to: Date): boolean {\n const t = date.getTime();\n return t >= from.getTime() && t <= to.getTime();\n}\n\nfunction startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\nconst WEEKDAYS = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"] as const;\n\nconst MONTH_NAMES = [\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\",\n] as const;\n\n// ── Context ─────────────────────────────────────────────────────────────────\n\ninterface DatePickerContextValue {\n mode: DatePickerMode;\n selected: Date | DateRange | undefined;\n onSelect: (date: Date) => void;\n month: number;\n year: number;\n setMonth: (m: number) => void;\n setYear: (y: number) => void;\n goToPrevMonth: () => void;\n goToNextMonth: () => void;\n today: Date;\n hoveredDate: Date | undefined;\n setHoveredDate: (d: Date | undefined) => void;\n}\n\nconst DatePickerContext = React.createContext<DatePickerContextValue | null>(\n null,\n);\n\nfunction useDatePickerContext() {\n const ctx = React.useContext(DatePickerContext);\n if (!ctx)\n throw new Error(\"DatePicker compound components must be used within <DatePicker>\");\n return ctx;\n}\n\n// ── DatePicker (Root) ───────────────────────────────────────────────────────\n\nexport interface DatePickerProps extends React.HTMLAttributes<HTMLDivElement> {\n mode?: DatePickerMode;\n value?: Date | DateRange;\n onValueChange?: (value: Date | DateRange) => void;\n defaultMonth?: number;\n defaultYear?: number;\n}\n\nconst DatePicker = React.forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n className,\n mode = \"single\",\n value,\n onValueChange,\n defaultMonth,\n defaultYear,\n children,\n ...props\n },\n ref,\n ) => {\n const today = React.useMemo(() => startOfDay(new Date()), []);\n\n const initialDate = React.useMemo(() => {\n if (value) {\n if (value instanceof Date) return value;\n return value.from;\n }\n return today;\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const [month, setMonth] = React.useState(\n defaultMonth ?? initialDate.getMonth(),\n );\n const [year, setYear] = React.useState(\n defaultYear ?? initialDate.getFullYear(),\n );\n const [hoveredDate, setHoveredDate] = React.useState<Date | undefined>();\n\n const goToPrevMonth = React.useCallback(() => {\n setMonth((m) => {\n if (m === 0) {\n setYear((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }, []);\n\n const goToNextMonth = React.useCallback(() => {\n setMonth((m) => {\n if (m === 11) {\n setYear((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }, []);\n\n const onSelect = React.useCallback(\n (date: Date) => {\n if (mode === \"single\") {\n onValueChange?.(date);\n return;\n }\n // Range mode\n if (!value || value instanceof Date) {\n // Start a new range\n onValueChange?.({ from: date });\n return;\n }\n const range = value as DateRange;\n if (range.to || date.getTime() < range.from.getTime()) {\n // Start new range\n onValueChange?.({ from: date });\n } else {\n // Complete the range\n onValueChange?.({ from: range.from, to: date });\n }\n },\n [mode, value, onValueChange],\n );\n\n const ctxValue = React.useMemo<DatePickerContextValue>(\n () => ({\n mode,\n selected: value,\n onSelect,\n month,\n year,\n setMonth,\n setYear,\n goToPrevMonth,\n goToNextMonth,\n today,\n hoveredDate,\n setHoveredDate,\n }),\n [\n mode,\n value,\n onSelect,\n month,\n year,\n goToPrevMonth,\n goToNextMonth,\n today,\n hoveredDate,\n ],\n );\n\n return (\n <DatePickerContext.Provider value={ctxValue}>\n <div\n ref={ref}\n className={cn(\n \"flex flex-col overflow-clip\",\n \"bg-datepicker-bg border border-datepicker-border rounded-lg shadow-lg\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </DatePickerContext.Provider>\n );\n },\n);\nDatePicker.displayName = \"DatePicker\";\n\n// ── DatePickerSelects ───────────────────────────────────────────────────────\n\nexport interface DatePickerSelectsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n formatDate?: (date: Date) => string;\n}\n\nfunction defaultFormatDate(date: Date): string {\n return date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\nconst DatePickerSelects = React.forwardRef<\n HTMLDivElement,\n DatePickerSelectsProps\n>(({ className, formatDate = defaultFormatDate, ...props }, ref) => {\n const { selected } = useDatePickerContext();\n\n const fromDate =\n selected instanceof Date\n ? selected\n : selected?.from;\n const toDate =\n selected instanceof Date ? undefined : selected?.to;\n\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-start pt-xl px-xl\", className)}\n {...props}\n >\n <div className=\"flex items-center gap-base w-full\">\n <div className=\"flex-1 flex items-center gap-base min-w-0 px-base py-sm bg-gradient-to-t from-[var(--color-select-bg-default)] to-[var(--color-select-bg-gradient-to)] border border-[var(--color-select-border-default)] rounded-base shadow-sm\">\n <span className=\"flex-1 text-sm font-regular leading-sm text-datepicker-header-text truncate\">\n {fromDate ? formatDate(fromDate) : \"Start date\"}\n </span>\n <Icon icon={faCalendarOutline} size=\"sm\" className=\"shrink-0 text-datepicker-header-text\" />\n </div>\n <Icon\n icon={faArrowRightOutline}\n size=\"sm\"\n className=\"shrink-0 text-datepicker-header-weekday\"\n />\n <div className=\"flex-1 flex items-center gap-base min-w-0 px-base py-sm bg-gradient-to-t from-[var(--color-select-bg-default)] to-[var(--color-select-bg-gradient-to)] border border-[var(--color-select-border-default)] rounded-base shadow-sm\">\n <span className=\"flex-1 text-sm font-regular leading-sm text-datepicker-header-text truncate\">\n {toDate ? formatDate(toDate) : \"End date\"}\n </span>\n <Icon icon={faCalendarOutline} size=\"sm\" className=\"shrink-0 text-datepicker-header-text\" />\n </div>\n </div>\n </div>\n );\n});\nDatePickerSelects.displayName = \"DatePickerSelects\";\n\n// ── DatePickerDay (internal) ────────────────────────────────────────────────\n\ninterface DatePickerDayProps {\n date: Date;\n isOutside: boolean;\n}\n\nconst DatePickerDay: React.FC<DatePickerDayProps> = ({ date, isOutside }) => {\n const { mode, selected, onSelect, today, hoveredDate, setHoveredDate } =\n useDatePickerContext();\n\n const isToday = isSameDay(date, today);\n\n const isSelected =\n selected instanceof Date\n ? isSameDay(date, selected)\n : selected?.from\n ? isSameDay(date, selected.from) ||\n (selected.to ? isSameDay(date, selected.to) : false)\n : false;\n\n const isRangeStart =\n mode === \"range\" &&\n selected &&\n !(selected instanceof Date) &&\n selected.from &&\n isSameDay(date, selected.from);\n\n const isRangeEnd =\n mode === \"range\" &&\n selected &&\n !(selected instanceof Date) &&\n selected.to &&\n isSameDay(date, selected.to);\n\n // Fully selected range\n const inRange =\n mode === \"range\" &&\n selected &&\n !(selected instanceof Date) &&\n selected.from &&\n selected.to &&\n !isSelected &&\n isInRange(date, selected.from, selected.to);\n\n // Preview range while hovering (only when from is set but to is not)\n const inPreviewRange =\n mode === \"range\" &&\n selected &&\n !(selected instanceof Date) &&\n selected.from &&\n !selected.to &&\n hoveredDate &&\n !isSelected &&\n hoveredDate.getTime() > selected.from.getTime() &&\n isInRange(date, selected.from, hoveredDate);\n\n const isInRangeOrPreview = inRange || inPreviewRange;\n\n return (\n <button\n type=\"button\"\n onClick={() => !isOutside && onSelect(date)}\n onMouseEnter={() => mode === \"range\" && setHoveredDate(date)}\n onMouseLeave={() => mode === \"range\" && setHoveredDate(undefined)}\n disabled={isOutside}\n className={cn(\n \"relative flex flex-col items-center justify-center w-9 rounded-full p-2 cursor-pointer transition-colors\",\n \"text-sm font-medium leading-sm text-center\",\n // Default\n !isOutside && !isSelected && !isInRangeOrPreview &&\n \"text-datepicker-day-text-default hover:bg-datepicker-day-bg-hover\",\n // Outside month (disabled)\n isOutside && \"text-datepicker-day-text-disabled cursor-default\",\n // Selected\n isSelected &&\n \"bg-datepicker-day-bg-selected text-datepicker-day-text-selected\",\n // In range\n isInRangeOrPreview &&\n \"bg-datepicker-day-bg-range text-datepicker-day-text-range\",\n // Range start/end get full rounded; in-range items could be less rounded\n (isRangeStart || isRangeEnd) && \"rounded-full\",\n )}\n >\n {date.getDate()}\n {isToday && !isOutside && (\n <span className=\"absolute bottom-0.5 left-1/2 -translate-x-1/2 size-1.5 rounded-full bg-datepicker-day-today\" />\n )}\n </button>\n );\n};\n\n// ── DatePickerCalendar ──────────────────────────────────────────────────────\n\nexport interface DatePickerCalendarProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Content rendered above the calendar grid (e.g. DatePickerSelects). */\n header?: React.ReactNode;\n}\n\nconst DatePickerCalendar = React.forwardRef<\n HTMLDivElement,\n DatePickerCalendarProps\n>(({ className, header, ...props }, ref) => {\n const { month, year, goToPrevMonth, goToNextMonth } =\n useDatePickerContext();\n\n // Build the 6-week grid\n const weeks = React.useMemo(() => {\n const firstDay = new Date(year, month, 1);\n const startOffset = getWeekdayIndex(firstDay); // days from previous month\n const daysInMonth = getDaysInMonth(year, month);\n const daysInPrevMonth = getDaysInMonth(\n month === 0 ? year - 1 : year,\n month === 0 ? 11 : month - 1,\n );\n\n const days: { date: Date; isOutside: boolean }[] = [];\n\n // Previous month trailing days\n for (let i = startOffset - 1; i >= 0; i--) {\n const d = daysInPrevMonth - i;\n days.push({\n date: new Date(\n month === 0 ? year - 1 : year,\n month === 0 ? 11 : month - 1,\n d,\n ),\n isOutside: true,\n });\n }\n\n // Current month\n for (let d = 1; d <= daysInMonth; d++) {\n days.push({ date: new Date(year, month, d), isOutside: false });\n }\n\n // Next month leading days (fill up to 6 rows = 42 cells)\n const remaining = 42 - days.length;\n for (let d = 1; d <= remaining; d++) {\n days.push({\n date: new Date(\n month === 11 ? year + 1 : year,\n month === 11 ? 0 : month + 1,\n d,\n ),\n isOutside: true,\n });\n }\n\n // Split into weeks\n const result: { date: Date; isOutside: boolean }[][] = [];\n for (let i = 0; i < days.length; i += 7) {\n result.push(days.slice(i, i + 7));\n }\n return result;\n }, [month, year]);\n\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col\", className)}\n {...props}\n >\n {header}\n <div className=\"flex flex-col gap-xl p-xl\">\n {/* Month navigation */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-base font-medium leading-base text-datepicker-header-text\">\n {MONTH_NAMES[month]} {year}\n </span>\n <div className=\"flex items-center gap-xs\">\n <button\n type=\"button\"\n onClick={goToPrevMonth}\n className=\"flex items-center justify-center p-xs rounded-base hover:bg-datepicker-day-bg-hover transition-colors cursor-pointer\"\n aria-label=\"Previous month\"\n >\n <Icon icon={faChevronLeftOutline} size=\"xs\" className=\"text-datepicker-header-nav\" />\n </button>\n <button\n type=\"button\"\n onClick={goToNextMonth}\n className=\"flex items-center justify-center p-xs rounded-base hover:bg-datepicker-day-bg-hover transition-colors cursor-pointer\"\n aria-label=\"Next month\"\n >\n <Icon icon={faChevronRightOutline} size=\"xs\" className=\"text-datepicker-header-nav\" />\n </button>\n </div>\n </div>\n\n {/* Calendar grid */}\n <div className=\"flex flex-col\">\n {/* Weekday headers */}\n <div className=\"grid grid-cols-7 gap-base py-sm\">\n {WEEKDAYS.map((day) => (\n <span\n key={day}\n className=\"w-9 text-center text-xs font-regular leading-xs text-datepicker-header-weekday\"\n >\n {day}\n </span>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"flex flex-col\">\n {weeks.map((week, wi) => (\n <div key={wi} className=\"grid grid-cols-7 gap-base\">\n {week.map((day, di) => (\n <DatePickerDay\n key={di}\n date={day.date}\n isOutside={day.isOutside}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n});\nDatePickerCalendar.displayName = \"DatePickerCalendar\";\n\n// ── DatePickerSuggestions ───────────────────────────────────────────────────\n\nexport interface DatePickerSuggestionsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n suggestions: DatePickerSuggestion[];\n formatDate?: (date: Date) => string;\n}\n\nconst DatePickerSuggestions = React.forwardRef<\n HTMLDivElement,\n DatePickerSuggestionsProps\n>(\n (\n { className, suggestions, formatDate = defaultFormatDate, ...props },\n ref,\n ) => {\n const { onSelect, mode } = useDatePickerContext();\n const onValueChange = React.useContext(DatePickerContext)\n ? undefined\n : undefined;\n\n // We need access to the parent's onValueChange — we get it from context indirectly\n // by calling onSelect for single mode or through the parent for range mode\n const ctx = useDatePickerContext();\n\n const handleClick = (suggestion: DatePickerSuggestion) => {\n const val = suggestion.getValue();\n if (val instanceof Date) {\n ctx.onSelect(val);\n } else {\n // For range: select from, then to\n ctx.onSelect(val.from);\n if (val.to) {\n // Need to set the range directly — use a microtask to let state settle\n setTimeout(() => ctx.onSelect(val.to!), 0);\n }\n }\n };\n\n const formatSuggestionDate = (suggestion: DatePickerSuggestion): string => {\n const val = suggestion.getValue();\n if (val instanceof Date) {\n return formatDate(val);\n }\n const from = formatDate(val.from);\n const to = val.to ? formatDate(val.to) : \"\";\n return to ? `${from} - ${to}` : from;\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col border-l border-datepicker-border self-stretch shrink-0\",\n className,\n )}\n {...props}\n >\n {/* Heading */}\n <div className=\"pt-xl px-base\">\n <div className=\"flex items-center p-base rounded-base\">\n <span className=\"flex-1 text-xs font-medium leading-xs text-datepicker-suggestion-heading uppercase truncate\">\n Suggestions\n </span>\n </div>\n </div>\n\n {/* List */}\n <div className=\"flex flex-1 flex-col p-base min-w-[222px]\">\n {suggestions.map((suggestion, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => handleClick(suggestion)}\n className=\"flex items-center gap-sm p-base rounded-base hover:bg-datepicker-suggestion-hover transition-colors cursor-pointer text-left\"\n >\n <span className=\"text-sm font-regular leading-sm text-datepicker-suggestion-text truncate shrink-0\">\n {suggestion.label}\n </span>\n <span className=\"text-xs font-regular leading-xs text-datepicker-suggestion-date truncate\">\n {formatSuggestionDate(suggestion)}\n </span>\n </button>\n ))}\n </div>\n </div>\n );\n },\n);\nDatePickerSuggestions.displayName = \"DatePickerSuggestions\";\n\n// ── DatePickerFooter ────────────────────────────────────────────────────────\n\nexport interface DatePickerFooterProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DatePickerFooter = React.forwardRef<HTMLDivElement, DatePickerFooterProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-between p-xl\",\n \"border-t border-datepicker-footer-border\",\n \"bg-datepicker-bg\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n ),\n);\nDatePickerFooter.displayName = \"DatePickerFooter\";\n\n// ── DatePickerPanel ─────────────────────────────────────────────────────────\n// Convenience layout component that arranges calendar + suggestions side by side\n\nexport interface DatePickerPanelProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DatePickerPanel = React.forwardRef<HTMLDivElement, DatePickerPanelProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-start\", className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nDatePickerPanel.displayName = \"DatePickerPanel\";\n\n// ── Popover wrappers ────────────────────────────────────────────────────────\n\nconst DatePickerRoot = PopoverPrimitive.Root;\n\nconst DatePickerTrigger = PopoverPrimitive.Trigger;\n\nconst DatePickerPopover = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, sideOffset = 4, align = \"start\", children, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n align={align}\n className={cn(\n \"z-50\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n));\nDatePickerPopover.displayName = \"DatePickerPopover\";\n\n// ── Default suggestions helper ──────────────────────────────────────────────\n\nexport function getDefaultSuggestions(\n referenceDate?: Date,\n): DatePickerSuggestion[] {\n const now = referenceDate ?? new Date();\n const today = startOfDay(now);\n const dayOfWeek = getWeekdayIndex(today);\n\n const startOfThisWeek = new Date(today);\n startOfThisWeek.setDate(today.getDate() - dayOfWeek);\n\n const endOfThisWeek = new Date(startOfThisWeek);\n endOfThisWeek.setDate(startOfThisWeek.getDate() + 6);\n\n const startOfThisMonth = new Date(today.getFullYear(), today.getMonth(), 1);\n const endOfThisMonth = new Date(\n today.getFullYear(),\n today.getMonth() + 1,\n 0,\n );\n\n const startOfThisYear = new Date(today.getFullYear(), 0, 1);\n const endOfThisYear = new Date(today.getFullYear(), 11, 31);\n\n const startOfLastWeek = new Date(startOfThisWeek);\n startOfLastWeek.setDate(startOfThisWeek.getDate() - 7);\n const endOfLastWeek = new Date(startOfThisWeek);\n endOfLastWeek.setDate(startOfThisWeek.getDate() - 1);\n\n const startOfLastMonth = new Date(\n today.getFullYear(),\n today.getMonth() - 1,\n 1,\n );\n const endOfLastMonth = new Date(today.getFullYear(), today.getMonth(), 0);\n\n const startOfLastYear = new Date(today.getFullYear() - 1, 0, 1);\n const endOfLastYear = new Date(today.getFullYear() - 1, 11, 31);\n\n return [\n { label: \"Today\", getValue: () => today },\n {\n label: \"This week\",\n getValue: () => ({ from: startOfThisWeek, to: endOfThisWeek }),\n },\n {\n label: \"This month\",\n getValue: () => ({ from: startOfThisMonth, to: endOfThisMonth }),\n },\n {\n label: \"This year\",\n getValue: () => ({ from: startOfThisYear, to: endOfThisYear }),\n },\n {\n label: \"Last week\",\n getValue: () => ({ from: startOfLastWeek, to: endOfLastWeek }),\n },\n {\n label: \"Last month\",\n getValue: () => ({ from: startOfLastMonth, to: endOfLastMonth }),\n },\n {\n label: \"Last year\",\n getValue: () => ({ from: startOfLastYear, to: endOfLastYear }),\n },\n ];\n}\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n DatePicker,\n DatePickerCalendar,\n DatePickerSelects,\n DatePickerSuggestions,\n DatePickerFooter,\n DatePickerPanel,\n DatePickerRoot,\n DatePickerTrigger,\n DatePickerPopover,\n};\n","import * as React from \"react\";\nimport { Icon } from \"@l3mpire/icons\";\nimport { cn } from \"../../../../lib/utils\";\nimport { Button } from \"../../button\";\nimport { resolveEnumOption, type ResolvedEnumOption } from \"../utils\";\nimport type {\n FilterValue,\n DynamicOption,\n EnumOption,\n EnumOptionIntent,\n} from \"../types\";\n\n// ── Intent dot ──────────────────────────────────────────────────────────────\n\nconst intentDotClass: Record<EnumOptionIntent, string> = {\n primary: \"bg-primary\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n critical: \"bg-destructive\",\n neutral: \"bg-muted-foreground\",\n};\n\nconst IntentDot: React.FC<{ intent: EnumOptionIntent }> = ({ intent }) => (\n <span\n className={cn(\n \"shrink-0 size-2 rounded-full\",\n intentDotClass[intent],\n )}\n aria-hidden\n />\n);\n\n// ── Leading visual (icon OR intent dot) ─────────────────────────────────────\n\nconst OptionLeading: React.FC<{ option: ResolvedEnumOption }> = ({ option }) => {\n if (option.icon) {\n return (\n <Icon\n icon={option.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n );\n }\n if (option.intent) {\n return <IntentDot intent={option.intent} />;\n }\n return null;\n};\n\n// ── DynamicOptionRow (shared between single & multi) ────────────────────────\n\ninterface DynamicOptionRowProps {\n option: DynamicOption;\n selected: boolean;\n multi: boolean;\n onClick: () => void;\n}\n\nconst DynamicOptionRow: React.FC<DynamicOptionRowProps> = ({\n option,\n selected,\n multi,\n onClick,\n}) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex items-start gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n selected && \"bg-dropdown-item-hover\",\n )}\n >\n {multi && (\n <span\n className={cn(\n \"mt-[2px] flex items-center justify-center size-4 rounded-xs border transition-colors shrink-0\",\n selected\n ? \"bg-primary border-primary\"\n : \"border-input bg-background\",\n )}\n >\n {selected && (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M2 5L4 7L8 3\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </span>\n )}\n <span className=\"flex-1 flex flex-col gap-2xs min-w-0\">\n <span className=\"text-sm font-regular leading-sm text-foreground truncate\">\n {option.label}\n </span>\n {option.description && (\n <span className=\"text-xs font-regular leading-xs text-muted-foreground\">\n {option.description}\n </span>\n )}\n </span>\n </button>\n);\n\n\n// ── SingleSelectValueInput ──────────────────────────────────────────────────\n\nexport interface SingleSelectValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n options: EnumOption[];\n dynamicOptions?: DynamicOption[];\n className?: string;\n}\n\nconst SingleSelectValueInput: React.FC<SingleSelectValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n options,\n dynamicOptions,\n className,\n}) => {\n const pick = (v: string) => {\n onChange(v);\n onSubmit?.();\n };\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-xs p-xs max-h-[280px] overflow-y-auto\",\n className,\n )}\n >\n {dynamicOptions?.map((opt) => (\n <DynamicOptionRow\n key={opt.value}\n option={opt}\n selected={value === opt.value}\n multi={false}\n onClick={() => pick(opt.value)}\n />\n ))}\n {options.map((rawOpt) => {\n const opt = resolveEnumOption(rawOpt);\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => pick(opt.value)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n value === opt.value && \"bg-dropdown-item-hover\",\n )}\n >\n <OptionLeading option={opt} />\n <span className=\"text-sm font-regular leading-sm text-foreground truncate\">\n {opt.label}\n </span>\n </button>\n );\n })}\n </div>\n );\n};\nSingleSelectValueInput.displayName = \"SingleSelectValueInput\";\n\n// ── MultiSelectValueInput ───────────────────────────────────────────────────\n\nexport interface MultiSelectValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n options: EnumOption[];\n dynamicOptions?: DynamicOption[];\n className?: string;\n}\n\nconst MultiSelectValueInput: React.FC<MultiSelectValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n options,\n dynamicOptions,\n className,\n}) => {\n const selected = Array.isArray(value) ? (value as string[]) : [];\n const toggle = (v: string) => {\n const next = selected.includes(v)\n ? selected.filter((s) => s !== v)\n : [...selected, v];\n onChange(next);\n };\n\n return (\n <div className={cn(\"flex flex-col gap-xs p-xs\", className)}>\n <div className=\"flex flex-col max-h-[240px] overflow-y-auto\">\n {dynamicOptions?.map((opt) => (\n <DynamicOptionRow\n key={opt.value}\n option={opt}\n selected={selected.includes(opt.value)}\n multi\n onClick={() => toggle(opt.value)}\n />\n ))}\n {options.map((rawOpt) => {\n const opt = resolveEnumOption(rawOpt);\n const isSelected = selected.includes(opt.value);\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => toggle(opt.value)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n )}\n >\n <span\n className={cn(\n \"flex items-center justify-center size-4 rounded-xs border transition-colors shrink-0\",\n isSelected\n ? \"bg-primary border-primary\"\n : \"border-input bg-background\",\n )}\n >\n {isSelected && (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M2 5L4 7L8 3\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </span>\n <OptionLeading option={opt} />\n <span className=\"text-sm font-regular leading-sm text-foreground truncate\">\n {opt.label}\n </span>\n </button>\n );\n })}\n </div>\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nMultiSelectValueInput.displayName = \"MultiSelectValueInput\";\n\nexport { SingleSelectValueInput, MultiSelectValueInput };\n","import * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { inputClasses } from \"./shared\";\nimport { Button } from \"../../button\";\nimport type { FilterValue } from \"../types\";\n\n// ── RelationValueInput (stub — will wire to real relation picker) ────────────\n\nexport interface RelationValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst RelationValueInput: React.FC<RelationValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") onSubmit?.();\n };\n\n return (\n <div className={cn(\"flex flex-col gap-base p-xs\", className)}>\n <input\n type=\"text\"\n value={(value as string) ?? \"\"}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Search...\"\n autoFocus\n className={inputClasses}\n />\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nRelationValueInput.displayName = \"RelationValueInput\";\n\nexport { RelationValueInput };\n","import * as React from \"react\";\nimport { getValueInputType } from \"./utils\";\nimport { TextValueInput } from \"./value-inputs/text-value-input\";\nimport { NumberValueInput, NumberRangeValueInput } from \"./value-inputs/number-value-input\";\nimport { DateCalendarValueInput } from \"./value-inputs/date-value-input\";\nimport { SingleSelectValueInput, MultiSelectValueInput } from \"./value-inputs/select-value-input\";\nimport { RelationValueInput } from \"./value-inputs/relation-value-input\";\nimport type {\n DataType,\n OperatorType,\n FilterValue,\n DynamicOption,\n EnumOption,\n} from \"./types\";\n\n// ── ValueInput ──────────────────────────────────────────────────────────────\n\nexport interface ValueInputProps {\n dataType: DataType;\n operator: OperatorType;\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n options?: EnumOption[];\n /** Dynamic/smart entries rendered at the top with a divider. */\n dynamicOptions?: DynamicOption[];\n className?: string;\n}\n\nconst ValueInput: React.FC<ValueInputProps> = ({\n dataType,\n operator,\n value,\n onChange,\n onSubmit,\n options = [],\n dynamicOptions,\n className,\n}) => {\n const inputType = getValueInputType(dataType, operator);\n if (!inputType) return null;\n\n switch (inputType) {\n case \"TextInput\":\n return <TextValueInput value={value} onChange={onChange} onSubmit={onSubmit} className={className} />;\n case \"NumberInput\":\n return <NumberValueInput value={value} onChange={onChange} onSubmit={onSubmit} className={className} />;\n case \"NumberRange\":\n return <NumberRangeValueInput value={value} onChange={onChange} onSubmit={onSubmit} className={className} />;\n case \"SingleSelect\":\n return (\n <SingleSelectValueInput\n value={value}\n onChange={onChange}\n onSubmit={onSubmit}\n options={options}\n dynamicOptions={dynamicOptions}\n className={className}\n />\n );\n case \"MultiSelect\":\n return (\n <MultiSelectValueInput\n value={value}\n onChange={onChange}\n onSubmit={onSubmit}\n options={options}\n dynamicOptions={dynamicOptions}\n className={className}\n />\n );\n case \"DatePicker\":\n case \"DateRange\":\n return (\n <DateCalendarValueInput\n operator={operator}\n value={value}\n onChange={onChange}\n onSubmit={onSubmit}\n className={className}\n />\n );\n case \"RelationPicker\":\n case \"MultiRelationPicker\":\n return <RelationValueInput value={value} onChange={onChange} onSubmit={onSubmit} className={className} />;\n default:\n return null;\n }\n};\nValueInput.displayName = \"ValueInput\";\n\nexport { ValueInput };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n Icon,\n faChevronLeftOutline,\n faChevronRightOutline,\n faMagnifyingGlassOutline,\n faFilterOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport type { PropertyDefinition } from \"./types\";\n\n// ── PropertySelector ────────────────────────────────────────────────────────\n\nexport interface PropertySelectorProps {\n properties: PropertyDefinition[];\n onSelect: (property: PropertyDefinition) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n /**\n * When provided, renders an \"Advanced filter\" item at the bottom of the\n * popover with a divider above it.\n */\n onAdvancedFilter?: () => void;\n /** Count of existing advanced filter rules, displayed next to the item. */\n advancedFilterCount?: number;\n}\n\n// ── AdvancedFilterFooter ────────────────────────────────────────────────────\n\nconst AdvancedFilterFooter: React.FC<{\n onClick: (e: React.MouseEvent) => void;\n count: number;\n}> = ({ onClick, count }) => (\n <div className=\"shrink-0 flex flex-col\">\n <div className=\"h-px bg-dropdown-border mx-xs\" />\n <button\n type=\"button\"\n onPointerDown={(e) => e.preventDefault()}\n onClick={onClick}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={faFilterOutline}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n Advanced filter\n </span>\n {count > 0 && (\n <span className=\"text-xs font-regular leading-xs text-muted-foreground\">\n {count} {count === 1 ? \"rule\" : \"rules\"}\n </span>\n )}\n </button>\n </div>\n);\n\ninterface GroupInfo {\n group: string;\n groupLabel: string;\n groupIcon: import(\"@l3mpire/icons\").IconDefinition;\n count: number;\n}\n\nconst PropertySelector: React.FC<PropertySelectorProps> = ({\n properties,\n onSelect,\n open,\n onOpenChange,\n children,\n onAdvancedFilter,\n advancedFilterCount = 0,\n}) => {\n // NOTE: stopPropagation + preventDefault are CRITICAL here. Without them,\n // the click bubbles out and Radix interprets it as a \"click outside\" on the\n // newly-opened advanced popover, closing it instantly (race condition\n // between opening one popover while clicking inside another).\n const handleAdvancedClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onAdvancedFilter?.();\n };\n const showAdvancedFooter = !!onAdvancedFilter;\n const [activeGroup, setActiveGroup] = React.useState<string | null>(null);\n const [search, setSearch] = React.useState(\"\");\n\n // Reset state when popover closes\n React.useEffect(() => {\n if (!open) {\n setActiveGroup(null);\n setSearch(\"\");\n }\n }, [open]);\n\n // Set of group ids that are pinned to root (any prop in the group having\n // groupPinned: true flags the whole group).\n const pinnedGroupIds = React.useMemo(() => {\n const set = new Set<string>();\n for (const p of properties) {\n if (p.groupPinned) set.add(p.group);\n }\n return set;\n }, [properties]);\n\n // Properties belonging to pinned groups, rendered flat at the root of the\n // popover (no category click).\n const pinnedProperties = React.useMemo(\n () => properties.filter((p) => pinnedGroupIds.has(p.group)),\n [properties, pinnedGroupIds],\n );\n\n // Group info for non-pinned groups only (pinned groups are flattened).\n const groups = React.useMemo<GroupInfo[]>(() => {\n const map = new Map<string, GroupInfo>();\n for (const prop of properties) {\n if (pinnedGroupIds.has(prop.group)) continue;\n const existing = map.get(prop.group);\n if (existing) {\n existing.count++;\n } else {\n map.set(prop.group, {\n group: prop.group,\n groupLabel: prop.groupLabel,\n groupIcon: prop.icon,\n count: 1,\n });\n }\n }\n return Array.from(map.values());\n }, [properties, pinnedGroupIds]);\n\n // Filtered pinned properties (for root-level search)\n const filteredPinnedProperties = React.useMemo(() => {\n if (!search || activeGroup) return pinnedProperties;\n const lower = search.toLowerCase();\n return pinnedProperties.filter((p) =>\n p.label.toLowerCase().includes(lower),\n );\n }, [pinnedProperties, search, activeGroup]);\n\n // Filtered groups (by group name when searching at level 1)\n const filteredGroups = React.useMemo(() => {\n if (!search || activeGroup) return groups;\n const lower = search.toLowerCase();\n // Show groups whose name matches OR that contain matching properties\n return groups.filter(\n (g) =>\n g.groupLabel.toLowerCase().includes(lower) ||\n properties.some(\n (p) => p.group === g.group && p.label.toLowerCase().includes(lower),\n ),\n );\n }, [groups, properties, search, activeGroup]);\n\n // Filtered properties for level 2\n const filteredProperties = React.useMemo(() => {\n if (!activeGroup) return [];\n const groupProps = properties.filter((p) => p.group === activeGroup);\n if (!search) return groupProps;\n const lower = search.toLowerCase();\n return groupProps.filter((p) => p.label.toLowerCase().includes(lower));\n }, [properties, activeGroup, search]);\n\n const activeGroupInfo = groups.find((g) => g.group === activeGroup);\n\n // Non-pinned properties that match the current search — rendered flat below\n // the pinned section when searching at level 1.\n const nonPinnedSearchResults = React.useMemo(() => {\n if (!search || activeGroup) return [];\n const lower = search.toLowerCase();\n return properties.filter(\n (p) =>\n !pinnedGroupIds.has(p.group) &&\n p.label.toLowerCase().includes(lower),\n );\n }, [properties, search, activeGroup, pinnedGroupIds]);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n // Prevent Radix from returning focus to the trigger on close. When\n // the user clicks \"Advanced filter\", we want to open another popover\n // right away; a delayed focus return would fire DismissableLayer's\n // onFocusOutside on that new popover and close it instantly.\n onCloseAutoFocus={(e) => e.preventDefault()}\n className={cn(\n \"z-50 flex flex-col gap-xs overflow-hidden p-xs\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[230px] max-h-[360px]\",\n )}\n >\n {activeGroup === null ? (\n /* ── Level 1: Search + (pinned props) + Categories ──────── */\n <div className=\"flex flex-col gap-xs flex-1 min-h-0\">\n {/* Search */}\n <div className=\"shrink-0 flex items-center gap-base px-lg py-base border border-input rounded-md\">\n <Icon\n icon={faMagnifyingGlassOutline}\n size=\"sm\"\n className=\"shrink-0 text-muted-foreground\"\n />\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search...\"\n autoFocus\n className=\"flex-1 text-sm font-regular leading-sm text-foreground bg-transparent outline-none placeholder:text-muted-foreground\"\n />\n </div>\n\n <div className=\"flex flex-col flex-1 min-h-0 overflow-y-auto\">\n {/* Pinned properties (flat, no category click) */}\n {filteredPinnedProperties.map((prop) => (\n <button\n key={prop.id}\n type=\"button\"\n onClick={() => {\n onSelect(prop);\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={prop.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n {prop.label}\n </span>\n </button>\n ))}\n\n {search ? (\n /* ── Flat matches across non-pinned groups ────────── */\n nonPinnedSearchResults.map((prop) => (\n <button\n key={prop.id}\n type=\"button\"\n onClick={() => {\n onSelect(prop);\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={prop.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n {prop.label}\n </span>\n <span className=\"text-xs font-regular leading-xs text-muted-foreground\">\n {prop.groupLabel}\n </span>\n </button>\n ))\n ) : (\n /* ── Category list ────────────────────────────────── */\n filteredGroups.map((g) => (\n <button\n key={g.group}\n type=\"button\"\n onClick={() => {\n setActiveGroup(g.group);\n setSearch(\"\");\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={g.groupIcon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n {g.groupLabel}\n </span>\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">\n {g.count}\n </span>\n <Icon\n icon={faChevronRightOutline}\n size=\"xs\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n </button>\n ))\n )}\n\n {filteredPinnedProperties.length === 0 &&\n (search\n ? nonPinnedSearchResults.length === 0\n : filteredGroups.length === 0) && (\n <span className=\"p-base text-sm text-muted-foreground\">\n No results\n </span>\n )}\n </div>\n </div>\n ) : (\n /* ── Level 2: Properties ─────────────────────────────────── */\n <div className=\"flex flex-col gap-xs flex-1 min-h-0\">\n {/* Back button */}\n <button\n type=\"button\"\n onClick={() => {\n setActiveGroup(null);\n setSearch(\"\");\n }}\n className=\"shrink-0 flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={faChevronLeftOutline}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-xs font-medium leading-xs text-muted-foreground text-left truncate\">\n {activeGroupInfo?.groupLabel}\n </span>\n </button>\n\n {/* Search */}\n <div className=\"shrink-0 flex items-center gap-base px-lg py-base border border-input rounded-md\">\n <Icon\n icon={faMagnifyingGlassOutline}\n size=\"sm\"\n className=\"shrink-0 text-muted-foreground\"\n />\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search...\"\n autoFocus\n className=\"flex-1 text-sm font-regular leading-sm text-foreground bg-transparent outline-none placeholder:text-muted-foreground\"\n />\n </div>\n\n {/* Property list */}\n <div className=\"flex flex-col flex-1 min-h-0 overflow-y-auto\">\n {filteredProperties.map((prop) => (\n <button\n key={prop.id}\n type=\"button\"\n onClick={() => {\n onSelect(prop);\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={prop.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n {prop.label}\n </span>\n </button>\n ))}\n {filteredProperties.length === 0 && (\n <span className=\"p-base text-sm text-muted-foreground\">\n No results\n </span>\n )}\n </div>\n </div>\n )}\n\n {showAdvancedFooter && (\n <AdvancedFilterFooter\n onClick={handleAdvancedClick}\n count={advancedFilterCount}\n />\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nPropertySelector.displayName = \"PropertySelector\";\n\nexport { PropertySelector };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon, faArrowRightOutline, faTrashOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── KebabMenu ───────────────────────────────────────────────────────────────\n\nexport interface KebabMenuProps {\n onConvertToAdvanced?: () => void;\n /** When true, label reads \"Add to advanced filters\" instead of \"Convert to advanced\". */\n hasAdvancedFilters?: boolean;\n onDelete?: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst KebabMenu: React.FC<KebabMenuProps> = ({\n onConvertToAdvanced,\n hasAdvancedFilters = false,\n onDelete,\n open,\n onOpenChange,\n children,\n}) => (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"end\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[210px]\",\n )}\n >\n {onConvertToAdvanced && (\n <button\n type=\"button\"\n onClick={() => {\n onConvertToAdvanced();\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={faArrowRightOutline}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"text-sm font-regular leading-sm text-dropdown-item-text\">\n {hasAdvancedFilters ? \"Add to advanced filters\" : \"Convert to advanced\"}\n </span>\n </button>\n )}\n\n {onConvertToAdvanced && onDelete && (\n <div className=\"h-px mx-base my-xs bg-border\" />\n )}\n\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => {\n onDelete();\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={faTrashOutline}\n size=\"sm\"\n className=\"shrink-0 text-destructive\"\n />\n <span className=\"text-sm font-regular leading-sm text-destructive\">\n Delete filter\n </span>\n </button>\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n);\nKebabMenu.displayName = \"KebabMenu\";\n\nexport { KebabMenu };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { OperatorList } from \"./operator-selector\";\nimport { ValueInput } from \"./value-input\";\nimport { isNoValueOperator } from \"./utils\";\nimport type { PropertyDefinition, FilterCondition, OperatorType, FilterValue } from \"./types\";\n\n// ── FilterEditor ────────────────────────────────────────────────────────────\n\nexport interface FilterEditorProps {\n propertyDef: PropertyDefinition;\n condition: FilterCondition;\n mode: \"add\" | \"edit\";\n onUpdate: (condition: FilterCondition) => void;\n onClose: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst FilterEditor: React.FC<FilterEditorProps> = ({\n propertyDef,\n condition,\n mode,\n onUpdate,\n onClose,\n open,\n onOpenChange,\n children,\n}) => {\n // In \"add\" mode, skip operator selection (already pre-selected) → show value\n // In \"edit\" mode, show operator list first\n const [view, setView] = React.useState<\"operator\" | \"value\">(\n mode === \"add\" ? \"value\" : \"operator\",\n );\n const [localOperator, setLocalOperator] = React.useState<OperatorType | null>(\n condition.operator,\n );\n const [localValue, setLocalValue] = React.useState<FilterValue>(\n condition.value,\n );\n\n // Reset view when mode changes or popover opens\n React.useEffect(() => {\n if (open) {\n setView(mode === \"add\" ? \"value\" : \"operator\");\n setLocalOperator(condition.operator);\n setLocalValue(condition.value);\n }\n }, [open, mode, condition.operator, condition.value]);\n\n const handleOperatorSelect = (op: OperatorType) => {\n setLocalOperator(op);\n if (isNoValueOperator(op)) {\n // Instant apply — no value needed\n onUpdate({ ...condition, operator: op, value: null });\n onOpenChange?.(false);\n onClose();\n } else {\n // If operator changed to a different value type, reset value\n if (op !== localOperator) {\n setLocalValue(null);\n }\n setView(\"value\");\n }\n };\n\n const handleSubmit = () => {\n onUpdate({ ...condition, operator: localOperator, value: localValue });\n onOpenChange?.(false);\n onClose();\n };\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[240px]\",\n )}\n >\n {/* Header — property context */}\n <div className=\"flex items-center gap-base px-base pt-base pb-xs border-b border-border\">\n <Icon\n icon={propertyDef.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"text-sm font-medium leading-sm text-foreground\">\n {propertyDef.label}\n </span>\n {localOperator && view === \"value\" && (\n <button\n type=\"button\"\n onClick={() => setView(\"operator\")}\n className=\"ml-auto text-xs font-regular text-muted-foreground hover:text-foreground cursor-pointer transition-colors\"\n >\n {localOperator} ▾\n </button>\n )}\n </div>\n\n {/* Body */}\n {view === \"operator\" ? (\n <div className=\"p-xs\">\n <OperatorList\n dataType={propertyDef.type}\n activeOperator={localOperator}\n onSelect={handleOperatorSelect}\n />\n </div>\n ) : (\n localOperator && (\n <ValueInput\n dataType={propertyDef.type}\n operator={localOperator}\n value={localValue}\n onChange={setLocalValue}\n onSubmit={handleSubmit}\n options={propertyDef.options}\n dynamicOptions={propertyDef.dynamicOptions}\n />\n )\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nFilterEditor.displayName = \"FilterEditor\";\n\nexport { FilterEditor };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { FilterChipSegment } from \"./filter-chip-segment\";\nimport { OperatorList } from \"./operator-selector\";\nimport { ValueInput } from \"./value-input\";\nimport { PropertySelector } from \"./property-selector\";\nimport { KebabMenu } from \"./kebab-menu\";\nimport {\n isNoValueOperator,\n getValueInputType,\n formatFilterValue,\n getBadgeCount,\n findEnumOption,\n} from \"./utils\";\nimport type {\n PropertyDefinition,\n FilterCondition,\n OperatorType,\n FilterValue,\n} from \"./types\";\n\n// ── Segment Popover (shared wrapper) ────────────────────────────────────────\n\ninterface SegmentPopoverProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n trigger: React.ReactNode;\n children: React.ReactNode;\n align?: \"start\" | \"center\" | \"end\";\n minWidth?: string;\n}\n\nconst SegmentPopover: React.FC<SegmentPopoverProps> = ({\n open,\n onOpenChange,\n trigger,\n children,\n align = \"start\",\n minWidth = \"240px\",\n}) => (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{trigger}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align={align}\n className={cn(\n \"z-50 flex flex-col overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n )}\n style={{ minWidth }}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n);\n\n// ── InteractiveFilterChip ───────────────────────────────────────────────────\n\nexport interface InteractiveFilterChipProps {\n propertyDef: PropertyDefinition;\n condition: FilterCondition;\n /** All available properties (for the property segment popover). */\n properties?: PropertyDefinition[];\n /** \"add\" auto-opens the value popover. */\n mode?: \"add\" | \"edit\";\n autoOpen?: boolean;\n onUpdate: (condition: FilterCondition) => void;\n /** Called when the property is changed (e.g., pick a different property). */\n onPropertyChange?: (property: PropertyDefinition) => void;\n onDelete: () => void;\n onConvertToAdvanced?: () => void;\n hasAdvancedFilters?: boolean;\n className?: string;\n}\n\nconst InteractiveFilterChip: React.FC<InteractiveFilterChipProps> = ({\n propertyDef,\n condition,\n properties,\n mode = \"edit\",\n autoOpen = false,\n onUpdate,\n onPropertyChange,\n onDelete,\n onConvertToAdvanced,\n hasAdvancedFilters = false,\n className,\n}) => {\n const [operatorOpen, setOperatorOpen] = React.useState(false);\n const [valueOpen, setValueOpen] = React.useState(false);\n const [propertyOpen, setPropertyOpen] = React.useState(false);\n const [kebabOpen, setKebabOpen] = React.useState(false);\n const [pendingValueOpen, setPendingValueOpen] = React.useState(false);\n\n // Auto-open value popover for newly added filters\n const autoOpenHandled = React.useRef(false);\n React.useEffect(() => {\n if (\n autoOpen &&\n !autoOpenHandled.current &&\n condition.operator &&\n !isNoValueOperator(condition.operator)\n ) {\n autoOpenHandled.current = true;\n setValueOpen(true);\n }\n }, [autoOpen, condition.operator]);\n\n // Open value popover after operator popover closes (when pending)\n React.useEffect(() => {\n if (!operatorOpen && pendingValueOpen) {\n setPendingValueOpen(false);\n setValueOpen(true);\n }\n }, [operatorOpen, pendingValueOpen]);\n\n const handleOperatorSelect = (op: OperatorType) => {\n if (isNoValueOperator(op)) {\n onUpdate({ ...condition, operator: op, value: null });\n setOperatorOpen(false);\n } else {\n const resetValue = op !== condition.operator ? null : condition.value;\n onUpdate({ ...condition, operator: op, value: resetValue });\n setOperatorOpen(false);\n if (resetValue == null) {\n setPendingValueOpen(true);\n }\n }\n };\n\n const handleValueChange = (val: FilterValue) => {\n onUpdate({ ...condition, value: val });\n };\n\n const handleValueSubmit = () => {\n setValueOpen(false);\n };\n\n const hasOperator = !!condition.operator;\n const displayValue = formatFilterValue(\n condition.value,\n propertyDef.dynamicOptions,\n false,\n propertyDef.options,\n );\n const hasValue = hasOperator && displayValue != null;\n const badgeCount = getBadgeCount(condition.value);\n\n // Resolve the leading visual (icon) for the selected enum value — shows up\n // as an adornment on the value segment so users recognize the option at a\n // glance without reading the label.\n const valueLeading = React.useMemo<React.ReactNode>(() => {\n const v = condition.value;\n const raw =\n typeof v === \"string\"\n ? v\n : Array.isArray(v) && typeof v[0] === \"string\"\n ? (v[0] as string)\n : null;\n if (!raw) return null;\n const opt = findEnumOption(raw, propertyDef.options);\n if (opt?.icon) {\n return (\n <Icon\n icon={opt.icon}\n size=\"sm\"\n className=\"shrink-0 text-filter-chip-segment-icon\"\n />\n );\n }\n return null;\n }, [condition.value, propertyDef.options]);\n\n return (\n <div\n className={cn(\n \"inline-flex items-center overflow-clip\",\n \"bg-filter-chip-bg border border-filter-chip-border rounded-lg shadow-sm\",\n className,\n )}\n >\n {/* ── Property segment ─────────────────────────────────────── */}\n {properties ? (\n <PropertySelector\n properties={properties}\n onSelect={(prop) => {\n onPropertyChange?.(prop);\n setPropertyOpen(false);\n }}\n open={propertyOpen}\n onOpenChange={setPropertyOpen}\n >\n <div>\n <FilterChipSegment\n segmentType=\"property\"\n hasBorder\n icon={propertyDef.icon}\n label={propertyDef.label}\n onClick={() => setPropertyOpen(true)}\n />\n </div>\n </PropertySelector>\n ) : (\n <FilterChipSegment\n segmentType=\"property\"\n hasBorder\n icon={propertyDef.icon}\n label={propertyDef.label}\n />\n )}\n\n {/* ── Operator segment ─────────────────────────────────────── */}\n <SegmentPopover\n open={operatorOpen}\n onOpenChange={setOperatorOpen}\n minWidth=\"180px\"\n trigger={\n <div>\n <FilterChipSegment\n segmentType={hasOperator ? \"operator\" : \"placeholder\"}\n hasBorder\n label={hasOperator ? (condition.operator as string) : \"Select condition\"}\n onClick={() => setOperatorOpen(true)}\n />\n </div>\n }\n >\n <div className=\"p-xs\">\n <OperatorList\n dataType={propertyDef.type}\n activeOperator={condition.operator}\n onSelect={handleOperatorSelect}\n />\n </div>\n </SegmentPopover>\n\n {/* ── Value segment (only when operator is set) ────────────── */}\n {hasOperator && condition.operator && !isNoValueOperator(condition.operator) && (() => {\n // DatePicker / DateRange need wider popovers; everything else uses 240px\n const inputType = getValueInputType(propertyDef.type, condition.operator!);\n const dateWide = inputType === \"DatePicker\" || inputType === \"DateRange\";\n return (\n <SegmentPopover\n open={valueOpen}\n onOpenChange={setValueOpen}\n minWidth={dateWide ? \"auto\" : \"240px\"}\n trigger={\n <div>\n <FilterChipSegment\n segmentType={hasValue ? \"value\" : \"placeholder\"}\n hasBorder\n label={hasValue ? displayValue : \"Enter value\"}\n badgeCount={badgeCount}\n adornment={hasValue ? valueLeading : undefined}\n onClick={() => setValueOpen(true)}\n />\n </div>\n }\n >\n <ValueInput\n dataType={propertyDef.type}\n operator={condition.operator}\n value={condition.value}\n onChange={handleValueChange}\n onSubmit={handleValueSubmit}\n options={propertyDef.options}\n dynamicOptions={propertyDef.dynamicOptions}\n />\n </SegmentPopover>\n );\n })()}\n\n {/* ── Value segment for no-value operators (read-only) ─────── */}\n {hasOperator && condition.operator && isNoValueOperator(condition.operator) && (\n <FilterChipSegment\n segmentType=\"value\"\n hasBorder\n label={condition.operator}\n />\n )}\n\n {/* ── Kebab button ─────────────────────────────────────────── */}\n {hasOperator && (\n <KebabMenu\n open={kebabOpen}\n onOpenChange={setKebabOpen}\n onConvertToAdvanced={onConvertToAdvanced}\n hasAdvancedFilters={hasAdvancedFilters}\n onDelete={onDelete}\n >\n <div>\n <FilterChipSegment\n segmentType=\"button\"\n onKebabClick={(e) => {\n e.stopPropagation();\n setKebabOpen(true);\n }}\n />\n </div>\n </KebabMenu>\n )}\n </div>\n );\n};\nInteractiveFilterChip.displayName = \"InteractiveFilterChip\";\n\nexport { InteractiveFilterChip };\n","import * as React from \"react\";\nimport { Icon, faPlusOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { FilterBar, FilterBarLeft, FilterBarRight } from \"./filter-bar\";\nimport { FilterBarButton } from \"./filter-bar-button\";\nimport { InteractiveFilterChip } from \"./interactive-filter-chip\";\nimport { PropertySelector } from \"./property-selector\";\nimport { AdvancedChip } from \"./advanced-chip\";\nimport { AdvancedPopover } from \"./advanced-popover\";\nimport { SummaryChip } from \"./summary-chip\";\nimport { SortButton, type SortField } from \"./sort-button\";\nimport { useFilterBarMode, type FilterBarMode } from \"./use-filter-bar-mode\";\nimport { createFilterWithDefaults, isNoValueOperator, countConditions, formatFilterValue } from \"./utils\";\nimport type {\n PropertyDefinition,\n FilterCondition,\n FilterNode,\n FilterState,\n} from \"./types\";\n\n// ── FilterSystem ────────────────────────────────────────────────────────────\n\nexport interface FilterSystemProps {\n properties: PropertyDefinition[];\n filterState: FilterState;\n onFilterStateChange: (state: FilterState) => void;\n sortFields?: SortField[];\n /** Force a specific mode instead of auto-detecting via ResizeObserver. */\n mode?: FilterBarMode;\n /** Width breakpoint (px) for switching to minimal mode. Default: 600. */\n breakpoint?: number;\n /**\n * Constrain popovers to stay within the container bounds. Use this when\n * FilterSystem lives inside an iframe or a fixed-width panel where content\n * must not overflow.\n */\n bounded?: boolean;\n children?: React.ReactNode;\n /**\n * Right-aligned slot on Row 1 — always visible, even while the user edits\n * filters. Use for \"Create\", \"Import\", \"Start tasks\" and similar page-level\n * actions.\n */\n actions?: React.ReactNode;\n /**\n * Right-aligned slot on Row 2 — only visible when the filters row is\n * rendered. Use for view-related actions that only make sense while editing\n * filters, e.g. \"Discard changes\" + \"Save view\".\n */\n filterActions?: React.ReactNode;\n /**\n * Uncontrolled initial state of Row 2 (filter chips row). Defaults to `true`\n * — the row is expanded as soon as a filter exists. Toggled by clicking the\n * Filters button on Row 1. Ignored when `filtersRowExpanded` is provided.\n */\n defaultFiltersRowExpanded?: boolean;\n /** Controlled expanded state of Row 2. */\n filtersRowExpanded?: boolean;\n onFiltersRowExpandedChange?: (expanded: boolean) => void;\n className?: string;\n}\n\nconst FilterSystem: React.FC<FilterSystemProps> = ({\n properties,\n filterState,\n onFilterStateChange,\n sortFields,\n mode: modeOverride,\n breakpoint,\n bounded = false,\n children,\n actions,\n filterActions,\n defaultFiltersRowExpanded = true,\n filtersRowExpanded,\n onFiltersRowExpandedChange,\n className,\n}) => {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const mode = useFilterBarMode(containerRef, modeOverride, breakpoint);\n const collisionBoundary = bounded ? containerRef.current : undefined;\n\n const [propertySelectorOpen, setPropertySelectorOpen] = React.useState(false);\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const [summaryOpen, setSummaryOpen] = React.useState(false);\n const [pendingFilterId, setPendingFilterId] = React.useState<string | null>(null);\n\n // Row 2 expanded state (controlled / uncontrolled).\n const [internalExpanded, setInternalExpanded] = React.useState(\n defaultFiltersRowExpanded,\n );\n const isExpandedControlled = filtersRowExpanded !== undefined;\n const rowExpanded = isExpandedControlled ? filtersRowExpanded : internalExpanded;\n const setRowExpanded = React.useCallback(\n (next: boolean) => {\n if (!isExpandedControlled) setInternalExpanded(next);\n onFiltersRowExpandedChange?.(next);\n },\n [isExpandedControlled, onFiltersRowExpandedChange],\n );\n\n const totalCount = filterState.basicFilters.length + countConditions(filterState.advancedFilters);\n\n // When filters transition from 0 → 1 (e.g. user just added the first one),\n // ensure Row 2 is visible regardless of prior collapsed state.\n const prevTotalCount = React.useRef(totalCount);\n React.useEffect(() => {\n if (prevTotalCount.current === 0 && totalCount > 0) {\n setRowExpanded(true);\n }\n prevTotalCount.current = totalCount;\n }, [totalCount, setRowExpanded]);\n\n const handleAddFilter = (property: PropertyDefinition) => {\n const newFilter = createFilterWithDefaults(property.id, property.type);\n\n if (newFilter.operator && isNoValueOperator(newFilter.operator)) {\n onFilterStateChange({\n ...filterState,\n basicFilters: [...filterState.basicFilters, newFilter],\n });\n return;\n }\n\n setPendingFilterId(newFilter.id);\n onFilterStateChange({\n ...filterState,\n basicFilters: [...filterState.basicFilters, newFilter],\n });\n };\n\n const handleUpdateFilter = (updated: FilterCondition) => {\n onFilterStateChange({\n ...filterState,\n basicFilters: filterState.basicFilters.map((f) =>\n f.id === updated.id ? updated : f,\n ),\n });\n if (pendingFilterId === updated.id) {\n setPendingFilterId(null);\n }\n };\n\n const handleDeleteFilter = (id: string) => {\n onFilterStateChange({\n ...filterState,\n basicFilters: filterState.basicFilters.filter((f) => f.id !== id),\n });\n };\n\n const handlePropertyChange = (filterId: string, newProp: PropertyDefinition) => {\n const newCondition = createFilterWithDefaults(newProp.id, newProp.type);\n onFilterStateChange({\n ...filterState,\n basicFilters: filterState.basicFilters.map((f) =>\n f.id === filterId ? { ...newCondition, id: filterId } : f,\n ),\n });\n if (newCondition.operator && !isNoValueOperator(newCondition.operator)) {\n setPendingFilterId(filterId);\n }\n };\n\n const handleConvertToAdvanced = (id: string) => {\n const filter = filterState.basicFilters.find((f) => f.id === id);\n if (!filter) return;\n onFilterStateChange({\n ...filterState,\n basicFilters: filterState.basicFilters.filter((f) => f.id !== id),\n advancedFilters: [...filterState.advancedFilters, filter],\n });\n };\n\n const handleAdvancedFiltersChange = (filters: FilterNode[]) => {\n onFilterStateChange({ ...filterState, advancedFilters: filters });\n };\n\n const handleClearAdvanced = () => {\n onFilterStateChange({ ...filterState, advancedFilters: [] });\n };\n\n const handleClearAll = () => {\n onFilterStateChange({\n ...filterState,\n basicFilters: [],\n advancedFilters: [],\n });\n };\n\n const handleSortChange = (field: string, direction: \"asc\" | \"desc\") => {\n onFilterStateChange({ ...filterState, sort: { field, direction } });\n };\n\n const getPropertyDef = (propertyId: string): PropertyDefinition | undefined =>\n properties.find((p) => p.id === propertyId);\n\n const hasAdvanced = filterState.advancedFilters.length > 0;\n const isMinimal = mode === \"minimal\" || mode === \"icon\";\n const isIconOnly = mode === \"icon\";\n\n const handleOpenAdvanced = () => {\n setPropertySelectorOpen(false);\n // Defer opening the target popover to the next frame. This + the\n // onCloseAutoFocus/onOpenAutoFocus preventDefault on both popovers is\n // what stops Radix's DismissableLayer from seeing the focus shift\n // (triggered by the previous popover returning focus to its trigger)\n // as a \"focus outside\" and instantly dismissing the new popover.\n requestAnimationFrame(() => {\n if (isMinimal) {\n setSummaryOpen(true);\n } else {\n setAdvancedOpen(true);\n }\n });\n };\n const advancedFilterCount = filterState.advancedFilters.length;\n const showAdvancedChip = hasAdvanced || advancedOpen;\n\n\n // ── Row 2 visibility (full mode only) ────────────────────────────────────\n const showFiltersRow = !isMinimal && totalCount > 0 && rowExpanded;\n\n // ── Filters button behavior on Row 1 (full mode) ─────────────────────────\n // - No filters: opens PropertySelector (wrapped as its trigger)\n // - Has filters: plain button that toggles Row 2 visibility\n const filtersButton = totalCount === 0 ? (\n <PropertySelector\n properties={properties}\n onSelect={handleAddFilter}\n open={propertySelectorOpen}\n onOpenChange={setPropertySelectorOpen}\n onAdvancedFilter={handleOpenAdvanced}\n advancedFilterCount={advancedFilterCount}\n >\n <FilterBarButton />\n </PropertySelector>\n ) : (\n <FilterBarButton\n count={totalCount}\n onClick={() => setRowExpanded(!rowExpanded)}\n aria-expanded={rowExpanded}\n />\n );\n\n return (\n <div\n ref={containerRef}\n className={cn(\"w-full flex flex-col\", className)}\n >\n {/* ── Row 1 — always rendered ──────────────────────────────────── */}\n <FilterBar>\n <FilterBarLeft className=\"flex-wrap flex-1 min-w-0\">\n {children}\n\n {/* Sort button */}\n {sortFields && filterState.sort && (\n <SortButton\n fields={sortFields}\n activeField={filterState.sort.field}\n direction={filterState.sort.direction}\n onChange={handleSortChange}\n iconOnly={isMinimal}\n />\n )}\n\n {/* ── MINIMAL / ICON MODE ────────────────────────────────── */}\n {isMinimal ? (\n <SummaryChip\n count={totalCount}\n filters={[...filterState.basicFilters, ...filterState.advancedFilters]}\n properties={properties}\n onFiltersChange={(nodes) => {\n onFilterStateChange({\n ...filterState,\n basicFilters: [],\n advancedFilters: nodes,\n });\n }}\n onClearAll={handleClearAll}\n open={summaryOpen}\n onOpenChange={setSummaryOpen}\n collisionBoundary={collisionBoundary}\n tooltipContent={totalCount > 0 ? buildFilterTooltip([...filterState.basicFilters, ...filterState.advancedFilters], properties) : undefined}\n >\n <FilterBarButton\n iconOnly={isIconOnly}\n count={totalCount > 0 ? totalCount : undefined}\n />\n </SummaryChip>\n ) : (\n /* ── FULL MODE — Filters button only on Row 1 ────────── */\n filtersButton\n )}\n\n {/* Clear button — minimal mode keeps the inline Clear. Full mode's\n Clear lives on Row 2. */}\n {isMinimal && !isIconOnly && totalCount > 0 && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"shrink-0 flex items-center gap-sm px-base py-sm min-h-[32px] max-h-[32px] rounded-md cursor-pointer transition-colors text-btn-ghost-brand-text-default hover:bg-btn-ghost-brand-bg-hover hover:text-btn-ghost-brand-text-hover active:bg-btn-ghost-brand-bg-pressed active:text-btn-ghost-brand-text-pressed\"\n >\n <span className=\"text-sm font-medium leading-sm\">\n Clear\n </span>\n </button>\n )}\n </FilterBarLeft>\n\n {actions && (\n <FilterBarRight className=\"shrink-0\">\n {actions}\n </FilterBarRight>\n )}\n </FilterBar>\n\n {/* ── Row 2 — full mode only, when filters exist and expanded ─── */}\n {showFiltersRow && (\n <div\n className=\"flex items-start justify-between w-full pt-sm\"\n role=\"toolbar\"\n aria-label=\"Active filters\"\n >\n <div className=\"flex items-center gap-base flex-wrap flex-1 min-w-0\">\n {showAdvancedChip && (\n <AdvancedPopover\n filters={filterState.advancedFilters}\n properties={properties}\n onFiltersChange={handleAdvancedFiltersChange}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n collisionBoundary={collisionBoundary}\n >\n <AdvancedChip\n count={filterState.advancedFilters.length}\n onClick={() => setAdvancedOpen(true)}\n onClear={handleClearAdvanced}\n />\n </AdvancedPopover>\n )}\n\n {/* Basic filter chips */}\n {filterState.basicFilters.map((filter) => {\n const propDef = getPropertyDef(filter.propertyId);\n if (!propDef) return null;\n return (\n <InteractiveFilterChip\n key={filter.id}\n propertyDef={propDef}\n condition={filter}\n properties={properties}\n mode={pendingFilterId === filter.id ? \"add\" : \"edit\"}\n autoOpen={pendingFilterId === filter.id}\n onUpdate={handleUpdateFilter}\n onPropertyChange={(newProp) => handlePropertyChange(filter.id, newProp)}\n onDelete={() => handleDeleteFilter(filter.id)}\n onConvertToAdvanced={() => handleConvertToAdvanced(filter.id)}\n hasAdvancedFilters={hasAdvanced}\n />\n );\n })}\n\n {/* Add filter \"+\" — compact trigger next to existing chips */}\n <PropertySelector\n properties={properties}\n onSelect={handleAddFilter}\n open={propertySelectorOpen}\n onOpenChange={setPropertySelectorOpen}\n onAdvancedFilter={handleOpenAdvanced}\n advancedFilterCount={advancedFilterCount}\n >\n <button\n type=\"button\"\n className=\"shrink-0 inline-flex items-center justify-center size-8 rounded-md border border-btn-outlined-neutral-border-default bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default shadow-sm cursor-pointer transition-colors hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\"\n aria-label=\"Add filter\"\n >\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n </button>\n </PropertySelector>\n\n {/* Clear */}\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"shrink-0 flex items-center gap-sm px-base py-sm min-h-[32px] max-h-[32px] rounded-md cursor-pointer transition-colors text-btn-ghost-brand-text-default hover:bg-btn-ghost-brand-bg-hover hover:text-btn-ghost-brand-text-hover active:bg-btn-ghost-brand-bg-pressed active:text-btn-ghost-brand-text-pressed\"\n >\n <span className=\"text-sm font-medium leading-sm\">Clear</span>\n </button>\n </div>\n\n {filterActions && (\n <div className=\"flex items-center shrink-0 gap-sm\">\n {filterActions}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\nFilterSystem.displayName = \"FilterSystem\";\n\n// ── Filter tooltip content ─────────────────────────────────────────────────\n\nfunction buildFilterTooltip(\n nodes: FilterNode[],\n properties: PropertyDefinition[],\n): React.ReactNode {\n const renderNodes = (items: FilterNode[], depth: number): React.ReactNode[] => {\n const result: React.ReactNode[] = [];\n for (let i = 0; i < items.length; i++) {\n const node = items[i];\n const connector = i > 0 ? (node.logicOperator ?? \"and\").toUpperCase() : null;\n\n if (\"children\" in node && node.type === \"group\") {\n if (connector) {\n result.push(\n <div key={`${node.id}-conn`} style={{ paddingLeft: depth * 8 }}>\n <span className=\"opacity-50 text-xs\">{connector}</span>\n </div>,\n );\n }\n result.push(...renderNodes(node.children, depth + 1));\n } else {\n const f = node as FilterCondition;\n const prop = properties.find((p) => p.id === f.propertyId);\n if (!prop) continue;\n const val = formatFilterValue(f.value, prop.dynamicOptions, true);\n result.push(\n <div key={f.id} style={{ paddingLeft: depth * 8 }}>\n {connector && <span className=\"opacity-50 text-xs\">{connector} </span>}\n <span className=\"font-medium\">{prop.label}</span>{\" \"}\n <span className=\"opacity-60\">{f.operator}</span>{\" \"}\n {val && <span>{val}</span>}\n </div>,\n );\n }\n }\n return result;\n };\n\n return <div className=\"flex flex-col gap-2xs\">{renderNodes(nodes, 0)}</div>;\n}\n\nexport { FilterSystem };\n","import * as React from \"react\";\nimport { Icon, faXmarkOutline, faFilterOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── Shared button style (outlined neutral, matching SortButton/FilterBarButton) ──\n\nconst btnBase = [\n \"flex items-center justify-center\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n];\n\n// ── AdvancedChip ────────────────────────────────────────────────────────────\n\nexport interface AdvancedChipProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Number of advanced filters. */\n count: number;\n /** Called when the close (×) button is clicked. */\n onClear?: () => void;\n}\n\nconst AdvancedChip = React.forwardRef<HTMLButtonElement, AdvancedChipProps>(\n ({ className, count, onClear, onClick, ...props }, ref) => (\n <div className={cn(\"inline-flex items-center\", className)}>\n {/* Main button — label + badge */}\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n className={cn(\n btnBase,\n \"gap-sm px-base py-sm min-w-[80px]\",\n \"rounded-l-md -mr-px\",\n )}\n {...props}\n >\n <Icon\n icon={faFilterOutline}\n size=\"sm\"\n className=\"shrink-0 text-foreground\"\n />\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap text-foreground\">\n Advanced filters\n </span>\n {count > 0 && (\n <span className=\"flex items-center p-2xs rounded-xs bg-filter-chip-badge-bg\">\n <span className=\"text-[10px] font-medium leading-2xs text-filter-chip-badge-text\">\n {count}\n </span>\n </span>\n )}\n </button>\n\n {/* Close button */}\n {onClear && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onClear();\n }}\n className={cn(\n btnBase,\n \"p-sm\",\n \"rounded-r-md -ml-px\",\n )}\n aria-label=\"Clear all advanced filters\"\n >\n <Icon icon={faXmarkOutline} size=\"sm\" className=\"text-foreground\" />\n </button>\n )}\n </div>\n ),\n);\nAdvancedChip.displayName = \"AdvancedChip\";\n\nexport { AdvancedChip };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon, faPlusOutline, faChevronDownOutline, faXmarkOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { AdvancedRow } from \"./advanced-row\";\nimport { AdvancedGroup } from \"./advanced-group\";\nimport { PropertySelector } from \"./property-selector\";\nimport {\n createFilterWithDefaults,\n createEmptyGroup,\n isFilterGroup,\n duplicateNode,\n wrapInGroup,\n unwrapGroup,\n removeNodeFromTree,\n updateNodeInTree,\n insertAfterInTree,\n replaceNodeInTree,\n toggleGroupLogicInTree,\n} from \"./utils\";\nimport type {\n PropertyDefinition,\n FilterCondition,\n FilterNode,\n} from \"./types\";\n\n// ── Ghost button style ─────────────────────────────────────────────────────\n\nconst ghostBtn = [\n \"flex items-center gap-sm px-base py-sm\",\n \"min-h-[32px]\",\n \"cursor-pointer transition-colors text-sm font-medium leading-sm\",\n \"rounded-md hover:bg-accent\",\n];\n\n// ── AdvancedPopover ─────────────────────────────────────────────────────────\n\nexport interface AdvancedPopoverProps {\n filters: FilterNode[];\n properties: PropertyDefinition[];\n onFiltersChange: (filters: FilterNode[]) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n collisionBoundary?: Element | null;\n}\n\nconst AdvancedPopover: React.FC<AdvancedPopoverProps> = ({\n filters,\n properties,\n onFiltersChange,\n open,\n onOpenChange,\n children,\n collisionBoundary,\n}) => {\n const [addSelectorOpen, setAddSelectorOpen] = React.useState(false);\n const [draftPickerOpen, setDraftPickerOpen] = React.useState(false);\n const [groupSelectorOpen, setGroupSelectorOpen] = React.useState(false);\n\n const getPropertyDef = (propertyId: string) =>\n properties.find((p) => p.id === propertyId);\n\n // ── Handlers ──────────────────────────────────────────────\n\n const handleAddFilter = (property: PropertyDefinition) => {\n const newFilter = createFilterWithDefaults(property.id, property.type);\n onFiltersChange([...filters, newFilter]);\n setAddSelectorOpen(false);\n };\n\n const handleAddGroup = () => {\n const group = createEmptyGroup();\n onFiltersChange([...filters, group]);\n setGroupSelectorOpen(false);\n };\n\n const handleClearAll = () => {\n onFiltersChange([]);\n onOpenChange?.(false);\n };\n\n // Tree operations\n const handleUpdateNode = (id: string, updated: FilterNode) => {\n onFiltersChange(updateNodeInTree(filters, id, () => updated));\n };\n\n const handleDeleteNode = (id: string) => {\n onFiltersChange(removeNodeFromTree(filters, id));\n };\n\n const handleDuplicateNode = (id: string) => {\n const find = (nodes: FilterNode[]): FilterNode | undefined => {\n for (const n of nodes) {\n if (n.id === id) return n;\n if (isFilterGroup(n)) {\n const found = find(n.children);\n if (found) return found;\n }\n }\n };\n const node = find(filters);\n if (!node) return;\n const clone = duplicateNode(node);\n clone.logicOperator = node.logicOperator ?? \"and\";\n onFiltersChange(insertAfterInTree(filters, id, clone));\n };\n\n const handleWrapInGroup = (id: string) => {\n const find = (nodes: FilterNode[]): FilterCondition | undefined => {\n for (const n of nodes) {\n if (n.id === id && !isFilterGroup(n)) return n as FilterCondition;\n if (isFilterGroup(n)) {\n const found = find(n.children);\n if (found) return found;\n }\n }\n };\n const condition = find(filters);\n if (!condition) return;\n const group = wrapInGroup(condition);\n onFiltersChange(replaceNodeInTree(filters, id, group));\n };\n\n const handleUnwrapGroup = (id: string) => {\n const find = (nodes: FilterNode[]): import(\"./types\").FilterGroup | undefined => {\n for (const n of nodes) {\n if (n.id === id && isFilterGroup(n)) return n;\n if (isFilterGroup(n)) {\n const found = find(n.children);\n if (found) return found;\n }\n }\n };\n const group = find(filters);\n if (!group) return;\n const replacement = unwrapGroup(group);\n if (replacement) {\n onFiltersChange(replaceNodeInTree(filters, id, replacement));\n } else {\n onFiltersChange(removeNodeFromTree(filters, id));\n }\n };\n\n const toggleLogicOp = (id: string) => {\n onFiltersChange(toggleGroupLogicInTree(filters, id));\n };\n\n // Update children of a specific group\n const handleGroupChildrenChange = (groupId: string, children: FilterNode[]) => {\n onFiltersChange(\n updateNodeInTree(filters, groupId, (n) =>\n isFilterGroup(n) ? { ...n, children } : n,\n ),\n );\n };\n\n // ── Recursive renderer ────────────────────────────────────\n\n const renderNode = (node: FilterNode, index: number): React.ReactNode => {\n const connector =\n index === 0\n ? \"Where\" as const\n : (node.logicOperator ?? \"and\") === \"and\"\n ? \"And\" as const\n : \"Or\" as const;\n\n if (isFilterGroup(node)) {\n return (\n <AdvancedGroup\n key={node.id}\n connector={connector}\n onConnectorToggle={index > 0 ? () => toggleLogicOp(node.id) : undefined}\n onDuplicate={() => handleDuplicateNode(node.id)}\n onTurnIntoFilter={() => handleUnwrapGroup(node.id)}\n onDelete={() => handleDeleteNode(node.id)}\n properties={properties}\n onAddFilter={(prop) => {\n const newFilter = createFilterWithDefaults(prop.id, prop.type);\n handleGroupChildrenChange(node.id, [...node.children, newFilter]);\n }}\n >\n {node.children.length === 0 ? (\n /* Draft row in empty group */\n <DraftRow\n properties={properties}\n onSelect={(prop) => {\n const newFilter = createFilterWithDefaults(prop.id, prop.type);\n handleGroupChildrenChange(node.id, [newFilter]);\n }}\n />\n ) : (\n node.children.map((child, i) => renderNode(child, i))\n )}\n </AdvancedGroup>\n );\n }\n\n const propDef = getPropertyDef(node.propertyId);\n if (!propDef) return null;\n\n return (\n <AdvancedRow\n key={node.id}\n connector={connector}\n onConnectorToggle={index > 0 ? () => toggleLogicOp(node.id) : undefined}\n propertyDef={propDef}\n condition={node as FilterCondition}\n properties={properties}\n onUpdate={(updated) => handleUpdateNode(node.id, updated)}\n onPropertyChange={(p) => {\n const newCondition = createFilterWithDefaults(p.id, p.type);\n handleUpdateNode(node.id, { ...newCondition, id: node.id });\n }}\n onDelete={() => handleDeleteNode(node.id)}\n onDuplicate={() => handleDuplicateNode(node.id)}\n onTurnIntoGroup={() => handleWrapInGroup(node.id)}\n />\n );\n };\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n collisionPadding={16}\n collisionBoundary={collisionBoundary ?? undefined}\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={cn(\n \"z-50 flex flex-col\",\n \"bg-background rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n collisionBoundary\n ? \"w-[min(640px,var(--radix-popover-content-available-width))] min-w-0\"\n : \"w-[min(640px,calc(100vw-32px))] min-w-[360px]\",\n )}\n >\n {/* Nodes */}\n <div className=\"flex flex-col gap-base p-base\">\n {filters.length > 0\n ? filters.map((node, i) => renderNode(node, i))\n : (\n <DraftRow\n properties={properties}\n onSelect={handleAddFilter}\n open={draftPickerOpen}\n onOpenChange={setDraftPickerOpen}\n />\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-between p-base border-t border-border\">\n <div className=\"flex items-center gap-sm\">\n {/* Add filter */}\n <PropertySelector\n properties={properties}\n onSelect={handleAddFilter}\n open={addSelectorOpen}\n onOpenChange={setAddSelectorOpen}\n >\n <button type=\"button\" className={cn(ghostBtn, \"text-foreground\")}>\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n Add filter\n </button>\n </PropertySelector>\n\n {/* Add filters group */}\n <button\n type=\"button\"\n onClick={handleAddGroup}\n className={cn(ghostBtn, \"text-foreground\")}\n >\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n Add filters group\n </button>\n </div>\n\n {/* Clear filters */}\n {filters.length > 0 && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className={cn(ghostBtn, \"text-destructive\")}\n >\n <Icon icon={faXmarkOutline} size=\"sm\" className=\"text-destructive\" />\n Clear filters\n </button>\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nAdvancedPopover.displayName = \"AdvancedPopover\";\n\n// ── DraftRow (empty \"Where | Select property\" placeholder) ─────────────────\n\ninterface DraftRowProps {\n properties: PropertyDefinition[];\n onSelect: (property: PropertyDefinition) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst DraftRow: React.FC<DraftRowProps> = ({\n properties,\n onSelect,\n open: openProp,\n onOpenChange,\n}) => {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n const setOpen = (v: boolean) => {\n if (!isControlled) setInternalOpen(v);\n onOpenChange?.(v);\n };\n\n return (\n <div className=\"flex items-center gap-base w-full min-w-0\">\n <div className=\"shrink-0 w-[64px] flex items-center justify-end\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">\n Where\n </span>\n </div>\n <PropertySelector\n properties={properties}\n onSelect={(prop) => {\n onSelect(prop);\n setOpen(false);\n }}\n open={open}\n onOpenChange={setOpen}\n >\n <button\n type=\"button\"\n className={cn(\n \"flex items-center gap-base px-base py-sm min-w-0\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n )}\n >\n <span className=\"text-sm font-regular leading-sm text-muted-foreground whitespace-nowrap\">\n Select property\n </span>\n <Icon\n icon={faChevronDownOutline}\n size=\"xs\"\n className=\"shrink-0 text-foreground\"\n />\n </button>\n </PropertySelector>\n </div>\n );\n};\n\nexport { AdvancedPopover };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { Icon, faChevronDownOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { OperatorList } from \"./operator-selector\";\nimport { ValueInput } from \"./value-input\";\nimport { FilterNodeActions } from \"./filter-node-actions\";\nimport {\n isNoValueOperator,\n getValueInputType,\n formatFilterValue,\n getBadgeCount,\n findEnumOption,\n} from \"./utils\";\nimport type {\n PropertyDefinition,\n FilterCondition,\n OperatorType,\n FilterValue,\n} from \"./types\";\n\nexport type { LogicOperator } from \"./types\";\n\n// ── Select button (shared style for property + operator selectors) ──────────\n\nconst selectBtnStyle = [\n \"flex items-center gap-base\",\n \"px-base py-sm\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-lg shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n];\n\n// ── AdvancedRow ─────────────────────────────────────────────────────────────\n\nexport interface AdvancedRowProps {\n /** \"Where\" for the first row, \"And\"/\"Or\" for subsequent. */\n connector: \"Where\" | \"And\" | \"Or\";\n /** Called when the And/Or toggle is clicked. */\n onConnectorToggle?: () => void;\n propertyDef: PropertyDefinition;\n condition: FilterCondition;\n properties: PropertyDefinition[];\n onUpdate: (condition: FilterCondition) => void;\n onPropertyChange: (property: PropertyDefinition) => void;\n onDelete: () => void;\n onDuplicate?: () => void;\n onTurnIntoGroup?: () => void;\n}\n\nconst AdvancedRow: React.FC<AdvancedRowProps> = ({\n connector,\n onConnectorToggle,\n propertyDef,\n condition,\n properties,\n onUpdate,\n onPropertyChange,\n onDelete,\n onDuplicate,\n onTurnIntoGroup,\n}) => {\n const [operatorOpen, setOperatorOpen] = React.useState(false);\n const [propertyOpen, setPropertyOpen] = React.useState(false);\n const [valueOpen, setValueOpen] = React.useState(false);\n\n // Partition properties: pinned (rendered first) vs non-pinned (after divider).\n const { pinnedProperties, unpinnedProperties } = React.useMemo(() => {\n const pinnedGroups = new Set<string>();\n for (const p of properties) {\n if (p.groupPinned) pinnedGroups.add(p.group);\n }\n const pinned: PropertyDefinition[] = [];\n const unpinned: PropertyDefinition[] = [];\n for (const p of properties) {\n if (pinnedGroups.has(p.group)) pinned.push(p);\n else unpinned.push(p);\n }\n return { pinnedProperties: pinned, unpinnedProperties: unpinned };\n }, [properties]);\n\n const handleOperatorSelect = (op: OperatorType) => {\n if (isNoValueOperator(op)) {\n onUpdate({ ...condition, operator: op, value: null });\n } else {\n const resetValue = op !== condition.operator ? null : condition.value;\n onUpdate({ ...condition, operator: op, value: resetValue });\n }\n setOperatorOpen(false);\n };\n\n const handleValueChange = (val: FilterValue) => {\n onUpdate({ ...condition, value: val });\n };\n\n const displayValue = formatFilterValue(\n condition.value,\n propertyDef.dynamicOptions,\n false,\n propertyDef.options,\n );\n\n // Leading icon for the selected (single) enum value — rendered next to the\n // label inside the value select button.\n const valueLeadingIcon = React.useMemo(() => {\n const v = condition.value;\n const raw =\n typeof v === \"string\"\n ? v\n : Array.isArray(v) && typeof v[0] === \"string\"\n ? (v[0] as string)\n : null;\n if (!raw) return null;\n return findEnumOption(raw, propertyDef.options)?.icon ?? null;\n }, [condition.value, propertyDef.options]);\n const badgeCount = getBadgeCount(condition.value);\n const hasValue = displayValue != null;\n\n return (\n <div className=\"flex items-center gap-base w-full min-w-0\">\n {/* ── Connector: Where label or And/Or toggle button ─────── */}\n {connector === \"Where\" ? (\n <div className=\"shrink-0 w-[64px] flex items-center justify-end\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">\n Where\n </span>\n </div>\n ) : (\n <div className=\"shrink-0 w-[64px] flex items-center justify-end\">\n <TooltipPrimitive.Provider delayDuration={200}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className=\"text-xs font-medium leading-xs text-muted-foreground cursor-default\">\n {connector}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-sm font-regular leading-sm data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n "Or" operator coming soon\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n </div>\n )}\n\n {/* ── Property selector ─────────────────────────────────── */}\n <PopoverPrimitive.Root open={propertyOpen} onOpenChange={setPropertyOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button type=\"button\" className={cn(selectBtnStyle, \"min-w-0\")}>\n <Icon icon={propertyDef.icon} size=\"sm\" className=\"shrink-0 text-muted-foreground\" />\n <span className=\"text-sm font-regular leading-sm text-foreground whitespace-nowrap truncate\">\n {propertyDef.label}\n </span>\n <Icon icon={faChevronDownOutline} size=\"xs\" className=\"shrink-0 text-foreground\" />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip max-h-[300px] overflow-y-auto\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"min-w-[200px]\",\n )}\n >\n {pinnedProperties.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => {\n onPropertyChange(p);\n setPropertyOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n p.id === condition.propertyId && \"bg-dropdown-item-hover\",\n )}\n >\n <Icon icon={p.icon} size=\"sm\" className=\"shrink-0 text-dropdown-item-icon\" />\n <span className=\"text-sm font-regular leading-sm text-dropdown-item-text truncate\">\n {p.label}\n </span>\n </button>\n ))}\n {unpinnedProperties.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => {\n onPropertyChange(p);\n setPropertyOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n p.id === condition.propertyId && \"bg-dropdown-item-hover\",\n )}\n >\n <Icon icon={p.icon} size=\"sm\" className=\"shrink-0 text-dropdown-item-icon\" />\n <span className=\"text-sm font-regular leading-sm text-dropdown-item-text truncate\">\n {p.label}\n </span>\n <span className=\"ml-auto text-xs font-regular leading-xs text-muted-foreground\">\n {p.groupLabel}\n </span>\n </button>\n ))}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {/* ── Operator selector ─────────────────────────────────── */}\n <PopoverPrimitive.Root open={operatorOpen} onOpenChange={setOperatorOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button type=\"button\" className={cn(selectBtnStyle, \"min-w-0\")}>\n <span className=\"text-sm font-regular leading-sm text-foreground whitespace-nowrap truncate text-left\">\n {condition.operator ?? \"Select\"}\n </span>\n <Icon icon={faChevronDownOutline} size=\"xs\" className=\"shrink-0 text-foreground\" />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"min-w-[160px]\",\n )}\n >\n <OperatorList\n dataType={propertyDef.type}\n activeOperator={condition.operator}\n onSelect={handleOperatorSelect}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {/* ── Value input ───────────────────────────────────────── */}\n {condition.operator && !isNoValueOperator(condition.operator) && (() => {\n const inputType = getValueInputType(propertyDef.type, condition.operator);\n const isInline = inputType === \"TextInput\" || inputType === \"NumberInput\";\n\n if (isInline) {\n return (\n <input\n type={inputType === \"NumberInput\" ? \"number\" : \"text\"}\n value={(condition.value as string | number) ?? \"\"}\n onChange={(e) => handleValueChange(\n inputType === \"NumberInput\" ? (e.target.value === \"\" ? null : Number(e.target.value)) : e.target.value,\n )}\n placeholder=\"Enter value...\"\n className={cn(\n \"flex-1 min-w-[80px] px-base py-sm\",\n \"bg-background border border-input rounded-base\",\n \"text-sm font-regular leading-sm text-foreground\",\n \"placeholder:text-muted-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-0\",\n )}\n />\n );\n }\n\n const dateWide = inputType === \"DatePicker\" || inputType === \"DateRange\";\n const isMulti = inputType === \"MultiSelect\" || inputType === \"MultiRelationPicker\";\n const multiTags = isMulti && Array.isArray(condition.value)\n ? (condition.value as string[]).map((v) => {\n const dyn = propertyDef.dynamicOptions?.find((o) => o.value === v);\n return dyn ? dyn.label : v;\n })\n : null;\n return (\n <PopoverPrimitive.Root open={valueOpen} onOpenChange={setValueOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className={cn(selectBtnStyle, \"flex-1 min-w-[80px] justify-between overflow-hidden\")}\n >\n {multiTags && multiTags.length > 0 ? (\n <ValueTagRow tags={multiTags} />\n ) : (\n <>\n {valueLeadingIcon && (\n <Icon\n icon={valueLeadingIcon}\n size=\"sm\"\n className=\"shrink-0 text-foreground\"\n />\n )}\n <span\n className={cn(\n \"text-sm font-regular leading-sm whitespace-nowrap truncate text-left\",\n hasValue\n ? \"text-foreground\"\n : \"text-muted-foreground\",\n )}\n title={hasValue ? displayValue : undefined}\n >\n {hasValue ? displayValue : \"Select a value\"}\n </span>\n </>\n )}\n <Icon\n icon={faChevronDownOutline}\n size=\"xs\"\n className=\"shrink-0 text-foreground\"\n />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n )}\n style={{ minWidth: dateWide ? \"auto\" : \"240px\" }}\n >\n <ValueInput\n dataType={propertyDef.type}\n operator={condition.operator}\n value={condition.value}\n onChange={handleValueChange}\n onSubmit={() => setValueOpen(false)}\n options={propertyDef.options}\n dynamicOptions={propertyDef.dynamicOptions}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n })()}\n\n {/* ── More actions (...) ────────────────────────────────── */}\n <FilterNodeActions\n nodeType=\"condition\"\n onDuplicate={onDuplicate ?? (() => {})}\n onConvert={onTurnIntoGroup ?? (() => {})}\n onDelete={onDelete}\n />\n </div>\n );\n};\nAdvancedRow.displayName = \"AdvancedRow\";\n\n// ── ValueTagRow (overflow-aware tags for multi-select values) ──────────────\n\nconst tagChip = cn(\n \"inline-flex items-center shrink-0 px-sm rounded-base\",\n \"bg-tag-neutral-bg text-tag-neutral-text\",\n \"text-xs font-medium leading-xs whitespace-nowrap\",\n \"h-5\",\n);\n\nfunction ValueTagRow({ tags }: { tags: string[] }) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const measureRef = React.useRef<HTMLDivElement>(null);\n const [visibleCount, setVisibleCount] = React.useState(tags.length);\n\n React.useLayoutEffect(() => {\n const container = containerRef.current;\n const measureRow = measureRef.current;\n if (!container || !measureRow) return;\n\n const measure = () => {\n const containerWidth = container.getBoundingClientRect().width;\n const chips = Array.from(measureRow.children) as HTMLElement[];\n const overflowBadgeWidth = 32;\n let usedWidth = 0;\n let count = 0;\n\n for (const chip of chips) {\n const chipWidth = chip.getBoundingClientRect().width;\n const gap = count > 0 ? 4 : 0;\n const projected = usedWidth + gap + chipWidth;\n const remaining = tags.length - (count + 1);\n const total = projected + (remaining > 0 ? 4 + overflowBadgeWidth : 0);\n if (total <= containerWidth) {\n usedWidth = projected;\n count++;\n } else {\n break;\n }\n }\n setVisibleCount(Math.max(1, count));\n };\n\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(container);\n return () => observer.disconnect();\n }, [tags]);\n\n const overflowCount = tags.length - visibleCount;\n const overflowTags = tags.slice(visibleCount);\n\n return (\n <div className=\"flex flex-1 items-center gap-xs min-w-0 overflow-hidden relative\">\n <div\n ref={measureRef}\n aria-hidden\n className=\"absolute flex items-center gap-xs pointer-events-none\"\n style={{ visibility: \"hidden\", whiteSpace: \"nowrap\", top: 0, left: 0 }}\n >\n {tags.map((t) => <span key={t} className={tagChip}>{t}</span>)}\n </div>\n <div ref={containerRef} className=\"flex flex-1 items-center gap-xs overflow-hidden\">\n {tags.slice(0, visibleCount).map((t) => (\n <span key={t} className={tagChip}>{t}</span>\n ))}\n {overflowCount > 0 && (\n <TooltipPrimitive.Provider delayDuration={200}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className={cn(tagChip, \"cursor-default bg-filter-chip-badge-bg text-filter-chip-badge-text\")}>\n +{overflowCount}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-xs font-regular leading-xs flex flex-col gap-xs data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n {overflowTags.map((t) => <span key={t}>{t}</span>)}\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n )}\n </div>\n </div>\n );\n}\n\nexport { AdvancedRow };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n Icon,\n faEllipsisOutline,\n faCopyOutline,\n faTrashOutline,\n faFolderOutline,\n faFilterOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── FilterNodeActions ──────────────────────────────────────────────────────\n\nexport interface FilterNodeActionsProps {\n /** \"condition\" shows \"Turn into group\", \"group\" shows \"Turn into filter\". */\n nodeType: \"condition\" | \"group\";\n onDuplicate: () => void;\n /** \"Turn into group\" for conditions, \"Turn into filter\" for groups. */\n onConvert: () => void;\n onDelete: () => void;\n}\n\nconst FilterNodeActions: React.FC<FilterNodeActionsProps> = ({\n nodeType,\n onDuplicate,\n onConvert,\n onDelete,\n}) => {\n const [open, setOpen] = React.useState(false);\n\n const items = [\n {\n label: \"Duplicate\",\n icon: faCopyOutline,\n action: onDuplicate,\n },\n {\n label: nodeType === \"condition\" ? \"Turn into group\" : \"Turn into filter\",\n icon: nodeType === \"condition\" ? faFolderOutline : faFilterOutline,\n action: onConvert,\n },\n {\n label: \"Delete\",\n icon: faTrashOutline,\n action: onDelete,\n destructive: true,\n },\n ];\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className=\"shrink-0 flex items-center justify-center p-sm rounded-lg cursor-pointer transition-colors hover:bg-accent\"\n aria-label=\"More actions\"\n >\n <Icon\n icon={faEllipsisOutline}\n size=\"sm\"\n className=\"text-foreground\"\n />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"end\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"min-w-[180px]\",\n )}\n >\n {items.map((item) => (\n <button\n key={item.label}\n type=\"button\"\n onClick={() => {\n item.action();\n setOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n item.destructive && \"text-destructive\",\n )}\n >\n <Icon\n icon={item.icon}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n item.destructive\n ? \"text-destructive\"\n : \"text-dropdown-item-icon\",\n )}\n />\n <span\n className={cn(\n \"text-sm font-regular leading-sm\",\n item.destructive\n ? \"text-destructive\"\n : \"text-dropdown-item-text\",\n )}\n >\n {item.label}\n </span>\n </button>\n ))}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nFilterNodeActions.displayName = \"FilterNodeActions\";\n\nexport { FilterNodeActions };\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { Icon, faPlusOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { FilterNodeActions } from \"./filter-node-actions\";\nimport { PropertySelector } from \"./property-selector\";\nimport type { PropertyDefinition } from \"./types\";\n\n// ── AdvancedGroup ──────────────────────────────────────────────────────────\n\nexport interface AdvancedGroupProps {\n /** \"Where\" for the first group, \"And\"/\"Or\" for subsequent. */\n connector: \"Where\" | \"And\" | \"Or\";\n /** Called when the And/Or toggle is clicked. */\n onConnectorToggle?: () => void;\n onDuplicate: () => void;\n onTurnIntoFilter: () => void;\n onDelete: () => void;\n /** Called when user adds a filter inside this group via the inline button. */\n onAddFilter?: (property: PropertyDefinition) => void;\n properties?: PropertyDefinition[];\n children?: React.ReactNode;\n}\n\nconst AdvancedGroup: React.FC<AdvancedGroupProps> = ({\n connector,\n onConnectorToggle,\n onDuplicate,\n onTurnIntoFilter,\n onDelete,\n onAddFilter,\n properties,\n children,\n}) => {\n const [addOpen, setAddOpen] = React.useState(false);\n\n return (\n <div className=\"flex items-start gap-base w-full min-w-0\">\n {/* ── Connector: Where label or And/Or toggle button ─────── */}\n {connector === \"Where\" ? (\n <div className=\"shrink-0 w-[64px] flex items-center justify-end pt-base\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">\n Where\n </span>\n </div>\n ) : (\n <div className=\"shrink-0 w-[64px] flex items-center justify-end pt-base\">\n <TooltipPrimitive.Provider delayDuration={200}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className=\"text-xs font-medium leading-xs text-muted-foreground cursor-default\">\n {connector}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-sm font-regular leading-sm data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n "Or" operator coming soon\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n </div>\n )}\n\n {/* ── Group container ────────────────────────────────────── */}\n <div className=\"flex-1 min-w-0 flex flex-col gap-base p-base border border-border rounded-lg bg-secondary\">\n {children}\n\n {/* Add filter button inside the group */}\n {onAddFilter && properties && (\n <PropertySelector\n properties={properties}\n onSelect={(prop) => {\n onAddFilter(prop);\n setAddOpen(false);\n }}\n open={addOpen}\n onOpenChange={setAddOpen}\n >\n <button\n type=\"button\"\n className=\"flex items-center gap-sm px-base py-sm text-sm font-medium leading-sm text-muted-foreground cursor-pointer transition-colors rounded-lg hover:bg-accent hover:text-foreground w-fit\"\n >\n <Icon icon={faPlusOutline} size=\"sm\" />\n Add filter\n </button>\n </PropertySelector>\n )}\n </div>\n\n {/* ── More actions (...) ─────────────────────────────────── */}\n <div className=\"shrink-0 pt-base\">\n <FilterNodeActions\n nodeType=\"group\"\n onDuplicate={onDuplicate}\n onConvert={onTurnIntoFilter}\n onDelete={onDelete}\n />\n </div>\n </div>\n );\n};\nAdvancedGroup.displayName = \"AdvancedGroup\";\n\nexport { AdvancedGroup };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { Icon, faFilterOutline, faPlusOutline, faChevronDownOutline, faXmarkOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { AdvancedRow } from \"./advanced-row\";\nimport { AdvancedGroup } from \"./advanced-group\";\nimport { PropertySelector } from \"./property-selector\";\nimport {\n createFilterWithDefaults,\n createEmptyGroup,\n isFilterGroup,\n duplicateNode,\n wrapInGroup,\n unwrapGroup,\n removeNodeFromTree,\n updateNodeInTree,\n insertAfterInTree,\n replaceNodeInTree,\n toggleGroupLogicInTree,\n} from \"./utils\";\nimport type { PropertyDefinition, FilterCondition, FilterNode } from \"./types\";\n\n// ── Ghost button style ─────────────────────────────────────────────────────\n\nconst ghostBtn = [\n \"flex items-center gap-sm px-base py-sm\",\n \"min-h-[32px]\",\n \"cursor-pointer transition-colors text-sm font-medium leading-sm\",\n \"rounded-md hover:bg-accent\",\n];\n\n// ── SummaryChip ─────────────────────────────────────────────────────────────\n\nexport interface SummaryChipProps {\n count: number;\n filters: FilterNode[];\n properties: PropertyDefinition[];\n onFiltersChange: (filters: FilterNode[]) => void;\n onClearAll: () => void;\n children?: React.ReactNode;\n className?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n collisionBoundary?: Element | null;\n tooltipContent?: React.ReactNode;\n}\n\nconst SummaryChip: React.FC<SummaryChipProps> = ({\n count,\n filters,\n properties,\n onFiltersChange,\n onClearAll,\n children,\n className,\n open: openProp,\n onOpenChange,\n collisionBoundary,\n tooltipContent,\n}) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : uncontrolledOpen;\n const setOpen = (v: boolean) => {\n if (!isControlled) setUncontrolledOpen(v);\n onOpenChange?.(v);\n };\n const [addSelectorOpen, setAddSelectorOpen] = React.useState(false);\n const [draftPickerOpen, setDraftPickerOpen] = React.useState(false);\n\n const getPropertyDef = (propertyId: string) =>\n properties.find((p) => p.id === propertyId);\n\n // ── Tree operations (same as AdvancedPopover) ─────────────\n\n const handleAddFilter = (property: PropertyDefinition) => {\n const newFilter = createFilterWithDefaults(property.id, property.type);\n onFiltersChange([...filters, newFilter]);\n setAddSelectorOpen(false);\n };\n\n const handleAddGroup = () => {\n onFiltersChange([...filters, createEmptyGroup()]);\n };\n\n const handleUpdateNode = (id: string, updated: FilterNode) => {\n onFiltersChange(updateNodeInTree(filters, id, () => updated));\n };\n\n const handleDeleteNode = (id: string) => {\n const next = removeNodeFromTree(filters, id);\n onFiltersChange(next);\n if (next.length === 0) setOpen(false);\n };\n\n const handleDuplicateNode = (id: string) => {\n const find = (nodes: FilterNode[]): FilterNode | undefined => {\n for (const n of nodes) {\n if (n.id === id) return n;\n if (isFilterGroup(n)) { const f = find(n.children); if (f) return f; }\n }\n };\n const node = find(filters);\n if (!node) return;\n const clone = duplicateNode(node);\n clone.logicOperator = node.logicOperator ?? \"and\";\n onFiltersChange(insertAfterInTree(filters, id, clone));\n };\n\n const handleWrapInGroup = (id: string) => {\n const find = (nodes: FilterNode[]): FilterCondition | undefined => {\n for (const n of nodes) {\n if (n.id === id && !isFilterGroup(n)) return n as FilterCondition;\n if (isFilterGroup(n)) { const f = find(n.children); if (f) return f; }\n }\n };\n const condition = find(filters);\n if (!condition) return;\n onFiltersChange(replaceNodeInTree(filters, id, wrapInGroup(condition)));\n };\n\n const handleUnwrapGroup = (id: string) => {\n const find = (nodes: FilterNode[]): import(\"./types\").FilterGroup | undefined => {\n for (const n of nodes) {\n if (n.id === id && isFilterGroup(n)) return n;\n if (isFilterGroup(n)) { const f = find(n.children); if (f) return f; }\n }\n };\n const group = find(filters);\n if (!group) return;\n const replacement = unwrapGroup(group);\n if (replacement) {\n onFiltersChange(replaceNodeInTree(filters, id, replacement));\n } else {\n onFiltersChange(removeNodeFromTree(filters, id));\n }\n };\n\n const toggleLogicOp = (id: string) => {\n onFiltersChange(toggleGroupLogicInTree(filters, id));\n };\n\n const handleGroupChildrenChange = (groupId: string, newChildren: FilterNode[]) => {\n onFiltersChange(\n updateNodeInTree(filters, groupId, (n) =>\n isFilterGroup(n) ? { ...n, children: newChildren } : n,\n ),\n );\n };\n\n // ── Recursive renderer ────────────────────────────────────\n\n const renderNode = (node: FilterNode, index: number): React.ReactNode => {\n const connector =\n index === 0\n ? \"Where\" as const\n : (node.logicOperator ?? \"and\") === \"and\" ? \"And\" as const : \"Or\" as const;\n\n if (isFilterGroup(node)) {\n return (\n <AdvancedGroup\n key={node.id}\n connector={connector}\n onConnectorToggle={index > 0 ? () => toggleLogicOp(node.id) : undefined}\n onDuplicate={() => handleDuplicateNode(node.id)}\n onTurnIntoFilter={() => handleUnwrapGroup(node.id)}\n onDelete={() => handleDeleteNode(node.id)}\n properties={properties}\n onAddFilter={(prop) => {\n const newFilter = createFilterWithDefaults(prop.id, prop.type);\n handleGroupChildrenChange(node.id, [...node.children, newFilter]);\n }}\n >\n {node.children.length === 0 ? (\n <DraftRow\n properties={properties}\n onSelect={(prop) => {\n const newFilter = createFilterWithDefaults(prop.id, prop.type);\n handleGroupChildrenChange(node.id, [newFilter]);\n }}\n />\n ) : (\n node.children.map((child, i) => renderNode(child, i))\n )}\n </AdvancedGroup>\n );\n }\n\n const propDef = getPropertyDef(node.propertyId);\n if (!propDef) return null;\n\n return (\n <AdvancedRow\n key={node.id}\n connector={connector}\n onConnectorToggle={index > 0 ? () => toggleLogicOp(node.id) : undefined}\n propertyDef={propDef}\n condition={node as FilterCondition}\n properties={properties}\n onUpdate={(updated) => handleUpdateNode(node.id, updated)}\n onPropertyChange={(p) => {\n const newCondition = createFilterWithDefaults(p.id, p.type);\n handleUpdateNode(node.id, { ...newCondition, id: node.id });\n }}\n onDelete={() => handleDeleteNode(node.id)}\n onDuplicate={() => handleDuplicateNode(node.id)}\n onTurnIntoGroup={() => handleWrapInGroup(node.id)}\n />\n );\n };\n\n const trigger = children ?? (\n <button\n type=\"button\"\n className={cn(\n \"inline-flex items-center gap-sm px-base py-sm\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n className,\n )}\n >\n <Icon icon={faFilterOutline} size=\"sm\" className=\"shrink-0 text-foreground\" />\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap text-foreground\">\n Filters\n </span>\n {count > 0 && (\n <span className=\"flex items-center p-2xs rounded-xs bg-filter-chip-badge-bg\">\n <span className=\"text-[10px] font-medium leading-2xs text-filter-chip-badge-text\">{count}</span>\n </span>\n )}\n </button>\n );\n\n const hasTooltip = tooltipContent && !open;\n\n return (\n <TooltipPrimitive.Provider delayDuration={300}>\n <TooltipPrimitive.Root open={hasTooltip ? undefined : false}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <TooltipPrimitive.Trigger asChild>\n <PopoverPrimitive.Trigger asChild>\n {trigger}\n </PopoverPrimitive.Trigger>\n </TooltipPrimitive.Trigger>\n {hasTooltip && (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-sm font-regular leading-sm max-w-[320px] data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n {tooltipContent}\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )}\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n collisionPadding={16}\n collisionBoundary={collisionBoundary ?? undefined}\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={cn(\n \"z-50 flex flex-col overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n collisionBoundary\n ? \"w-[min(640px,var(--radix-popover-content-available-width))]\"\n : \"w-[min(640px,calc(100vw-32px))]\",\n )}\n >\n <div className=\"flex flex-col gap-base p-base\">\n {filters.length > 0\n ? filters.map((node, i) => renderNode(node, i))\n : (\n <DraftRow\n properties={properties}\n onSelect={handleAddFilter}\n open={draftPickerOpen}\n onOpenChange={setDraftPickerOpen}\n />\n )}\n </div>\n\n <div className=\"flex items-center justify-between p-base border-t border-border\">\n <div className=\"flex items-center gap-sm\">\n <PropertySelector\n properties={properties}\n onSelect={handleAddFilter}\n open={addSelectorOpen}\n onOpenChange={setAddSelectorOpen}\n >\n <button type=\"button\" className={cn(ghostBtn, \"text-foreground\")}>\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n Add filter\n </button>\n </PropertySelector>\n <button type=\"button\" onClick={handleAddGroup} className={cn(ghostBtn, \"text-foreground\")}>\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n Add filters group\n </button>\n </div>\n {filters.length > 0 && (\n <button\n type=\"button\"\n onClick={() => { onClearAll(); setOpen(false); }}\n className={cn(ghostBtn, \"text-destructive\")}\n >\n <Icon icon={faXmarkOutline} size=\"sm\" className=\"text-destructive\" />\n Clear filters\n </button>\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\nSummaryChip.displayName = \"SummaryChip\";\n\n// ── DraftRow ───────────────────────────────────────────────────────────────\n\ninterface DraftRowProps {\n properties: PropertyDefinition[];\n onSelect: (property: PropertyDefinition) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst DraftRow: React.FC<DraftRowProps> = ({ properties, onSelect, open: openProp, onOpenChange }) => {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isCtrl = openProp !== undefined;\n const open = isCtrl ? openProp : internalOpen;\n const setOpen = (v: boolean) => { if (!isCtrl) setInternalOpen(v); onOpenChange?.(v); };\n\n return (\n <div className=\"flex items-center gap-base w-full min-w-0\">\n <div className=\"shrink-0 w-[64px] flex items-center justify-end\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">Where</span>\n </div>\n <PropertySelector properties={properties} onSelect={(p) => { onSelect(p); setOpen(false); }} open={open} onOpenChange={setOpen}>\n <button\n type=\"button\"\n className={cn(\n \"flex items-center gap-base px-base py-sm min-w-0\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n )}\n >\n <span className=\"text-sm font-regular leading-sm text-muted-foreground whitespace-nowrap\">Select property</span>\n <Icon icon={faChevronDownOutline} size=\"xs\" className=\"shrink-0 text-foreground\" />\n </button>\n </PropertySelector>\n </div>\n );\n};\n\nexport { SummaryChip };\n","import * as React from \"react\";\n\nexport type FilterBarMode = \"default\" | \"minimal\" | \"icon\";\n\nconst DEFAULT_BREAKPOINT = 600;\n\n/**\n * Observes the container width and returns the appropriate FilterBar mode.\n * - default: > breakpoint\n * - minimal: ≤ breakpoint\n */\nexport function useFilterBarMode(\n ref: React.RefObject<HTMLElement | null>,\n override?: FilterBarMode,\n breakpoint: number = DEFAULT_BREAKPOINT,\n): FilterBarMode {\n const [mode, setMode] = React.useState<FilterBarMode>(\"default\");\n\n React.useEffect(() => {\n if (override) return;\n const el = ref.current;\n if (!el) return;\n\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n setMode(width > breakpoint ? \"default\" : \"minimal\");\n });\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [ref, override, breakpoint]);\n\n return override ?? mode;\n}\n"],"mappings":"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","names":["React","Icon","React","cva","Icon","jsx","jsxs","cva","Icon","React","cva","jsx","jsxs","cva","jsx","jsxs","Icon","React","Icon","faXmarkOutline","React","DropdownMenuPrimitive","Icon","jsx","jsxs","Icon","jsx","jsxs","Icon","faXmarkOutline","React","TooltipPrimitive","jsx","jsxs","React","jsx","jsxs","React","Slot","cva","Icon","jsx","jsxs","cva","iconSizeMap","Slot","Icon","React","Icon","jsx","jsxs","textColor","Icon","React","cva","Icon","faCircleInfoSolid","jsx","jsxs","cva","faCircleInfoSolid","Icon","React","cva","Icon","faCircleInfoSolid","faCircleCheckSolid","faCircleExclamationSolid","faTriangleExclamationSolid","faXmarkSolid","jsx","jsxs","cva","typeIconMap","faCircleInfoSolid","faCircleCheckSolid","faCircleExclamationSolid","faTriangleExclamationSolid","titleStyle","closeButtonStyle","Icon","faXmarkSolid","React","jsx","jsxs","React","SwitchPrimitive","Icon","jsx","jsxs","trackStyles","thumbStyle","Icon","React","cva","Icon","faXmarkSolid","React","Icon","React","cva","jsx","cva","Fragment","jsx","jsxs","Icon","Fragment","jsx","jsxs","cva","Icon","faXmarkSolid","React","cva","jsx","jsxs","cva","React","Icon","jsx","jsxs","labelBase","labelColor","Icon","React","jsx","jsxs","labelBase","labelColor","React","RadioGroupPrimitive","Icon","jsx","jsxs","cardStyles","Icon","React","jsx","React","cva","Icon","faChevronDownSolid","Fragment","jsx","jsxs","cva","Icon","faChevronDownSolid","React","PopoverPrimitive","TooltipPrimitive","cva","Icon","faChevronDownSolid","faXmarkSolid","jsx","jsxs","cva","Icon","faXmarkSolid","faChevronDownSolid","React","jsx","jsxs","React","cva","Icon","faXmarkSolid","jsx","jsxs","cva","iconSizeMap","Icon","faXmarkSolid","React","Icon","faCircleExclamationOutline","jsx","jsxs","errorGuidance","Icon","faCircleExclamationOutline","React","cva","Icon","faCircleExclamationOutline","faPlusSolid","jsx","jsxs","cva","iconColor","errorGuidance","resolveState","Icon","faPlusSolid","faCircleExclamationOutline","React","cva","Icon","faCircleExclamationOutline","faXmarkSolid","jsx","jsxs","cva","wrapperStates","resolveState","errorGuidance","Icon","faXmarkSolid","faCircleExclamationOutline","React","cva","Icon","faCircleExclamationOutline","jsx","jsxs","cva","wrapperStates","errorGuidance","Icon","faCircleExclamationOutline","React","cva","Slot","jsx","cva","Slot","React","jsx","jsxs","React","cva","Icon","faXmarkSolid","faCircleInfoSolid","jsx","jsxs","cva","Icon","faXmarkSolid","faCircleInfoSolid","React","jsx","jsxs","React","cva","Icon","jsx","jsxs","cva","iconContainerVariants","Icon","React","jsx","jsxs","React","Icon","faGripDotsVerticalSolid","PopoverPrimitive","React","jsx","React","jsx","jsxs","jsx","jsxs","Icon","faGripDotsVerticalSolid","cellValue","React","DialogPrimitive","jsx","jsxs","React","cva","Icon","jsx","jsxs","cva","Icon","React","jsx","jsxs","React","jsx","React","PopoverPrimitive","Icon","jsx","jsxs","Icon","React","Icon","faFilterOutline","jsx","jsxs","Icon","faFilterOutline","React","Icon","jsx","jsxs","Icon","PopoverPrimitive","jsx","jsxs","jsx","jsxs","jsx","jsxs","React","React","PopoverPrimitive","Icon","faChevronLeftOutline","faChevronRightOutline","jsx","jsxs","Icon","faChevronLeftOutline","faChevronRightOutline","jsx","jsxs","Icon","jsx","jsxs","Icon","jsx","jsxs","jsx","React","PopoverPrimitive","Icon","faChevronLeftOutline","faChevronRightOutline","faFilterOutline","jsx","jsxs","Icon","faFilterOutline","faChevronRightOutline","faChevronLeftOutline","PopoverPrimitive","Icon","faArrowRightOutline","jsx","jsxs","Icon","faArrowRightOutline","React","PopoverPrimitive","Icon","jsx","jsxs","Icon","React","PopoverPrimitive","Icon","jsx","jsxs","Icon","React","Icon","faPlusOutline","React","Icon","faXmarkOutline","faFilterOutline","jsx","jsxs","Icon","faFilterOutline","faXmarkOutline","React","PopoverPrimitive","Icon","faPlusOutline","faChevronDownOutline","faXmarkOutline","React","PopoverPrimitive","TooltipPrimitive","Icon","faChevronDownOutline","React","PopoverPrimitive","Icon","faEllipsisOutline","faTrashOutline","faFilterOutline","jsx","jsxs","faFilterOutline","faTrashOutline","Icon","faEllipsisOutline","Fragment","jsx","jsxs","Icon","faChevronDownOutline","React","TooltipPrimitive","Icon","faPlusOutline","jsx","jsxs","Icon","faPlusOutline","jsx","jsxs","children","Icon","faPlusOutline","faXmarkOutline","faChevronDownOutline","React","PopoverPrimitive","TooltipPrimitive","Icon","faFilterOutline","faPlusOutline","faChevronDownOutline","faXmarkOutline","jsx","jsxs","ghostBtn","DraftRow","Icon","faFilterOutline","faPlusOutline","faXmarkOutline","faChevronDownOutline","React","jsx","jsxs","Icon","faPlusOutline"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/lib/tag-colors.ts","../src/components/ui/ai-cell.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/ai-badge.tsx","../src/components/ui/badge.tsx","../src/components/ui/ai-column-header-bar.tsx","../src/components/ui/ai-suggestion-dot.tsx","../src/components/ui/button.tsx","../src/components/ui/ai-column-side-panel.tsx","../src/components/ui/side-panel.tsx","../src/components/ui/modal.tsx","../src/components/ui/text-input.tsx","../src/components/ui/input-label.tsx","../src/components/ui/textarea.tsx","../src/components/ui/hover-card.tsx","../src/components/ui/row-quick-actions.tsx","../src/components/ui/entity-cell.tsx","../src/components/ui/status-picker-cell.tsx","../src/components/ui/column-header-menu.tsx","../src/components/ui/column-type-badge.tsx","../src/components/ui/score-badge.tsx","../src/components/ui/column-manager-popover.tsx","../src/components/ui/search-bar.tsx","../src/components/ui/sidebar.tsx","../src/components/ui/product-logo.tsx","../src/assets/logos/lemlist-sm-picto.svg","../src/assets/logos/lemlist-md-picto.svg","../src/assets/logos/lemlist-lg-picto.svg","../src/assets/logos/lemlist-xl-picto.svg","../src/assets/logos/lemlist-sm-logotype.svg","../src/assets/logos/lemlist-md-logotype.svg","../src/assets/logos/lemlist-lg-logotype.svg","../src/assets/logos/lemlist-sm-picto-dark.svg","../src/assets/logos/lemlist-md-picto-dark.svg","../src/assets/logos/lemlist-lg-picto-dark.svg","../src/assets/logos/lemlist-xl-picto-dark.svg","../src/assets/logos/lemlist-sm-logotype-dark.svg","../src/assets/logos/lemlist-md-logotype-dark.svg","../src/assets/logos/lemlist-lg-logotype-dark.svg","../src/assets/logos/lemwarm-sm-picto.svg","../src/assets/logos/lemwarm-md-picto.svg","../src/assets/logos/lemwarm-lg-picto.svg","../src/assets/logos/lemwarm-xl-picto.svg","../src/assets/logos/lemwarm-sm-logotype.svg","../src/assets/logos/lemwarm-md-logotype.svg","../src/assets/logos/lemwarm-lg-logotype.svg","../src/assets/logos/lemwarm-sm-picto-dark.svg","../src/assets/logos/lemwarm-md-picto-dark.svg","../src/assets/logos/lemwarm-lg-picto-dark.svg","../src/assets/logos/lemwarm-xl-picto-dark.svg","../src/assets/logos/lemwarm-sm-logotype-dark.svg","../src/assets/logos/lemwarm-md-logotype-dark.svg","../src/assets/logos/lemwarm-lg-logotype-dark.svg","../src/assets/logos/lemcal-sm-picto.svg","../src/assets/logos/lemcal-md-picto.svg","../src/assets/logos/lemcal-lg-picto.svg","../src/assets/logos/lemcal-xl-picto.svg","../src/assets/logos/lemcal-sm-logotype.svg","../src/assets/logos/lemcal-md-logotype.svg","../src/assets/logos/lemcal-lg-logotype.svg","../src/assets/logos/lemcal-sm-picto-dark.svg","../src/assets/logos/lemcal-md-picto-dark.svg","../src/assets/logos/lemcal-lg-picto-dark.svg","../src/assets/logos/lemcal-xl-picto-dark.svg","../src/assets/logos/lemcal-sm-logotype-dark.svg","../src/assets/logos/lemcal-md-logotype-dark.svg","../src/assets/logos/lemcal-lg-logotype-dark.svg","../src/components/ui/create-field-column-panel.tsx","../src/components/ui/create-score-column-panel.tsx","../src/components/ui/number-input.tsx","../src/lib/user-columns.ts","../src/components/ui/browser-tab.tsx","../src/components/ui/bulk-action.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/truncated-text.tsx","../src/components/ui/emoji-picker.tsx","../src/components/ui/link.tsx","../src/components/ui/info-message.tsx","../src/components/ui/toast.tsx","../src/components/ui/switch.tsx","../src/components/ui/switch-card.tsx","../src/components/ui/avatar.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/radio.tsx","../src/components/ui/radio-card.tsx","../src/components/ui/sidebar-heading-item.tsx","../src/components/ui/sidebar-item.tsx","../src/components/ui/select.tsx","../src/components/ui/tab.tsx","../src/components/ui/tag.tsx","../src/components/ui/chip-input.tsx","../src/components/ui/typography.tsx","../src/components/ui/user-menu.tsx","../src/components/ui/dialog.tsx","../src/components/ui/empty-state.tsx","../src/components/ui/table-cells.tsx","../src/components/ui/data-table.tsx","../src/components/ui/table.tsx","../src/components/ui/data-table-settings-modal.tsx","../src/components/ui/filter/filter-chip-segment.tsx","../src/components/ui/filter/filter-chip.tsx","../src/components/ui/filter/utils.ts","../src/components/ui/filter/filter-bar.tsx","../src/components/ui/filter/sort-button.tsx","../src/components/ui/filter/filter-bar-button.tsx","../src/components/ui/filter/save-view-button.tsx","../src/components/ui/filter/operator-selector.tsx","../src/components/ui/filter/value-inputs/shared.ts","../src/components/ui/filter/value-inputs/text-value-input.tsx","../src/components/ui/filter/value-inputs/number-value-input.tsx","../src/components/ui/filter/value-inputs/date-value-input.tsx","../src/components/ui/date-picker.tsx","../src/components/ui/filter/value-inputs/select-value-input.tsx","../src/components/ui/filter/value-inputs/relation-value-input.tsx","../src/components/ui/filter/value-input.tsx","../src/components/ui/filter/property-selector.tsx","../src/components/ui/filter/kebab-menu.tsx","../src/components/ui/filter/filter-editor.tsx","../src/components/ui/filter/interactive-filter-chip.tsx","../src/components/ui/filter/filter-system.tsx","../src/components/ui/filter/advanced-chip.tsx","../src/components/ui/filter/advanced-popover.tsx","../src/components/ui/filter/advanced-row.tsx","../src/components/ui/filter/filter-node-actions.tsx","../src/components/ui/filter/advanced-group.tsx","../src/components/ui/filter/summary-chip.tsx","../src/components/ui/filter/use-filter-bar-mode.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n \"font-size\": [\n { text: [\"xxs\", \"xs\", \"sm\", \"base\", \"md\", \"lg\", \"xl\"] },\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","export const TAG_PALETTE = [\n \"indigo\",\n \"rose\",\n \"lime\",\n \"violet\",\n \"cyan\",\n \"orange\",\n \"emerald\",\n \"fuchsia\",\n \"amber\",\n \"slate\",\n] as const;\n\nexport type TagColorName = (typeof TAG_PALETTE)[number];\n\nexport interface TagColor {\n name: TagColorName;\n bg: string;\n text: string;\n border: string;\n}\n\nfunction makeColor(name: TagColorName): TagColor {\n return {\n name,\n bg: `bg-tag-${name}-bg`,\n text: `text-tag-${name}-text`,\n border: `border-tag-${name}-border`,\n };\n}\n\nexport function tagColorAt(index: number): TagColor {\n const len = TAG_PALETTE.length;\n const safe = ((index % len) + len) % len;\n return makeColor(TAG_PALETTE[safe]);\n}\n\nexport function tagColorFor(value: string, list: readonly string[]): TagColor {\n const i = list.indexOf(value);\n if (i >= 0) return tagColorAt(i);\n let h = 0;\n for (let k = 0; k < value.length; k++) {\n h = (h * 31 + value.charCodeAt(k)) | 0;\n }\n return tagColorAt(Math.abs(h));\n}\n","import * as React from \"react\";\nimport {\n Icon,\n faStarsOutline,\n faSpinnerThirdOutline,\n faCircleExclamationOutline,\n} from \"@l3mpire/icons\";\nimport { Tooltip, TooltipTrigger, TooltipContent } from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\n\n// ── State model ──────────────────────────────────────────────────────────────\n\nexport type AICellState =\n | { status: \"pending\" }\n | { status: \"running\" }\n | { status: \"done\"; value: string; citations?: string[] }\n | { status: \"error\"; message: string };\n\n// Verbs surfaced during the running state. Exported so orchestrators can\n// reference them (e.g. to widen the pool for a specific column).\nexport const AI_RUNNING_VERBS = [\n \"Thinking\",\n \"Researching\",\n \"Generating\",\n \"Extracting\",\n \"Analyzing\",\n] as const;\nexport type AIRunningVerb = (typeof AI_RUNNING_VERBS)[number];\n\n// Stable verb pick for a given seed — same cell → same verb on every render,\n// so the column reads as a varied wave rather than a flickering chorus.\nexport function pickRunningVerb(seed?: string): AIRunningVerb {\n if (!seed) return AI_RUNNING_VERBS[0];\n let h = 0;\n for (let i = 0; i < seed.length; i++) h = (h * 31 + seed.charCodeAt(i)) | 0;\n return AI_RUNNING_VERBS[Math.abs(h) % AI_RUNNING_VERBS.length];\n}\n\n// ── Props ────────────────────────────────────────────────────────────────────\n\nexport interface AICellProps extends React.HTMLAttributes<HTMLSpanElement> {\n state: AICellState | undefined;\n /** Stable per-cell seed so the running verb is consistent across re-renders. */\n seed?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\n/**\n * AICell renders the four states (pending → running → done | error) inside a\n * single stable <span> shell. Children swap in place — no unmount between\n * states — which is why there is no perceptible blank frame between running\n * and done. Error has its own shell because it is not wrapped in a tooltip.\n */\nexport const AICell = React.forwardRef<HTMLSpanElement, AICellProps>(\n ({ state, seed, className, ...rest }, ref) => {\n if (!state || state.status === \"pending\") {\n return (\n <span\n ref={ref}\n aria-label=\"Queued\"\n className={cn(\n \"inline-flex items-center gap-xs h-5 w-full min-w-0 cursor-default text-[var(--core-text-main-tertiary)]\",\n className,\n )}\n {...rest}\n >\n <span className=\"shrink-0 opacity-60\">\n <Icon icon={faStarsOutline} size=\"xs\" />\n </span>\n <span className=\"text-sm font-regular truncate flex-1 min-w-0 opacity-60\">\n Queued\n </span>\n </span>\n );\n }\n\n if (state.status === \"running\") {\n const verb = pickRunningVerb(seed);\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n ref={ref}\n aria-label={`${verb}…`}\n className={cn(\n \"inline-flex items-center gap-xs h-5 w-full min-w-0 cursor-default\",\n className,\n )}\n {...rest}\n >\n <span className=\"ai-icon-spin shrink-0 text-[var(--core-text-functional-info)]\">\n <Icon icon={faSpinnerThirdOutline} size=\"xs\" />\n </span>\n <span className=\"ai-shimmer-text text-sm font-regular truncate flex-1 min-w-0\">\n {verb}…\n </span>\n </span>\n </TooltipTrigger>\n </Tooltip>\n );\n }\n\n if (state.status === \"done\") {\n const cites = state.citations ?? [];\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-xs h-5 w-full min-w-0 cursor-default\",\n className,\n )}\n {...rest}\n >\n <span className=\"text-sm font-regular truncate flex-1 min-w-0 text-[var(--core-text-main-primary)]\">\n {state.value}\n </span>\n {cites.length > 0 && (\n <span className=\"shrink-0 text-xxs text-[var(--core-text-main-tertiary)]\">\n [{cites.length}]\n </span>\n )}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\" align=\"start\">\n <div className=\"flex flex-col gap-xs max-w-xs\">\n <span>{state.value}</span>\n {cites.length > 0 && (\n <span className=\"text-xxs opacity-80\">\n Sources: {cites.join(\" · \")}\n </span>\n )}\n </div>\n </TooltipContent>\n </Tooltip>\n );\n }\n\n // error\n return (\n <span\n ref={ref}\n role=\"alert\"\n className={cn(\n \"inline-flex items-center gap-xs h-5 w-full min-w-0 cursor-default text-[var(--core-text-functional-critical)]\",\n className,\n )}\n {...rest}\n >\n <span className=\"shrink-0\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" />\n </span>\n <span className=\"text-sm font-regular truncate flex-1 min-w-0\">\n {state.message}\n </span>\n </span>\n );\n },\n);\n\nAICell.displayName = \"AICell\";\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst tooltipContentVariants = cva(\n [\n \"inline-flex items-center z-50\",\n \"gap-xs\",\n \"px-base py-sm\",\n \"rounded-lg\",\n \"shadow-lg\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n \"data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out]\",\n \"data-[state=instant-open]:animate-[tooltip-in_0ms]\",\n \"data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\",\n ],\n {\n variants: {\n type: {\n default: [\n \"bg-tooltip-default-bg\",\n \"text-tooltip-default-text\",\n ],\n invert: [\n \"bg-tooltip-invert-bg\",\n \"text-tooltip-invert-text\",\n \"border border-tooltip-invert-border\",\n ],\n },\n },\n defaultVariants: {\n type: \"default\",\n },\n },\n);\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TooltipContentProps\n extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>,\n VariantProps<typeof tooltipContentVariants> {\n hasArrow?: boolean;\n}\n\n// ── Components ───────────────────────────────────────────────────────────────\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n TooltipContentProps\n>(({ className, type, hasArrow = true, sideOffset = 4, children, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(tooltipContentVariants({ type, className }))}\n {...props}\n >\n {children}\n {hasArrow && (\n <TooltipPrimitive.Arrow\n className={\n type === \"default\"\n ? \"fill-tooltip-default-bg\"\n : \"fill-tooltip-invert-bg\"\n }\n />\n )}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n));\n\nTooltipContent.displayName = \"TooltipContent\";\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n tooltipContentVariants,\n type TooltipContentProps,\n};\n","import * as React from \"react\";\nimport { faStarsOutline } from \"@l3mpire/icons\";\nimport { Badge, type BadgeProps } from \"./badge\";\n\nexport interface AIBadgeProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"type\"> {\n /** Hide the leading stars icon. */\n iconHidden?: boolean;\n /** Override the default `lg` size to match a denser cell row. */\n size?: BadgeProps[\"size\"];\n}\n\n/**\n * Marker that flags a value or column as AI-driven. Renders as a regular\n * `<Badge variant=\"light\" type=\"primary\" size=\"lg\" />` (same grammar as\n * `StatusCell`) with the stars glyph as a leading icon.\n */\nexport const AIBadge = React.forwardRef<HTMLSpanElement, AIBadgeProps>(\n ({ className, iconHidden, size = \"lg\", children = \"AI\", ...rest }, ref) => (\n <Badge\n ref={ref}\n variant=\"light\"\n type=\"primary\"\n size={size}\n icon={iconHidden ? undefined : faStarsOutline}\n className={className}\n {...rest}\n >\n {children}\n </Badge>\n ),\n);\n\nAIBadge.displayName = \"AIBadge\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst badgeVariants = cva(\n [\n \"inline-flex items-center justify-center whitespace-nowrap\",\n \"font-medium\",\n \"border border-transparent\",\n ],\n {\n variants: {\n variant: {\n solid: \"\",\n light: \"\",\n outlined: \"bg-transparent\",\n },\n type: {\n primary: \"\",\n success: \"\",\n critical: \"\",\n warning: \"\",\n neutral: \"\",\n },\n // Categorical palette. Colors come from {variant, tone} compound variants below,\n // so a tone combines with solid / light / outlined just like `type` does.\n tone: {\n indigo: \"\",\n rose: \"\",\n lime: \"\",\n violet: \"\",\n cyan: \"\",\n orange: \"\",\n emerald: \"\",\n fuchsia: \"\",\n amber: \"\",\n slate: \"\",\n teal: \"\",\n sky: \"\",\n purple: \"\",\n pink: \"\",\n },\n size: {\n sm: [\n \"p-2xs gap-2xs\",\n \"rounded-xs\",\n \"text-xxs leading-2xs\",\n ],\n md: [\n \"p-xs gap-xs\",\n \"rounded-sm\",\n \"text-xs leading-2xs\",\n ],\n lg: [\n \"p-xs gap-xs\",\n \"rounded-base\",\n \"text-sm leading-sm\",\n ],\n },\n },\n compoundVariants: [\n // ── Solid ───────────────────────────────────────────────────────────\n { variant: \"solid\", type: \"primary\", class: \"bg-badge-solid-primary-bg text-badge-solid-primary-text\" },\n { variant: \"solid\", type: \"success\", class: \"bg-badge-solid-success-bg text-badge-solid-success-text\" },\n { variant: \"solid\", type: \"critical\", class: \"bg-badge-solid-critical-bg text-badge-solid-critical-text\" },\n { variant: \"solid\", type: \"warning\", class: \"bg-badge-solid-warning-bg text-badge-solid-warning-text\" },\n { variant: \"solid\", type: \"neutral\", class: \"bg-badge-solid-neutral-bg text-badge-solid-neutral-text\" },\n // ── Light ───────────────────────────────────────────────────────────\n { variant: \"light\", type: \"primary\", class: \"bg-badge-light-primary-bg text-badge-light-primary-text\" },\n { variant: \"light\", type: \"success\", class: \"bg-badge-light-success-bg text-badge-light-success-text\" },\n { variant: \"light\", type: \"critical\", class: \"bg-badge-light-critical-bg text-badge-light-critical-text\" },\n { variant: \"light\", type: \"warning\", class: \"bg-badge-light-warning-bg text-badge-light-warning-text\" },\n { variant: \"light\", type: \"neutral\", class: \"bg-badge-light-neutral-bg text-badge-light-neutral-text\" },\n // ── Outlined ────────────────────────────────────────────────────────\n { variant: \"outlined\", type: \"primary\", class: \"border-badge-outlined-primary-border text-badge-outlined-primary-text\" },\n { variant: \"outlined\", type: \"success\", class: \"border-badge-outlined-success-border text-badge-outlined-success-text\" },\n { variant: \"outlined\", type: \"critical\", class: \"border-badge-outlined-critical-border text-badge-outlined-critical-text\" },\n { variant: \"outlined\", type: \"warning\", class: \"border-badge-outlined-warning-border text-badge-outlined-warning-text\" },\n { variant: \"outlined\", type: \"neutral\", class: \"border-badge-outlined-neutral-border text-badge-outlined-neutral-text\" },\n // ── Categorical tones × variant ──────────────────────────────────────\n { variant: \"solid\", tone: \"indigo\", class: \"bg-badge-solid-indigo-bg text-badge-solid-indigo-text\" },\n { variant: \"solid\", tone: \"rose\", class: \"bg-badge-solid-rose-bg text-badge-solid-rose-text\" },\n { variant: \"solid\", tone: \"lime\", class: \"bg-badge-solid-lime-bg text-badge-solid-lime-text\" },\n { variant: \"solid\", tone: \"violet\", class: \"bg-badge-solid-violet-bg text-badge-solid-violet-text\" },\n { variant: \"solid\", tone: \"cyan\", class: \"bg-badge-solid-cyan-bg text-badge-solid-cyan-text\" },\n { variant: \"solid\", tone: \"orange\", class: \"bg-badge-solid-orange-bg text-badge-solid-orange-text\" },\n { variant: \"solid\", tone: \"emerald\", class: \"bg-badge-solid-emerald-bg text-badge-solid-emerald-text\" },\n { variant: \"solid\", tone: \"fuchsia\", class: \"bg-badge-solid-fuchsia-bg text-badge-solid-fuchsia-text\" },\n { variant: \"solid\", tone: \"amber\", class: \"bg-badge-solid-amber-bg text-badge-solid-amber-text\" },\n { variant: \"solid\", tone: \"slate\", class: \"bg-badge-solid-slate-bg text-badge-solid-slate-text\" },\n { variant: \"solid\", tone: \"teal\", class: \"bg-badge-solid-teal-bg text-badge-solid-teal-text\" },\n { variant: \"solid\", tone: \"sky\", class: \"bg-badge-solid-sky-bg text-badge-solid-sky-text\" },\n { variant: \"solid\", tone: \"purple\", class: \"bg-badge-solid-purple-bg text-badge-solid-purple-text\" },\n { variant: \"solid\", tone: \"pink\", class: \"bg-badge-solid-pink-bg text-badge-solid-pink-text\" },\n { variant: \"light\", tone: \"indigo\", class: \"bg-badge-light-indigo-bg text-badge-light-indigo-text\" },\n { variant: \"light\", tone: \"rose\", class: \"bg-badge-light-rose-bg text-badge-light-rose-text\" },\n { variant: \"light\", tone: \"lime\", class: \"bg-badge-light-lime-bg text-badge-light-lime-text\" },\n { variant: \"light\", tone: \"violet\", class: \"bg-badge-light-violet-bg text-badge-light-violet-text\" },\n { variant: \"light\", tone: \"cyan\", class: \"bg-badge-light-cyan-bg text-badge-light-cyan-text\" },\n { variant: \"light\", tone: \"orange\", class: \"bg-badge-light-orange-bg text-badge-light-orange-text\" },\n { variant: \"light\", tone: \"emerald\", class: \"bg-badge-light-emerald-bg text-badge-light-emerald-text\" },\n { variant: \"light\", tone: \"fuchsia\", class: \"bg-badge-light-fuchsia-bg text-badge-light-fuchsia-text\" },\n { variant: \"light\", tone: \"amber\", class: \"bg-badge-light-amber-bg text-badge-light-amber-text\" },\n { variant: \"light\", tone: \"slate\", class: \"bg-badge-light-slate-bg text-badge-light-slate-text\" },\n { variant: \"light\", tone: \"teal\", class: \"bg-badge-light-teal-bg text-badge-light-teal-text\" },\n { variant: \"light\", tone: \"sky\", class: \"bg-badge-light-sky-bg text-badge-light-sky-text\" },\n { variant: \"light\", tone: \"purple\", class: \"bg-badge-light-purple-bg text-badge-light-purple-text\" },\n { variant: \"light\", tone: \"pink\", class: \"bg-badge-light-pink-bg text-badge-light-pink-text\" },\n { variant: \"outlined\", tone: \"indigo\", class: \"border-badge-outlined-indigo-border text-badge-outlined-indigo-text\" },\n { variant: \"outlined\", tone: \"rose\", class: \"border-badge-outlined-rose-border text-badge-outlined-rose-text\" },\n { variant: \"outlined\", tone: \"lime\", class: \"border-badge-outlined-lime-border text-badge-outlined-lime-text\" },\n { variant: \"outlined\", tone: \"violet\", class: \"border-badge-outlined-violet-border text-badge-outlined-violet-text\" },\n { variant: \"outlined\", tone: \"cyan\", class: \"border-badge-outlined-cyan-border text-badge-outlined-cyan-text\" },\n { variant: \"outlined\", tone: \"orange\", class: \"border-badge-outlined-orange-border text-badge-outlined-orange-text\" },\n { variant: \"outlined\", tone: \"emerald\", class: \"border-badge-outlined-emerald-border text-badge-outlined-emerald-text\" },\n { variant: \"outlined\", tone: \"fuchsia\", class: \"border-badge-outlined-fuchsia-border text-badge-outlined-fuchsia-text\" },\n { variant: \"outlined\", tone: \"amber\", class: \"border-badge-outlined-amber-border text-badge-outlined-amber-text\" },\n { variant: \"outlined\", tone: \"slate\", class: \"border-badge-outlined-slate-border text-badge-outlined-slate-text\" },\n { variant: \"outlined\", tone: \"teal\", class: \"border-badge-outlined-teal-border text-badge-outlined-teal-text\" },\n { variant: \"outlined\", tone: \"sky\", class: \"border-badge-outlined-sky-border text-badge-outlined-sky-text\" },\n { variant: \"outlined\", tone: \"purple\", class: \"border-badge-outlined-purple-border text-badge-outlined-purple-text\" },\n { variant: \"outlined\", tone: \"pink\", class: \"border-badge-outlined-pink-border text-badge-outlined-pink-text\" },\n ],\n // variant/type defaults are applied in the component so `tone` can suppress `type`.\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface BadgeProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"type\">,\n VariantProps<typeof badgeVariants> {\n icon?: IconDefinition;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, type, tone, size, icon, children, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n badgeVariants({\n variant: variant ?? \"solid\",\n // `tone` and `type` share the color axis — when a tone is set it wins.\n type: tone != null ? undefined : type ?? \"primary\",\n tone,\n size,\n }),\n className,\n )}\n {...props}\n >\n {icon && <Icon icon={icon} size=\"xs\" />}\n {children}\n </span>\n );\n },\n);\n\nBadge.displayName = \"Badge\";\n\nexport { Badge, badgeVariants, type BadgeProps };\n","import * as React from \"react\";\nimport { Icon, faPlayOutline } from \"@l3mpire/icons\";\nimport { Tooltip, TooltipTrigger, TooltipContent } from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface AIColumnHeaderBarProps\n extends React.HTMLAttributes<HTMLDivElement> {\n label: string;\n /** Fires when the user clicks the \"run on all rows\" button. */\n onRun?: () => void;\n /** Localized tooltip for the run button. */\n runLabel?: string;\n}\n\n/**\n * Header bar tailored for AI columns. The Play button only appears when the\n * header is hovered (use the `group/aih` named group, scoped to this bar).\n */\nexport const AIColumnHeaderBar = React.forwardRef<\n HTMLDivElement,\n AIColumnHeaderBarProps\n>(({ label, onRun, runLabel = \"Run on all rows\", className, ...rest }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"group/aih flex items-center justify-between gap-xs min-w-0 w-full\",\n className,\n )}\n {...rest}\n >\n <span className=\"truncate min-w-0 text-xs font-medium text-table-head-text\">\n {label}\n </span>\n {onRun && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRun();\n }}\n aria-label={runLabel}\n className={cn(\n \"shrink-0 inline-flex items-center justify-center h-5 w-5 rounded-sm\",\n \"opacity-0 group-hover/aih:opacity-100 transition-opacity\",\n \"text-[var(--core-text-functional-info)] hover:bg-info-message-info-bg\",\n \"focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--core-text-functional-info)]\",\n )}\n >\n <Icon icon={faPlayOutline} size=\"xs\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{runLabel}</TooltipContent>\n </Tooltip>\n )}\n </div>\n));\n\nAIColumnHeaderBar.displayName = \"AIColumnHeaderBar\";\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon, faStarsOutline } from \"@l3mpire/icons\";\nimport { Button } from \"./button\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface AISuggestionDotProps\n extends Omit<React.HTMLAttributes<HTMLButtonElement>, \"onClick\"> {\n /** Short explanation surfaced inside the popover. */\n reason?: string;\n /** Current value the AI wants to replace (left side of the arrow). */\n from?: React.ReactNode;\n /** Suggested value (right side of the arrow). */\n to: React.ReactNode;\n onApply: () => void;\n onDismiss: () => void;\n /** Popover anchoring side. Defaults to bottom. */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Localized labels. */\n title?: string;\n applyLabel?: string;\n dismissLabel?: string;\n}\n\n/**\n * A pulsing violet dot anchored next to a cell value. Clicking it opens a\n * popover with the AI's suggestion plus Apply / Dismiss actions.\n */\nexport const AISuggestionDot = React.forwardRef<\n HTMLButtonElement,\n AISuggestionDotProps\n>(\n (\n {\n reason,\n from,\n to,\n onApply,\n onDismiss,\n side = \"bottom\",\n title = \"Suggested change\",\n applyLabel = \"Apply\",\n dismissLabel = \"Dismiss\",\n className,\n ...rest\n },\n ref,\n ) => {\n const [open, setOpen] = React.useState(false);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n aria-label={title}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"relative inline-flex items-center justify-center h-3 w-3 rounded-full\",\n \"bg-[var(--interactive-bg-primary-dark-default)] text-white\",\n \"shadow-elevation-sm cursor-pointer\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--core-text-functional-info)]\",\n className,\n )}\n {...rest}\n >\n <span\n aria-hidden\n className=\"absolute inset-0 rounded-full bg-[var(--interactive-bg-primary-dark-default)] opacity-60 animate-ping\"\n />\n <Icon\n icon={faStarsOutline}\n className=\"relative z-10\"\n style={{ fontSize: \"0.5rem\", width: \"0.5rem\", height: \"0.5rem\" }}\n />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side={side}\n align=\"start\"\n sideOffset={6}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"z-50 w-[260px] rounded-lg border border-modal-border bg-modal-bg p-base shadow-elevation-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n <div className=\"flex flex-col gap-sm\">\n <div className=\"flex items-center gap-xs text-xs font-medium text-[var(--core-text-main-primary)]\">\n <Icon\n icon={faStarsOutline}\n size=\"xs\"\n className=\"text-[var(--core-text-functional-info)]\"\n />\n <span>{title}</span>\n </div>\n {(from || to) && (\n <div className=\"flex items-center gap-xs flex-wrap text-xs\">\n {from && <span className=\"opacity-70\">{from}</span>}\n {from && <span className=\"opacity-50\">→</span>}\n {to}\n </div>\n )}\n {reason && (\n <p className=\"text-xxs text-[var(--core-text-main-tertiary)] leading-sm\">\n {reason}\n </p>\n )}\n <div className=\"flex items-center gap-xs justify-end pt-xs\">\n <Button\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n onClick={() => {\n onDismiss();\n setOpen(false);\n }}\n >\n {dismissLabel}\n </Button>\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size=\"sm\"\n onClick={() => {\n onApply();\n setOpen(false);\n }}\n >\n {applyLabel}\n </Button>\n </div>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n },\n);\n\nAISuggestionDot.displayName = \"AISuggestionDot\";\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faSpinnerSolid, type IconDefinition, type IconSize } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst buttonVariants = cva(\n [\n \"inline-flex items-center justify-center whitespace-nowrap\",\n \"font-medium transition-colors\",\n \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"disabled:pointer-events-none\",\n \"border\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n ],\n {\n variants: {\n appearance: {\n solid: [\n \"disabled:bg-none disabled:bg-btn-disabled-solid-bg\",\n \"disabled:text-btn-disabled-solid-text\",\n \"disabled:border-btn-disabled-solid-border\",\n \"disabled:shadow-none\",\n ],\n outlined: [\n \"disabled:bg-none disabled:bg-btn-disabled-outlined-bg\",\n \"disabled:text-btn-disabled-outlined-text\",\n \"disabled:border-btn-disabled-outlined-border\",\n \"disabled:shadow-none\",\n ],\n ghost: [\n \"disabled:bg-btn-disabled-ghost-bg\",\n \"disabled:text-btn-disabled-ghost-text\",\n \"disabled:border-btn-disabled-ghost-border\",\n ],\n },\n intent: {\n brand: [],\n alert: [],\n },\n size: {\n sm: [\n \"h-6 px-sm py-xs gap-none\",\n \"text-xs\",\n \"min-w-16 rounded-base\",\n ],\n md: [\n \"h-8 px-base py-sm gap-2xs\",\n \"text-sm\",\n \"min-w-20 rounded-md\",\n ],\n lg: [\n \"h-10 px-lg py-md gap-2xs\",\n \"text-sm\",\n \"min-w-20 rounded-lg\",\n ],\n },\n iconOnly: {\n true: \"\",\n false: \"\",\n },\n fullWidth: {\n true: \"w-full\",\n },\n },\n compoundVariants: [\n // ── Solid + Brand ──────────────────────────────────────────────────\n {\n appearance: \"solid\",\n intent: \"brand\",\n class: [\n \"bg-gradient-to-t from-btn-solid-brand-bg-default from-[10%] to-btn-solid-brand-bg-gradient-to-default\",\n \"text-btn-solid-brand-text-default\",\n \"border-btn-solid-brand-border-default\",\n \"shadow-[inset_0_0_0_1px_var(--comp-btn-solid-brand-inner-border-default),0_1px_3px_0_var(--shadow-4)]\",\n \"hover:from-btn-solid-brand-bg-hover hover:from-[0%] hover:to-btn-solid-brand-bg-gradient-to-hover\",\n \"hover:border-btn-solid-brand-border-hover\",\n \"hover:shadow-[inset_0_0_0_1px_var(--comp-btn-solid-brand-inner-border-hover),0_1px_3px_0_var(--shadow-4)]\",\n \"active:from-btn-solid-brand-bg-pressed active:to-btn-solid-brand-bg-gradient-to-pressed\",\n \"active:border-btn-solid-brand-border-pressed\",\n \"active:shadow-[inset_0_0_0_1px_var(--comp-btn-solid-brand-inner-border-pressed),0_1px_3px_0_var(--shadow-4)]\",\n ],\n },\n // ── Solid + Alert ──────────────────────────────────────────────────\n {\n appearance: \"solid\",\n intent: \"alert\",\n class: [\n \"bg-gradient-to-t from-btn-solid-alert-bg-default from-[10%] to-btn-solid-alert-bg-gradient-to-default\",\n \"text-btn-solid-alert-text-default\",\n \"border-btn-solid-alert-border-default\",\n \"shadow-[inset_0_0_0_1px_var(--comp-btn-solid-alert-inner-border-default),0_1px_3px_0_var(--shadow-4)]\",\n \"hover:from-btn-solid-alert-bg-hover hover:from-[0%] hover:to-btn-solid-alert-bg-gradient-to-hover\",\n \"hover:border-btn-solid-alert-border-hover\",\n \"hover:shadow-[inset_0_0_0_1px_var(--comp-btn-solid-alert-inner-border-hover),0_1px_3px_0_var(--shadow-4)]\",\n \"active:from-btn-solid-alert-bg-pressed active:to-btn-solid-alert-bg-gradient-to-pressed\",\n \"active:border-btn-solid-alert-border-pressed\",\n \"active:shadow-[inset_0_0_0_1px_var(--comp-btn-solid-alert-inner-border-pressed),0_1px_3px_0_var(--shadow-4)]\",\n ],\n },\n // ── Outlined + Brand ─────────────────────────────────────────────\n {\n appearance: \"outlined\",\n intent: \"brand\",\n class: [\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default\",\n \"text-btn-outlined-neutral-text-default\",\n \"border-btn-outlined-neutral-border-default\",\n \"shadow-[0_1px_3px_0_var(--shadow-4)]\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:from-[0%] hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n \"hover:border-btn-outlined-neutral-border-hover\",\n \"active:from-btn-outlined-neutral-bg-pressed active:to-btn-outlined-neutral-bg-gradient-to-pressed\",\n \"active:border-btn-outlined-neutral-border-pressed\",\n ],\n },\n // ── Outlined + Alert ───────────────────────────────────────────────\n {\n appearance: \"outlined\",\n intent: \"alert\",\n class: [\n \"bg-btn-outlined-alert-bg-default\",\n \"text-btn-outlined-alert-text-default\",\n \"border-btn-outlined-alert-border-default\",\n \"shadow-[0_1px_3px_0_var(--shadow-4)]\",\n \"hover:bg-btn-outlined-alert-bg-hover\",\n \"hover:text-btn-outlined-alert-text-hover\",\n \"hover:border-btn-outlined-alert-border-default\",\n \"active:bg-btn-outlined-alert-bg-pressed\",\n \"active:text-btn-outlined-alert-text-pressed\",\n \"active:border-btn-outlined-alert-border-pressed\",\n ],\n },\n // ── Ghost + Brand ──────────────────────────────────────────────────\n {\n appearance: \"ghost\",\n intent: \"brand\",\n class: [\n \"bg-btn-ghost-brand-bg-default\",\n \"text-btn-ghost-brand-text-default\",\n \"border-btn-ghost-brand-border-default\",\n \"hover:bg-btn-ghost-brand-bg-hover\",\n \"hover:text-btn-ghost-brand-text-hover\",\n \"active:bg-btn-ghost-brand-bg-pressed\",\n \"active:text-btn-ghost-brand-text-pressed\",\n ],\n },\n // ── Ghost + Alert ──────────────────────────────────────────────────\n {\n appearance: \"ghost\",\n intent: \"alert\",\n class: [\n \"bg-btn-ghost-alert-bg-default\",\n \"text-btn-ghost-alert-text-default\",\n \"border-btn-ghost-alert-border-default\",\n \"hover:bg-btn-ghost-alert-bg-hover\",\n \"hover:text-btn-ghost-alert-text-hover\",\n \"active:bg-btn-ghost-alert-bg-pressed\",\n \"active:text-btn-ghost-alert-text-pressed\",\n ],\n },\n // ── Icon-only size overrides ───────────────────────────────────────\n { size: \"sm\", iconOnly: true, class: \"w-6 min-w-0 px-0\" },\n { size: \"md\", iconOnly: true, class: \"w-8 min-w-0 px-0\" },\n { size: \"lg\", iconOnly: true, class: \"w-10 min-w-0 px-0\" },\n ],\n defaultVariants: {\n appearance: \"solid\",\n intent: \"brand\",\n size: \"md\",\n },\n },\n);\n\n// ── Icon size mapping ────────────────────────────────────────────────────────\n\nconst iconSizeMap: Record<NonNullable<ButtonProps[\"size\"]>, IconSize> = {\n sm: \"xs\", // 12px\n md: \"sm\", // 14px\n lg: \"sm\", // 14px\n};\n\n// ── Per-size text-wrapper (hosts label + optional badge) ────────────────────\n\nconst textWrapperClass = (size: NonNullable<ButtonProps[\"size\"]>) =>\n cn(\n \"inline-flex items-center justify-center px-xs\",\n size === \"lg\" ? \"gap-sm\" : \"gap-xs\",\n );\n\n// ── Badge (in-button counter / accent) ──────────────────────────────────────\n\ninterface ButtonBadgeProps {\n size: NonNullable<ButtonProps[\"size\"]>;\n intent: NonNullable<ButtonProps[\"intent\"]>;\n children: React.ReactNode;\n}\n\nconst ButtonBadge: React.FC<ButtonBadgeProps> = ({ size, intent, children }) => {\n const colors =\n intent === \"alert\"\n ? \"bg-[var(--core-bg-functional-invert-critical)] text-[var(--core-text-functional-critical)]\"\n : \"bg-[var(--core-bg-functional-invert-info)] text-[var(--core-text-functional-info)]\";\n\n // lg: 12px font / 16px line / radius-sm / px-sm py-xs\n // md & sm: 10px font / 14px line / radius-xs / px-xs py-2xs\n const shape =\n size === \"lg\"\n ? \"gap-xs px-sm py-xs rounded-sm text-xs leading-xs\"\n : \"gap-2xs px-xs py-2xs rounded-xs text-xxs leading-2xs\";\n\n return (\n <span\n className={cn(\n \"inline-flex items-center font-medium whitespace-nowrap\",\n shape,\n colors,\n )}\n >\n {children}\n </span>\n );\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n leftIcon?: IconDefinition;\n rightIcon?: IconDefinition;\n iconOnly?: boolean;\n /** Optional badge (e.g. counter) shown next to the label. Ignored when iconOnly. */\n badge?: React.ReactNode;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n appearance: appearanceProp,\n intent: intentProp,\n size,\n iconOnly: iconOnlyProp,\n fullWidth,\n asChild = false,\n loading = false,\n leftIcon,\n rightIcon,\n disabled,\n badge,\n children,\n ...props\n },\n ref,\n ) => {\n const appearance = appearanceProp ?? \"solid\";\n const intent = intentProp ?? \"brand\";\n const resolvedSize = size ?? \"md\";\n\n const isDisabled = disabled || loading;\n const isIconOnly = iconOnlyProp ?? !children;\n const iconSize = iconSizeMap[resolvedSize];\n\n const variantClasses = buttonVariants({\n appearance,\n intent,\n size: resolvedSize,\n iconOnly: isIconOnly || undefined,\n fullWidth,\n className,\n });\n\n const labelNode = !isIconOnly ? (\n <span className={textWrapperClass(resolvedSize)}>\n {children}\n {badge != null && (\n <ButtonBadge size={resolvedSize} intent={intent}>\n {badge}\n </ButtonBadge>\n )}\n </span>\n ) : null;\n\n if (asChild) {\n return (\n <Slot ref={ref} className={cn(variantClasses)} {...props}>\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n className={cn(variantClasses)}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading ? (\n <Icon icon={faSpinnerSolid} size={iconSize} className=\"animate-spin\" />\n ) : leftIcon ? (\n <Icon icon={leftIcon} size={iconSize} />\n ) : null}\n {labelNode}\n {rightIcon && !loading && <Icon icon={rightIcon} size={iconSize} />}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants, type ButtonProps };\n","import * as React from \"react\";\nimport {\n Icon,\n faStarsOutline,\n faXmarkOutline,\n faCheckOutline,\n} from \"@l3mpire/icons\";\nimport {\n SidePanel,\n SidePanelTrigger,\n SidePanelClose,\n SidePanelContent,\n} from \"./side-panel\";\nimport { Button } from \"./button\";\nimport { TextInput } from \"./text-input\";\nimport { TextArea } from \"./textarea\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport type AIColumnOutputFormat =\n | \"text\"\n | \"number\"\n | \"boolean\"\n | \"select\"\n | \"date\";\n\nexport interface AIColumnConfig {\n name: string;\n prompt: string;\n outputFormat: AIColumnOutputFormat;\n /** Optional consumer-defined slots (model, sources, timeframe…). */\n extras?: Record<string, unknown>;\n}\n\nexport interface AIColumnSidePanelProps {\n /** Controlled open state. If omitted, behaves uncontrolled via trigger. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Initial config when creating or editing an existing column. */\n initialConfig?: Partial<AIColumnConfig>;\n /** Fired with the assembled config when the user saves. */\n onSave: (config: AIColumnConfig) => void;\n /** Optional trigger that opens the side panel (uncontrolled mode). */\n trigger?: React.ReactNode;\n /** Render slot for model picker, sources, timeframe etc. */\n extrasSlot?: (\n extras: AIColumnConfig[\"extras\"],\n setExtras: (next: AIColumnConfig[\"extras\"]) => void,\n ) => React.ReactNode;\n /** Submit label. Defaults to \"Save\". */\n saveLabel?: string;\n /** Title of the panel. Defaults to \"AI column\". */\n title?: string;\n}\n\nconst OUTPUT_OPTIONS: { value: AIColumnOutputFormat; label: string }[] = [\n { value: \"text\", label: \"Text\" },\n { value: \"number\", label: \"Number\" },\n { value: \"boolean\", label: \"Yes / No\" },\n { value: \"select\", label: \"Single select\" },\n { value: \"date\", label: \"Date\" },\n];\n\n// ── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Side panel scaffold for creating or editing an AI column. The shell\n * (header, body sections, footer) is opinionated; product-specific\n * controls (model picker, sources picker, timeframe) plug in through\n * `extrasSlot`.\n */\nexport function AIColumnSidePanel({\n open,\n onOpenChange,\n initialConfig,\n onSave,\n trigger,\n extrasSlot,\n saveLabel = \"Save\",\n title = \"AI column\",\n}: AIColumnSidePanelProps) {\n const [name, setName] = React.useState(initialConfig?.name ?? \"\");\n const [prompt, setPrompt] = React.useState(initialConfig?.prompt ?? \"\");\n const [outputFormat, setOutputFormat] = React.useState<AIColumnOutputFormat>(\n initialConfig?.outputFormat ?? \"text\",\n );\n const [extras, setExtras] = React.useState<AIColumnConfig[\"extras\"]>(\n initialConfig?.extras,\n );\n\n const canSave = name.trim().length > 0 && prompt.trim().length > 0;\n\n const handleSave = () => {\n if (!canSave) return;\n onSave({ name: name.trim(), prompt: prompt.trim(), outputFormat, extras });\n onOpenChange?.(false);\n };\n\n return (\n <SidePanel open={open} onOpenChange={onOpenChange}>\n {trigger && <SidePanelTrigger asChild>{trigger}</SidePanelTrigger>}\n <SidePanelContent>\n {/* Header */}\n <div className=\"flex items-center justify-between gap-base px-xl py-lg border-b border-modal-header-border\">\n <div className=\"flex items-center gap-sm min-w-0\">\n <span\n className={cn(\n \"shrink-0 inline-flex items-center justify-center h-7 w-7 rounded-md\",\n \"bg-info-message-info-bg text-[var(--core-text-functional-info)]\",\n )}\n >\n <Icon icon={faStarsOutline} size=\"sm\" />\n </span>\n <h2 className=\"truncate text-sm font-semibold text-modal-header-title\">\n {title}\n </h2>\n </div>\n <SidePanelClose asChild>\n <Button\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n iconOnly\n aria-label=\"Close\"\n >\n <Icon icon={faXmarkOutline} size=\"sm\" />\n </Button>\n </SidePanelClose>\n </div>\n\n {/* Body */}\n <div className=\"flex-1 overflow-y-auto px-xl py-lg flex flex-col gap-lg\">\n <Field label=\"Column name\">\n <TextInput\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g. Tech stack summary\"\n size=\"sm\"\n />\n </Field>\n\n <Field\n label=\"Prompt\"\n hint=\"Use {{variable}} to reference row values.\"\n >\n <TextArea\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder=\"Describe what the AI should produce for each row…\"\n rows={6}\n />\n </Field>\n\n <Field label=\"Output format\">\n <select\n value={outputFormat}\n onChange={(e) =>\n setOutputFormat(e.target.value as AIColumnOutputFormat)\n }\n className={cn(\n \"h-8 w-full rounded-base px-sm text-xs\",\n \"bg-select-bg-default text-select-text-default\",\n \"border border-select-border-default hover:border-select-border-hover\",\n \"cursor-pointer outline-none focus-visible:ring-2 focus-visible:ring-[var(--core-text-functional-info)]\",\n )}\n >\n {OUTPUT_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </Field>\n\n {extrasSlot?.(extras, setExtras)}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-end gap-sm px-xl py-base border-t border-modal-footer-border\">\n <SidePanelClose asChild>\n <Button appearance=\"ghost\" intent=\"brand\" size=\"sm\">\n Cancel\n </Button>\n </SidePanelClose>\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size=\"sm\"\n disabled={!canSave}\n onClick={handleSave}\n >\n <Icon icon={faCheckOutline} size=\"xs\" />\n {saveLabel}\n </Button>\n </div>\n </SidePanelContent>\n </SidePanel>\n );\n}\n\nAIColumnSidePanel.displayName = \"AIColumnSidePanel\";\n\n// ── Field helper ─────────────────────────────────────────────────────────────\n\nfunction Field({\n label,\n hint,\n children,\n}: {\n label: string;\n hint?: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-xs\">\n <label className=\"text-xs font-medium text-input-label-text\">\n {label}\n </label>\n {children}\n {hint && (\n <span className=\"text-xxs text-[var(--core-text-main-tertiary)]\">\n {hint}\n </span>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cn } from \"../../lib/utils\";\nimport { ModalOverlay } from \"./modal\";\n\n// ── SidePanel (Root) ─────────────────────────────────────────────────────────\n\nconst SidePanel = DialogPrimitive.Root;\n\n// ── SidePanelTrigger ─────────────────────────────────────────────────────────\n\nconst SidePanelTrigger = DialogPrimitive.Trigger;\n\n// ── SidePanelClose ───────────────────────────────────────────────────────────\n\nconst SidePanelClose = DialogPrimitive.Close;\n\n// ── SidePanelContent ─────────────────────────────────────────────────────────\n\ninterface SidePanelContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Whether to show the overlay behind the panel. Defaults to true. */\n overlay?: boolean;\n}\n\nconst SidePanelContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n SidePanelContentProps\n>(({ className, overlay = true, children, ...props }, ref) => (\n <DialogPrimitive.Portal>\n {overlay && <ModalOverlay />}\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-y-0 right-0 z-50\",\n \"flex flex-col\",\n \"min-w-[500px] w-[500px]\",\n \"bg-modal-bg border-l border-modal-border shadow-lg\",\n \"outline-none\",\n \"data-[state=open]:animate-sidepanel-in data-[state=closed]:animate-sidepanel-out\",\n className,\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n));\nSidePanelContent.displayName = \"SidePanelContent\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n SidePanel,\n SidePanelTrigger,\n SidePanelClose,\n SidePanelContent,\n type SidePanelContentProps,\n};\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faXmarkSolid, faCircleInfoSolid } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Size variant for the modal panel ─────────────────────────────────────────\n\nconst modalVariants = cva(\n [\n \"fixed top-[50%] left-[50%] -translate-x-1/2 -translate-y-1/2 z-50\",\n \"flex flex-col\",\n \"bg-modal-bg border border-modal-border rounded-lg shadow-sm overflow-clip\",\n \"outline-none\",\n \"data-[state=open]:animate-modal-in data-[state=closed]:animate-modal-out\",\n ],\n {\n variants: {\n size: {\n sm: \"w-[500px] max-h-[80vh]\",\n md: \"w-[800px] max-h-[85vh]\",\n lg: \"w-[1100px] max-h-[90vh]\",\n full: \"w-[calc(100%-32px)] h-[calc(100%-32px)]\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// ── Modal (Root) ─────────────────────────────────────────────────────────────\n\nconst Modal = DialogPrimitive.Root;\n\n// ── ModalTrigger ─────────────────────────────────────────────────────────────\n\nconst ModalTrigger = DialogPrimitive.Trigger;\n\n// ── ModalClose ───────────────────────────────────────────────────────────────\n\nconst ModalClose = DialogPrimitive.Close;\n\n// ── ModalOverlay ─────────────────────────────────────────────────────────────\n\nconst ModalOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-modal-overlay/50\",\n \"data-[state=open]:animate-modal-overlay-in data-[state=closed]:animate-modal-overlay-out\",\n className,\n )}\n {...props}\n />\n));\nModalOverlay.displayName = \"ModalOverlay\";\n\n// ── ModalContent ─────────────────────────────────────────────────────────────\n\ninterface ModalContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof modalVariants> {}\n\nconst ModalContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n ModalContentProps\n>(({ className, size, children, ...props }, ref) => (\n <DialogPrimitive.Portal>\n <ModalOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(modalVariants({ size }), className)}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n));\nModalContent.displayName = \"ModalContent\";\n\n// ── ModalHeader ──────────────────────────────────────────────────────────────\n\ninterface ModalHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether to show the bottom border. Defaults to true. */\n showBorder?: boolean;\n /** Called when the close button is clicked. If omitted, no close button is shown. */\n onClose?: () => void;\n}\n\nconst ModalHeader = React.forwardRef<HTMLDivElement, ModalHeaderProps>(\n ({ className, showBorder = true, onClose, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-start gap-xl p-xl\",\n showBorder && \"border-b border-modal-header-border\",\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-1 flex-col gap-2xs\">{children}</div>\n {onClose && (\n <DialogPrimitive.Close asChild>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"inline-flex shrink-0 items-center justify-center p-xs rounded-base text-modal-header-close hover:bg-black/5 transition-colors cursor-pointer\"\n aria-label=\"Close\"\n >\n <Icon icon={faXmarkSolid} size=\"sm\" />\n </button>\n </DialogPrimitive.Close>\n )}\n </div>\n ),\n);\nModalHeader.displayName = \"ModalHeader\";\n\n// ── ModalTitle ───────────────────────────────────────────────────────────────\n\nconst ModalTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-base font-medium leading-base text-modal-header-title\", className)}\n {...props}\n />\n));\nModalTitle.displayName = \"ModalTitle\";\n\n// ── ModalDescription ─────────────────────────────────────────────────────────\n\nconst ModalDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm font-regular leading-sm text-modal-header-description\", className)}\n {...props}\n />\n));\nModalDescription.displayName = \"ModalDescription\";\n\n// ── ModalBody ────────────────────────────────────────────────────────────────\n\nconst ModalBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex-1 overflow-y-auto p-xl\", className)}\n {...props}\n />\n));\nModalBody.displayName = \"ModalBody\";\n\n// ── ModalFooter ──────────────────────────────────────────────────────────────\n\ninterface ModalFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether to show the top border. Defaults to true. */\n showBorder?: boolean;\n /** Optional info message to show on the left side of the footer. */\n infoMessage?: string;\n}\n\nconst ModalFooter = React.forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, showBorder = true, infoMessage, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-between gap-lg p-xl\",\n showBorder && \"border-t border-modal-footer-border\",\n className,\n )}\n {...props}\n >\n {infoMessage && (\n <div className=\"flex flex-1 items-center gap-base\">\n <Icon icon={faCircleInfoSolid} size=\"sm\" className=\"shrink-0 text-modal-footer-icon\" />\n <span className=\"text-sm font-regular leading-sm text-modal-footer-text\">{infoMessage}</span>\n </div>\n )}\n {children}\n </div>\n ),\n);\nModalFooter.displayName = \"ModalFooter\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n Modal,\n ModalTrigger,\n ModalClose,\n ModalOverlay,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalBody,\n ModalFooter,\n modalVariants,\n type ModalContentProps,\n type ModalHeaderProps,\n type ModalFooterProps,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faCircleExclamationOutline,\n faCircleXmarkSolid,\n faPlusSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst textInputVariants = cva(\n [\n \"flex items-center w-full border transition-colors\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n ],\n {\n variants: {\n size: {\n sm: \"px-base py-sm gap-base rounded-base\",\n md: \"px-lg py-[10px] gap-base rounded-md\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// ── State style maps ─────────────────────────────────────────────────────────\n\nconst wrapperStates = {\n default: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-default\",\n \"text-text-input-text-default\",\n \"hover:border-text-input-border-hover\",\n \"focus-within:border-text-input-border-hover\",\n \"focus-within:shadow-focus-ring\",\n ],\n success: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-success\",\n \"text-text-input-text-default\",\n ],\n error: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-error\",\n \"text-text-input-text-default\",\n ],\n disabled: [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"text-text-input-text-disabled\",\n \"cursor-not-allowed\",\n ],\n};\n\nconst iconColor = {\n default: \"text-text-input-icon\",\n disabled: \"text-text-input-text-disabled\",\n};\n\nconst attachedButtonStyles = {\n enabled: [\n \"bg-gradient-to-t from-text-input-button-bg from-[10%] to-text-input-button-gradient-to\",\n \"border-text-input-button-border\",\n \"shadow-sm\",\n \"hover:from-text-input-button-bg-hover hover:from-[0%] hover:to-text-input-button-gradient-to\",\n ],\n disabled: [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"cursor-not-allowed\",\n ],\n};\n\nconst errorGuidance = {\n icon: \"shrink-0 text-text-input-error-icon\",\n text: \"text-xs font-medium leading-xs text-text-input-error-text\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TextInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\">,\n VariantProps<typeof textInputVariants> {\n type?: \"text\" | \"email\" | \"password\" | \"number\" | \"tel\" | \"url\" | \"search\";\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n error?: boolean;\n errorMessage?: string;\n success?: boolean;\n iconLeft?: IconDefinition;\n iconRight?: IconDefinition;\n onClear?: () => void;\n hasButton?: boolean;\n buttonIcon?: IconDefinition;\n onButtonClick?: () => void;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction resolveState(error?: boolean, success?: boolean, disabled?: boolean) {\n if (disabled) return \"disabled\" as const;\n if (error) return \"error\" as const;\n if (success) return \"success\" as const;\n return \"default\" as const;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst TextInput = React.forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n className,\n size,\n type = \"text\",\n label,\n labelType,\n error,\n errorMessage,\n success,\n disabled,\n iconLeft,\n iconRight,\n onClear,\n hasButton,\n buttonIcon,\n onButtonClick,\n value,\n defaultValue,\n onChange,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const inputId = props.id ?? autoId;\n const errorId = error && errorMessage ? `${inputId}-error` : undefined;\n\n const isControlled = value !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n (defaultValue as string) ?? \"\",\n );\n const displayValue = isControlled ? (value as string) : uncontrolledValue;\n const showClear = onClear != null && displayValue !== \"\" && !disabled;\n const state = resolveState(error, success, disabled);\n const icColor = iconColor[disabled ? \"disabled\" : \"default\"];\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n };\n\n return (\n <div className=\"flex flex-col gap-xs\">\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <div className=\"flex\">\n <div\n className={cn(\n textInputVariants({ size }),\n wrapperStates[state],\n hasButton && \"rounded-r-none border-r-0\",\n className,\n )}\n >\n {iconLeft && (\n <Icon icon={iconLeft} size=\"sm\" className={cn(\"shrink-0\", icColor)} />\n )}\n\n <input\n ref={ref}\n id={inputId}\n type={type}\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? defaultValue : undefined}\n onChange={handleChange}\n className={cn(\n \"flex-1 min-w-0 bg-transparent outline-none\",\n \"[font-size:inherit] font-[inherit] leading-[inherit] [color:inherit]\",\n disabled\n ? \"placeholder:text-text-input-text-disabled cursor-not-allowed\"\n : \"placeholder:text-text-input-text-placeholder\",\n )}\n {...props}\n />\n\n {showClear ? (\n <button\n type=\"button\"\n onClick={onClear}\n className=\"shrink-0 flex items-center justify-center\"\n tabIndex={-1}\n >\n <Icon icon={faCircleXmarkSolid} size=\"xs\" className={iconColor.default} />\n </button>\n ) : (\n iconRight &&\n !onClear && (\n <Icon icon={iconRight} size=\"xs\" className={cn(\"shrink-0\", icColor)} />\n )\n )}\n </div>\n\n {hasButton && (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onButtonClick}\n className={cn(\n \"shrink-0 flex items-center justify-center border\",\n size === \"sm\"\n ? \"px-base rounded-r-base\"\n : \"px-lg rounded-r-md\",\n attachedButtonStyles[disabled ? \"disabled\" : \"enabled\"],\n )}\n >\n <Icon icon={buttonIcon ?? faPlusSolid} size=\"sm\" className={icColor} />\n </button>\n )}\n </div>\n\n {error && errorMessage && (\n <div className=\"flex items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nTextInput.displayName = \"TextInput\";\n\nexport { TextInput, textInputVariants, type TextInputProps };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { Icon, faCircleInfoSolid, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface InputLabelProps\n extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {\n type?: \"default\" | \"optional\" | \"mandatory\" | \"info\";\n disabled?: boolean;\n infoIcon?: IconDefinition;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst InputLabel = React.forwardRef<\n React.ComponentRef<typeof LabelPrimitive.Root>,\n InputLabelProps\n>(({ className, type = \"default\", disabled, infoIcon, children, ...props }, ref) => {\n const textColor = disabled\n ? \"text-input-label-disabled\"\n : \"text-input-label-text\";\n\n return (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-xs\",\n \"text-xs\",\n \"font-medium\",\n \"leading-xs\",\n textColor,\n className,\n )}\n {...props}\n >\n {children}\n {type === \"optional\" && (\n <span\n className={cn(\n \"font-regular\",\n \"text-xxs leading-2xs\",\n disabled\n ? \"text-input-label-disabled\"\n : \"text-input-label-optional\",\n )}\n >\n Optional\n </span>\n )}\n {type === \"mandatory\" && (\n <span\n className={cn(\n \"font-regular\",\n \"text-xs\",\n \"leading-xs\",\n disabled\n ? \"text-input-label-disabled\"\n : \"text-input-label-mandatory\",\n )}\n >\n *\n </span>\n )}\n {type === \"info\" && (\n <Icon\n icon={infoIcon ?? faCircleInfoSolid}\n size=\"xs\"\n className={\n disabled\n ? \"text-input-label-disabled\"\n : \"text-input-label-icon\"\n }\n />\n )}\n </LabelPrimitive.Root>\n );\n});\n\nInputLabel.displayName = \"InputLabel\";\n\nexport { InputLabel, type InputLabelProps };\n","import * as React from \"react\";\nimport { Icon, faCircleExclamationOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\n\n// ── State style maps ─────────────────────────────────────────────────────────\n\nconst fieldStates = {\n default: [\n \"bg-textarea-bg-default\",\n \"border-textarea-border-default\",\n \"text-textarea-text-default\",\n \"placeholder:text-textarea-text-placeholder\",\n \"hover:border-textarea-border-hover\",\n \"focus:border-textarea-border-hover\",\n \"focus:shadow-focus-ring\",\n ],\n success: [\n \"bg-textarea-bg-default\",\n \"border-textarea-border-success\",\n \"text-textarea-text-default\",\n \"placeholder:text-textarea-text-placeholder\",\n ],\n error: [\n \"bg-textarea-bg-default\",\n \"border-textarea-border-error\",\n \"text-textarea-text-default\",\n \"placeholder:text-textarea-text-placeholder\",\n ],\n disabled: [\n \"bg-textarea-bg-disabled\",\n \"border-textarea-border-disabled\",\n \"text-textarea-text-disabled\",\n \"placeholder:text-textarea-text-disabled\",\n \"cursor-not-allowed resize-none\",\n ],\n};\n\nconst errorGuidance = {\n icon: \"shrink-0 text-textarea-error-icon\",\n text: \"text-xs font-medium leading-xs text-textarea-error-text\",\n};\n\nconst charLimitStyle =\n \"shrink-0 text-right text-xs font-regular leading-xs text-textarea-char-limit\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TextAreaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"type\"> {\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n error?: boolean;\n errorMessage?: string;\n success?: boolean;\n characterLimit?: string;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction resolveState(error?: boolean, success?: boolean, disabled?: boolean) {\n if (disabled) return \"disabled\" as const;\n if (error) return \"error\" as const;\n if (success) return \"success\" as const;\n return \"default\" as const;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n className,\n label,\n labelType,\n error,\n errorMessage,\n success,\n characterLimit,\n disabled,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const textareaId = props.id ?? autoId;\n const errorId = error && errorMessage ? `${textareaId}-error` : undefined;\n const state = resolveState(error, success, disabled);\n\n return (\n <div className=\"flex flex-col gap-[4px]\">\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <textarea\n ref={ref}\n id={textareaId}\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n className={cn(\n \"w-full min-h-[120px] resize-vertical\",\n \"px-lg py-base\",\n \"rounded-md border overflow-clip outline-none\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n fieldStates[state],\n className,\n )}\n {...props}\n />\n\n {(error && errorMessage) || characterLimit ? (\n <div className=\"flex gap-base items-start w-full\">\n {error && errorMessage && (\n <div className=\"flex flex-1 items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n {characterLimit && (\n <span className={cn(charLimitStyle, !error && \"w-full\")}>\n {characterLimit}\n </span>\n )}\n </div>\n ) : null}\n </div>\n );\n },\n);\n\nTextArea.displayName = \"TextArea\";\n\nexport { TextArea, type TextAreaProps };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Context ──────────────────────────────────────────────────────────────────\n\ninterface HoverCardContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n openDelay: number;\n closeDelay: number;\n cancelClose: () => void;\n scheduleClose: () => void;\n scheduleOpen: () => void;\n cancelOpen: () => void;\n}\n\nconst HoverCardContext = React.createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCardContext(): HoverCardContextValue {\n const ctx = React.useContext(HoverCardContext);\n if (!ctx) throw new Error(\"HoverCard subcomponents must be inside <HoverCard>\");\n return ctx;\n}\n\n// ── Root ─────────────────────────────────────────────────────────────────────\n\nexport interface HoverCardProps {\n /** Delay in ms before the card opens after the trigger is hovered. */\n openDelay?: number;\n /** Delay in ms before the card closes after the pointer leaves. */\n closeDelay?: number;\n /** Controlled open state. If provided, the component is controlled. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n}\n\nexport function HoverCard({\n openDelay = 350,\n closeDelay = 120,\n open: controlledOpen,\n onOpenChange,\n children,\n}: HoverCardProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const open = controlledOpen ?? uncontrolledOpen;\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (controlledOpen === undefined) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [controlledOpen, onOpenChange],\n );\n\n const openTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const cancelOpen = React.useCallback(() => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n }, []);\n const cancelClose = React.useCallback(() => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n }, []);\n const scheduleOpen = React.useCallback(() => {\n cancelClose();\n if (open) return;\n cancelOpen();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n }, [open, openDelay, setOpen, cancelClose, cancelOpen]);\n const scheduleClose = React.useCallback(() => {\n cancelOpen();\n if (!open) return;\n cancelClose();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n }, [open, closeDelay, setOpen, cancelOpen, cancelClose]);\n\n React.useEffect(\n () => () => {\n cancelOpen();\n cancelClose();\n },\n [cancelOpen, cancelClose],\n );\n\n const value = React.useMemo<HoverCardContextValue>(\n () => ({\n open,\n setOpen,\n openDelay,\n closeDelay,\n cancelClose,\n scheduleClose,\n scheduleOpen,\n cancelOpen,\n }),\n [\n open,\n setOpen,\n openDelay,\n closeDelay,\n cancelClose,\n scheduleClose,\n scheduleOpen,\n cancelOpen,\n ],\n );\n\n return (\n <HoverCardContext.Provider value={value}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen} modal={false}>\n {children}\n </PopoverPrimitive.Root>\n </HoverCardContext.Provider>\n );\n}\n\n// ── Trigger ──────────────────────────────────────────────────────────────────\n\nexport interface HoverCardTriggerProps\n extends React.HTMLAttributes<HTMLElement> {\n asChild?: boolean;\n children: React.ReactNode;\n}\n\nexport const HoverCardTrigger = React.forwardRef<HTMLElement, HoverCardTriggerProps>(\n ({ asChild, children, onMouseEnter, onMouseLeave, onFocus, onBlur, ...rest }, ref) => {\n const { scheduleOpen, scheduleClose, cancelClose } = useHoverCardContext();\n const Comp: any = asChild ? Slot : \"span\";\n return (\n <PopoverPrimitive.Anchor asChild>\n <Comp\n ref={ref}\n onMouseEnter={(e: React.MouseEvent<HTMLElement>) => {\n cancelClose();\n scheduleOpen();\n onMouseEnter?.(e);\n }}\n onMouseLeave={(e: React.MouseEvent<HTMLElement>) => {\n scheduleClose();\n onMouseLeave?.(e);\n }}\n onFocus={(e: React.FocusEvent<HTMLElement>) => {\n cancelClose();\n scheduleOpen();\n onFocus?.(e);\n }}\n onBlur={(e: React.FocusEvent<HTMLElement>) => {\n scheduleClose();\n onBlur?.(e);\n }}\n {...rest}\n >\n {children}\n </Comp>\n </PopoverPrimitive.Anchor>\n );\n },\n);\nHoverCardTrigger.displayName = \"HoverCardTrigger\";\n\n// ── Content ──────────────────────────────────────────────────────────────────\n\nexport interface HoverCardContentProps\n extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {}\n\nexport const HoverCardContent = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Content>,\n HoverCardContentProps\n>(({ className, side = \"bottom\", align = \"start\", sideOffset = 8, ...rest }, ref) => {\n const { cancelClose, scheduleClose } = useHoverCardContext();\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n side={side}\n align={align}\n sideOffset={sideOffset}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onMouseEnter={(e) => {\n cancelClose();\n rest.onMouseEnter?.(e);\n }}\n onMouseLeave={(e) => {\n scheduleClose();\n rest.onMouseLeave?.(e);\n }}\n onClick={(e) => {\n e.stopPropagation();\n rest.onClick?.(e);\n }}\n className={cn(\n \"z-50 rounded-lg border border-modal-border bg-modal-bg p-base shadow-elevation-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n className,\n )}\n {...rest}\n />\n </PopoverPrimitive.Portal>\n );\n});\nHoverCardContent.displayName = \"HoverCardContent\";\n","import * as React from \"react\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { Tooltip, TooltipTrigger, TooltipContent } from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface RowQuickAction {\n icon: IconDefinition;\n label: string;\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /** Optional href if the action navigates. */\n href?: string;\n}\n\nexport interface RowQuickActionsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n actions: RowQuickAction[];\n /**\n * Named hover group to listen to. Defaults to the unnamed group, so the\n * actions appear when ANY ancestor `group` is hovered. Use a named group\n * like `\"co\"` when the row contains nested groups that should not trigger\n * each other.\n */\n group?: string;\n size?: \"sm\" | \"md\";\n}\n\n/**\n * A row of icon-only buttons that fade in when the parent row is hovered.\n * Stops propagation on each button so clicking an action does not trigger\n * the row's own click handler.\n */\nexport const RowQuickActions = React.forwardRef<\n HTMLDivElement,\n RowQuickActionsProps\n>(({ actions, group, size = \"sm\", className, ...rest }, ref) => {\n const hoverClass = group\n ? `opacity-0 group-hover/${group}:opacity-100 focus-within:opacity-100`\n : \"opacity-0 group-hover:opacity-100 focus-within:opacity-100\";\n\n const btnSize = size === \"sm\" ? \"h-6 w-6\" : \"h-7 w-7\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-xs transition-opacity\",\n hoverClass,\n className,\n )}\n {...rest}\n >\n {actions.map((action) => (\n <Tooltip key={action.label}>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label={action.label}\n onClick={(e) => {\n e.stopPropagation();\n action.onClick(e);\n }}\n className={cn(\n btnSize,\n \"inline-flex items-center justify-center rounded-base\",\n \"border border-btn-outlined-neutral-border-default\",\n \"bg-btn-outlined-neutral-bg-default text-btn-outlined-neutral-text-default\",\n \"hover:bg-btn-outlined-neutral-bg-hover hover:text-btn-outlined-neutral-text-hover\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--core-text-functional-info)]\",\n )}\n >\n <Icon icon={action.icon} size=\"xs\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{action.label}</TooltipContent>\n </Tooltip>\n ))}\n </div>\n );\n});\n\nRowQuickActions.displayName = \"RowQuickActions\";\n","import * as React from \"react\";\nimport {\n HoverCard,\n HoverCardTrigger,\n HoverCardContent,\n} from \"./hover-card\";\nimport {\n RowQuickActions,\n type RowQuickAction,\n} from \"./row-quick-actions\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface EntityCellProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Leading visual. Pass an <Avatar /> or any custom logo / icon.\n */\n avatar: React.ReactNode;\n name: string;\n /** Optional second line under the name. */\n subtitle?: string;\n /**\n * Status icon, sync indicator, or any small marker rendered after the\n * name on the same line.\n */\n badge?: React.ReactNode;\n /**\n * When provided, the name becomes hoverable and opens this content in a\n * <HoverCard /> with the default delays (350 ms / 120 ms).\n */\n hoverCard?: React.ReactNode;\n /**\n * Quick actions rendered on the right edge of the cell, only visible when\n * the row is hovered. The cell sets up a named `co` group so consumers\n * can nest other hover groups without collisions.\n */\n quickActions?: RowQuickAction[];\n /**\n * Click handler attached to the name span. Stops propagation so the\n * caller can also wire a row-level click without conflict.\n */\n onNameClick?: (e: React.MouseEvent<HTMLSpanElement>) => void;\n}\n\n/**\n * Rich entity cell — avatar + name + optional badge / hover card / quick\n * actions. Distinct from <AvatarCell /> which stays minimal; use EntityCell\n * when you need any of the optional slots.\n */\nexport const EntityCell = React.forwardRef<HTMLDivElement, EntityCellProps>(\n (\n {\n avatar,\n name,\n subtitle,\n badge,\n hoverCard,\n quickActions,\n onNameClick,\n className,\n ...rest\n },\n ref,\n ) => {\n const nameContent = (\n <span\n className={cn(\n \"text-sm font-medium text-table-cell-text-primary leading-sm truncate\",\n onNameClick &&\n \"cursor-pointer hover:text-link-brand-text-hover hover:underline underline-offset-2\",\n )}\n onClick={\n onNameClick\n ? (e) => {\n e.stopPropagation();\n onNameClick(e);\n }\n : undefined\n }\n >\n {name}\n </span>\n );\n\n return (\n <div\n ref={ref}\n className={cn(\n \"group/co flex items-center gap-base min-w-0 w-full\",\n className,\n )}\n {...rest}\n >\n <span className=\"shrink-0\">{avatar}</span>\n <div className=\"flex flex-col min-w-0 flex-1\">\n <span className=\"flex items-center gap-xs min-w-0\">\n {hoverCard ? (\n <HoverCard>\n <HoverCardTrigger asChild>{nameContent}</HoverCardTrigger>\n <HoverCardContent side=\"bottom\" align=\"start\">\n {hoverCard}\n </HoverCardContent>\n </HoverCard>\n ) : (\n nameContent\n )}\n {badge && <span className=\"shrink-0\">{badge}</span>}\n </span>\n {subtitle && (\n <span className=\"text-xs font-regular text-table-cell-text-secondary leading-xs truncate\">\n {subtitle}\n </span>\n )}\n </div>\n {quickActions && quickActions.length > 0 && (\n <RowQuickActions actions={quickActions} group=\"co\" />\n )}\n </div>\n );\n },\n);\n\nEntityCell.displayName = \"EntityCell\";\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n Icon,\n faCheckOutline,\n faPenOutline,\n faPlusOutline,\n} from \"@l3mpire/icons\";\nimport { Badge, type BadgeProps } from \"./badge\";\nimport { TextInput } from \"./text-input\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Option model ─────────────────────────────────────────────────────────────\n\nexport interface StatusOption {\n id: string;\n label: string;\n /** Badge variant + type/tone to render the pill. */\n variant?: BadgeProps[\"variant\"];\n type?: BadgeProps[\"type\"];\n tone?: BadgeProps[\"tone\"];\n}\n\n// ── Props ────────────────────────────────────────────────────────────────────\n\nexport interface StatusPickerCellProps {\n /** Currently selected option. */\n current: StatusOption | null;\n options: StatusOption[];\n onChange: (id: string) => void;\n /** When provided, an \"Add status\" row is rendered at the bottom. */\n onAddOption?: (label: string) => void;\n /** When provided, each option row exposes a rename button on hover. */\n onRenameOption?: (id: string, label: string) => void;\n /** When provided, a \"Sync with CRM\" row is rendered at the very bottom. */\n onSync?: () => void;\n /** Trigger style. `cell` matches a table cell; `compact` matches inline use. */\n triggerStyle?: \"cell\" | \"compact\";\n /** Placeholder when no option is selected. */\n placeholder?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nexport function StatusPickerCell({\n current,\n options,\n onChange,\n onAddOption,\n onRenameOption,\n onSync,\n triggerStyle = \"cell\",\n placeholder = \"Set status\",\n}: StatusPickerCellProps) {\n const [open, setOpen] = React.useState(false);\n const [renamingId, setRenamingId] = React.useState<string | null>(null);\n const [renameDraft, setRenameDraft] = React.useState(\"\");\n const [adding, setAdding] = React.useState(false);\n const [addDraft, setAddDraft] = React.useState(\"\");\n\n const commitRename = () => {\n if (renamingId && renameDraft.trim()) {\n onRenameOption?.(renamingId, renameDraft.trim());\n }\n setRenamingId(null);\n setRenameDraft(\"\");\n };\n const commitAdd = () => {\n if (addDraft.trim()) {\n onAddOption?.(addDraft.trim());\n }\n setAddDraft(\"\");\n setAdding(false);\n };\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"inline-flex items-center cursor-pointer outline-none\",\n triggerStyle === \"cell\" && \"w-full h-full text-left\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--core-text-functional-info)] rounded-base\",\n )}\n >\n {current ? (\n <Badge\n variant={current.variant ?? \"light\"}\n type={current.tone == null ? current.type ?? \"primary\" : undefined}\n tone={current.tone}\n size=\"lg\"\n >\n {current.label}\n </Badge>\n ) : (\n <span className=\"text-xs text-[var(--core-text-main-tertiary)]\">\n {placeholder}\n </span>\n )}\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"z-50 w-[240px] rounded-lg border border-dropdown-border bg-dropdown-bg p-xs\",\n \"shadow-elevation-md animate-in fade-in-0 zoom-in-95\",\n )}\n >\n <div className=\"flex flex-col gap-2xs max-h-[280px] overflow-y-auto\">\n {options.map((opt) => {\n const isCurrent = opt.id === current?.id;\n const isRenaming = renamingId === opt.id;\n return (\n <div\n key={opt.id}\n className={cn(\n \"group/opt flex items-center gap-xs px-xs py-xs rounded-base\",\n \"hover:bg-dropdown-item-hover\",\n )}\n >\n {isRenaming ? (\n <TextInput\n autoFocus\n size=\"sm\"\n value={renameDraft}\n onChange={(e) => setRenameDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commitRename();\n if (e.key === \"Escape\") {\n setRenamingId(null);\n setRenameDraft(\"\");\n }\n }}\n onBlur={commitRename}\n />\n ) : (\n <button\n type=\"button\"\n className=\"flex-1 flex items-center gap-xs min-w-0 text-left cursor-pointer\"\n onClick={() => {\n onChange(opt.id);\n setOpen(false);\n }}\n >\n <Badge\n variant={opt.variant ?? \"light\"}\n type={opt.tone == null ? opt.type ?? \"primary\" : undefined}\n tone={opt.tone}\n size=\"lg\"\n >\n {opt.label}\n </Badge>\n </button>\n )}\n {!isRenaming && onRenameOption && (\n <button\n type=\"button\"\n aria-label={`Rename ${opt.label}`}\n onClick={(e) => {\n e.stopPropagation();\n setRenamingId(opt.id);\n setRenameDraft(opt.label);\n }}\n className={cn(\n \"shrink-0 inline-flex items-center justify-center h-5 w-5 rounded-sm\",\n \"opacity-0 group-hover/opt:opacity-100\",\n \"text-dropdown-item-icon hover:text-dropdown-item-text\",\n )}\n >\n <Icon icon={faPenOutline} size=\"xs\" />\n </button>\n )}\n {!isRenaming && isCurrent && (\n <Icon\n icon={faCheckOutline}\n size=\"xs\"\n className=\"shrink-0 text-[var(--core-text-functional-info)]\"\n />\n )}\n </div>\n );\n })}\n\n {/* Add status row */}\n {onAddOption && (\n <div className=\"mt-xs border-t border-dropdown-border pt-xs\">\n {adding ? (\n <div className=\"flex items-center gap-xs px-xs\">\n <TextInput\n autoFocus\n size=\"sm\"\n placeholder=\"New status\"\n value={addDraft}\n onChange={(e) => setAddDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commitAdd();\n if (e.key === \"Escape\") {\n setAdding(false);\n setAddDraft(\"\");\n }\n }}\n />\n <button\n type=\"button\"\n aria-label=\"Confirm new status\"\n onClick={commitAdd}\n className=\"shrink-0 inline-flex items-center justify-center h-6 w-6 rounded-base text-[var(--core-text-functional-info)] hover:bg-info-message-info-bg\"\n >\n <Icon icon={faCheckOutline} size=\"xs\" />\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={() => setAdding(true)}\n className={cn(\n \"w-full flex items-center gap-xs px-xs py-xs rounded-base\",\n \"text-xs text-dropdown-item-text hover:bg-dropdown-item-hover cursor-pointer\",\n )}\n >\n <Icon icon={faPlusOutline} size=\"xs\" />\n Add status\n </button>\n )}\n </div>\n )}\n\n {/* Sync row */}\n {onSync && (\n <div className=\"mt-xs border-t border-dropdown-border pt-xs\">\n <button\n type=\"button\"\n onClick={() => {\n onSync();\n setOpen(false);\n }}\n className=\"w-full flex items-center gap-xs px-xs py-xs rounded-base text-xs text-dropdown-item-secondary hover:bg-dropdown-item-hover cursor-pointer\"\n >\n Sync with CRM\n </button>\n </div>\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\nStatusPickerCell.displayName = \"StatusPickerCell\";\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport {\n Icon,\n faArrowUpSmallBigOutline,\n faArrowDownBigSmallOutline,\n faThumbtackOutline,\n faThumbtackSlashOutline,\n faEyeSlashOutline,\n faCopyOutline,\n faPenOutline,\n faTrashOutline,\n} from \"@l3mpire/icons\";\nimport { Tooltip, TooltipTrigger, TooltipContent } from \"./tooltip\";\nimport { TextInput } from \"./text-input\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Public column API ────────────────────────────────────────────────────────\n\n/**\n * Structural subset of TanStack Table's Column instance. Listing the methods\n * we need by hand keeps the DS independent from a specific tanstack-table\n * version while staying assignable from `column: Column<TData>`.\n */\nexport interface HeaderColumnApi {\n getCanSort: () => boolean;\n getIsSorted: () => \"asc\" | \"desc\" | false;\n toggleSorting: (desc?: boolean) => void;\n getCanPin: () => boolean;\n getIsPinned: () => \"left\" | \"right\" | false;\n pin: (side: \"left\" | \"right\" | false) => void;\n getCanHide: () => boolean;\n toggleVisibility: (visible?: boolean) => void;\n}\n\n// ── Props ────────────────────────────────────────────────────────────────────\n\nexport interface ColumnHeaderMenuProps {\n column: HeaderColumnApi;\n title: string;\n /**\n * Built-in (system) columns cannot be renamed, duplicated, edited or\n * deleted. Items remain visible but greyed and surface a tooltip\n * explaining why.\n */\n editable: boolean;\n /** Fires when the user commits a rename via blur or Enter. */\n onRename?: (name: string) => void;\n onEdit?: () => void;\n onDuplicate?: () => void;\n onDelete?: () => void;\n /** Tooltip text shown on greyed mutation items. */\n builtinReason?: string;\n /** Header content rendered inside the trigger (icon, label…). */\n children: React.ReactNode;\n}\n\n// ── Internal: a menu item that can be greyed without losing pointer-events ──\n//\n// Important: `Radix DropdownMenu.Item` with `disabled` kills pointer-events,\n// which also kills the tooltip. We mimic disabled visually but keep the item\n// interactive — its onSelect is preventDefault'd so the menu does not close.\n\ninterface MutationMenuItemProps {\n icon: string;\n label: string;\n onSelect: () => void;\n disabled?: boolean;\n disabledReason?: string;\n critical?: boolean;\n}\n\nfunction MutationMenuItem({\n icon,\n label,\n onSelect,\n disabled,\n disabledReason,\n critical,\n}: MutationMenuItemProps) {\n const item = (\n <DropdownMenuPrimitive.Item\n onSelect={(e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onSelect();\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base outline-none\",\n \"text-sm leading-sm text-dropdown-item-text\",\n disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer hover:bg-dropdown-item-hover focus:bg-dropdown-item-hover\",\n critical && !disabled && \"text-[var(--core-text-functional-critical)]\",\n )}\n >\n <Icon\n icon={icon}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n critical && !disabled\n ? \"text-[var(--core-text-functional-critical)]\"\n : \"text-dropdown-item-icon\",\n )}\n />\n <span className=\"flex-1 truncate\">{label}</span>\n </DropdownMenuPrimitive.Item>\n );\n\n if (!disabled || !disabledReason) return item;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{item}</TooltipTrigger>\n <TooltipContent side=\"right\">{disabledReason}</TooltipContent>\n </Tooltip>\n );\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nexport function ColumnHeaderMenu({\n column,\n title,\n editable,\n onRename,\n onEdit,\n onDuplicate,\n onDelete,\n builtinReason = \"Built-in columns can't be edited\",\n children,\n}: ColumnHeaderMenuProps) {\n const [open, setOpen] = React.useState(false);\n const [renameDraft, setRenameDraft] = React.useState(title);\n\n React.useEffect(() => {\n if (open) setRenameDraft(title);\n }, [open, title]);\n\n const commitRename = () => {\n const next = renameDraft.trim();\n if (next && next !== title) onRename?.(next);\n };\n\n const sortedDirection = column.getIsSorted();\n const isPinned = column.getIsPinned();\n\n return (\n <DropdownMenuPrimitive.Root open={open} onOpenChange={setOpen}>\n <DropdownMenuPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"w-full h-full flex items-center justify-start min-w-0 cursor-pointer\",\n \"outline-none rounded-base focus-visible:ring-2 focus-visible:ring-[var(--core-text-functional-info)]\",\n \"hover:bg-table-head-bg-hover\",\n )}\n >\n {children}\n </button>\n </DropdownMenuPrimitive.Trigger>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className={cn(\n \"z-50 w-[240px] bg-dropdown-bg border border-dropdown-border rounded-lg p-xs shadow-elevation-md\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n )}\n >\n {/* Field name (editable for user columns, read-only for built-ins) */}\n <div className=\"px-xs pt-xs pb-base\">\n <span className=\"text-xxs uppercase tracking-wide text-dropdown-heading-text font-medium\">\n Field name\n </span>\n {editable && onRename ? (\n <TextInput\n size=\"sm\"\n className=\"mt-xs\"\n value={renameDraft}\n onChange={(e) => setRenameDraft(e.target.value)}\n onBlur={commitRename}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n commitRename();\n setOpen(false);\n }\n if (e.key === \"Escape\") {\n setRenameDraft(title);\n setOpen(false);\n }\n }}\n />\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n \"mt-xs block text-sm font-medium text-dropdown-item-text\",\n !editable && \"opacity-60 cursor-not-allowed\",\n )}\n >\n {title}\n </span>\n </TooltipTrigger>\n {!editable && (\n <TooltipContent side=\"right\">{builtinReason}</TooltipContent>\n )}\n </Tooltip>\n )}\n </div>\n\n <DropdownMenuPrimitive.Separator className=\"my-xs h-px bg-dropdown-border\" />\n\n {/* Sort */}\n {column.getCanSort() && (\n <>\n <DropdownMenuPrimitive.Item\n onSelect={() => column.toggleSorting(false)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base outline-none cursor-pointer\",\n \"text-sm leading-sm text-dropdown-item-text\",\n \"hover:bg-dropdown-item-hover focus:bg-dropdown-item-hover\",\n sortedDirection === \"asc\" && \"bg-dropdown-item-hover\",\n )}\n >\n <Icon\n icon={faArrowUpSmallBigOutline}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1\">Sort ascending</span>\n </DropdownMenuPrimitive.Item>\n <DropdownMenuPrimitive.Item\n onSelect={() => column.toggleSorting(true)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base outline-none cursor-pointer\",\n \"text-sm leading-sm text-dropdown-item-text\",\n \"hover:bg-dropdown-item-hover focus:bg-dropdown-item-hover\",\n sortedDirection === \"desc\" && \"bg-dropdown-item-hover\",\n )}\n >\n <Icon\n icon={faArrowDownBigSmallOutline}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1\">Sort descending</span>\n </DropdownMenuPrimitive.Item>\n </>\n )}\n\n {/* Pin */}\n {column.getCanPin() && (\n <DropdownMenuPrimitive.Item\n onSelect={() => column.pin(isPinned === \"left\" ? false : \"left\")}\n className={cn(\n \"flex items-center gap-base p-base rounded-base outline-none cursor-pointer\",\n \"text-sm leading-sm text-dropdown-item-text\",\n \"hover:bg-dropdown-item-hover focus:bg-dropdown-item-hover\",\n )}\n >\n <Icon\n icon={\n isPinned === \"left\"\n ? faThumbtackSlashOutline\n : faThumbtackOutline\n }\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1\">\n {isPinned === \"left\" ? \"Unpin\" : \"Pin to left\"}\n </span>\n </DropdownMenuPrimitive.Item>\n )}\n\n {/* Hide */}\n {column.getCanHide() && (\n <DropdownMenuPrimitive.Item\n onSelect={() => column.toggleVisibility(false)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base outline-none cursor-pointer\",\n \"text-sm leading-sm text-dropdown-item-text\",\n \"hover:bg-dropdown-item-hover focus:bg-dropdown-item-hover\",\n )}\n >\n <Icon\n icon={faEyeSlashOutline}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1\">Hide</span>\n </DropdownMenuPrimitive.Item>\n )}\n\n <DropdownMenuPrimitive.Separator className=\"my-xs h-px bg-dropdown-border\" />\n\n {/* Mutations — greyed for built-in columns but still hoverable */}\n {onDuplicate && (\n <MutationMenuItem\n icon={faCopyOutline}\n label=\"Duplicate\"\n onSelect={onDuplicate}\n disabled={!editable}\n disabledReason={builtinReason}\n />\n )}\n {onEdit && (\n <MutationMenuItem\n icon={faPenOutline}\n label=\"Edit column\"\n onSelect={onEdit}\n disabled={!editable}\n disabledReason={builtinReason}\n />\n )}\n {onDelete && (\n <MutationMenuItem\n icon={faTrashOutline}\n label=\"Delete\"\n onSelect={onDelete}\n disabled={!editable}\n disabledReason={builtinReason}\n critical\n />\n )}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </DropdownMenuPrimitive.Root>\n );\n}\n\nColumnHeaderMenu.displayName = \"ColumnHeaderMenu\";\n","import * as React from \"react\";\nimport { Badge, type BadgeProps } from \"./badge\";\n\nexport type ColumnKind = \"db\" | \"field\" | \"score\" | \"ai\";\n\nexport interface ColumnTypeBadgeProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"type\"> {\n kind: ColumnKind;\n size?: BadgeProps[\"size\"];\n}\n\nconst LABELS: Record<ColumnKind, string> = {\n db: \"DB\",\n field: \"FIELD\",\n score: \"SCORE\",\n ai: \"AI\",\n};\n\nconst PROPS: Record<\n ColumnKind,\n { type?: BadgeProps[\"type\"]; tone?: BadgeProps[\"tone\"] }\n> = {\n db: { type: \"neutral\" },\n field: { type: \"warning\" },\n score: { type: \"success\" },\n ai: { type: \"primary\" },\n};\n\n/**\n * Small tag identifying the kind of a column inside the column manager.\n * Maps to existing Badge tones — no new tokens required.\n */\nexport const ColumnTypeBadge = React.forwardRef<\n HTMLSpanElement,\n ColumnTypeBadgeProps\n>(({ kind, size = \"sm\", className, ...rest }, ref) => (\n <Badge\n ref={ref}\n variant=\"light\"\n size={size}\n {...PROPS[kind]}\n className={className}\n {...rest}\n >\n {LABELS[kind]}\n </Badge>\n));\n\nColumnTypeBadge.displayName = \"ColumnTypeBadge\";\n","import * as React from \"react\";\nimport { Badge, type BadgeProps } from \"./badge\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ScoreBadgeProps {\n score: number;\n matched: number;\n total: number;\n size?: BadgeProps[\"size\"];\n className?: string;\n}\n\n/**\n * Displays the result of a score rule evaluation: a colored Badge for the\n * sign (positive=success, negative=critical, zero=neutral) plus a small\n * \"matched/total\" counter on its right.\n */\nexport const ScoreBadge: React.FC<ScoreBadgeProps> = ({\n score,\n matched,\n total,\n size = \"sm\",\n className,\n}) => {\n const type: BadgeProps[\"type\"] =\n score > 0 ? \"success\" : score < 0 ? \"critical\" : \"neutral\";\n const sign = score > 0 ? \"+\" : \"\";\n return (\n <span\n className={cn(\"inline-flex items-center gap-xs\", className)}\n title={`${matched} of ${total} rules matched`}\n >\n <Badge variant=\"light\" type={type} size={size}>\n {sign}\n {score}\n </Badge>\n <span className=\"text-xxs text-[var(--core-text-main-tertiary)]\">\n {matched}/{total}\n </span>\n </span>\n );\n};\n\nScoreBadge.displayName = \"ScoreBadge\";\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n Icon,\n faGripDotsVerticalOutline,\n faEyeOutline,\n faEyeSlashOutline,\n faTrashOutline,\n faPlusOutline,\n faSlidersOutline,\n faChartLineUpOutline,\n faStarsOutline,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { Button } from \"./button\";\nimport { SearchBar } from \"./search-bar\";\nimport { ColumnTypeBadge, type ColumnKind } from \"./column-type-badge\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Public model ─────────────────────────────────────────────────────────────\n\nexport interface ColumnManagerItem {\n id: string;\n name: string;\n kind: ColumnKind;\n /** Whether the column is visible in the current view. */\n visible: boolean;\n /** Optional icon rendered before the name (overrides the kind default). */\n icon?: IconDefinition;\n}\n\nexport type AddColumnKind = Exclude<ColumnKind, \"db\">;\n\nexport interface ColumnManagerPopoverProps {\n items: ColumnManagerItem[];\n onToggleVisible: (id: string, visible: boolean) => void;\n /** Deletion is only offered for `kind !== \"db\"`. */\n onDelete?: (id: string) => void;\n /** When provided, the \"Add column\" section renders the three cards. */\n onAdd?: (kind: AddColumnKind) => void;\n /** Trigger element. Receives `onClick` via Radix Anchor. */\n trigger?: React.ReactNode;\n /** Controlled open state. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nexport function ColumnManagerPopover({\n items,\n onToggleVisible,\n onDelete,\n onAdd,\n trigger,\n open,\n onOpenChange,\n}: ColumnManagerPopoverProps) {\n const [query, setQuery] = React.useState(\"\");\n\n const filtered = React.useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter((i) => i.name.toLowerCase().includes(q));\n }, [items, query]);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n {trigger && (\n <PopoverPrimitive.Trigger asChild>{trigger}</PopoverPrimitive.Trigger>\n )}\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"end\"\n sideOffset={6}\n className={cn(\n \"z-50 w-[340px] rounded-lg border border-dropdown-border bg-dropdown-bg p-base shadow-elevation-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"flex flex-col gap-base\",\n )}\n >\n {/* Add column cards */}\n {onAdd && (\n <div className=\"flex flex-col gap-xs\">\n <span className=\"text-xxs uppercase tracking-wide text-dropdown-heading-text font-medium\">\n Add column\n </span>\n <div className=\"grid grid-cols-3 gap-xs\">\n <AddCard\n icon={faSlidersOutline}\n tint=\"warning\"\n title=\"Field\"\n description=\"Manual value\"\n onClick={() => onAdd(\"field\")}\n />\n <AddCard\n icon={faChartLineUpOutline}\n tint=\"success\"\n title=\"Score\"\n description=\"Weighted rules\"\n onClick={() => onAdd(\"score\")}\n />\n <AddCard\n icon={faStarsOutline}\n tint=\"primary\"\n title=\"AI column\"\n description=\"Prompt-driven\"\n onClick={() => onAdd(\"ai\")}\n />\n </div>\n </div>\n )}\n\n {/* Search */}\n <SearchBar\n size=\"sm\"\n placeholder=\"Search columns\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onClear={() => setQuery(\"\")}\n />\n\n {/* Columns list */}\n <div className=\"flex flex-col gap-2xs max-h-[280px] overflow-y-auto\">\n {filtered.length === 0 && (\n <span className=\"text-xs text-[var(--core-text-main-tertiary)] px-xs py-base text-center\">\n No columns match\n </span>\n )}\n {filtered.map((item) => {\n const canDelete = item.kind !== \"db\" && !!onDelete;\n return (\n <div\n key={item.id}\n className=\"group/col flex items-center gap-xs px-xs py-xs rounded-base hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={faGripDotsVerticalOutline}\n size=\"xs\"\n className=\"shrink-0 opacity-0 group-hover/col:opacity-100 text-dropdown-item-icon cursor-grab\"\n />\n {item.icon && (\n <Icon\n icon={item.icon}\n size=\"xs\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n )}\n <span className=\"flex-1 truncate text-xs text-dropdown-item-text\">\n {item.name}\n </span>\n <ColumnTypeBadge kind={item.kind} />\n <button\n type=\"button\"\n aria-label={item.visible ? \"Hide column\" : \"Show column\"}\n onClick={() => onToggleVisible(item.id, !item.visible)}\n className=\"shrink-0 inline-flex items-center justify-center h-5 w-5 rounded-sm text-dropdown-item-icon hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={item.visible ? faEyeOutline : faEyeSlashOutline}\n size=\"xs\"\n />\n </button>\n {canDelete && (\n <button\n type=\"button\"\n aria-label=\"Delete column\"\n onClick={() => onDelete!(item.id)}\n className={cn(\n \"shrink-0 inline-flex items-center justify-center h-5 w-5 rounded-sm\",\n \"opacity-0 group-hover/col:opacity-100\",\n \"text-[var(--core-text-functional-critical)] hover:bg-info-message-alert-bg\",\n )}\n >\n <Icon icon={faTrashOutline} size=\"xs\" />\n </button>\n )}\n </div>\n );\n })}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\nColumnManagerPopover.displayName = \"ColumnManagerPopover\";\n\n// ── AddCard sub-component ────────────────────────────────────────────────────\n\ninterface AddCardProps {\n icon: IconDefinition;\n tint: \"warning\" | \"success\" | \"primary\";\n title: string;\n description: string;\n onClick: () => void;\n}\n\nfunction AddCard({ icon, tint, title, description, onClick }: AddCardProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex flex-col items-start gap-xs p-xs rounded-base border border-dropdown-border bg-dropdown-bg\",\n \"cursor-pointer hover:bg-dropdown-item-hover text-left\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--core-text-functional-info)]\",\n )}\n >\n <span\n className={cn(\n \"inline-flex items-center justify-center h-7 w-7 rounded-md\",\n tint === \"warning\" &&\n \"bg-info-message-warning-bg text-info-message-warning-icon\",\n tint === \"success\" &&\n \"bg-info-message-success-bg text-info-message-success-icon\",\n tint === \"primary\" &&\n \"bg-info-message-info-bg text-info-message-info-icon\",\n )}\n >\n <Icon icon={icon} size=\"sm\" />\n </span>\n <span className=\"text-xs font-medium text-dropdown-item-text\">\n {title}\n </span>\n <span className=\"text-xxs text-[var(--core-text-main-tertiary)]\">\n {description}\n </span>\n </button>\n );\n}\n\n// ── Reusable trigger ────────────────────────────────────────────────────────\n\nexport function ColumnManagerTrigger() {\n return (\n <Button appearance=\"ghost\" intent=\"brand\" size=\"sm\" iconOnly aria-label=\"Manage columns\">\n <Icon icon={faPlusOutline} size=\"xs\" />\n </Button>\n );\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faMagnifyingGlassSolid, faXmarkSolid } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\nimport { useSidebarContext } from \"./sidebar\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst searchBarVariants = cva(\n [\n \"inline-flex w-full items-center rounded-md border transition-colors\",\n \"border-search-bar-border-default\",\n \"hover:border-search-bar-border-hover\",\n \"focus-within:border-search-bar-border-active\",\n \"focus-within:shadow-focus-ring\",\n ],\n {\n variants: {\n variant: {\n white: \"bg-search-bar-white-bg\",\n grey: \"bg-search-bar-grey-bg\",\n },\n size: {\n sm: \"gap-sm px-base py-sm\",\n md: \"gap-base px-lg py-base\",\n },\n },\n defaultVariants: { variant: \"white\", size: \"md\" },\n },\n);\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst inputStyle =\n \"flex-1 min-w-0 bg-transparent outline-none text-sm font-regular leading-sm text-search-bar-text placeholder:text-search-bar-placeholder\";\n\nconst clearButtonStyle =\n \"inline-flex shrink-0 items-center justify-center p-xs rounded-base text-search-bar-clear hover:bg-black/5 transition-colors\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SearchBarProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof searchBarVariants> {\n onClear?: () => void;\n hasShortcut?: boolean;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst SearchBar = React.forwardRef<HTMLInputElement, SearchBarProps>(\n (\n {\n className,\n variant,\n size = \"md\",\n value,\n defaultValue,\n onChange,\n onClear,\n hasShortcut = false,\n placeholder = \"Search...\",\n ...props\n },\n ref,\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n const hasValue = String(currentValue).length > 0;\n const iconSize = size === \"sm\" ? (\"xs\" as const) : (\"sm\" as const);\n\n // When inside a collapsed sidebar, show icon-only mode\n const sidebarCtx = useSidebarContext();\n const isCollapsed = sidebarCtx.isCollapsed;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalValue(e.target.value);\n onChange?.(e);\n };\n\n const handleClear = () => {\n if (!isControlled) setInternalValue(\"\");\n onClear?.();\n };\n\n return (\n <div className={cn(searchBarVariants({ variant, size }), isCollapsed && \"justify-center\", className)}>\n <Icon\n icon={faMagnifyingGlassSolid}\n size={iconSize}\n className=\"shrink-0 text-search-bar-icon\"\n />\n {!isCollapsed && (\n <>\n <input\n ref={ref}\n type=\"text\"\n value={currentValue}\n defaultValue={undefined}\n onChange={handleChange}\n placeholder={placeholder}\n className={inputStyle}\n {...props}\n />\n {hasShortcut && !hasValue && (\n <span className=\"shrink-0 text-xs text-search-bar-placeholder\">\n ⌘K\n </span>\n )}\n {hasValue && (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={handleClear}\n className={clearButtonStyle}\n aria-label=\"Erase\"\n >\n <Icon icon={faXmarkSolid} size=\"xs\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Erase</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </>\n )}\n </div>\n );\n },\n);\n\nSearchBar.displayName = \"SearchBar\";\n\nexport { SearchBar, searchBarVariants, type SearchBarProps };\n","import * as React from \"react\";\nimport { Icon, faArrowLeftFromLineOutline, faArrowRightFromLineOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { ProductLogo } from \"./product-logo\";\n\n// ── Context ─────────────────────────────────────────────────────────────────\n\ninterface SidebarContextValue {\n isCollapsed: boolean;\n isHovered: boolean;\n setCollapsed: (collapsed: boolean) => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue>({\n isCollapsed: false,\n isHovered: false,\n setCollapsed: () => {},\n});\n\nfunction useSidebarContext() {\n return React.useContext(SidebarContext);\n}\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n isCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\ninterface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {}\n\ninterface SidebarFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n// ── SidebarHeader ───────────────────────────────────────────────────────────\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { isCollapsed, isHovered, setCollapsed } = useSidebarContext();\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center shrink-0 h-[44px] border-b border-sidebar-border\",\n isCollapsed ? \"justify-center px-xl\" : \"justify-between px-xl\",\n className,\n )}\n {...props}\n >\n {isCollapsed ? (\n // Collapsed: show picto, on sidebar hover show expand button\n isHovered ? (\n <button\n onClick={() => setCollapsed(false)}\n className=\"flex items-center justify-center size-6 rounded-base hover:bg-sidebar-item-hover-bg transition-colors cursor-pointer\"\n aria-label=\"Expand sidebar\"\n >\n <Icon icon={faArrowRightFromLineOutline} size=\"xs\" className=\"text-sidebar-item-default-icon\" />\n </button>\n ) : (\n <ProductLogo product=\"lemlist\" size=\"sm\" hasText={false} />\n )\n ) : (\n // Expanded: logo + collapse button\n <>\n <ProductLogo product=\"lemlist\" size=\"sm\" hasText />\n <button\n onClick={() => setCollapsed(true)}\n className=\"flex items-center justify-center size-6 rounded-base hover:bg-sidebar-item-hover-bg transition-colors cursor-pointer\"\n aria-label=\"Collapse sidebar\"\n >\n <Icon icon={faArrowLeftFromLineOutline} size=\"xs\" className=\"text-sidebar-item-default-icon\" />\n </button>\n </>\n )}\n </div>\n );\n },\n);\n\nSidebarHeader.displayName = \"SidebarHeader\";\n\n// ── Sidebar ──────────────────────────────────────────────────────────────────\n\nconst Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ className, isCollapsed: isCollapsedProp = false, onCollapsedChange, children, ...props }, ref) => {\n const [isCollapsedInternal, setCollapsedInternal] = React.useState(isCollapsedProp);\n const [isHovered, setIsHovered] = React.useState(false);\n\n // Sync with external prop\n React.useEffect(() => {\n setCollapsedInternal(isCollapsedProp);\n }, [isCollapsedProp]);\n\n const setCollapsed = React.useCallback(\n (collapsed: boolean) => {\n setCollapsedInternal(collapsed);\n onCollapsedChange?.(collapsed);\n },\n [onCollapsedChange],\n );\n\n return (\n <SidebarContext.Provider value={{ isCollapsed: isCollapsedInternal, isHovered, setCollapsed }}>\n <aside\n ref={ref}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n \"flex flex-col shrink-0 bg-sidebar-bg border-r border-sidebar-border h-full transition-[width] duration-200\",\n isCollapsedInternal ? \"w-[72px]\" : \"w-[298px]\",\n className,\n )}\n {...props}\n >\n <SidebarHeader />\n {(() => {\n const childArray = React.Children.toArray(children);\n const footer = childArray.filter(\n (child) => React.isValidElement(child) && (child.type as any)?.displayName === \"SidebarFooter\",\n );\n const rest = childArray.filter(\n (child) => !(React.isValidElement(child) && (child.type as any)?.displayName === \"SidebarFooter\"),\n );\n return (\n <>\n <div className=\"flex flex-col gap-xl p-xl flex-1 overflow-y-auto\">\n {rest}\n </div>\n {footer}\n </>\n );\n })()}\n </aside>\n </SidebarContext.Provider>\n );\n },\n);\n\nSidebar.displayName = \"Sidebar\";\n\n// ── SidebarSection ───────────────────────────────────────────────────────────\n\nconst SidebarSection = React.forwardRef<HTMLDivElement, SidebarSectionProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col w-full\", className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nSidebarSection.displayName = \"SidebarSection\";\n\n// ── SidebarFooter ────────────────────────────────────────────────────────────\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col p-xl bg-sidebar-footer-bg border-t border-sidebar-border mt-auto w-full\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nSidebarFooter.displayName = \"SidebarFooter\";\n\nexport {\n Sidebar,\n SidebarHeader,\n SidebarSection,\n SidebarFooter,\n useSidebarContext,\n type SidebarProps,\n type SidebarSectionProps,\n type SidebarFooterProps,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Lemlist SVGs (light) ────────────────────────────────────────────────────\nimport lemlistSmPicto from \"../../assets/logos/lemlist-sm-picto.svg\";\nimport lemlistMdPicto from \"../../assets/logos/lemlist-md-picto.svg\";\nimport lemlistLgPicto from \"../../assets/logos/lemlist-lg-picto.svg\";\nimport lemlistXlPicto from \"../../assets/logos/lemlist-xl-picto.svg\";\nimport lemlistSmLogotype from \"../../assets/logos/lemlist-sm-logotype.svg\";\nimport lemlistMdLogotype from \"../../assets/logos/lemlist-md-logotype.svg\";\nimport lemlistLgLogotype from \"../../assets/logos/lemlist-lg-logotype.svg\";\n\n// ── Lemlist SVGs (dark) ─────────────────────────────────────────────────────\nimport lemlistSmPictoDark from \"../../assets/logos/lemlist-sm-picto-dark.svg\";\nimport lemlistMdPictoDark from \"../../assets/logos/lemlist-md-picto-dark.svg\";\nimport lemlistLgPictoDark from \"../../assets/logos/lemlist-lg-picto-dark.svg\";\nimport lemlistXlPictoDark from \"../../assets/logos/lemlist-xl-picto-dark.svg\";\nimport lemlistSmLogotypeDark from \"../../assets/logos/lemlist-sm-logotype-dark.svg\";\nimport lemlistMdLogotypeDark from \"../../assets/logos/lemlist-md-logotype-dark.svg\";\nimport lemlistLgLogotypeDark from \"../../assets/logos/lemlist-lg-logotype-dark.svg\";\n\n// ── Lemwarm SVGs (light) ────────────────────────────────────────────────────\nimport lemwarmSmPicto from \"../../assets/logos/lemwarm-sm-picto.svg\";\nimport lemwarmMdPicto from \"../../assets/logos/lemwarm-md-picto.svg\";\nimport lemwarmLgPicto from \"../../assets/logos/lemwarm-lg-picto.svg\";\nimport lemwarmXlPicto from \"../../assets/logos/lemwarm-xl-picto.svg\";\nimport lemwarmSmLogotype from \"../../assets/logos/lemwarm-sm-logotype.svg\";\nimport lemwarmMdLogotype from \"../../assets/logos/lemwarm-md-logotype.svg\";\nimport lemwarmLgLogotype from \"../../assets/logos/lemwarm-lg-logotype.svg\";\n\n// ── Lemwarm SVGs (dark) ─────────────────────────────────────────────────────\nimport lemwarmSmPictoDark from \"../../assets/logos/lemwarm-sm-picto-dark.svg\";\nimport lemwarmMdPictoDark from \"../../assets/logos/lemwarm-md-picto-dark.svg\";\nimport lemwarmLgPictoDark from \"../../assets/logos/lemwarm-lg-picto-dark.svg\";\nimport lemwarmXlPictoDark from \"../../assets/logos/lemwarm-xl-picto-dark.svg\";\nimport lemwarmSmLogotypeDark from \"../../assets/logos/lemwarm-sm-logotype-dark.svg\";\nimport lemwarmMdLogotypeDark from \"../../assets/logos/lemwarm-md-logotype-dark.svg\";\nimport lemwarmLgLogotypeDark from \"../../assets/logos/lemwarm-lg-logotype-dark.svg\";\n\n// ── Lemcal SVGs (light) ─────────────────────────────────────────────────────\nimport lemcalSmPicto from \"../../assets/logos/lemcal-sm-picto.svg\";\nimport lemcalMdPicto from \"../../assets/logos/lemcal-md-picto.svg\";\nimport lemcalLgPicto from \"../../assets/logos/lemcal-lg-picto.svg\";\nimport lemcalXlPicto from \"../../assets/logos/lemcal-xl-picto.svg\";\nimport lemcalSmLogotype from \"../../assets/logos/lemcal-sm-logotype.svg\";\nimport lemcalMdLogotype from \"../../assets/logos/lemcal-md-logotype.svg\";\nimport lemcalLgLogotype from \"../../assets/logos/lemcal-lg-logotype.svg\";\n\n// ── Lemcal SVGs (dark) ──────────────────────────────────────────────────────\nimport lemcalSmPictoDark from \"../../assets/logos/lemcal-sm-picto-dark.svg\";\nimport lemcalMdPictoDark from \"../../assets/logos/lemcal-md-picto-dark.svg\";\nimport lemcalLgPictoDark from \"../../assets/logos/lemcal-lg-picto-dark.svg\";\nimport lemcalXlPictoDark from \"../../assets/logos/lemcal-xl-picto-dark.svg\";\nimport lemcalSmLogotypeDark from \"../../assets/logos/lemcal-sm-logotype-dark.svg\";\nimport lemcalMdLogotypeDark from \"../../assets/logos/lemcal-md-logotype-dark.svg\";\nimport lemcalLgLogotypeDark from \"../../assets/logos/lemcal-lg-logotype-dark.svg\";\n\n// ── CVA variant definitions ─────────────────────────────────────────────────\n\nconst productLogoVariants = cva([\"inline-flex items-center shrink-0\"], {\n variants: {\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n xl: \"\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n },\n});\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\ntype Product = \"lemlist\" | \"lemwarm\" | \"lemcal\";\ntype Size = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\ninterface ProductLogoProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n VariantProps<typeof productLogoVariants> {\n product?: Product;\n hasText?: boolean;\n}\n\n// ── SVG lookup ──────────────────────────────────────────────────────────────\n\ntype SvgEntry = { picto: string; logotype?: string };\ntype ThemeSvgMap = Record<Product, Record<Size, { light: SvgEntry; dark: SvgEntry }>>;\n\nconst svgMap: ThemeSvgMap = {\n lemlist: {\n sm: { light: { picto: lemlistSmPicto, logotype: lemlistSmLogotype }, dark: { picto: lemlistSmPictoDark, logotype: lemlistSmLogotypeDark } },\n md: { light: { picto: lemlistMdPicto, logotype: lemlistMdLogotype }, dark: { picto: lemlistMdPictoDark, logotype: lemlistMdLogotypeDark } },\n lg: { light: { picto: lemlistLgPicto, logotype: lemlistLgLogotype }, dark: { picto: lemlistLgPictoDark, logotype: lemlistLgLogotypeDark } },\n xl: { light: { picto: lemlistXlPicto }, dark: { picto: lemlistXlPictoDark } },\n },\n lemwarm: {\n sm: { light: { picto: lemwarmSmPicto, logotype: lemwarmSmLogotype }, dark: { picto: lemwarmSmPictoDark, logotype: lemwarmSmLogotypeDark } },\n md: { light: { picto: lemwarmMdPicto, logotype: lemwarmMdLogotype }, dark: { picto: lemwarmMdPictoDark, logotype: lemwarmMdLogotypeDark } },\n lg: { light: { picto: lemwarmLgPicto, logotype: lemwarmLgLogotype }, dark: { picto: lemwarmLgPictoDark, logotype: lemwarmLgLogotypeDark } },\n xl: { light: { picto: lemwarmXlPicto }, dark: { picto: lemwarmXlPictoDark } },\n },\n lemcal: {\n sm: { light: { picto: lemcalSmPicto, logotype: lemcalSmLogotype }, dark: { picto: lemcalSmPictoDark, logotype: lemcalSmLogotypeDark } },\n md: { light: { picto: lemcalMdPicto, logotype: lemcalMdLogotype }, dark: { picto: lemcalMdPictoDark, logotype: lemcalMdLogotypeDark } },\n lg: { light: { picto: lemcalLgPicto, logotype: lemcalLgLogotype }, dark: { picto: lemcalLgPictoDark, logotype: lemcalLgLogotypeDark } },\n xl: { light: { picto: lemcalXlPicto }, dark: { picto: lemcalXlPictoDark } },\n },\n};\n\n// ── Dark mode detection ─────────────────────────────────────────────────────\n\nfunction useIsDarkTheme() {\n const [isDark, setIsDark] = React.useState(false);\n\n React.useEffect(() => {\n const root = document.documentElement;\n const check = () => setIsDark(root.getAttribute(\"data-theme\") === \"dark\");\n check();\n\n const observer = new MutationObserver(check);\n observer.observe(root, { attributes: true, attributeFilter: [\"data-theme\"] });\n return () => observer.disconnect();\n }, []);\n\n return isDark;\n}\n\n// ── Helper: render SVG string as data URI ───────────────────────────────────\n\nfunction SvgImage({ svg, alt, className }: { svg: string; alt: string; className?: string }) {\n const dataUri = React.useMemo(\n () => `data:image/svg+xml,${encodeURIComponent(svg)}`,\n [svg],\n );\n return <img src={dataUri} alt={alt} className={className} />;\n}\n\n// ── Component ───────────────────────────────────────────────────────────────\n\nconst ProductLogo = React.forwardRef<HTMLDivElement, ProductLogoProps>(\n ({ className, product = \"lemlist\", size = \"lg\", hasText = true, ...props }, ref) => {\n const resolvedSize = (size ?? \"lg\") as Size;\n const isDark = useIsDarkTheme();\n const entry = svgMap[product][resolvedSize][isDark ? \"dark\" : \"light\"];\n\n // Pick the right SVG: logotype if hasText + available, otherwise picto\n const svg = hasText && entry.logotype ? entry.logotype : entry.picto;\n\n return (\n <div\n ref={ref}\n className={cn(productLogoVariants({ size }), className)}\n {...props}\n >\n <SvgImage svg={svg} alt={`${product} logo`} className=\"h-auto w-auto\" />\n </div>\n );\n },\n);\n\nProductLogo.displayName = \"ProductLogo\";\n\nexport { ProductLogo, productLogoVariants, type ProductLogoProps, type Product };\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#316BFF\"/>\n<path d=\"M14.6428 13.3821V14.1178C14.6428 14.4076 14.4076 14.6428 14.1178 14.6428H7.41337C6.30968 14.5723 5.42773 13.6903 5.35718 12.5866V5.88215C5.35718 5.59237 5.59236 5.35719 5.88215 5.35719H6.61794C6.90772 5.35719 7.14291 5.59237 7.14291 5.88215V11.4922C7.14291 12.2464 7.75355 12.8571 8.50782 12.8571H14.1178C14.4076 12.8571 14.6428 13.0923 14.6428 13.3821Z\" fill=\"white\"/>\n<path d=\"M14.1178 5.35718H9.45362C9.16369 5.35718 8.92865 5.59222 8.92865 5.88215V6.61795C8.92865 6.90788 9.16369 7.14291 9.45362 7.14291H14.1178C14.4078 7.14291 14.6428 6.90788 14.6428 6.61795V5.88215C14.6428 5.59222 14.4078 5.35718 14.1178 5.35718Z\" fill=\"white\"/>\n<path d=\"M13.2846 9.10755H9.45362C9.16369 9.10755 8.92865 9.34259 8.92865 9.63252V10.3683C8.92865 10.6582 9.16369 10.8933 9.45362 10.8933H13.2846C13.5746 10.8933 13.8096 10.6582 13.8096 10.3683V9.63252C13.8096 9.34259 13.5746 9.10755 13.2846 9.10755Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#316BFF\"/>\n<path d=\"M20.4999 18.7349V19.765C20.4999 20.1707 20.1707 20.4999 19.765 20.4999H10.3787C8.83356 20.4012 7.59884 19.1664 7.50006 17.6213V8.23502C7.50006 7.82932 7.82932 7.50006 8.23502 7.50006H9.26513C9.67082 7.50006 10.0001 7.82932 10.0001 8.23502V16.089C10.0001 17.145 10.855 17.9999 11.911 17.9999H19.765C20.1707 17.9999 20.4999 18.3292 20.4999 18.7349Z\" fill=\"white\"/>\n<path d=\"M19.765 7.50006H13.2351C12.8292 7.50006 12.5001 7.82911 12.5001 8.23501V9.26513C12.5001 9.67103 12.8292 10.0001 13.2351 10.0001H19.765C20.1709 10.0001 20.5 9.67103 20.5 9.26513V8.23501C20.5 7.82911 20.1709 7.50006 19.765 7.50006Z\" fill=\"white\"/>\n<path d=\"M18.5985 12.7506H13.2351C12.8292 12.7506 12.5001 13.0796 12.5001 13.4855V14.5156C12.5001 14.9215 12.8292 15.2506 13.2351 15.2506H18.5985C19.0044 15.2506 19.3334 14.9215 19.3334 14.5156V13.4855C19.3334 13.0796 19.0044 12.7506 18.5985 12.7506Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55117 29.4488 0 26.3018 0Z\" fill=\"#316BFF\"/>\n<path d=\"M23.4285 21.4113V22.5886C23.4285 23.0522 23.0522 23.4285 22.5886 23.4285H11.8614C10.0955 23.3156 8.68442 21.9045 8.57153 20.1386V9.41145C8.57153 8.9478 8.94783 8.5715 9.41148 8.5715H10.5888C11.0524 8.5715 11.4287 8.9478 11.4287 9.41145V18.3875C11.4287 19.5943 12.4057 20.5713 13.6126 20.5713H22.5886C23.0522 20.5713 23.4285 20.9476 23.4285 21.4113Z\" fill=\"white\"/>\n<path d=\"M22.5886 8.5715H15.1258C14.6619 8.5715 14.2859 8.94755 14.2859 9.41144V10.5887C14.2859 11.0526 14.6619 11.4287 15.1258 11.4287H22.5886C23.0525 11.4287 23.4286 11.0526 23.4286 10.5887V9.41144C23.4286 8.94755 23.0525 8.5715 22.5886 8.5715Z\" fill=\"white\"/>\n<path d=\"M21.2554 14.5721H15.1258C14.6619 14.5721 14.2859 14.9481 14.2859 15.412V16.5893C14.2859 17.0532 14.6619 17.4293 15.1258 17.4293H21.2554C21.7193 17.4293 22.0954 17.0532 22.0954 16.5893V15.412C22.0954 14.9481 21.7193 14.5721 21.2554 14.5721Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12275V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12275C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#316BFF\"/>\n<path d=\"M29.2856 26.7641V28.2357C29.2856 28.8152 28.8152 29.2856 28.2357 29.2856H14.8267C12.6194 29.1445 10.8555 27.3806 10.7144 25.1732V11.7643C10.7144 11.1847 11.1847 10.7144 11.7643 10.7144H13.2359C13.8154 10.7144 14.2858 11.1847 14.2858 11.7643V22.9843C14.2858 24.4929 15.5071 25.7142 17.0156 25.7142H28.2357C28.8152 25.7142 29.2856 26.1845 29.2856 26.7641Z\" fill=\"white\"/>\n<path d=\"M28.2357 10.7144H18.9072C18.3274 10.7144 17.8573 11.1844 17.8573 11.7643V13.2359C17.8573 13.8158 18.3274 14.2858 18.9072 14.2858H28.2357C28.8156 14.2858 29.2856 13.8158 29.2856 13.2359V11.7643C29.2856 11.1844 28.8156 10.7144 28.2357 10.7144Z\" fill=\"white\"/>\n<path d=\"M26.5692 18.2151H18.9072C18.3274 18.2151 17.8573 18.6852 17.8573 19.265V20.7366C17.8573 21.3165 18.3274 21.7866 18.9072 21.7866H26.5692C27.1491 21.7866 27.6192 21.3165 27.6192 20.7366V19.265C27.6192 18.6852 27.1491 18.2151 26.5692 18.2151Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"81\" height=\"20\" viewBox=\"0 0 81 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M62.545 3.47999H61.5715C61.2816 3.47999 61.0465 3.71501 61.0465 4.00493V4.87132C61.0465 5.16124 61.2816 5.39627 61.5715 5.39627H62.545C62.8349 5.39627 63.0699 5.16124 63.0699 4.87132V4.00493C63.0699 3.71501 62.8349 3.47999 62.545 3.47999Z\" fill=\"#213856\"/>\n<path d=\"M27.3053 4.01872V16.0615C27.3053 16.3512 27.0701 16.5864 26.7803 16.5864H25.9009C25.6112 16.5864 25.376 16.3512 25.376 16.0615V4.01872C25.376 3.72895 25.6112 3.49377 25.9009 3.49377H26.7803C27.0701 3.49377 27.3053 3.72895 27.3053 4.01872Z\" fill=\"#213856\"/>\n<path d=\"M31.0698 12.6234C31.2387 14.0286 32.3994 14.9457 34.0851 14.9457C34.8663 14.9457 35.8162 14.698 36.4361 14.2469C36.6435 14.0957 36.9283 14.1134 37.113 14.2923L37.6246 14.7887C37.8488 15.0062 37.8371 15.3724 37.5952 15.569C36.6326 16.3518 35.277 16.744 34.0473 16.744C31.0127 16.744 29.0649 14.8147 29.0649 11.8557C29.0649 8.89665 31.032 7.04211 33.9163 7.04211C36.8006 7.04211 38.7307 8.69675 38.5955 12.1203C38.5846 12.4016 38.3519 12.6242 38.0706 12.6242H31.069L31.0698 12.6234ZM36.7074 10.9939C36.5948 9.53331 35.5273 8.76479 33.9726 8.76479C32.5674 8.76479 31.4066 9.53247 31.1068 10.9939H36.7074Z\" fill=\"#213856\"/>\n<path d=\"M46.4655 16.0579V11.192C46.4655 9.97492 45.4803 8.96114 44.2633 8.9855C42.9236 9.01153 42.082 10.1437 42.082 11.4952V16.0579C42.082 16.3477 41.8468 16.5829 41.5571 16.5829H40.6777C40.3879 16.5829 40.1527 16.3477 40.1527 16.0579V7.77804C40.1527 7.48827 40.3879 7.25309 40.6777 7.25309H41.4789C41.7477 7.25309 41.9728 7.45551 42.0014 7.7226L42.0829 8.55462C42.607 7.54336 43.6938 7.16875 44.6673 7.16875C45.8474 7.16875 47.0459 7.65591 47.5709 9.02329C48.3201 7.65591 49.4817 7.18807 50.7365 7.18807C53.284 7.18807 54.6514 8.79903 54.6514 11.4591V16.0596C54.6514 16.3494 54.4162 16.5846 54.1264 16.5846H53.2286C52.9388 16.5846 52.7036 16.3494 52.7036 16.0596V11.0895C52.7036 9.95644 51.7999 9.00733 50.6668 9.00565C49.2969 9.00313 48.4142 10.1278 48.4142 11.4969V16.0596C48.4142 16.3494 48.179 16.5846 47.8892 16.5846H46.9913C46.7016 16.5846 46.4664 16.3494 46.4664 16.0596L46.4655 16.0579Z\" fill=\"#213856\"/>\n<path d=\"M58.7712 4.0031V16.0599C58.7712 16.3497 58.536 16.5849 58.2463 16.5849H57.3669C57.0771 16.5849 56.8419 16.3497 56.8419 16.0599V4.0031C56.8419 3.71333 57.0771 3.47815 57.3669 3.47815H58.2463C58.536 3.47815 58.7712 3.71333 58.7712 4.0031Z\" fill=\"#213856\"/>\n<path d=\"M61.0936 7.77265V16.066C61.0936 16.3558 61.3288 16.591 61.6185 16.591H62.4979C62.7877 16.591 63.0229 16.3558 63.0229 16.066V7.77265C63.0229 7.48288 62.7877 7.2477 62.4979 7.2477H61.6185C61.3288 7.2477 61.0936 7.48288 61.0936 7.77265Z\" fill=\"#213856\"/>\n<path d=\"M71.4968 9.11071C71.3221 9.31565 71.0223 9.34841 70.8005 9.1947C70.1748 8.76131 69.5003 8.63112 68.736 8.63112C67.5559 8.61264 66.7689 9.00572 66.7689 9.73645C66.7874 10.5041 67.5929 10.804 68.773 10.9165C70.4772 11.066 72.7063 11.4406 72.6878 13.8201C72.6693 15.5436 71.1516 16.7422 68.7545 16.7422C67.3863 16.7422 66.0172 16.4608 64.8631 15.3706C64.6716 15.1892 64.6481 14.8919 64.8052 14.6794L65.1991 14.146C65.3755 13.9075 65.7182 13.8588 65.9475 14.0469C66.7798 14.7306 67.8616 15.0212 68.7923 15.0372C69.7103 15.0372 70.7401 14.7004 70.7594 13.8386C70.7778 13.0147 69.9917 12.6963 68.6243 12.5645C66.8823 12.3956 64.8783 11.8337 64.8598 9.79272C64.8598 7.75088 66.9764 6.9832 68.6999 6.9832C69.9203 6.9832 70.9064 7.21669 71.8118 7.86175C72.0629 8.04066 72.1074 8.39678 71.9075 8.63112L71.4985 9.11071H71.4968Z\" fill=\"#213856\"/>\n<path d=\"M76.6852 4.43747C77.0166 4.43747 77.2852 4.7061 77.2852 5.03747L77.2936 7.25363H79.5129C79.809 7.25363 80.0493 7.49393 80.0493 7.79002V8.42081C80.0493 8.71689 79.809 8.95719 79.5129 8.95719H77.2739L77.2654 13.4203C77.2654 14.4158 77.7057 14.9702 78.624 14.9702C78.854 14.9702 79.1037 14.9222 79.3501 14.8424C79.6247 14.7531 79.9199 14.9093 80.0126 15.1831L80.2374 15.843C80.3327 16.1237 80.1834 16.4309 79.9019 16.5245C79.4436 16.6772 79.0016 16.7502 78.5081 16.7502C76.4604 16.8077 75.2933 15.6396 75.2933 13.4203L75.3017 8.95719H74.0212C73.7251 8.95719 73.4848 8.71689 73.4848 8.42081V7.79002C73.4848 7.49393 73.7251 7.25363 74.0212 7.25363H75.3034L75.295 5.03747C75.295 4.7061 75.5636 4.43747 75.895 4.43747H76.6852Z\" fill=\"#213856\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.56138 0H16.4386C18.4055 0 20 1.59448 20 3.56138V16.4386C20 18.4055 18.4055 20 16.4386 20H3.56138C1.59448 20 0 18.4055 0 16.4386V3.56138C0 1.59448 1.59448 0 3.56138 0Z\" fill=\"#316BFF\"/>\n<path d=\"M9.59338 5.37553H14.115C14.4049 5.37553 14.64 5.61056 14.64 5.9005V6.71468C14.64 7.00461 14.4049 7.23965 14.115 7.23965H9.59338C9.30345 7.23965 9.06842 7.00461 9.06842 6.71468V5.9005C9.06842 5.61056 9.30345 5.37553 9.59338 5.37553Z\" fill=\"white\"/>\n<path d=\"M9.59769 9.0885H13.187C13.4769 9.0885 13.712 9.32354 13.712 9.61347V10.424C13.712 10.7139 13.4769 10.949 13.187 10.949H9.59769C9.30776 10.949 9.07273 10.7139 9.07273 10.424V9.61347C9.07273 9.32354 9.30776 9.0885 9.59769 9.0885Z\" fill=\"white\"/>\n<path d=\"M14.6428 13.3237V14.1353C14.6428 14.4251 14.4076 14.6602 14.1178 14.6602H7.41338C6.30969 14.5897 5.42775 13.7077 5.35719 12.604V5.86472C5.35719 5.57494 5.59238 5.33975 5.88216 5.33975H6.68621C6.976 5.33975 7.21118 5.57494 7.21118 5.86472V11.4533C7.21118 12.2076 7.75356 12.7987 8.50784 12.7987H14.1178C14.4076 12.7987 14.6428 13.0339 14.6428 13.3237Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"112\" height=\"28\" viewBox=\"0 0 112 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M87.2726 4.87198H85.9143C85.5097 4.87198 85.1818 5.20102 85.1818 5.60691V6.81985C85.1818 7.22574 85.5097 7.55478 85.9143 7.55478H87.2726C87.6771 7.55478 88.0051 7.22574 88.0051 6.81985V5.60691C88.0051 5.20102 87.6771 4.87198 87.2726 4.87198Z\" fill=\"#213856\"/>\n<path d=\"M38.1006 5.62621V22.4861C38.1006 22.8917 37.7725 23.221 37.3682 23.221H36.1411C35.7367 23.221 35.4086 22.8917 35.4086 22.4861V5.62621C35.4086 5.22053 35.7367 4.89128 36.1411 4.89128H37.3682C37.7725 4.89128 38.1006 5.22053 38.1006 5.62621Z\" fill=\"#213856\"/>\n<path d=\"M43.3535 17.6727C43.5891 19.64 45.2088 20.924 47.561 20.924C48.6509 20.924 49.9764 20.5772 50.8413 19.9457C51.1308 19.734 51.5281 19.7587 51.786 20.0092L52.4997 20.7042C52.8126 21.0087 52.7962 21.5214 52.4587 21.7966C51.1156 22.8925 49.224 23.4416 47.5082 23.4416C43.2738 23.4416 40.556 20.7406 40.556 16.598C40.556 12.4553 43.3008 9.85896 47.3254 9.85896C51.35 9.85896 54.0432 12.1754 53.8545 16.9684C53.8393 17.3623 53.5147 17.6739 53.122 17.6739H43.3523L43.3535 17.6727ZM51.2199 15.3915C51.0629 13.3466 49.5733 12.2707 47.4039 12.2707C45.4432 12.2707 43.8235 13.3455 43.4051 15.3915H51.2199Z\" fill=\"#213856\"/>\n<path d=\"M64.8361 22.4811V15.6687C64.8361 13.9649 63.4613 12.5456 61.7631 12.5797C59.8938 12.6161 58.7195 14.2012 58.7195 16.0932V22.4811C58.7195 22.8868 58.3913 23.216 57.987 23.216H56.7599C56.3556 23.216 56.0274 22.8868 56.0274 22.4811V10.8893C56.0274 10.4836 56.3556 10.1543 56.7599 10.1543H57.878C58.253 10.1543 58.5671 10.4377 58.6069 10.8116L58.7206 11.9765C59.4519 10.5607 60.9685 10.0363 62.3268 10.0363C63.9735 10.0363 65.6459 10.7183 66.3784 12.6326C67.4238 10.7183 69.0447 10.0633 70.7956 10.0633C74.3503 10.0633 76.2582 12.3186 76.2582 16.0427V22.4835C76.2582 22.8891 75.9301 23.2184 75.5257 23.2184H74.2729C73.8686 23.2184 73.5404 22.8891 73.5404 22.4835V15.5253C73.5404 13.939 72.2793 12.6103 70.6983 12.6079C68.7868 12.6044 67.5551 14.1789 67.5551 16.0956V22.4835C67.5551 22.8891 67.2269 23.2184 66.8226 23.2184H65.5697C65.1654 23.2184 64.8372 22.8891 64.8372 22.4835L64.8361 22.4811Z\" fill=\"#213856\"/>\n<path d=\"M82.0068 5.60434V22.4839C82.0068 22.8896 81.6787 23.2188 81.2743 23.2188H80.0473C79.6429 23.2188 79.3148 22.8896 79.3148 22.4839V5.60434C79.3148 5.19866 79.6429 4.86941 80.0473 4.86941H81.2743C81.6787 4.86941 82.0068 5.19866 82.0068 5.60434Z\" fill=\"#213856\"/>\n<path d=\"M85.2474 10.8817V22.4924C85.2474 22.8981 85.5755 23.2274 85.9799 23.2274H87.207C87.6113 23.2274 87.9394 22.8981 87.9394 22.4924V10.8817C87.9394 10.476 87.6113 10.1468 87.207 10.1468H85.9799C85.5755 10.1468 85.2474 10.476 85.2474 10.8817Z\" fill=\"#213856\"/>\n<path d=\"M99.7636 12.755C99.5199 13.0419 99.1014 13.0878 98.792 12.8726C97.9189 12.2658 96.9778 12.0836 95.9113 12.0836C94.2647 12.0577 93.1665 12.608 93.1665 13.631C93.1923 14.7058 94.3162 15.1256 95.9629 15.2831C98.3408 15.4925 101.451 16.0169 101.426 19.3482C101.4 21.7611 99.282 23.4391 95.9371 23.4391C94.0279 23.4391 92.1176 23.0452 90.5073 21.5189C90.2401 21.2649 90.2072 20.8486 90.4264 20.5511L90.9761 19.8044C91.2222 19.4705 91.7004 19.4023 92.0203 19.6657C93.1817 20.6228 94.6913 21.0297 95.9898 21.052C97.2708 21.052 98.7077 20.5805 98.7346 19.3741C98.7604 18.2205 97.6634 17.7749 95.7554 17.5902C93.3247 17.3539 90.5284 16.5672 90.5026 13.7098C90.5026 10.8512 93.456 9.77648 95.8609 9.77648C97.5638 9.77648 98.9397 10.1034 100.203 11.0065C100.554 11.2569 100.616 11.7555 100.337 12.0836L99.766 12.755H99.7636Z\" fill=\"#213856\"/>\n<path d=\"M107.003 6.21246C107.466 6.21246 107.84 6.58854 107.84 7.05246L107.852 10.1551H110.949C111.362 10.1551 111.697 10.4915 111.697 10.906V11.7891C111.697 12.2037 111.362 12.5401 110.949 12.5401H107.825L107.813 18.7884C107.813 20.1821 108.427 20.9583 109.709 20.9583C110.03 20.9583 110.378 20.891 110.722 20.7793C111.105 20.6543 111.517 20.873 111.646 21.2563L111.96 22.1802C112.093 22.5731 111.884 23.0033 111.492 23.1342C110.852 23.3481 110.235 23.4502 109.547 23.4502C106.69 23.5307 105.061 21.8955 105.061 18.7884L105.073 12.5401H103.286C102.873 12.5401 102.538 12.2037 102.538 11.7891V10.906C102.538 10.4915 102.873 10.1551 103.286 10.1551H105.075L105.063 7.05246C105.063 6.58854 105.438 6.21246 105.901 6.21246H107.003Z\" fill=\"#213856\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.9694 0H22.9378C25.6823 0 27.9072 2.23228 27.9072 4.98593V23.0141C27.9072 25.7677 25.6823 28 22.9378 28H4.9694C2.22487 28 0 25.7677 0 23.0141V4.98593C0 2.23228 2.22487 0 4.9694 0Z\" fill=\"#316BFF\"/>\n<path d=\"M13.3862 7.52574H19.6955C20.1 7.52574 20.428 7.85479 20.428 8.26069V9.40055C20.428 9.80646 20.1 10.1355 19.6955 10.1355H13.3862C12.9816 10.1355 12.6537 9.80646 12.6537 9.40055V8.26069C12.6537 7.85479 12.9816 7.52574 13.3862 7.52574Z\" fill=\"white\"/>\n<path d=\"M13.3922 12.7239H18.4006C18.8051 12.7239 19.1331 13.053 19.1331 13.4589V14.5936C19.1331 14.9995 18.8051 15.3286 18.4006 15.3286H13.3922C12.9877 15.3286 12.6597 14.9995 12.6597 14.5936V13.4589C12.6597 13.053 12.9877 12.7239 13.3922 12.7239Z\" fill=\"white\"/>\n<path d=\"M20.432 18.6532V19.7894C20.432 20.1951 20.1038 20.5243 19.6994 20.5243H10.3443C8.80427 20.4256 7.57365 19.1908 7.47519 17.6457V8.2106C7.47519 7.80491 7.80336 7.47565 8.20771 7.47565H9.32966C9.73401 7.47565 10.0622 7.80491 10.0622 8.2106V16.0347C10.0622 17.0907 10.819 17.9182 11.8715 17.9182H19.6994C20.1038 17.9182 20.432 18.2475 20.432 18.6532Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"128\" height=\"32\" viewBox=\"0 0 128 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M99.7401 5.56798H98.1877C97.7254 5.56798 97.3506 5.94402 97.3506 6.40789V7.79412C97.3506 8.25799 97.7254 8.63403 98.1877 8.63403H99.7401C100.202 8.63403 100.577 8.25799 100.577 7.79412V6.40789C100.577 5.94402 100.202 5.56798 99.7401 5.56798Z\" fill=\"#213856\"/>\n<path d=\"M43.5436 6.42995V25.6984C43.5436 26.162 43.1686 26.5383 42.7065 26.5383H41.3041C40.842 26.5383 40.467 26.162 40.467 25.6984V6.42995C40.467 5.96632 40.842 5.59003 41.3041 5.59003H42.7065C43.1686 5.59003 43.5436 5.96632 43.5436 6.42995Z\" fill=\"#213856\"/>\n<path d=\"M49.5469 20.1974C49.8161 22.4457 51.6672 23.9132 54.3554 23.9132C55.601 23.9132 57.1159 23.5168 58.1044 22.7951C58.4352 22.5532 58.8893 22.5814 59.184 22.8677L59.9997 23.6619C60.3573 24.01 60.3385 24.5959 59.9528 24.9103C58.4178 26.1628 56.256 26.7904 54.2951 26.7904C49.4558 26.7904 46.3497 23.7035 46.3497 18.9691C46.3497 14.2346 49.4866 11.2674 54.0861 11.2674C58.6857 11.2674 61.7637 13.9148 61.548 19.3924C61.5306 19.8426 61.1596 20.1987 60.7109 20.1987H49.5455L49.5469 20.1974ZM58.537 17.5903C58.3575 15.2533 56.6551 14.0237 54.1759 14.0237C51.9351 14.0237 50.084 15.252 49.6058 17.5903H58.537Z\" fill=\"#213856\"/>\n<path d=\"M74.0983 25.6927V17.9071C74.0983 15.9599 72.5272 14.3378 70.5864 14.3768C68.45 14.4185 67.1079 16.23 67.1079 18.3923V25.6927C67.1079 26.1563 66.7329 26.5326 66.2708 26.5326H64.8684C64.4063 26.5326 64.0313 26.1563 64.0313 25.6927V12.4449C64.0313 11.9812 64.4063 11.6049 64.8684 11.6049H66.1462C66.5749 11.6049 66.9338 11.9288 66.9794 12.3562L67.1093 13.6874C67.9451 12.0694 69.6783 11.47 71.2307 11.47C73.1125 11.47 75.0239 12.2494 75.861 14.4373C77.0558 12.2494 78.9082 11.5009 80.9093 11.5009C84.9717 11.5009 87.1523 14.0785 87.1523 18.3345V25.6954C87.1523 26.159 86.7772 26.5353 86.3151 26.5353H84.8833C84.4212 26.5353 84.0462 26.159 84.0462 25.6954V17.7432C84.0462 15.9303 82.605 14.4117 80.7981 14.409C78.6135 14.405 77.2058 16.2045 77.2058 18.395V25.6954C77.2058 26.159 76.8307 26.5353 76.3687 26.5353H74.9368C74.4747 26.5353 74.0997 26.159 74.0997 25.6954L74.0983 25.6927Z\" fill=\"#213856\"/>\n<path d=\"M93.7221 6.40496V25.6959C93.7221 26.1595 93.3471 26.5358 92.885 26.5358H91.4826C91.0205 26.5358 90.6455 26.1595 90.6455 25.6959V6.40496C90.6455 5.94132 91.0205 5.56504 91.4826 5.56504H92.885C93.3471 5.56504 93.7221 5.94132 93.7221 6.40496Z\" fill=\"#213856\"/>\n<path d=\"M97.4256 12.4362V25.7057C97.4256 26.1693 97.8006 26.5456 98.2627 26.5456H99.6651C100.127 26.5456 100.502 26.1693 100.502 25.7057V12.4362C100.502 11.9726 100.127 11.5963 99.6651 11.5963H98.2627C97.8006 11.5963 97.4256 11.9726 97.4256 12.4362Z\" fill=\"#213856\"/>\n<path d=\"M114.016 14.5771C113.737 14.905 113.259 14.9575 112.905 14.7115C111.907 14.0181 110.832 13.8098 109.613 13.8098C107.731 13.7802 106.476 14.4092 106.476 15.5783C106.505 16.8066 107.79 17.2864 109.672 17.4665C112.39 17.7057 115.944 18.305 115.915 22.1122C115.885 24.8698 113.465 26.7875 109.642 26.7875C107.46 26.7875 105.277 26.3373 103.437 24.593C103.131 24.3027 103.094 23.827 103.344 23.487L103.973 22.6336C104.254 22.252 104.8 22.174 105.166 22.4751C106.493 23.569 108.219 24.0339 109.703 24.0595C111.167 24.0595 112.809 23.5206 112.84 22.1418C112.869 20.8234 111.615 20.3141 109.435 20.1031C106.657 19.833 103.461 18.934 103.432 15.6684C103.432 12.4014 106.807 11.1731 109.555 11.1731C111.501 11.1731 113.074 11.5467 114.518 12.5788C114.918 12.865 114.989 13.4348 114.671 13.8098L114.018 14.5771H114.016Z\" fill=\"#213856\"/>\n<path d=\"M122.289 7.09996C122.818 7.09996 123.246 7.52976 123.246 8.05996L123.26 11.6058H126.799C127.271 11.6058 127.654 11.9903 127.654 12.464V13.4733C127.654 13.947 127.271 14.3315 126.799 14.3315H123.228L123.215 21.4725C123.215 23.0653 123.917 23.9524 125.381 23.9524C125.748 23.9524 126.146 23.8755 126.539 23.7478C126.977 23.605 127.448 23.8549 127.596 24.2929L127.954 25.3489C128.106 25.7979 127.868 26.2895 127.419 26.4391C126.688 26.6835 125.983 26.8003 125.196 26.8003C121.931 26.8923 120.07 25.0234 120.07 21.4725L120.083 14.3315H118.041C117.569 14.3315 117.186 13.947 117.186 13.4733V12.464C117.186 11.9903 117.569 11.6058 118.041 11.6058H120.086L120.072 8.05996C120.072 7.52976 120.501 7.09996 121.029 7.09996H122.289Z\" fill=\"#213856\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.67931 0H26.2146C29.3512 0 31.8939 2.55118 31.8939 5.69821V26.3018C31.8939 29.4488 29.3512 32 26.2146 32H5.67931C2.54271 32 0 29.4488 0 26.3018V5.69821C0 2.55118 2.54271 0 5.67931 0Z\" fill=\"#316BFF\"/>\n<path d=\"M15.2985 8.60085H22.5091C22.9715 8.60085 23.3463 8.9769 23.3463 9.44079V10.7435C23.3463 11.2074 22.9715 11.5834 22.5091 11.5834H15.2985C14.8362 11.5834 14.4614 11.2074 14.4614 10.7435V9.44079C14.4614 8.9769 14.8362 8.60085 15.2985 8.60085Z\" fill=\"white\"/>\n<path d=\"M15.3054 14.5416H21.0292C21.4916 14.5416 21.8664 14.9177 21.8664 15.3816V16.6784C21.8664 17.1423 21.4916 17.5183 21.0292 17.5183H15.3054C14.843 17.5183 14.4682 17.1423 14.4682 16.6784V15.3816C14.4682 14.9177 14.843 14.5416 15.3054 14.5416Z\" fill=\"white\"/>\n<path d=\"M23.3508 21.3179V22.6164C23.3508 23.0801 22.9758 23.4564 22.5136 23.4564H11.8221C10.062 23.3435 8.65559 21.9324 8.54308 20.1665V9.38355C8.54308 8.9199 8.91813 8.5436 9.38024 8.5436H10.6625C11.1246 8.5436 11.4996 8.9199 11.4996 9.38355V18.3254C11.4996 19.5322 12.3646 20.478 13.5674 20.478H22.5136C22.9758 20.478 23.3508 20.8542 23.3508 21.3179Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#1646C2\"/>\n<path d=\"M14.6428 13.3821V14.1178C14.6428 14.4076 14.4076 14.6428 14.1178 14.6428H7.41337C6.30968 14.5723 5.42773 13.6903 5.35718 12.5866V5.88215C5.35718 5.59237 5.59236 5.35719 5.88215 5.35719H6.61794C6.90772 5.35719 7.14291 5.59237 7.14291 5.88215V11.4922C7.14291 12.2464 7.75355 12.8571 8.50782 12.8571H14.1178C14.4076 12.8571 14.6428 13.0923 14.6428 13.3821Z\" fill=\"#0C1521\"/>\n<path d=\"M14.1178 5.35718H9.45362C9.16369 5.35718 8.92865 5.59222 8.92865 5.88215V6.61795C8.92865 6.90788 9.16369 7.14291 9.45362 7.14291H14.1178C14.4078 7.14291 14.6428 6.90788 14.6428 6.61795V5.88215C14.6428 5.59222 14.4078 5.35718 14.1178 5.35718Z\" fill=\"#0C1521\"/>\n<path d=\"M13.2846 9.10755H9.45362C9.16369 9.10755 8.92865 9.34259 8.92865 9.63252V10.3683C8.92865 10.6582 9.16369 10.8933 9.45362 10.8933H13.2846C13.5746 10.8933 13.8096 10.6582 13.8096 10.3683V9.63252C13.8096 9.34259 13.5746 9.10755 13.2846 9.10755Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#1646C2\"/>\n<path d=\"M20.4999 18.7349V19.765C20.4999 20.1707 20.1707 20.4999 19.765 20.4999H10.3787C8.83356 20.4012 7.59884 19.1664 7.50006 17.6213V8.23502C7.50006 7.82932 7.82932 7.50006 8.23502 7.50006H9.26513C9.67082 7.50006 10.0001 7.82932 10.0001 8.23502V16.089C10.0001 17.145 10.855 17.9999 11.911 17.9999H19.765C20.1707 17.9999 20.4999 18.3292 20.4999 18.7349Z\" fill=\"#0C1521\"/>\n<path d=\"M19.765 7.50006H13.2351C12.8292 7.50006 12.5001 7.82911 12.5001 8.23501V9.26513C12.5001 9.67103 12.8292 10.0001 13.2351 10.0001H19.765C20.1709 10.0001 20.5 9.67103 20.5 9.26513V8.23501C20.5 7.82911 20.1709 7.50006 19.765 7.50006Z\" fill=\"#0C1521\"/>\n<path d=\"M18.5985 12.7506H13.2351C12.8292 12.7506 12.5001 13.0796 12.5001 13.4855V14.5156C12.5001 14.9215 12.8292 15.2506 13.2351 15.2506H18.5985C19.0044 15.2506 19.3334 14.9215 19.3334 14.5156V13.4855C19.3334 13.0796 19.0044 12.7506 18.5985 12.7506Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55117 29.4488 0 26.3018 0Z\" fill=\"#1646C2\"/>\n<path d=\"M23.4285 21.4113V22.5886C23.4285 23.0522 23.0522 23.4285 22.5886 23.4285H11.8614C10.0955 23.3156 8.68442 21.9045 8.57153 20.1386V9.41145C8.57153 8.9478 8.94783 8.5715 9.41148 8.5715H10.5888C11.0524 8.5715 11.4287 8.9478 11.4287 9.41145V18.3875C11.4287 19.5943 12.4057 20.5713 13.6126 20.5713H22.5886C23.0522 20.5713 23.4285 20.9476 23.4285 21.4113Z\" fill=\"#0C1521\"/>\n<path d=\"M22.5886 8.5715H15.1258C14.6619 8.5715 14.2859 8.94755 14.2859 9.41144V10.5887C14.2859 11.0526 14.6619 11.4287 15.1258 11.4287H22.5886C23.0525 11.4287 23.4286 11.0526 23.4286 10.5887V9.41144C23.4286 8.94755 23.0525 8.5715 22.5886 8.5715Z\" fill=\"#0C1521\"/>\n<path d=\"M21.2554 14.5721H15.1258C14.6619 14.5721 14.2859 14.9481 14.2859 15.412V16.5893C14.2859 17.0532 14.6619 17.4293 15.1258 17.4293H21.2554C21.7193 17.4293 22.0954 17.0532 22.0954 16.5893V15.412C22.0954 14.9481 21.7193 14.5721 21.2554 14.5721Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12275V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12275C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#1646C2\"/>\n<path d=\"M29.2856 26.7641V28.2357C29.2856 28.8152 28.8152 29.2856 28.2357 29.2856H14.8267C12.6194 29.1445 10.8555 27.3806 10.7144 25.1732V11.7643C10.7144 11.1847 11.1847 10.7144 11.7643 10.7144H13.2359C13.8154 10.7144 14.2858 11.1847 14.2858 11.7643V22.9843C14.2858 24.4929 15.5071 25.7142 17.0156 25.7142H28.2357C28.8152 25.7142 29.2856 26.1845 29.2856 26.7641Z\" fill=\"#0C1521\"/>\n<path d=\"M28.2357 10.7144H18.9072C18.3274 10.7144 17.8573 11.1844 17.8573 11.7643V13.2359C17.8573 13.8158 18.3274 14.2858 18.9072 14.2858H28.2357C28.8156 14.2858 29.2856 13.8158 29.2856 13.2359V11.7643C29.2856 11.1844 28.8156 10.7144 28.2357 10.7144Z\" fill=\"#0C1521\"/>\n<path d=\"M26.5692 18.2151H18.9072C18.3274 18.2151 17.8573 18.6852 17.8573 19.265V20.7366C17.8573 21.3165 18.3274 21.7866 18.9072 21.7866H26.5692C27.1491 21.7866 27.6192 21.3165 27.6192 20.7366V19.265C27.6192 18.6852 27.1491 18.2151 26.5692 18.2151Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"81\" height=\"20\" viewBox=\"0 0 81 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M62.545 3.47999H61.5715C61.2816 3.47999 61.0465 3.71501 61.0465 4.00493V4.87132C61.0465 5.16124 61.2816 5.39627 61.5715 5.39627H62.545C62.8349 5.39627 63.0699 5.16124 63.0699 4.87132V4.00493C63.0699 3.71501 62.8349 3.47999 62.545 3.47999Z\" fill=\"white\"/>\n<path d=\"M27.3053 4.01872V16.0615C27.3053 16.3512 27.0701 16.5864 26.7803 16.5864H25.9009C25.6112 16.5864 25.376 16.3512 25.376 16.0615V4.01872C25.376 3.72895 25.6112 3.49377 25.9009 3.49377H26.7803C27.0701 3.49377 27.3053 3.72895 27.3053 4.01872Z\" fill=\"white\"/>\n<path d=\"M31.0698 12.6234C31.2387 14.0286 32.3994 14.9457 34.0851 14.9457C34.8663 14.9457 35.8162 14.698 36.4361 14.2469C36.6435 14.0957 36.9283 14.1134 37.113 14.2923L37.6246 14.7887C37.8488 15.0062 37.8371 15.3724 37.5952 15.569C36.6326 16.3518 35.277 16.744 34.0473 16.744C31.0127 16.744 29.0649 14.8147 29.0649 11.8557C29.0649 8.89665 31.032 7.04211 33.9163 7.04211C36.8006 7.04211 38.7307 8.69675 38.5955 12.1203C38.5846 12.4016 38.3519 12.6242 38.0706 12.6242H31.069L31.0698 12.6234ZM36.7074 10.9939C36.5948 9.53331 35.5273 8.76479 33.9726 8.76479C32.5674 8.76479 31.4066 9.53247 31.1068 10.9939H36.7074Z\" fill=\"white\"/>\n<path d=\"M46.4655 16.0579V11.192C46.4655 9.97492 45.4803 8.96114 44.2633 8.9855C42.9236 9.01153 42.082 10.1437 42.082 11.4952V16.0579C42.082 16.3477 41.8468 16.5829 41.5571 16.5829H40.6777C40.3879 16.5829 40.1527 16.3477 40.1527 16.0579V7.77804C40.1527 7.48827 40.3879 7.25309 40.6777 7.25309H41.4789C41.7477 7.25309 41.9728 7.45551 42.0014 7.7226L42.0829 8.55462C42.607 7.54336 43.6938 7.16875 44.6673 7.16875C45.8474 7.16875 47.0459 7.65591 47.5709 9.02329C48.3201 7.65591 49.4817 7.18807 50.7365 7.18807C53.284 7.18807 54.6514 8.79903 54.6514 11.4591V16.0596C54.6514 16.3494 54.4162 16.5846 54.1264 16.5846H53.2286C52.9388 16.5846 52.7036 16.3494 52.7036 16.0596V11.0895C52.7036 9.95644 51.7999 9.00733 50.6668 9.00565C49.2969 9.00313 48.4142 10.1278 48.4142 11.4969V16.0596C48.4142 16.3494 48.179 16.5846 47.8892 16.5846H46.9913C46.7016 16.5846 46.4664 16.3494 46.4664 16.0596L46.4655 16.0579Z\" fill=\"white\"/>\n<path d=\"M58.7712 4.0031V16.0599C58.7712 16.3497 58.536 16.5849 58.2463 16.5849H57.3669C57.0771 16.5849 56.8419 16.3497 56.8419 16.0599V4.0031C56.8419 3.71333 57.0771 3.47815 57.3669 3.47815H58.2463C58.536 3.47815 58.7712 3.71333 58.7712 4.0031Z\" fill=\"white\"/>\n<path d=\"M61.0936 7.77265V16.066C61.0936 16.3558 61.3288 16.591 61.6185 16.591H62.4979C62.7877 16.591 63.0229 16.3558 63.0229 16.066V7.77265C63.0229 7.48288 62.7877 7.2477 62.4979 7.2477H61.6185C61.3288 7.2477 61.0936 7.48288 61.0936 7.77265Z\" fill=\"white\"/>\n<path d=\"M71.4968 9.11071C71.3221 9.31565 71.0223 9.34841 70.8005 9.1947C70.1748 8.76131 69.5003 8.63112 68.736 8.63112C67.5559 8.61264 66.7689 9.00572 66.7689 9.73645C66.7874 10.5041 67.5929 10.804 68.773 10.9165C70.4772 11.066 72.7063 11.4406 72.6878 13.8201C72.6693 15.5436 71.1516 16.7422 68.7545 16.7422C67.3863 16.7422 66.0172 16.4608 64.8631 15.3706C64.6716 15.1892 64.6481 14.8919 64.8052 14.6794L65.1991 14.146C65.3755 13.9075 65.7182 13.8588 65.9475 14.0469C66.7798 14.7306 67.8617 15.0212 68.7923 15.0372C69.7103 15.0372 70.74 14.7004 70.7594 13.8386C70.7778 13.0147 69.9917 12.6963 68.6243 12.5645C66.8823 12.3956 64.8783 11.8337 64.8598 9.79272C64.8598 7.75088 66.9764 6.9832 68.6999 6.9832C69.9203 6.9832 70.9064 7.2167 71.8118 7.86175C72.0629 8.04066 72.1074 8.39678 71.9075 8.63112L71.4985 9.11071H71.4968Z\" fill=\"white\"/>\n<path d=\"M76.6852 4.43747C77.0166 4.43747 77.2852 4.7061 77.2852 5.03747L77.2936 7.25363H79.5129C79.809 7.25363 80.0493 7.49393 80.0493 7.79002V8.42081C80.0493 8.71689 79.809 8.95719 79.5129 8.95719H77.2739L77.2654 13.4203C77.2654 14.4158 77.7057 14.9702 78.624 14.9702C78.854 14.9702 79.1037 14.9222 79.3501 14.8424C79.6247 14.7531 79.9199 14.9093 80.0126 15.1831L80.2374 15.843C80.3327 16.1237 80.1834 16.4309 79.9019 16.5245C79.4436 16.6772 79.0016 16.7502 78.5081 16.7502C76.4604 16.8077 75.2932 15.6396 75.2932 13.4203L75.3017 8.95719H74.0212C73.7251 8.95719 73.4848 8.71689 73.4848 8.42081V7.79002C73.4848 7.49393 73.7251 7.25363 74.0212 7.25363H75.3034L75.295 5.03747C75.295 4.7061 75.5636 4.43747 75.895 4.43747H76.6852Z\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.56138 0H16.4386C18.4055 0 20 1.59448 20 3.56138V16.4386C20 18.4055 18.4055 20 16.4386 20H3.56138C1.59448 20 0 18.4055 0 16.4386V3.56138C0 1.59448 1.59448 0 3.56138 0Z\" fill=\"#1646C2\"/>\n<path d=\"M9.59338 5.37553H14.115C14.4049 5.37553 14.64 5.61056 14.64 5.9005V6.71468C14.64 7.00461 14.4049 7.23965 14.115 7.23965H9.59338C9.30345 7.23965 9.06842 7.00461 9.06842 6.71468V5.9005C9.06842 5.61056 9.30345 5.37553 9.59338 5.37553Z\" fill=\"#0C1521\"/>\n<path d=\"M9.59769 9.0885H13.187C13.4769 9.0885 13.712 9.32354 13.712 9.61347V10.424C13.712 10.7139 13.4769 10.949 13.187 10.949H9.59769C9.30776 10.949 9.07273 10.7139 9.07273 10.424V9.61347C9.07273 9.32354 9.30776 9.0885 9.59769 9.0885Z\" fill=\"#0C1521\"/>\n<path d=\"M14.6428 13.3237V14.1353C14.6428 14.4251 14.4076 14.6602 14.1178 14.6602H7.41338C6.30969 14.5897 5.42775 13.7077 5.35719 12.604V5.86472C5.35719 5.57494 5.59238 5.33975 5.88216 5.33975H6.68621C6.976 5.33975 7.21118 5.57494 7.21118 5.86472V11.4533C7.21118 12.2076 7.75356 12.7987 8.50784 12.7987H14.1178C14.4076 12.7987 14.6428 13.0339 14.6428 13.3237Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"112\" height=\"28\" viewBox=\"0 0 112 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M87.2726 4.87198H85.9143C85.5097 4.87198 85.1818 5.20102 85.1818 5.60691V6.81985C85.1818 7.22574 85.5097 7.55478 85.9143 7.55478H87.2726C87.6771 7.55478 88.0051 7.22574 88.0051 6.81985V5.60691C88.0051 5.20102 87.6771 4.87198 87.2726 4.87198Z\" fill=\"white\"/>\n<path d=\"M38.1006 5.62621V22.4861C38.1006 22.8917 37.7725 23.221 37.3682 23.221H36.1411C35.7367 23.221 35.4086 22.8917 35.4086 22.4861V5.62621C35.4086 5.22053 35.7367 4.89128 36.1411 4.89128H37.3682C37.7725 4.89128 38.1006 5.22053 38.1006 5.62621Z\" fill=\"white\"/>\n<path d=\"M43.3535 17.6727C43.5891 19.64 45.2088 20.924 47.561 20.924C48.6509 20.924 49.9764 20.5772 50.8413 19.9457C51.1308 19.734 51.5281 19.7587 51.786 20.0092L52.4997 20.7042C52.8126 21.0087 52.7962 21.5214 52.4587 21.7966C51.1156 22.8925 49.224 23.4416 47.5082 23.4416C43.2738 23.4416 40.556 20.7406 40.556 16.598C40.556 12.4553 43.3008 9.85896 47.3254 9.85896C51.35 9.85896 54.0432 12.1754 53.8545 16.9684C53.8393 17.3623 53.5147 17.6739 53.122 17.6739H43.3523L43.3535 17.6727ZM51.2199 15.3915C51.0629 13.3466 49.5733 12.2707 47.4039 12.2707C45.4432 12.2707 43.8235 13.3455 43.4051 15.3915H51.2199Z\" fill=\"white\"/>\n<path d=\"M64.8361 22.4811V15.6687C64.8361 13.9649 63.4613 12.5456 61.7631 12.5797C59.8938 12.6161 58.7195 14.2012 58.7195 16.0932V22.4811C58.7195 22.8868 58.3913 23.216 57.987 23.216H56.7599C56.3556 23.216 56.0274 22.8868 56.0274 22.4811V10.8893C56.0274 10.4836 56.3556 10.1543 56.7599 10.1543H57.878C58.253 10.1543 58.5671 10.4377 58.6069 10.8116L58.7206 11.9765C59.4519 10.5607 60.9685 10.0363 62.3268 10.0363C63.9735 10.0363 65.6459 10.7183 66.3784 12.6326C67.4238 10.7183 69.0447 10.0633 70.7956 10.0633C74.3503 10.0633 76.2582 12.3186 76.2582 16.0427V22.4835C76.2582 22.8891 75.9301 23.2184 75.5257 23.2184H74.2729C73.8686 23.2184 73.5404 22.8891 73.5404 22.4835V15.5253C73.5404 13.939 72.2793 12.6103 70.6983 12.6079C68.7868 12.6044 67.5551 14.1789 67.5551 16.0956V22.4835C67.5551 22.8891 67.2269 23.2184 66.8226 23.2184H65.5697C65.1654 23.2184 64.8372 22.8891 64.8372 22.4835L64.8361 22.4811Z\" fill=\"white\"/>\n<path d=\"M82.0068 5.60434V22.4839C82.0068 22.8896 81.6787 23.2188 81.2743 23.2188H80.0473C79.6429 23.2188 79.3148 22.8896 79.3148 22.4839V5.60434C79.3148 5.19866 79.6429 4.86941 80.0473 4.86941H81.2743C81.6787 4.86941 82.0068 5.19866 82.0068 5.60434Z\" fill=\"white\"/>\n<path d=\"M85.2474 10.8817V22.4924C85.2474 22.8981 85.5755 23.2274 85.9799 23.2274H87.207C87.6113 23.2274 87.9394 22.8981 87.9394 22.4924V10.8817C87.9394 10.476 87.6113 10.1468 87.207 10.1468H85.9799C85.5755 10.1468 85.2474 10.476 85.2474 10.8817Z\" fill=\"white\"/>\n<path d=\"M99.7636 12.755C99.5199 13.0419 99.1015 13.0878 98.792 12.8726C97.9189 12.2658 96.9778 12.0836 95.9113 12.0836C94.2647 12.0577 93.1665 12.608 93.1665 13.631C93.1923 14.7058 94.3162 15.1256 95.9629 15.2831C98.3408 15.4925 101.451 16.0169 101.426 19.3482C101.4 21.7611 99.2819 23.4391 95.9371 23.4391C94.0279 23.4391 92.1176 23.0452 90.5073 21.5189C90.2401 21.2649 90.2072 20.8486 90.4264 20.5511L90.9761 19.8044C91.2222 19.4705 91.7004 19.4023 92.0203 19.6657C93.1817 20.6228 94.6913 21.0297 95.9898 21.052C97.2708 21.052 98.7077 20.5805 98.7346 19.3741C98.7604 18.2205 97.6634 17.7749 95.7554 17.5902C93.3247 17.3539 90.5284 16.5672 90.5026 13.7098C90.5026 10.8512 93.456 9.77648 95.8609 9.77648C97.5638 9.77648 98.9397 10.1034 100.203 11.0065C100.554 11.2569 100.616 11.7555 100.337 12.0836L99.766 12.755H99.7636Z\" fill=\"white\"/>\n<path d=\"M107.003 6.21246C107.466 6.21246 107.84 6.58854 107.84 7.05246L107.852 10.1551H110.949C111.362 10.1551 111.697 10.4915 111.697 10.906V11.7891C111.697 12.2037 111.362 12.5401 110.949 12.5401H107.825L107.813 18.7884C107.813 20.1821 108.427 20.9583 109.709 20.9583C110.03 20.9583 110.378 20.891 110.722 20.7793C111.105 20.6543 111.517 20.873 111.646 21.2563L111.96 22.1802C112.093 22.5731 111.884 23.0033 111.492 23.1342C110.852 23.3481 110.235 23.4502 109.547 23.4502C106.69 23.5307 105.061 21.8955 105.061 18.7884L105.073 12.5401H103.286C102.873 12.5401 102.538 12.2037 102.538 11.7891V10.906C102.538 10.4915 102.873 10.1551 103.286 10.1551H105.075L105.063 7.05246C105.063 6.58854 105.438 6.21246 105.901 6.21246H107.003Z\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.9694 0H22.9378C25.6823 0 27.9072 2.23228 27.9072 4.98593V23.0141C27.9072 25.7677 25.6823 28 22.9378 28H4.9694C2.22487 28 0 25.7677 0 23.0141V4.98593C0 2.23228 2.22487 0 4.9694 0Z\" fill=\"#1646C2\"/>\n<path d=\"M13.3862 7.52574H19.6955C20.1 7.52574 20.428 7.85479 20.428 8.26069V9.40055C20.428 9.80646 20.1 10.1355 19.6955 10.1355H13.3862C12.9816 10.1355 12.6537 9.80646 12.6537 9.40055V8.26069C12.6537 7.85479 12.9816 7.52574 13.3862 7.52574Z\" fill=\"#0C1521\"/>\n<path d=\"M13.3922 12.7239H18.4006C18.8051 12.7239 19.1331 13.053 19.1331 13.4589V14.5936C19.1331 14.9995 18.8051 15.3286 18.4006 15.3286H13.3922C12.9877 15.3286 12.6597 14.9995 12.6597 14.5936V13.4589C12.6597 13.053 12.9877 12.7239 13.3922 12.7239Z\" fill=\"#0C1521\"/>\n<path d=\"M20.432 18.6532V19.7894C20.432 20.1951 20.1038 20.5243 19.6994 20.5243H10.3443C8.80427 20.4256 7.57365 19.1908 7.47519 17.6457V8.2106C7.47519 7.80491 7.80336 7.47565 8.20771 7.47565H9.32966C9.73401 7.47565 10.0622 7.80491 10.0622 8.2106V16.0347C10.0622 17.0907 10.819 17.9182 11.8715 17.9182H19.6994C20.1038 17.9182 20.432 18.2475 20.432 18.6532Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"128\" height=\"32\" viewBox=\"0 0 128 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M99.7401 5.56798H98.1877C97.7254 5.56798 97.3506 5.94402 97.3506 6.40789V7.79411C97.3506 8.25799 97.7254 8.63403 98.1877 8.63403H99.7401C100.202 8.63403 100.577 8.25799 100.577 7.79411V6.40789C100.577 5.94402 100.202 5.56798 99.7401 5.56798Z\" fill=\"white\"/>\n<path d=\"M43.5436 6.42995V25.6984C43.5436 26.162 43.1686 26.5383 42.7065 26.5383H41.3041C40.842 26.5383 40.467 26.162 40.467 25.6984V6.42995C40.467 5.96632 40.842 5.59003 41.3041 5.59003H42.7065C43.1686 5.59003 43.5436 5.96632 43.5436 6.42995Z\" fill=\"white\"/>\n<path d=\"M49.5469 20.1974C49.8161 22.4457 51.6672 23.9132 54.3554 23.9132C55.601 23.9132 57.1159 23.5168 58.1044 22.7951C58.4352 22.5532 58.8893 22.5814 59.184 22.8677L59.9997 23.6619C60.3573 24.01 60.3385 24.5959 59.9528 24.9103C58.4178 26.1628 56.256 26.7904 54.2951 26.7904C49.4558 26.7904 46.3497 23.7035 46.3497 18.9691C46.3497 14.2346 49.4866 11.2674 54.0861 11.2674C58.6857 11.2674 61.7637 13.9148 61.548 19.3924C61.5306 19.8426 61.1596 20.1987 60.7109 20.1987H49.5455L49.5469 20.1974ZM58.537 17.5903C58.3575 15.2533 56.6551 14.0237 54.1759 14.0237C51.935 14.0237 50.084 15.252 49.6058 17.5903H58.537Z\" fill=\"white\"/>\n<path d=\"M74.0983 25.6927V17.9071C74.0983 15.9599 72.5272 14.3378 70.5864 14.3768C68.45 14.4185 67.1079 16.23 67.1079 18.3923V25.6927C67.1079 26.1563 66.7329 26.5326 66.2708 26.5326H64.8684C64.4063 26.5326 64.0313 26.1563 64.0313 25.6927V12.4449C64.0313 11.9812 64.4063 11.6049 64.8684 11.6049H66.1462C66.5749 11.6049 66.9338 11.9288 66.9794 12.3562L67.1093 13.6874C67.9451 12.0694 69.6783 11.47 71.2307 11.47C73.1125 11.47 75.0239 12.2494 75.861 14.4373C77.0558 12.2494 78.9082 11.5009 80.9093 11.5009C84.9717 11.5009 87.1523 14.0785 87.1523 18.3345V25.6954C87.1523 26.159 86.7772 26.5353 86.3151 26.5353H84.8833C84.4212 26.5353 84.0462 26.159 84.0462 25.6954V17.7432C84.0462 15.9303 82.605 14.4117 80.7981 14.409C78.6135 14.405 77.2058 16.2045 77.2058 18.395V25.6954C77.2058 26.159 76.8307 26.5353 76.3687 26.5353H74.9368C74.4747 26.5353 74.0997 26.159 74.0997 25.6954L74.0983 25.6927Z\" fill=\"white\"/>\n<path d=\"M93.7221 6.40496V25.6959C93.7221 26.1595 93.3471 26.5358 92.885 26.5358H91.4826C91.0205 26.5358 90.6455 26.1595 90.6455 25.6959V6.40496C90.6455 5.94132 91.0205 5.56504 91.4826 5.56504H92.885C93.3471 5.56504 93.7221 5.94132 93.7221 6.40496Z\" fill=\"white\"/>\n<path d=\"M97.4256 12.4362V25.7057C97.4256 26.1693 97.8006 26.5456 98.2627 26.5456H99.6651C100.127 26.5456 100.502 26.1693 100.502 25.7057V12.4362C100.502 11.9726 100.127 11.5963 99.6651 11.5963H98.2627C97.8006 11.5963 97.4256 11.9726 97.4256 12.4362Z\" fill=\"white\"/>\n<path d=\"M114.016 14.5771C113.737 14.905 113.259 14.9575 112.905 14.7115C111.907 14.0181 110.832 13.8098 109.613 13.8098C107.731 13.7802 106.476 14.4092 106.476 15.5783C106.505 16.8066 107.79 17.2864 109.672 17.4665C112.39 17.7057 115.944 18.305 115.915 22.1122C115.885 24.8698 113.465 26.7875 109.642 26.7875C107.46 26.7875 105.277 26.3373 103.437 24.593C103.131 24.3027 103.094 23.827 103.344 23.487L103.973 22.6336C104.254 22.252 104.8 22.174 105.166 22.4751C106.493 23.569 108.219 24.0339 109.703 24.0595C111.167 24.0595 112.809 23.5206 112.84 22.1418C112.869 20.8234 111.615 20.3141 109.435 20.1031C106.657 19.833 103.461 18.934 103.432 15.6684C103.432 12.4014 106.807 11.1731 109.555 11.1731C111.501 11.1731 113.074 11.5467 114.518 12.5788C114.918 12.865 114.989 13.4348 114.671 13.8098L114.018 14.5771H114.016Z\" fill=\"white\"/>\n<path d=\"M122.289 7.09996C122.818 7.09996 123.246 7.52976 123.246 8.05996L123.26 11.6058H126.799C127.271 11.6058 127.654 11.9903 127.654 12.464V13.4733C127.654 13.947 127.271 14.3315 126.799 14.3315H123.228L123.215 21.4725C123.215 23.0653 123.917 23.9524 125.381 23.9524C125.748 23.9524 126.146 23.8755 126.539 23.7478C126.977 23.605 127.448 23.8549 127.596 24.2929L127.954 25.3489C128.106 25.7979 127.868 26.2895 127.419 26.4391C126.688 26.6835 125.983 26.8003 125.196 26.8003C121.931 26.8923 120.07 25.0234 120.07 21.4725L120.083 14.3315H118.041C117.569 14.3315 117.186 13.947 117.186 13.4733V12.464C117.186 11.9903 117.569 11.6058 118.041 11.6058H120.086L120.072 8.05996C120.072 7.52976 120.501 7.09996 121.029 7.09996H122.289Z\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.67931 0H26.2146C29.3512 0 31.8939 2.55118 31.8939 5.69821V26.3018C31.8939 29.4488 29.3512 32 26.2146 32H5.67931C2.54271 32 0 29.4488 0 26.3018V5.69821C0 2.55118 2.54271 0 5.67931 0Z\" fill=\"#1646C2\"/>\n<path d=\"M15.2985 8.60085H22.5091C22.9715 8.60085 23.3463 8.9769 23.3463 9.44079V10.7435C23.3463 11.2074 22.9715 11.5834 22.5091 11.5834H15.2985C14.8362 11.5834 14.4614 11.2074 14.4614 10.7435V9.44079C14.4614 8.9769 14.8362 8.60085 15.2985 8.60085Z\" fill=\"#0C1521\"/>\n<path d=\"M15.3054 14.5416H21.0292C21.4916 14.5416 21.8664 14.9177 21.8664 15.3816V16.6784C21.8664 17.1423 21.4916 17.5183 21.0292 17.5183H15.3054C14.843 17.5183 14.4682 17.1423 14.4682 16.6784V15.3816C14.4682 14.9177 14.843 14.5416 15.3054 14.5416Z\" fill=\"#0C1521\"/>\n<path d=\"M23.3508 21.3179V22.6164C23.3508 23.0801 22.9758 23.4564 22.5136 23.4564H11.8221C10.062 23.3435 8.65559 21.9324 8.54308 20.1665V9.38355C8.54308 8.9199 8.91813 8.5436 9.38024 8.5436H10.6625C11.1246 8.5436 11.4996 8.9199 11.4996 9.38355V18.3254C11.4996 19.5322 12.3646 20.478 13.5674 20.478H22.5136C22.9758 20.478 23.3508 20.8542 23.3508 21.3179Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59449 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59449 18.4055 0 16.4386 0Z\" fill=\"#FFB866\"/>\n<path d=\"M10.3675 6.19042H9.63166C9.34173 6.19042 9.10669 6.42546 9.10669 6.71539V10.4271C9.10669 10.7171 9.34173 10.9521 9.63166 10.9521H10.3675C10.6574 10.9521 10.8924 10.7171 10.8924 10.4271V6.71539C10.8924 6.42546 10.6574 6.19042 10.3675 6.19042Z\" fill=\"white\"/>\n<path d=\"M14.6428 5.88216V12.5866C14.5722 13.6903 13.6895 14.5723 12.5866 14.6428H7.41841C6.26768 14.5689 5.35718 13.6122 5.35718 12.443V5.88216C5.35718 5.59238 5.59236 5.35719 5.88215 5.35719H6.61794C6.90772 5.35719 7.14291 5.59238 7.14291 5.88216V11.4922C7.14291 12.2464 7.75355 12.8571 8.50782 12.8571H11.4922C12.2456 12.8571 12.8571 12.2464 12.8571 11.4922V5.88216C12.8571 5.59238 13.0923 5.35719 13.382 5.35719H14.1178C14.4076 5.35719 14.6428 5.59238 14.6428 5.88216Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#FFB866\"/>\n<path d=\"M14.5145 8.66659H13.4843C13.0784 8.66659 12.7494 8.99564 12.7494 9.40154V14.598C12.7494 15.0039 13.0784 15.3329 13.4843 15.3329H14.5145C14.9204 15.3329 15.2494 15.0039 15.2494 14.598V9.40154C15.2494 8.99564 14.9204 8.66659 14.5145 8.66659Z\" fill=\"white\"/>\n<path d=\"M20.4999 8.23502V17.6213C20.4012 19.1664 19.1653 20.4012 17.6213 20.4999H10.3858C8.77477 20.3965 7.50006 19.0571 7.50006 17.4202V8.23502C7.50006 7.82933 7.82932 7.50007 8.23502 7.50007H9.26513C9.67082 7.50007 10.0001 7.82933 10.0001 8.23502V16.089C10.0001 17.145 10.855 17.9999 11.911 17.9999H16.089C17.1438 17.9999 17.9999 17.145 17.9999 16.089V8.23502C17.9999 7.82933 18.3292 7.50007 18.7349 7.50007H19.765C20.1707 7.50007 20.4999 7.82933 20.4999 8.23502Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55118 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55118 29.4488 0 26.3018 0Z\" fill=\"#FFB866\"/>\n<path d=\"M16.588 9.90466H15.4107C14.9468 9.90466 14.5707 10.2807 14.5707 10.7446V16.6834C14.5707 17.1473 14.9468 17.5233 15.4107 17.5233H16.588C17.0518 17.5233 17.4279 17.1473 17.4279 16.6834V10.7446C17.4279 10.2807 17.0518 9.90466 16.588 9.90466Z\" fill=\"white\"/>\n<path d=\"M23.4285 9.41145V20.1386C23.3156 21.9045 21.9032 23.3156 20.1386 23.4285H11.8695C10.0283 23.3102 8.57153 21.7795 8.57153 19.9088V9.41145C8.57153 8.9478 8.94783 8.5715 9.41148 8.5715H10.5888C11.0524 8.5715 11.4287 8.9478 11.4287 9.41145V18.3875C11.4287 19.5943 12.4057 20.5713 13.6126 20.5713H18.3875C19.593 20.5713 20.5714 19.5943 20.5714 18.3875V9.41145C20.5714 8.9478 20.9477 8.5715 21.4113 8.5715H22.5886C23.0522 8.5715 23.4285 8.9478 23.4285 9.41145Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12276V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12276C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#FFB866\"/>\n<path d=\"M20.7349 12.3808H19.2633C18.6835 12.3808 18.2134 12.8509 18.2134 13.4308V20.8542C18.2134 21.4341 18.6835 21.9042 19.2633 21.9042H20.7349C21.3148 21.9042 21.7848 21.4341 21.7848 20.8542V13.4308C21.7848 12.8509 21.3148 12.3808 20.7349 12.3808Z\" fill=\"white\"/>\n<path d=\"M29.2856 11.7643V25.1732C29.1445 27.3806 27.3789 29.1445 25.1732 29.2856H14.8368C12.5354 29.1378 10.7144 27.2244 10.7144 24.886V11.7643C10.7144 11.1847 11.1847 10.7144 11.7643 10.7144H13.2359C13.8154 10.7144 14.2858 11.1847 14.2858 11.7643V22.9843C14.2858 24.4929 15.5071 25.7142 17.0156 25.7142H22.9843C24.4912 25.7142 25.7141 24.4929 25.7141 22.9843V11.7643C25.7141 11.1847 26.1845 10.7144 26.7641 10.7144H28.2357C28.8152 10.7144 29.2856 11.1847 29.2856 11.7643Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"106\" height=\"20\" viewBox=\"0 0 106 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M27.33 3.97888V16.0254C27.33 16.3153 27.0947 16.5506 26.8049 16.5506H25.9252C25.6353 16.5506 25.4001 16.3153 25.4001 16.0254V3.97888C25.4001 3.68902 25.6353 3.45377 25.9252 3.45377H26.8049C27.0947 3.45377 27.33 3.68902 27.33 3.97888Z\" fill=\"#213856\"/>\n<path d=\"M31.0958 12.5981C31.2646 14.0037 32.4258 14.9212 34.112 14.9212C34.8934 14.9212 35.8437 14.6733 36.4637 14.2221C36.6712 14.0709 36.9561 14.0885 37.1409 14.2675L37.6526 14.7641C37.8769 14.9817 37.8651 15.348 37.6232 15.5446C36.6603 16.3276 35.3043 16.72 34.0742 16.72C31.0386 16.72 29.0902 14.7901 29.0902 11.8301C29.0902 8.87017 31.058 7.01504 33.9432 7.01504C36.8284 7.01504 38.7591 8.6702 38.6238 12.0948C38.6129 12.3763 38.3802 12.5989 38.0987 12.5989H31.0949L31.0958 12.5981ZM36.7351 10.9681C36.6225 9.50703 35.5546 8.73826 33.9994 8.73826C32.5938 8.73826 31.4327 9.50619 31.1327 10.9681H36.7351Z\" fill=\"#213856\"/>\n<path d=\"M46.4963 16.0255V11.1701C46.4963 9.95268 45.5108 8.93858 44.2934 8.96294C42.9533 8.98899 42.1114 10.1216 42.1114 11.4734V16.0255C42.1114 16.3154 41.8762 16.5506 41.5863 16.5506H40.7066C40.4168 16.5506 40.1815 16.3154 40.1815 16.0255V7.74618C40.1815 7.45632 40.4168 7.22107 40.7066 7.22107H41.5082C41.777 7.22107 42.0022 7.42355 42.0308 7.69073L42.1123 8.53109C42.6365 7.51951 43.7237 7.14479 44.6984 7.14479C45.8788 7.14479 47.0778 7.63209 47.6029 8.99991C48.3523 7.63209 49.5143 7.16411 50.7695 7.16411C53.3178 7.16411 54.6856 8.77558 54.6856 11.4364V16.0264C54.6856 16.3162 54.4504 16.5515 54.1605 16.5515H53.2624C52.9725 16.5515 52.7373 16.3162 52.7373 16.0264V11.0668C52.7373 9.93336 51.8332 8.98395 50.6998 8.98227C49.3295 8.97975 48.4464 10.1048 48.4464 11.4743V16.0264C48.4464 16.3162 48.2112 16.5515 47.9213 16.5515H47.0231C46.7333 16.5515 46.498 16.3162 46.498 16.0264L46.4963 16.0255Z\" fill=\"#213856\"/>\n<path d=\"M64.1091 7.60307L66.207 14.565L68.4193 7.60089C68.4882 7.38244 68.6907 7.23289 68.9201 7.23289H69.9501C70.3114 7.23289 70.5652 7.58996 70.4458 7.93108L67.5286 16.2362C67.4547 16.447 67.2564 16.5882 67.0329 16.5882H65.529C65.3063 16.5882 65.108 16.4479 65.0341 16.2378L64.0713 13.5148L63.1723 10.2919L62.2539 13.5148L61.2911 16.2378C61.2171 16.4479 61.0189 16.5882 60.7962 16.5882H59.2914C59.0688 16.5882 58.8697 16.447 58.7957 16.237L55.8434 7.93005C55.7233 7.58894 55.977 7.23102 56.3391 7.23102H57.3869C57.6162 7.23102 57.8187 7.37973 57.8876 7.59902L60.1182 14.565L62.2161 7.60307C62.2833 7.3821 62.4875 7.23087 62.7186 7.23087H63.6075C63.8385 7.23087 64.0427 7.3821 64.1099 7.60307H64.1091Z\" fill=\"#213856\"/>\n<path d=\"M79.6778 7.22903H80.5214C80.8112 7.22903 81.0465 7.46429 81.0465 7.75415V16.0265C81.0465 16.3164 80.8112 16.5516 80.5214 16.5516H79.7039C79.4266 16.5516 79.1972 16.3357 79.1796 16.0593L79.1166 14.9967C78.4982 16.1771 77.0741 16.7392 75.9314 16.7392C73.2336 16.7577 71.1911 15.0152 71.1911 11.8678C71.1911 8.72051 73.3084 7.05275 75.9692 7.05275C77.2808 7.05275 78.536 7.67112 79.1166 8.72051L79.1535 7.73483C79.1645 7.45253 79.3964 7.22988 79.6787 7.22988L79.6778 7.22903ZM73.1202 11.8678C73.1202 13.7793 74.4695 14.9404 76.118 14.9404C80.1088 14.9404 80.1088 8.81377 76.118 8.81377C74.4695 8.81377 73.1202 9.97575 73.1202 11.8678Z\" fill=\"#213856\"/>\n<path d=\"M85.1431 7.69892L85.2238 8.53109C85.8985 7.35063 86.9479 7.10698 87.941 7.10698C88.6358 7.10698 89.3088 7.29686 89.8204 7.60017C90.0607 7.74216 90.1464 8.04798 90.017 8.295L89.6104 9.07385C89.476 9.33095 89.1592 9.42 88.9038 9.28389C88.5711 9.10662 88.2056 9.0184 87.7158 9.0184C86.3858 9.0184 85.2238 9.84262 85.2238 11.5482V16.0255C85.2238 16.3154 84.9885 16.5506 84.6987 16.5506H83.819C83.5291 16.5506 83.2939 16.3154 83.2939 16.0255V7.75521C83.2939 7.46535 83.5291 7.2301 83.819 7.2301H84.6214C84.8894 7.2301 85.1146 7.43258 85.1431 7.69892Z\" fill=\"#213856\"/>\n<path d=\"M97.477 16.0255V11.1701C97.477 9.95268 96.4915 8.93858 95.274 8.96294C93.934 8.98899 93.0921 10.1216 93.0921 11.4734V16.0255C93.0921 16.3154 92.8568 16.5506 92.567 16.5506H91.6873C91.3974 16.5506 91.1622 16.3154 91.1622 16.0255V7.74455C91.1622 7.45468 91.3974 7.21943 91.6873 7.21943H92.4888C92.7577 7.21943 92.9829 7.42192 93.0114 7.6891L93.0929 8.53109C93.6172 7.51951 94.7044 7.14479 95.679 7.14479C96.8595 7.14479 98.0584 7.63209 98.5835 8.99991C99.333 7.63209 100.495 7.16411 101.75 7.16411C104.298 7.16411 105.666 8.77558 105.666 11.4364V16.0264C105.666 16.3162 105.431 16.5515 105.141 16.5515H104.243C103.953 16.5515 103.718 16.3162 103.718 16.0264V11.0668C103.718 9.93336 102.814 8.98395 101.68 8.98227C100.31 8.97975 99.4271 10.1048 99.4271 11.4743V16.0264C99.4271 16.3162 99.1918 16.5515 98.902 16.5515H98.0038C97.7139 16.5515 97.4787 16.3162 97.4787 16.0264L97.477 16.0255Z\" fill=\"#213856\"/>\n<path d=\"M16.4387 0H3.56139C1.59449 0 0 1.59449 0 3.56138V16.4386C0 18.4055 1.59449 20 3.56139 20H16.4387C18.4056 20 20.0001 18.4055 20.0001 16.4386V3.56138C20.0001 1.59449 18.4056 0 16.4387 0Z\" fill=\"#FFB866\"/>\n<path d=\"M10.4077 6.28933H9.59735C9.30742 6.28933 9.07238 6.52437 9.07238 6.8143L9.07391 10.4067C9.07391 10.6966 9.30895 10.9317 9.59888 10.9317H10.4092C10.6991 10.9317 10.9342 10.6966 10.9342 10.4067L10.9326 6.8143C10.9326 6.52437 10.6976 6.28933 10.4077 6.28933Z\" fill=\"white\"/>\n<path d=\"M14.6427 5.88187V12.5863C14.5721 13.69 13.6894 14.572 12.5865 14.6425H7.41829C6.26756 14.5686 5.35706 13.6119 5.35706 12.4427V5.88187C5.35706 5.59208 5.59224 5.3569 5.88203 5.3569H6.69295C6.98273 5.3569 7.21791 5.59208 7.21791 5.88187V11.4211C7.21791 12.1754 7.82856 12.7861 8.58283 12.7861H11.4921C12.2455 12.7861 12.7855 12.1754 12.7855 11.4211V5.88187C12.7855 5.59208 13.0207 5.3569 13.3104 5.3569H14.1177C14.4075 5.3569 14.6427 5.59208 14.6427 5.88187Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"147\" height=\"28\" viewBox=\"0 0 147 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M38.0207 5.57044V22.4356C38.0207 22.8414 37.6934 23.1708 37.2902 23.1708H36.0664C35.6631 23.1708 35.3359 22.8414 35.3359 22.4356V5.57044C35.3359 5.16463 35.6631 4.83528 36.0664 4.83528H37.2902C37.6934 4.83528 38.0207 5.16463 38.0207 5.57044Z\" fill=\"#213856\"/>\n<path d=\"M43.2596 17.6373C43.4945 19.6052 45.1098 20.8896 47.4557 20.8896C48.5427 20.8896 49.8647 20.5426 50.7273 19.911C51.016 19.6993 51.4122 19.724 51.6694 19.9745L52.3812 20.6697C52.6933 20.9743 52.6769 21.4872 52.3403 21.7624C51.0008 22.8587 49.1143 23.408 47.4031 23.408C43.1801 23.408 40.4695 20.7061 40.4695 16.5622C40.4695 12.4182 43.207 9.82106 47.2208 9.82106C51.2346 9.82106 53.9206 12.1383 53.7324 16.9327C53.7172 17.3268 53.3934 17.6385 53.0019 17.6385H43.2584L43.2596 17.6373ZM51.1048 15.3553C50.9482 13.3098 49.4626 12.2336 47.2991 12.2336C45.3436 12.2336 43.7283 13.3087 43.311 15.3553H51.1048Z\" fill=\"#213856\"/>\n<path d=\"M64.6844 22.4357V15.6382C64.6844 13.9338 63.3134 12.514 61.6197 12.5481C59.7554 12.5846 58.5842 14.1702 58.5842 16.0628V22.4357C58.5842 22.8415 58.257 23.1709 57.8537 23.1709H56.6299C56.2267 23.1709 55.8994 22.8415 55.8994 22.4357V10.8447C55.8994 10.4388 56.2267 10.1095 56.6299 10.1095H57.745C58.119 10.1095 58.4323 10.393 58.472 10.767L58.5854 11.9435C59.3148 10.5273 60.8272 10.0027 62.1831 10.0027C63.8253 10.0027 65.4933 10.6849 66.2238 12.5999C67.2664 10.6849 68.8829 10.0298 70.6292 10.0298C74.1743 10.0298 76.0771 12.2858 76.0771 16.011V22.4369C76.0771 22.8427 75.7499 23.1721 75.3466 23.1721H74.0971C73.6939 23.1721 73.3666 22.8427 73.3666 22.4369V15.4935C73.3666 13.9067 72.1089 12.5775 70.5321 12.5752C68.6258 12.5717 67.3973 14.1467 67.3973 16.064V22.4369C67.3973 22.8427 67.07 23.1721 66.6668 23.1721H65.4173C65.014 23.1721 64.6868 22.8427 64.6868 22.4369L64.6844 22.4357Z\" fill=\"#213856\"/>\n<path d=\"M89.1867 10.6443L92.1053 20.391L95.183 10.6412C95.2789 10.3354 95.5606 10.126 95.8797 10.126H97.3127C97.8153 10.126 98.1683 10.6259 98.0023 11.1035L93.9439 22.7306C93.8411 23.0259 93.5652 23.2235 93.2543 23.2235H91.1621C90.8523 23.2235 90.5765 23.027 90.4736 22.733L89.1341 18.9207L87.8835 14.4086L86.6059 18.9207L85.2664 22.733C85.1636 23.027 84.8877 23.2235 84.578 23.2235H82.4846C82.1748 23.2235 81.8978 23.0259 81.795 22.7318L77.6878 11.1021C77.5207 10.6245 77.8737 10.1234 78.3774 10.1234H79.835C80.1541 10.1234 80.4358 10.3316 80.5316 10.6386L83.6347 20.391L86.5533 10.6443C86.6468 10.3349 86.9309 10.1232 87.2523 10.1232H88.4889C88.8104 10.1232 89.0944 10.3349 89.1879 10.6443H89.1867Z\" fill=\"#213856\"/>\n<path d=\"M110.846 10.1206H112.019C112.422 10.1206 112.75 10.45 112.75 10.8558V22.4371C112.75 22.8429 112.422 23.1722 112.019 23.1722H110.882C110.496 23.1722 110.177 22.8699 110.152 22.483L110.065 20.9954C109.204 22.648 107.223 23.4349 105.634 23.4349C101.881 23.4608 99.0391 21.0212 99.0391 16.615C99.0391 12.2087 101.985 9.87385 105.686 9.87385C107.511 9.87385 109.257 10.7396 110.065 12.2087L110.116 10.8288C110.131 10.4335 110.454 10.1218 110.847 10.1218L110.846 10.1206ZM101.723 16.615C101.723 19.291 103.6 20.9165 105.893 20.9165C111.445 20.9165 111.445 12.3393 105.893 12.3393C103.6 12.3393 101.723 13.966 101.723 16.615Z\" fill=\"#213856\"/>\n<path d=\"M118.449 10.7785L118.561 11.9435C119.5 10.2909 120.959 9.94977 122.341 9.94977C123.308 9.94977 124.244 10.2156 124.956 10.6402C125.29 10.839 125.409 11.2672 125.229 11.613L124.663 12.7034C124.476 13.0633 124.036 13.188 123.68 12.9975C123.218 12.7493 122.709 12.6258 122.028 12.6258C120.177 12.6258 118.561 13.7797 118.561 16.1675V22.4357C118.561 22.8415 118.234 23.1709 117.83 23.1709H116.607C116.203 23.1709 115.876 22.8415 115.876 22.4357V10.8573C115.876 10.4515 116.203 10.1221 116.607 10.1221H117.723C118.096 10.1221 118.409 10.4056 118.449 10.7785Z\" fill=\"#213856\"/>\n<path d=\"M135.607 22.4357V15.6382C135.607 13.9338 134.236 12.514 132.543 12.5481C130.678 12.5846 129.507 14.1702 129.507 16.0628V22.4357C129.507 22.8415 129.18 23.1709 128.777 23.1709H127.553C127.15 23.1709 126.822 22.8415 126.822 22.4357V10.8424C126.822 10.4366 127.15 10.1072 127.553 10.1072H128.668C129.042 10.1072 129.355 10.3907 129.395 10.7647L129.508 11.9435C130.238 10.5273 131.75 10.0027 133.106 10.0027C134.748 10.0027 136.416 10.6849 137.147 12.5999C138.189 10.6849 139.806 10.0298 141.552 10.0298C145.097 10.0298 147 12.2858 147 16.011V22.4369C147 22.8427 146.673 23.1721 146.269 23.1721H145.02C144.617 23.1721 144.289 22.8427 144.289 22.4369V15.4935C144.289 13.9067 143.032 12.5775 141.455 12.5752C139.549 12.5717 138.32 14.1467 138.32 16.064V22.4369C138.32 22.8427 137.993 23.1721 137.59 23.1721H136.34C135.937 23.1721 135.61 22.8427 135.61 22.4369L135.607 22.4357Z\" fill=\"#213856\"/>\n<path d=\"M22.869 0H4.9545C2.21821 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.21821 28 4.9545 28H22.869C25.6053 28 27.8235 25.7677 27.8235 23.0141V4.98593C27.8235 2.23228 25.6053 0 22.869 0Z\" fill=\"#FFB866\"/>\n<path d=\"M14.4788 8.80506H13.3516C12.9482 8.80506 12.6212 9.13412 12.6212 9.54002L12.6234 14.5694C12.6234 14.9753 12.9503 15.3043 13.3537 15.3043H14.481C14.8843 15.3043 15.2113 14.9753 15.2113 14.5694L15.2092 9.54002C15.2092 9.13412 14.8822 8.80506 14.4788 8.80506Z\" fill=\"white\"/>\n<path d=\"M20.3705 8.23461V17.6209C20.2724 19.166 19.0443 20.4008 17.51 20.4995H10.3201C8.71926 20.396 7.45259 19.0567 7.45259 17.4198V8.23461C7.45259 7.82892 7.77977 7.49966 8.18291 7.49966H9.31104C9.71418 7.49966 10.0414 7.82892 10.0414 8.23461V15.9896C10.0414 17.0456 10.8909 17.9005 11.9402 17.9005H15.9874C17.0356 17.9005 17.7868 17.0456 17.7868 15.9896V8.23461C17.7868 7.82892 18.114 7.49966 18.5171 7.49966H19.6402C20.0433 7.49966 20.3705 7.82892 20.3705 8.23461Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"169\" height=\"32\" viewBox=\"0 0 169 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M43.5739 6.36621V25.6407C43.5739 26.1045 43.1989 26.4809 42.7367 26.4809H41.3342C40.872 26.4809 40.497 26.1045 40.497 25.6407V6.36621C40.497 5.90243 40.872 5.52603 41.3342 5.52603H42.7367C43.1989 5.52603 43.5739 5.90243 43.5739 6.36621Z\" fill=\"#213856\"/>\n<path d=\"M49.578 20.1569C49.8472 22.4059 51.6985 23.8739 54.387 23.8739C55.6328 23.8739 57.1478 23.4773 58.1364 22.7554C58.4673 22.5134 58.9214 22.5417 59.2161 22.828L60.0319 23.6225C60.3896 23.9707 60.3708 24.5568 59.985 24.8713C58.4499 26.1242 56.2878 26.752 54.3267 26.752C49.4869 26.752 46.3804 23.6642 46.3804 18.9282C46.3804 14.1923 49.5177 11.2241 54.1178 11.2241C58.7178 11.2241 61.7961 13.8723 61.5805 19.3517C61.563 19.802 61.192 20.1582 60.7432 20.1582H49.5766L49.578 20.1569ZM58.5691 17.549C58.3896 15.2112 56.687 13.9812 54.2075 13.9812C51.9664 13.9812 50.1151 15.2099 49.6369 17.549H58.5691Z\" fill=\"#213856\"/>\n<path d=\"M74.1321 25.6408V17.8722C74.1321 15.9243 72.5608 14.3017 70.6198 14.3407C68.4832 14.3824 67.1409 16.1945 67.1409 18.3575V25.6408C67.1409 26.1046 66.7659 26.481 66.3037 26.481H64.9012C64.4391 26.481 64.064 26.1046 64.064 25.6408V12.3939C64.064 11.9301 64.4391 11.5537 64.9012 11.5537H66.1791C66.6078 11.5537 66.9668 11.8777 67.0124 12.3052L67.1423 13.6497C67.9782 12.0312 69.7116 11.4317 71.2655 11.4317C73.1475 11.4317 75.0591 12.2113 75.8963 14.3999C77.0912 12.2113 78.9438 11.4626 80.9451 11.4626C85.008 11.4626 87.1888 14.0409 87.1888 18.2983V25.6422C87.1888 26.106 86.8138 26.4824 86.3516 26.4824H84.9196C84.4575 26.4824 84.0824 26.106 84.0824 25.6422V17.7068C84.0824 15.8934 82.641 14.3743 80.834 14.3716C78.6491 14.3676 77.2412 16.1676 77.2412 18.3588V25.6422C77.2412 26.106 76.8662 26.4824 76.404 26.4824H74.972C74.5099 26.4824 74.1348 26.106 74.1348 25.6422L74.1321 25.6408Z\" fill=\"#213856\"/>\n<path d=\"M102.213 12.1649L105.558 23.3041L109.085 12.1614C109.195 11.8119 109.518 11.5726 109.884 11.5726H111.526C112.102 11.5726 112.507 12.1439 112.316 12.6897L107.665 25.9779C107.547 26.3153 107.231 26.5411 106.875 26.5411H104.477C104.122 26.5411 103.806 26.3166 103.688 25.9805L102.153 21.6237L100.72 16.467L99.2555 21.6237L97.7203 25.9805C97.6024 26.3166 97.2863 26.5411 96.9313 26.5411H94.5322C94.1772 26.5411 93.8597 26.3153 93.7418 25.9792L89.0348 12.6881C88.8432 12.1423 89.2478 11.5696 89.8251 11.5696H91.4956C91.8613 11.5696 92.1841 11.8076 92.2939 12.1584L95.8503 23.3041L99.1952 12.1649C99.3023 11.8114 99.6279 11.5694 99.9962 11.5694H101.413C101.782 11.5694 102.107 11.8114 102.215 12.1649H102.213Z\" fill=\"#213856\"/>\n<path d=\"M127.035 11.5665H128.38C128.843 11.5665 129.218 11.9429 129.218 12.4066V25.6424C129.218 26.1062 128.843 26.4826 128.38 26.4826H127.077C126.635 26.4826 126.269 26.1371 126.241 25.6948L126.141 23.9947C125.155 25.8834 122.884 26.7828 121.062 26.7828C116.761 26.8123 113.505 24.0243 113.505 18.9885C113.505 13.9528 116.88 11.2844 121.123 11.2844C123.214 11.2844 125.215 12.2738 126.141 13.9528L126.2 12.3757C126.217 11.924 126.587 11.5678 127.037 11.5678L127.035 11.5665ZM116.58 18.9885C116.58 22.0468 118.732 23.9046 121.36 23.9046C127.723 23.9046 127.723 14.102 121.36 14.102C118.732 14.102 116.58 15.9612 116.58 18.9885Z\" fill=\"#213856\"/>\n<path d=\"M135.749 12.3183L135.878 13.6497C136.953 11.761 138.627 11.3712 140.21 11.3712C141.318 11.3712 142.391 11.675 143.207 12.1603C143.59 12.3875 143.726 12.8768 143.52 13.272L142.872 14.5182C142.657 14.9295 142.152 15.072 141.745 14.8542C141.215 14.5706 140.632 14.4294 139.851 14.4294C137.73 14.4294 135.878 15.7482 135.878 18.4771V25.6408C135.878 26.1046 135.503 26.481 135.041 26.481H133.638C133.176 26.481 132.801 26.1046 132.801 25.6408V12.4083C132.801 11.9446 133.176 11.5682 133.638 11.5682H134.917C135.345 11.5682 135.704 11.8921 135.749 12.3183Z\" fill=\"#213856\"/>\n<path d=\"M155.414 25.6408V17.8722C155.414 15.9243 153.843 14.3017 151.902 14.3407C149.765 14.3824 148.423 16.1945 148.423 18.3575V25.6408C148.423 26.1046 148.048 26.481 147.585 26.481H146.183C145.721 26.481 145.346 26.1046 145.346 25.6408V12.3913C145.346 11.9275 145.721 11.5511 146.183 11.5511H147.461C147.89 11.5511 148.249 11.8751 148.294 12.3026L148.424 13.6497C149.26 12.0312 150.993 11.4317 152.547 11.4317C154.429 11.4317 156.341 12.2113 157.178 14.3999C158.373 12.2113 160.226 11.4626 162.227 11.4626C166.29 11.4626 168.471 14.0409 168.471 18.2983V25.6422C168.471 26.106 168.096 26.4824 167.633 26.4824H166.201C165.739 26.4824 165.364 26.106 165.364 25.6422V17.7068C165.364 15.8934 163.923 14.3743 162.116 14.3716C159.931 14.3676 158.523 16.1676 158.523 18.3588V25.6422C158.523 26.106 158.148 26.4824 157.686 26.4824H156.254C155.792 26.4824 155.417 26.106 155.417 25.6422L155.414 25.6408Z\" fill=\"#213856\"/>\n<path d=\"M26.2092 0H5.67815C2.54219 0 0 2.55118 0 5.69821V26.3018C0 29.4488 2.54219 32 5.67815 32H26.2092C29.3452 32 31.8874 29.4488 31.8874 26.3018V5.69821C31.8874 2.55118 29.3452 0 26.2092 0Z\" fill=\"#FFB866\"/>\n<path d=\"M16.5936 10.0629H15.3017C14.8394 10.0629 14.4647 10.439 14.4647 10.9029L14.4671 16.6507C14.4671 17.1146 14.8419 17.4907 15.3041 17.4907H16.596C17.0583 17.4907 17.433 17.1146 17.433 16.6507L17.4306 10.9029C17.4306 10.439 17.0559 10.0629 16.5936 10.0629Z\" fill=\"white\"/>\n<path d=\"M23.3458 9.41099V20.1381C23.2333 21.904 21.8258 23.3151 20.0675 23.428H11.8275C9.99278 23.3098 8.5411 21.779 8.5411 19.9083V9.41099C8.5411 8.94733 8.91607 8.57104 9.37809 8.57104H10.671C11.133 8.57104 11.508 8.94733 11.508 9.41099V18.2738C11.508 19.4807 12.4816 20.4577 13.6842 20.4577H18.3225C19.5238 20.4577 20.3847 19.4807 20.3847 18.2738V9.41099C20.3847 8.94733 20.7597 8.57104 21.2217 8.57104H22.5088C22.9708 8.57104 23.3458 8.94733 23.3458 9.41099Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59449 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59449 18.4055 0 16.4386 0Z\" fill=\"#FFB866\"/>\n<path d=\"M10.3675 6.19042H9.63166C9.34173 6.19042 9.10669 6.42546 9.10669 6.71539V10.4271C9.10669 10.7171 9.34173 10.9521 9.63166 10.9521H10.3675C10.6574 10.9521 10.8924 10.7171 10.8924 10.4271V6.71539C10.8924 6.42546 10.6574 6.19042 10.3675 6.19042Z\" fill=\"#0C1521\"/>\n<path d=\"M14.6428 5.88216V12.5866C14.5722 13.6903 13.6895 14.5723 12.5866 14.6428H7.41841C6.26768 14.5689 5.35718 13.6122 5.35718 12.443V5.88216C5.35718 5.59238 5.59236 5.35719 5.88215 5.35719H6.61794C6.90772 5.35719 7.14291 5.59238 7.14291 5.88216V11.4922C7.14291 12.2464 7.75355 12.8571 8.50782 12.8571H11.4922C12.2456 12.8571 12.8571 12.2464 12.8571 11.4922V5.88216C12.8571 5.59238 13.0923 5.35719 13.382 5.35719H14.1178C14.4076 5.35719 14.6428 5.59238 14.6428 5.88216Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#FFB866\"/>\n<path d=\"M14.5145 8.66659H13.4843C13.0784 8.66659 12.7494 8.99564 12.7494 9.40154V14.598C12.7494 15.0039 13.0784 15.3329 13.4843 15.3329H14.5145C14.9204 15.3329 15.2494 15.0039 15.2494 14.598V9.40154C15.2494 8.99564 14.9204 8.66659 14.5145 8.66659Z\" fill=\"#0C1521\"/>\n<path d=\"M20.4999 8.23502V17.6213C20.4012 19.1664 19.1653 20.4012 17.6213 20.4999H10.3858C8.77477 20.3965 7.50006 19.0571 7.50006 17.4202V8.23502C7.50006 7.82933 7.82932 7.50007 8.23502 7.50007H9.26513C9.67082 7.50007 10.0001 7.82933 10.0001 8.23502V16.089C10.0001 17.145 10.855 17.9999 11.911 17.9999H16.089C17.1438 17.9999 17.9999 17.145 17.9999 16.089V8.23502C17.9999 7.82933 18.3292 7.50007 18.7349 7.50007H19.765C20.1707 7.50007 20.4999 7.82933 20.4999 8.23502Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55118 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55118 29.4488 0 26.3018 0Z\" fill=\"#FFB866\"/>\n<path d=\"M16.588 9.90466H15.4107C14.9468 9.90466 14.5707 10.2807 14.5707 10.7446V16.6834C14.5707 17.1473 14.9468 17.5233 15.4107 17.5233H16.588C17.0518 17.5233 17.4279 17.1473 17.4279 16.6834V10.7446C17.4279 10.2807 17.0518 9.90466 16.588 9.90466Z\" fill=\"#0C1521\"/>\n<path d=\"M23.4285 9.41145V20.1386C23.3156 21.9045 21.9032 23.3156 20.1386 23.4285H11.8695C10.0283 23.3102 8.57153 21.7795 8.57153 19.9088V9.41145C8.57153 8.9478 8.94783 8.5715 9.41148 8.5715H10.5888C11.0524 8.5715 11.4287 8.9478 11.4287 9.41145V18.3875C11.4287 19.5943 12.4057 20.5713 13.6126 20.5713H18.3875C19.593 20.5713 20.5714 19.5943 20.5714 18.3875V9.41145C20.5714 8.9478 20.9477 8.5715 21.4113 8.5715H22.5886C23.0522 8.5715 23.4285 8.9478 23.4285 9.41145Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12276V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12276C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#FFB866\"/>\n<path d=\"M20.7349 12.3808H19.2633C18.6835 12.3808 18.2134 12.8509 18.2134 13.4308V20.8542C18.2134 21.4341 18.6835 21.9042 19.2633 21.9042H20.7349C21.3148 21.9042 21.7848 21.4341 21.7848 20.8542V13.4308C21.7848 12.8509 21.3148 12.3808 20.7349 12.3808Z\" fill=\"#0C1521\"/>\n<path d=\"M29.2856 11.7643V25.1732C29.1445 27.3806 27.3789 29.1445 25.1732 29.2856H14.8368C12.5354 29.1378 10.7144 27.2244 10.7144 24.886V11.7643C10.7144 11.1847 11.1847 10.7144 11.7643 10.7144H13.2359C13.8154 10.7144 14.2858 11.1847 14.2858 11.7643V22.9843C14.2858 24.4929 15.5071 25.7142 17.0156 25.7142H22.9843C24.4912 25.7142 25.7141 24.4929 25.7141 22.9843V11.7643C25.7141 11.1847 26.1845 10.7144 26.7641 10.7144H28.2357C28.8152 10.7144 29.2856 11.1847 29.2856 11.7643Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"106\" height=\"20\" viewBox=\"0 0 106 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M27.33 3.97888V16.0254C27.33 16.3153 27.0947 16.5506 26.8049 16.5506H25.9252C25.6353 16.5506 25.4001 16.3153 25.4001 16.0254V3.97888C25.4001 3.68902 25.6353 3.45377 25.9252 3.45377H26.8049C27.0947 3.45377 27.33 3.68902 27.33 3.97888Z\" fill=\"white\"/>\n<path d=\"M31.0958 12.5981C31.2646 14.0037 32.4258 14.9212 34.112 14.9212C34.8934 14.9212 35.8437 14.6733 36.4637 14.2221C36.6712 14.0709 36.9561 14.0885 37.1409 14.2675L37.6526 14.7641C37.8769 14.9817 37.8651 15.348 37.6232 15.5446C36.6603 16.3276 35.3043 16.72 34.0742 16.72C31.0386 16.72 29.0902 14.7901 29.0902 11.8301C29.0902 8.87017 31.058 7.01504 33.9432 7.01504C36.8284 7.01504 38.7591 8.6702 38.6238 12.0948C38.6129 12.3763 38.3802 12.5989 38.0987 12.5989H31.0949L31.0958 12.5981ZM36.7351 10.9681C36.6225 9.50703 35.5546 8.73826 33.9994 8.73826C32.5938 8.73826 31.4327 9.50619 31.1327 10.9681H36.7351Z\" fill=\"white\"/>\n<path d=\"M46.4963 16.0255V11.1701C46.4963 9.95268 45.5108 8.93858 44.2934 8.96294C42.9533 8.98899 42.1114 10.1216 42.1114 11.4734V16.0255C42.1114 16.3154 41.8762 16.5506 41.5863 16.5506H40.7066C40.4168 16.5506 40.1815 16.3154 40.1815 16.0255V7.74618C40.1815 7.45632 40.4168 7.22107 40.7066 7.22107H41.5082C41.777 7.22107 42.0022 7.42355 42.0308 7.69073L42.1123 8.53109C42.6365 7.51951 43.7237 7.14479 44.6984 7.14479C45.8788 7.14479 47.0778 7.63209 47.6029 8.99991C48.3523 7.63209 49.5143 7.16411 50.7695 7.16411C53.3178 7.16411 54.6856 8.77558 54.6856 11.4364V16.0264C54.6856 16.3162 54.4504 16.5515 54.1605 16.5515H53.2624C52.9725 16.5515 52.7373 16.3162 52.7373 16.0264V11.0668C52.7373 9.93336 51.8332 8.98395 50.6998 8.98227C49.3295 8.97975 48.4464 10.1048 48.4464 11.4743V16.0264C48.4464 16.3162 48.2112 16.5515 47.9213 16.5515H47.0231C46.7333 16.5515 46.498 16.3162 46.498 16.0264L46.4963 16.0255Z\" fill=\"white\"/>\n<path d=\"M64.1091 7.60307L66.207 14.565L68.4193 7.60089C68.4882 7.38244 68.6907 7.23289 68.9201 7.23289H69.9501C70.3114 7.23289 70.5652 7.58996 70.4458 7.93108L67.5286 16.2362C67.4547 16.447 67.2564 16.5882 67.0329 16.5882H65.529C65.3063 16.5882 65.108 16.4479 65.0341 16.2378L64.0713 13.5148L63.1723 10.2919L62.2539 13.5148L61.2911 16.2378C61.2171 16.4479 61.0189 16.5882 60.7962 16.5882H59.2914C59.0688 16.5882 58.8697 16.447 58.7957 16.237L55.8434 7.93005C55.7233 7.58894 55.977 7.23102 56.3391 7.23102H57.3869C57.6162 7.23102 57.8187 7.37973 57.8876 7.59902L60.1182 14.565L62.2161 7.60307C62.2833 7.3821 62.4875 7.23087 62.7186 7.23087H63.6075C63.8385 7.23087 64.0427 7.3821 64.1099 7.60307H64.1091Z\" fill=\"white\"/>\n<path d=\"M79.6778 7.22903H80.5214C80.8112 7.22903 81.0465 7.46429 81.0465 7.75415V16.0265C81.0465 16.3164 80.8112 16.5516 80.5214 16.5516H79.7039C79.4266 16.5516 79.1972 16.3357 79.1796 16.0593L79.1166 14.9967C78.4982 16.1771 77.0741 16.7392 75.9314 16.7392C73.2336 16.7577 71.1911 15.0152 71.1911 11.8678C71.1911 8.72051 73.3084 7.05275 75.9692 7.05275C77.2808 7.05275 78.536 7.67112 79.1166 8.72051L79.1535 7.73483C79.1645 7.45253 79.3964 7.22988 79.6787 7.22988L79.6778 7.22903ZM73.1202 11.8678C73.1202 13.7793 74.4695 14.9404 76.1179 14.9404C80.1088 14.9404 80.1088 8.81377 76.1179 8.81377C74.4695 8.81377 73.1202 9.97575 73.1202 11.8678Z\" fill=\"white\"/>\n<path d=\"M85.1431 7.69892L85.2238 8.53109C85.8985 7.35063 86.9479 7.10698 87.941 7.10698C88.6358 7.10698 89.3088 7.29686 89.8205 7.60017C90.0607 7.74216 90.1464 8.04798 90.017 8.295L89.6104 9.07385C89.476 9.33095 89.1592 9.42 88.9038 9.28389C88.5711 9.10662 88.2056 9.0184 87.7158 9.0184C86.3858 9.0184 85.2238 9.84262 85.2238 11.5482V16.0255C85.2238 16.3154 84.9885 16.5506 84.6987 16.5506H83.819C83.5291 16.5506 83.2939 16.3154 83.2939 16.0255V7.75521C83.2939 7.46535 83.5291 7.2301 83.819 7.2301H84.6214C84.8894 7.2301 85.1146 7.43258 85.1431 7.69892Z\" fill=\"white\"/>\n<path d=\"M97.477 16.0255V11.1701C97.477 9.95268 96.4915 8.93858 95.274 8.96294C93.934 8.98899 93.0921 10.1216 93.0921 11.4734V16.0255C93.0921 16.3154 92.8568 16.5506 92.567 16.5506H91.6873C91.3974 16.5506 91.1622 16.3154 91.1622 16.0255V7.74455C91.1622 7.45468 91.3974 7.21943 91.6873 7.21943H92.4888C92.7577 7.21943 92.9829 7.42192 93.0114 7.6891L93.0929 8.53109C93.6172 7.51951 94.7044 7.14479 95.679 7.14479C96.8595 7.14479 98.0584 7.63209 98.5835 8.99991C99.333 7.63209 100.495 7.16411 101.75 7.16411C104.298 7.16411 105.666 8.77558 105.666 11.4364V16.0264C105.666 16.3162 105.431 16.5515 105.141 16.5515H104.243C103.953 16.5515 103.718 16.3162 103.718 16.0264V11.0668C103.718 9.93336 102.814 8.98395 101.68 8.98227C100.31 8.97975 99.4271 10.1048 99.4271 11.4743V16.0264C99.4271 16.3162 99.1918 16.5515 98.902 16.5515H98.0038C97.7139 16.5515 97.4787 16.3162 97.4787 16.0264L97.477 16.0255Z\" fill=\"white\"/>\n<path d=\"M16.4387 0H3.56139C1.59449 0 0 1.59449 0 3.56138V16.4386C0 18.4055 1.59449 20 3.56139 20H16.4387C18.4056 20 20.0001 18.4055 20.0001 16.4386V3.56138C20.0001 1.59449 18.4056 0 16.4387 0Z\" fill=\"#FFB866\"/>\n<path d=\"M10.4077 6.28933H9.59735C9.30741 6.28933 9.07238 6.52437 9.07238 6.8143L9.07391 10.4067C9.07391 10.6966 9.30895 10.9317 9.59888 10.9317H10.4092C10.6991 10.9317 10.9342 10.6966 10.9342 10.4067L10.9326 6.8143C10.9326 6.52437 10.6976 6.28933 10.4077 6.28933Z\" fill=\"#0C1521\"/>\n<path d=\"M14.6427 5.88187V12.5863C14.5721 13.69 13.6894 14.572 12.5865 14.6425H7.41829C6.26756 14.5686 5.35706 13.6119 5.35706 12.4427V5.88187C5.35706 5.59208 5.59224 5.3569 5.88203 5.3569H6.69295C6.98273 5.3569 7.21791 5.59208 7.21791 5.88187V11.4211C7.21791 12.1754 7.82856 12.7861 8.58283 12.7861H11.4921C12.2455 12.7861 12.7855 12.1754 12.7855 11.4211V5.88187C12.7855 5.59208 13.0207 5.3569 13.3104 5.3569H14.1177C14.4075 5.3569 14.6427 5.59208 14.6427 5.88187Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"147\" height=\"28\" viewBox=\"0 0 147 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M38.0207 5.57044V22.4356C38.0207 22.8414 37.6934 23.1708 37.2902 23.1708H36.0664C35.6631 23.1708 35.3359 22.8414 35.3359 22.4356V5.57044C35.3359 5.16463 35.6631 4.83528 36.0664 4.83528H37.2902C37.6934 4.83528 38.0207 5.16463 38.0207 5.57044Z\" fill=\"white\"/>\n<path d=\"M43.2596 17.6373C43.4945 19.6052 45.1098 20.8896 47.4557 20.8896C48.5427 20.8896 49.8647 20.5426 50.7273 19.911C51.016 19.6993 51.4122 19.724 51.6694 19.9745L52.3812 20.6697C52.6933 20.9743 52.6769 21.4872 52.3403 21.7624C51.0008 22.8587 49.1143 23.408 47.4031 23.408C43.1801 23.408 40.4695 20.7061 40.4695 16.5622C40.4695 12.4182 43.207 9.82106 47.2208 9.82106C51.2346 9.82106 53.9206 12.1383 53.7324 16.9327C53.7172 17.3268 53.3934 17.6385 53.0019 17.6385H43.2584L43.2596 17.6373ZM51.1048 15.3553C50.9482 13.3098 49.4626 12.2336 47.2991 12.2336C45.3436 12.2336 43.7283 13.3087 43.311 15.3553H51.1048Z\" fill=\"white\"/>\n<path d=\"M64.6844 22.4357V15.6382C64.6844 13.9338 63.3134 12.514 61.6197 12.5481C59.7554 12.5846 58.5842 14.1702 58.5842 16.0628V22.4357C58.5842 22.8415 58.2569 23.1709 57.8537 23.1709H56.6299C56.2267 23.1709 55.8994 22.8415 55.8994 22.4357V10.8447C55.8994 10.4388 56.2267 10.1095 56.6299 10.1095H57.745C58.119 10.1095 58.4323 10.393 58.472 10.767L58.5854 11.9435C59.3148 10.5273 60.8272 10.0027 62.1831 10.0027C63.8253 10.0027 65.4933 10.6849 66.2238 12.5999C67.2664 10.6849 68.8829 10.0298 70.6292 10.0298C74.1743 10.0298 76.0771 12.2858 76.0771 16.011V22.4369C76.0771 22.8427 75.7499 23.1721 75.3466 23.1721H74.0971C73.6939 23.1721 73.3666 22.8427 73.3666 22.4369V15.4935C73.3666 13.9067 72.1089 12.5775 70.5321 12.5752C68.6258 12.5717 67.3973 14.1467 67.3973 16.064V22.4369C67.3973 22.8427 67.07 23.1721 66.6668 23.1721H65.4173C65.014 23.1721 64.6868 22.8427 64.6868 22.4369L64.6844 22.4357Z\" fill=\"white\"/>\n<path d=\"M89.1867 10.6443L92.1053 20.391L95.183 10.6412C95.2789 10.3354 95.5606 10.126 95.8797 10.126H97.3127C97.8153 10.126 98.1683 10.6259 98.0023 11.1035L93.9439 22.7306C93.8411 23.0259 93.5652 23.2235 93.2543 23.2235H91.1621C90.8523 23.2235 90.5765 23.027 90.4736 22.733L89.1341 18.9207L87.8835 14.4086L86.6059 18.9207L85.2664 22.733C85.1636 23.027 84.8877 23.2235 84.578 23.2235H82.4846C82.1748 23.2235 81.8978 23.0259 81.795 22.7318L77.6878 11.1021C77.5207 10.6245 77.8737 10.1234 78.3774 10.1234H79.835C80.1541 10.1234 80.4358 10.3316 80.5316 10.6386L83.6347 20.391L86.5533 10.6443C86.6468 10.3349 86.9309 10.1232 87.2523 10.1232H88.4889C88.8104 10.1232 89.0944 10.3349 89.1879 10.6443H89.1867Z\" fill=\"white\"/>\n<path d=\"M110.846 10.1206H112.019C112.422 10.1206 112.75 10.45 112.75 10.8558V22.4371C112.75 22.8429 112.422 23.1722 112.019 23.1722H110.882C110.496 23.1722 110.177 22.8699 110.152 22.483L110.065 20.9954C109.204 22.648 107.223 23.4349 105.634 23.4349C101.881 23.4608 99.0391 21.0212 99.0391 16.615C99.0391 12.2087 101.985 9.87385 105.686 9.87385C107.511 9.87385 109.257 10.7396 110.065 12.2087L110.116 10.8288C110.131 10.4335 110.454 10.1218 110.847 10.1218L110.846 10.1206ZM101.723 16.615C101.723 19.291 103.6 20.9165 105.893 20.9165C111.445 20.9165 111.445 12.3393 105.893 12.3393C103.6 12.3393 101.723 13.966 101.723 16.615Z\" fill=\"white\"/>\n<path d=\"M118.449 10.7785L118.561 11.9435C119.5 10.2909 120.959 9.94977 122.341 9.94977C123.308 9.94977 124.244 10.2156 124.956 10.6402C125.29 10.839 125.409 11.2672 125.229 11.613L124.663 12.7034C124.476 13.0633 124.036 13.188 123.68 12.9975C123.218 12.7493 122.709 12.6258 122.028 12.6258C120.177 12.6258 118.561 13.7797 118.561 16.1675V22.4357C118.561 22.8415 118.234 23.1709 117.83 23.1709H116.607C116.203 23.1709 115.876 22.8415 115.876 22.4357V10.8573C115.876 10.4515 116.203 10.1221 116.607 10.1221H117.723C118.096 10.1221 118.409 10.4056 118.449 10.7785Z\" fill=\"white\"/>\n<path d=\"M135.607 22.4357V15.6382C135.607 13.9338 134.236 12.514 132.543 12.5481C130.678 12.5846 129.507 14.1702 129.507 16.0628V22.4357C129.507 22.8415 129.18 23.1709 128.777 23.1709H127.553C127.15 23.1709 126.822 22.8415 126.822 22.4357V10.8424C126.822 10.4366 127.15 10.1072 127.553 10.1072H128.668C129.042 10.1072 129.355 10.3907 129.395 10.7647L129.508 11.9435C130.238 10.5273 131.75 10.0027 133.106 10.0027C134.748 10.0027 136.416 10.6849 137.147 12.5999C138.189 10.6849 139.806 10.0298 141.552 10.0298C145.097 10.0298 147 12.2858 147 16.011V22.4369C147 22.8427 146.673 23.1721 146.269 23.1721H145.02C144.617 23.1721 144.289 22.8427 144.289 22.4369V15.4935C144.289 13.9067 143.032 12.5775 141.455 12.5752C139.549 12.5717 138.32 14.1467 138.32 16.064V22.4369C138.32 22.8427 137.993 23.1721 137.59 23.1721H136.34C135.937 23.1721 135.61 22.8427 135.61 22.4369L135.607 22.4357Z\" fill=\"white\"/>\n<path d=\"M22.869 0H4.9545C2.21821 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.21821 28 4.9545 28H22.869C25.6053 28 27.8235 25.7677 27.8235 23.0141V4.98593C27.8235 2.23228 25.6053 0 22.869 0Z\" fill=\"#FFB866\"/>\n<path d=\"M14.4788 8.80506H13.3516C12.9482 8.80506 12.6212 9.13412 12.6212 9.54002L12.6234 14.5694C12.6234 14.9753 12.9503 15.3043 13.3537 15.3043H14.481C14.8843 15.3043 15.2113 14.9753 15.2113 14.5694L15.2092 9.54002C15.2092 9.13412 14.8822 8.80506 14.4788 8.80506Z\" fill=\"#0C1521\"/>\n<path d=\"M20.3705 8.23461V17.6209C20.2724 19.166 19.0443 20.4008 17.51 20.4995H10.3201C8.71926 20.396 7.45259 19.0567 7.45259 17.4198V8.23461C7.45259 7.82892 7.77977 7.49966 8.18291 7.49966H9.31104C9.71418 7.49966 10.0414 7.82892 10.0414 8.23461V15.9896C10.0414 17.0456 10.8909 17.9005 11.9402 17.9005H15.9874C17.0356 17.9005 17.7868 17.0456 17.7868 15.9896V8.23461C17.7868 7.82892 18.114 7.49966 18.5171 7.49966H19.6402C20.0433 7.49966 20.3705 7.82892 20.3705 8.23461Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"169\" height=\"32\" viewBox=\"0 0 169 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M43.5739 6.36621V25.6407C43.5739 26.1045 43.1989 26.4809 42.7367 26.4809H41.3342C40.872 26.4809 40.497 26.1045 40.497 25.6407V6.36621C40.497 5.90243 40.872 5.52603 41.3342 5.52603H42.7367C43.1989 5.52603 43.5739 5.90243 43.5739 6.36621Z\" fill=\"white\"/>\n<path d=\"M49.578 20.1569C49.8472 22.4059 51.6985 23.8739 54.387 23.8739C55.6328 23.8739 57.1478 23.4773 58.1364 22.7554C58.4673 22.5134 58.9214 22.5417 59.2161 22.828L60.0319 23.6225C60.3896 23.9707 60.3708 24.5568 59.985 24.8713C58.4499 26.1242 56.2878 26.752 54.3267 26.752C49.4869 26.752 46.3804 23.6642 46.3804 18.9282C46.3804 14.1923 49.5177 11.2241 54.1178 11.2241C58.7178 11.2241 61.7961 13.8723 61.5805 19.3517C61.563 19.802 61.192 20.1582 60.7432 20.1582H49.5766L49.578 20.1569ZM58.5691 17.549C58.3896 15.2112 56.687 13.9812 54.2075 13.9812C51.9664 13.9812 50.1151 15.2099 49.6369 17.549H58.5691Z\" fill=\"white\"/>\n<path d=\"M74.1321 25.6408V17.8722C74.1321 15.9243 72.5608 14.3017 70.6198 14.3407C68.4832 14.3824 67.1409 16.1945 67.1409 18.3575V25.6408C67.1409 26.1046 66.7659 26.481 66.3037 26.481H64.9012C64.4391 26.481 64.064 26.1046 64.064 25.6408V12.3939C64.064 11.9301 64.4391 11.5537 64.9012 11.5537H66.1791C66.6078 11.5537 66.9668 11.8777 67.0124 12.3052L67.1423 13.6497C67.9782 12.0312 69.7116 11.4317 71.2655 11.4317C73.1475 11.4317 75.0591 12.2113 75.8963 14.3999C77.0912 12.2113 78.9438 11.4626 80.9451 11.4626C85.008 11.4626 87.1888 14.0409 87.1888 18.2983V25.6422C87.1888 26.106 86.8138 26.4824 86.3516 26.4824H84.9196C84.4575 26.4824 84.0824 26.106 84.0824 25.6422V17.7068C84.0824 15.8934 82.641 14.3743 80.834 14.3716C78.6491 14.3676 77.2412 16.1676 77.2412 18.3588V25.6422C77.2412 26.106 76.8662 26.4824 76.404 26.4824H74.972C74.5099 26.4824 74.1348 26.106 74.1348 25.6422L74.1321 25.6408Z\" fill=\"white\"/>\n<path d=\"M102.213 12.1649L105.558 23.3041L109.085 12.1614C109.195 11.8119 109.518 11.5726 109.884 11.5726H111.526C112.102 11.5726 112.507 12.1439 112.316 12.6897L107.665 25.9779C107.547 26.3153 107.231 26.5411 106.875 26.5411H104.477C104.122 26.5411 103.806 26.3166 103.688 25.9805L102.153 21.6237L100.72 16.467L99.2555 21.6237L97.7203 25.9805C97.6024 26.3166 97.2863 26.5411 96.9313 26.5411H94.5322C94.1772 26.5411 93.8597 26.3153 93.7418 25.9792L89.0348 12.6881C88.8432 12.1423 89.2478 11.5696 89.8251 11.5696H91.4955C91.8613 11.5696 92.1841 11.8076 92.2939 12.1584L95.8503 23.3041L99.1952 12.1649C99.3023 11.8114 99.6279 11.5694 99.9962 11.5694H101.413C101.782 11.5694 102.107 11.8114 102.215 12.1649H102.213Z\" fill=\"white\"/>\n<path d=\"M127.035 11.5665H128.38C128.843 11.5665 129.218 11.9429 129.218 12.4066V25.6424C129.218 26.1062 128.843 26.4826 128.38 26.4826H127.077C126.635 26.4826 126.269 26.1371 126.241 25.6948L126.141 23.9947C125.155 25.8834 122.884 26.7828 121.062 26.7828C116.761 26.8123 113.505 24.0243 113.505 18.9885C113.505 13.9528 116.88 11.2844 121.123 11.2844C123.214 11.2844 125.215 12.2738 126.141 13.9528L126.2 12.3757C126.217 11.924 126.587 11.5678 127.037 11.5678L127.035 11.5665ZM116.58 18.9885C116.58 22.0468 118.732 23.9046 121.36 23.9046C127.723 23.9046 127.723 14.102 121.36 14.102C118.732 14.102 116.58 15.9612 116.58 18.9885Z\" fill=\"white\"/>\n<path d=\"M135.749 12.3183L135.878 13.6497C136.953 11.761 138.627 11.3712 140.21 11.3712C141.318 11.3712 142.391 11.675 143.207 12.1603C143.59 12.3875 143.726 12.8768 143.52 13.272L142.872 14.5182C142.657 14.9295 142.152 15.072 141.745 14.8542C141.215 14.5706 140.632 14.4294 139.851 14.4294C137.73 14.4294 135.878 15.7482 135.878 18.4771V25.6408C135.878 26.1046 135.503 26.481 135.041 26.481H133.638C133.176 26.481 132.801 26.1046 132.801 25.6408V12.4083C132.801 11.9446 133.176 11.5682 133.638 11.5682H134.917C135.345 11.5682 135.704 11.8921 135.749 12.3183Z\" fill=\"white\"/>\n<path d=\"M155.414 25.6408V17.8722C155.414 15.9243 153.843 14.3017 151.902 14.3407C149.765 14.3824 148.423 16.1945 148.423 18.3575V25.6408C148.423 26.1046 148.048 26.481 147.585 26.481H146.183C145.721 26.481 145.346 26.1046 145.346 25.6408V12.3913C145.346 11.9275 145.721 11.5511 146.183 11.5511H147.461C147.89 11.5511 148.249 11.8751 148.294 12.3026L148.424 13.6497C149.26 12.0312 150.993 11.4317 152.547 11.4317C154.429 11.4317 156.341 12.2113 157.178 14.3999C158.373 12.2113 160.226 11.4626 162.227 11.4626C166.29 11.4626 168.471 14.0409 168.471 18.2983V25.6422C168.471 26.106 168.095 26.4824 167.633 26.4824H166.201C165.739 26.4824 165.364 26.106 165.364 25.6422V17.7068C165.364 15.8934 163.923 14.3743 162.116 14.3716C159.931 14.3676 158.523 16.1676 158.523 18.3588V25.6422C158.523 26.106 158.148 26.4824 157.686 26.4824H156.254C155.792 26.4824 155.417 26.106 155.417 25.6422L155.414 25.6408Z\" fill=\"white\"/>\n<path d=\"M26.2092 0H5.67815C2.54219 0 0 2.55118 0 5.69821V26.3018C0 29.4488 2.54219 32 5.67815 32H26.2092C29.3452 32 31.8874 29.4488 31.8874 26.3018V5.69821C31.8874 2.55118 29.3452 0 26.2092 0Z\" fill=\"#FFB866\"/>\n<path d=\"M16.5936 10.0629H15.3017C14.8394 10.0629 14.4647 10.439 14.4647 10.9029L14.4671 16.6507C14.4671 17.1146 14.8419 17.4907 15.3041 17.4907H16.596C17.0583 17.4907 17.433 17.1146 17.433 16.6507L17.4306 10.9029C17.4306 10.439 17.0559 10.0629 16.5936 10.0629Z\" fill=\"#0C1521\"/>\n<path d=\"M23.3458 9.41099V20.1381C23.2333 21.904 21.8258 23.3151 20.0675 23.428H11.8275C9.99278 23.3098 8.5411 21.779 8.5411 19.9083V9.41099C8.5411 8.94733 8.91607 8.57104 9.37809 8.57104H10.671C11.133 8.57104 11.508 8.94733 11.508 9.41099V18.2738C11.508 19.4807 12.4816 20.4577 13.6842 20.4577H18.3225C19.5238 20.4577 20.3847 19.4807 20.3847 18.2738V9.41099C20.3847 8.94733 20.7597 8.57104 21.2217 8.57104H22.5088C22.9708 8.57104 23.3458 8.94733 23.3458 9.41099Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M10.5875 9.01618H9.41065C9.09842 9.01618 8.8453 9.2687 8.8453 9.58021V10.3708C8.8453 10.6823 9.09842 10.9348 9.41065 10.9348H10.5875C10.8997 10.9348 11.1529 10.6823 11.1529 10.3708V9.58021C11.1529 9.2687 10.8997 9.01618 10.5875 9.01618Z\" fill=\"white\"/>\n<path d=\"M15 8.4521V7.19679C14.9358 6.19687 14.2501 5.36661 13.3247 5.08505C13.2442 5.06068 13.161 5.03993 13.0769 5.02459V4.52824C13.0769 4.21689 12.8236 3.9642 12.5115 3.9642H11.5265C11.2144 3.9642 10.9611 4.21689 10.9611 4.52824V4.98758H9.03799V4.52824C9.03799 4.21689 8.78471 3.9642 8.47264 3.9642H7.48756C7.17549 3.9642 6.92221 4.21689 6.92221 4.52824V5.02639C6.83808 5.04173 6.75667 5.06249 6.67707 5.08685C5.70556 5.38376 5 6.28531 5 7.35111V12.6007C5 13.6665 5.70556 14.568 6.67707 14.8649C6.84984 14.9182 7.03166 14.9525 7.21981 14.9642H12.7856C12.972 14.9525 13.152 14.9191 13.3238 14.8658C14.2501 14.5852 14.9358 13.7549 15 12.755V11.4997C15 11.1883 14.7467 10.9357 14.4346 10.9357H13.6422C13.3302 10.9357 13.0769 11.1883 13.0769 11.4997V11.5791C13.0769 12.3886 12.4184 13.0456 11.607 13.0456H8.39303C7.58164 13.0456 6.92311 12.3886 6.92311 11.5791V8.37269C6.92311 7.56319 7.58164 6.9062 8.39303 6.9062H11.607C12.4184 6.9062 13.0769 7.56319 13.0769 8.37269V8.4521C13.0769 8.76345 13.3302 9.01613 13.6422 9.01613H14.4346C14.7467 9.01613 15 8.76345 15 8.4521Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M14.6709 13.1672H13.1387C12.7321 13.1672 12.4026 13.4968 12.4026 13.9033V14.935C12.4026 15.3415 12.7321 15.671 13.1387 15.671H14.6709C15.0774 15.671 15.4069 15.3415 15.4069 14.935V13.9033C15.4069 13.4968 15.0774 13.1672 14.6709 13.1672Z\" fill=\"white\"/>\n<path d=\"M20.4157 12.4311V10.7929C20.3321 9.48804 19.4394 8.40456 18.2346 8.03712C18.1298 8.00532 18.0215 7.97823 17.9119 7.95821V7.31048C17.9119 6.90417 17.5822 6.57442 17.1759 6.57442H15.8933C15.487 6.57442 15.1573 6.90417 15.1573 7.31048V7.90993H12.6535V7.31048C12.6535 6.90417 12.3237 6.57442 11.9174 6.57442H10.6349C10.2286 6.57442 9.89881 6.90417 9.89881 7.31048V7.96057C9.78928 7.98059 9.68329 8.00768 9.57965 8.03947C8.31479 8.42694 7.39618 9.60346 7.39618 10.9943V17.845C7.39618 19.2359 8.31479 20.4124 9.57965 20.7998C9.80459 20.8693 10.0413 20.9141 10.2863 20.9294H17.5327C17.7753 20.9141 18.0097 20.8705 18.2334 20.801C19.4394 20.4348 20.3321 19.3513 20.4157 18.0464V16.4082C20.4157 16.0019 20.086 15.6721 19.6797 15.6721H18.648C18.2417 15.6721 17.9119 16.0019 17.9119 16.4082V16.5118C17.9119 17.5682 17.0546 18.4256 15.9982 18.4256H11.8138C10.7574 18.4256 9.89999 17.5682 9.89999 16.5118V12.3275C9.89999 11.2711 10.7574 10.4137 11.8138 10.4137H15.9982C17.0546 10.4137 17.9119 11.2711 17.9119 12.3275V12.4311C17.9119 12.8374 18.2417 13.1672 18.648 13.1672H19.6797C20.086 13.1672 20.4157 12.8374 20.4157 12.4311Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55117 29.4488 0 26.3018 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M16.7667 15.0483H15.0156C14.551 15.0483 14.1744 15.4249 14.1744 15.8895V17.0685C14.1744 17.5331 14.551 17.9097 15.0156 17.9097H16.7667C17.2313 17.9097 17.6079 17.5331 17.6079 17.0685V15.8895C17.6079 15.4249 17.2313 15.0483 16.7667 15.0483Z\" fill=\"white\"/>\n<path d=\"M23.3323 14.207V12.3348C23.2367 10.8435 22.2165 9.6052 20.8396 9.18527C20.7198 9.14893 20.5959 9.11797 20.4708 9.09509V8.35482C20.4708 7.89047 20.0939 7.51361 19.6295 7.51361H18.1638C17.6994 7.51361 17.3226 7.89047 17.3226 8.35482V9.03991H14.4611V8.35482C14.4611 7.89047 14.0842 7.51361 13.6199 7.51361H12.1541C11.6898 7.51361 11.3129 7.89047 11.3129 8.35482V9.09778C11.1877 9.12066 11.0666 9.15162 10.9482 9.18796C9.5026 9.63078 8.45276 10.9754 8.45276 12.5649V20.3943C8.45276 21.9838 9.5026 23.3284 10.9482 23.7712C11.2052 23.8506 11.4758 23.9018 11.7557 23.9193H20.0374C20.3146 23.9018 20.5825 23.852 20.8382 23.7726C22.2165 23.354 23.2367 22.1157 23.3323 20.6244V18.7522C23.3323 18.2879 22.9554 17.911 22.491 17.911H21.312C20.8476 17.911 20.4708 18.2879 20.4708 18.7522V18.8707C20.4708 20.078 19.4909 21.0578 18.2836 21.0578H13.5014C12.2941 21.0578 11.3143 20.078 11.3143 18.8707V14.0885C11.3143 12.8812 12.2941 11.9014 13.5014 11.9014H18.2836C19.4909 11.9014 20.4708 12.8812 20.4708 14.0885V14.207C20.4708 14.6713 20.8476 15.0482 21.312 15.0482H22.491C22.9554 15.0482 23.3323 14.6713 23.3323 14.207Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12276V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12276C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M20.9583 18.8103H18.7695C18.1887 18.8103 17.7179 19.2811 17.7179 19.8618V21.3356C17.7179 21.9164 18.1887 22.3872 18.7695 22.3872H20.9583C21.539 22.3872 22.0098 21.9164 22.0098 21.3356V19.8618C22.0098 19.2811 21.539 18.8103 20.9583 18.8103Z\" fill=\"white\"/>\n<path d=\"M29.1653 17.7587V15.4185C29.0458 13.5543 27.7705 12.0065 26.0494 11.4816C25.8997 11.4362 25.7449 11.3975 25.5884 11.3689V10.4435C25.5884 9.8631 25.1173 9.39202 24.5369 9.39202H22.7047C22.1243 9.39202 21.6532 9.8631 21.6532 10.4435V11.2999H18.0763V10.4435C18.0763 9.8631 17.6052 9.39202 17.0248 9.39202H15.1926C14.6122 9.39202 14.1411 9.8631 14.1411 10.4435V11.3722C13.9846 11.4008 13.8332 11.4395 13.6852 11.485C11.8782 12.0385 10.5659 13.7192 10.5659 15.7062V25.4928C10.5659 27.4798 11.8782 29.1605 13.6852 29.714C14.0065 29.8133 14.3447 29.8772 14.6946 29.8991H25.0467C25.3933 29.8772 25.7281 29.815 26.0477 29.7157C27.7705 29.1925 29.0458 27.6447 29.1653 25.7805V23.4403C29.1653 22.8598 28.6942 22.3888 28.1138 22.3888H26.6399C26.0595 22.3888 25.5884 22.8598 25.5884 23.4403V23.5883C25.5884 25.0975 24.3636 26.3223 22.8545 26.3223H16.8767C15.3676 26.3223 14.1428 25.0975 14.1428 23.5883V17.6107C14.1428 16.1015 15.3676 14.8767 16.8767 14.8767H22.8545C24.3636 14.8767 25.5884 16.1015 25.5884 17.6107V17.7587C25.5884 18.3392 26.0595 18.8102 26.6399 18.8102H28.1138C28.6942 18.8102 29.1653 18.3392 29.1653 17.7587Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"80\" height=\"20\" viewBox=\"0 0 80 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M27.307 4.05466V16.1081C27.307 16.3981 27.0716 16.6335 26.7816 16.6335H25.9014C25.6114 16.6335 25.376 16.3981 25.376 16.1081V4.05466C25.376 3.76463 25.6114 3.52925 25.9014 3.52925H26.7816C27.0716 3.52925 27.307 3.76463 27.307 4.05466Z\" fill=\"#213856\"/>\n<path d=\"M31.1187 12.6518C31.2877 14.0583 32.4495 14.9763 34.1367 14.9763C34.9185 14.9763 35.8693 14.7283 36.4897 14.2768C36.6973 14.1255 36.9823 14.1432 37.1673 14.3222L37.6792 14.8191C37.9037 15.0368 37.8919 15.4033 37.6498 15.6C36.6864 16.3835 35.3296 16.7761 34.0989 16.7761C31.0615 16.7761 29.112 14.8451 29.112 11.8835C29.112 8.92181 31.0809 7.06562 33.9677 7.06562C36.8545 7.06562 38.7864 8.72173 38.651 12.1483C38.6401 12.4299 38.4072 12.6527 38.1256 12.6527H31.1179L31.1187 12.6518ZM36.7612 11.0209C36.6486 9.55903 35.5801 8.78982 34.024 8.78982C32.6176 8.78982 31.4558 9.55819 31.1557 11.0209H36.7612Z\" fill=\"#213856\"/>\n<path d=\"M46.4842 16.1081V11.2499C46.4842 10.0318 45.4981 9.01707 44.28 9.04145C42.9391 9.06751 42.0968 10.2007 42.0968 11.5534V16.1081C42.0968 16.3981 41.8614 16.6335 41.5714 16.6335H40.6912C40.4012 16.6335 40.1658 16.3981 40.1658 16.1081V7.82125C40.1658 7.53122 40.4012 7.29583 40.6912 7.29583H41.4932C41.7622 7.29583 41.9875 7.49843 42.0161 7.76576L42.0976 8.60935C42.6222 7.59719 43.71 7.22226 44.6852 7.22226C45.8663 7.22226 47.0659 7.70984 47.5914 9.07844C48.3412 7.70984 49.5039 7.24159 50.7598 7.24159C53.3095 7.24159 54.6781 8.85398 54.6781 11.5164V16.1089C54.6781 16.3989 54.4427 16.6343 54.1527 16.6343H53.2541C52.964 16.6343 52.7286 16.3989 52.7286 16.1089V11.1465C52.7286 10.0124 51.8241 9.06247 50.69 9.06079C49.3189 9.05826 48.4354 10.1839 48.4354 11.5542V16.1089C48.4354 16.3989 48.2 16.6343 47.91 16.6343H47.0113C46.7213 16.6343 46.4859 16.3989 46.4859 16.1089L46.4842 16.1081Z\" fill=\"#213856\"/>\n<path d=\"M64.2129 14.9546C64.4374 15.1757 64.4172 15.5439 64.1709 15.7406C63.2562 16.4729 62.2508 16.7915 61.1067 16.7915C58.4443 16.7915 56.2325 15.1227 56.2325 11.9358C56.2325 8.74884 58.4258 7.08012 61.1067 7.08012C62.2004 7.08012 63.1419 7.36931 64.0145 8.06706C64.2558 8.26042 64.281 8.61854 64.0675 8.84215L63.5429 9.39111C63.3647 9.57773 63.0755 9.608 62.8645 9.4592C62.3407 9.09099 61.7212 8.91782 61.126 8.91782C59.4573 8.91782 58.1635 10.0989 58.1635 11.9358C58.1635 13.8853 59.5136 14.9168 61.1067 14.9168C61.7556 14.9168 62.4164 14.7512 62.9645 14.3477C63.173 14.1938 63.4613 14.214 63.6455 14.3956L64.2129 14.9546Z\" fill=\"#213856\"/>\n<path d=\"M73.6661 7.29232H74.5102C74.8002 7.29232 75.0356 7.52771 75.0356 7.81773V16.1112C75.0356 16.4012 74.8002 16.6366 74.5102 16.6366H73.6922C73.4148 16.6366 73.1853 16.4205 73.1676 16.1439L73.1046 15.0143C72.4859 16.1954 71.0609 16.7578 69.9176 16.7578C67.2183 16.7763 65.1746 15.0327 65.1746 11.8836C65.1746 8.7345 67.2931 7.06578 69.9555 7.06578C71.2677 7.06578 72.5237 7.68451 73.1046 8.7345L73.1416 7.7984C73.1525 7.51594 73.3845 7.29316 73.667 7.29316L73.6661 7.29232ZM67.1048 11.8836C67.1048 13.7961 68.4549 14.9579 70.1043 14.9579C74.0974 14.9579 74.0974 8.82781 70.1043 8.82781C68.4549 8.82781 67.1048 9.99045 67.1048 11.8836Z\" fill=\"#213856\"/>\n<path d=\"M79.291 4.05466V16.1081C79.291 16.3981 79.0556 16.6335 78.7656 16.6335H77.8854C77.5954 16.6335 77.36 16.3981 77.36 16.1081V4.05466C77.36 3.76463 77.5954 3.52925 77.8854 3.52925H78.7656C79.0556 3.52925 79.291 3.76463 79.291 4.05466Z\" fill=\"#213856\"/>\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M10.465 9.14765H9.55574C9.29413 9.14765 9.08205 9.35962 9.08205 9.62111V10.5427C9.08205 10.8041 9.29413 11.0161 9.55574 11.0161H10.465C10.7266 11.0161 10.9387 10.8041 10.9387 10.5427V9.62111C10.9387 9.35962 10.7266 9.14765 10.465 9.14765Z\" fill=\"white\"/>\n<path d=\"M12.8129 8.68254V7.77316C12.8129 7.51179 12.6007 7.2997 12.3392 7.2997H8.64822C7.86375 7.2997 7.22715 7.93599 7.22715 8.72007L7.20913 11.4623C7.20913 12.2472 7.84573 12.8826 8.6302 12.8826H11.3567C12.142 12.8826 12.7778 12.3649 12.7778 11.5808V11.4639C12.7778 11.2025 12.99 10.9913 13.2514 10.9913H14.1578C14.4193 10.9913 14.6315 11.2025 14.6315 11.4639V12.4108C14.6315 13.4404 13.9581 14.3122 13.0266 14.6094C12.8052 14.6804 12.568 14.7188 12.3224 14.7188H7.65879C7.41317 14.7188 7.22287 14.6804 7.00064 14.6094C6.06997 14.3122 5.35049 13.4404 5.35049 12.4117L5.36851 7.77762C5.36851 6.74804 6.04218 5.77813 6.97369 5.48086C7.02966 5.46332 7.16611 5.44746 7.22375 5.4341L7.22427 5.04459C7.22427 4.7565 7.4582 4.5227 7.74642 4.5227H8.55958C8.8478 4.5227 9.08172 4.7565 9.08172 5.04459V5.43459H10.935V5.04459C10.935 4.7565 11.1689 4.5227 11.4571 4.5227H12.2747C12.5629 4.5227 12.7969 4.7565 12.7969 5.04459V5.42761C12.8545 5.44097 12.9878 5.45684 13.0438 5.47437C13.9753 5.77081 14.6495 6.7472 14.6495 7.77679V8.68254C14.6495 8.9439 14.4373 9.15599 14.1758 9.15599H13.2866C13.0251 9.15599 12.8129 8.9439 12.8129 8.68254Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"111\" height=\"28\" viewBox=\"0 0 111 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M38.2272 5.67653V22.5513C38.2272 22.9574 37.8977 23.2869 37.4917 23.2869H36.2596C35.8535 23.2869 35.524 22.9574 35.524 22.5513V5.67653C35.524 5.27049 35.8535 4.94095 36.2596 4.94095H37.4917C37.8977 4.94095 38.2272 5.27049 38.2272 5.67653Z\" fill=\"#213856\"/>\n<path d=\"M43.5633 17.7126C43.7998 19.6816 45.4262 20.9668 47.7882 20.9668C48.8826 20.9668 50.2136 20.6196 51.0821 19.9876C51.3728 19.7757 51.7718 19.8004 52.0307 20.0511L52.7474 20.7467C53.0616 21.0515 53.0451 21.5646 52.7062 21.84C51.3575 22.9369 49.4581 23.4866 47.7352 23.4866C43.4832 23.4866 40.7541 20.7832 40.7541 16.6368C40.7541 12.4905 43.5103 9.89187 47.5516 9.89187C51.5929 9.89187 54.2973 12.2104 54.1078 17.0076C54.0925 17.4019 53.7665 17.7137 53.3723 17.7137H43.5621L43.5633 17.7126ZM51.4623 15.4293C51.3046 13.3826 49.8088 12.3058 47.6305 12.3058C45.6616 12.3058 44.0352 13.3815 43.615 15.4293H51.4623Z\" fill=\"#213856\"/>\n<path d=\"M65.0735 22.5513V15.7498C65.0735 14.0445 63.6931 12.6239 61.9878 12.658C60.1108 12.6945 58.9316 14.281 58.9316 16.1747V22.5513C58.9316 22.9573 58.602 23.2869 58.196 23.2869H56.9639C56.5578 23.2869 56.2283 22.9573 56.2283 22.5513V10.9497C56.2283 10.5437 56.5578 10.2142 56.9639 10.2142H58.0866C58.4632 10.2142 58.7786 10.4978 58.8186 10.8721L58.9327 12.0531C59.6671 10.6361 61.1899 10.1112 62.5551 10.1112C64.2085 10.1112 65.8879 10.7938 66.6234 12.7098C67.6732 10.7938 69.3008 10.1382 71.059 10.1382C74.6283 10.1382 76.5443 12.3956 76.5443 16.1229V22.5525C76.5443 22.9585 76.2147 23.288 75.8087 23.288H74.5507C74.1447 23.288 73.8151 22.9585 73.8151 22.5525V15.6051C73.8151 14.0174 72.5489 12.6875 70.9613 12.6851C69.0419 12.6816 67.805 14.2575 67.805 16.1759V22.5525C67.805 22.9585 67.4755 23.288 67.0695 23.288H65.8114C65.4054 23.288 65.0759 22.9585 65.0759 22.5525L65.0735 22.5513Z\" fill=\"#213856\"/>\n<path d=\"M89.892 20.9365C90.2063 21.246 90.178 21.7615 89.8332 22.0369C88.5528 23.062 87.1453 23.5081 85.5436 23.5081C81.8165 23.5081 78.7202 21.1718 78.7202 16.7101C78.7202 12.2484 81.7906 9.91217 85.5436 9.91217C87.0747 9.91217 88.3927 10.317 89.6143 11.2939C89.9521 11.5646 89.9874 12.066 89.6884 12.379L88.9541 13.1475C88.7046 13.4088 88.2998 13.4512 88.0044 13.2429C87.2712 12.7274 86.4039 12.4849 85.5707 12.4849C83.2346 12.4849 81.4234 14.1385 81.4234 16.7101C81.4234 19.4394 83.3135 20.8835 85.5436 20.8835C86.4521 20.8835 87.3771 20.6516 88.1444 20.0867C88.4363 19.8713 88.8399 19.8996 89.0977 20.1538L89.892 20.9365Z\" fill=\"#213856\"/>\n<path d=\"M103.126 10.2092H104.307C104.713 10.2092 105.043 10.5388 105.043 10.9448V22.5556C105.043 22.9617 104.713 23.2912 104.307 23.2912H103.162C102.774 23.2912 102.453 22.9887 102.428 22.6015L102.34 21.02C101.473 22.6735 99.4786 23.4609 97.8781 23.4609C94.0993 23.4868 91.2383 21.0458 91.2383 16.6371C91.2383 12.2283 94.204 9.89209 97.9311 9.89209C99.7682 9.89209 101.526 10.7583 102.34 12.2283L102.391 10.9178C102.407 10.5223 102.731 10.2104 103.127 10.2104L103.126 10.2092ZM93.9404 16.6371C93.9404 19.3146 95.8304 20.9411 98.1394 20.9411C103.729 20.9411 103.729 12.3589 98.1394 12.3589C95.8304 12.3589 93.9404 13.9866 93.9404 16.6371Z\" fill=\"#213856\"/>\n<path d=\"M111 5.67653V22.5513C111 22.9574 110.67 23.2869 110.264 23.2869H109.032C108.626 23.2869 108.297 22.9574 108.297 22.5513V5.67653C108.297 5.27049 108.626 4.94095 109.032 4.94095H110.264C110.67 4.94095 111 5.27049 111 5.67653Z\" fill=\"#213856\"/>\n<path d=\"M23.0125 0H4.9856C2.23213 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23213 28 4.9856 28H23.0125C25.766 28 27.9981 25.7677 27.9981 23.0141V4.98593C27.9981 2.23228 25.766 0 23.0125 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M14.6501 12.8067H13.3771C13.0109 12.8067 12.714 13.1035 12.714 13.4696V14.7597C12.714 15.1258 13.0109 15.4226 13.3771 15.4226H14.6501C15.0163 15.4226 15.3132 15.1258 15.3132 14.7597V13.4696C15.3132 13.1035 15.0163 12.8067 14.6501 12.8067Z\" fill=\"white\"/>\n<path d=\"M17.9369 12.1556V10.8824C17.9369 10.5165 17.6398 10.2196 17.2738 10.2196H12.1067C11.0085 10.2196 10.1173 11.1104 10.1173 12.2081L10.0921 16.0472C10.0921 17.1461 10.9833 18.0357 12.0815 18.0357H15.8983C16.9976 18.0357 17.8877 17.3109 17.8877 16.2132V16.0495C17.8877 15.6836 18.1847 15.3878 18.5508 15.3878H19.8196C20.1857 15.3878 20.4827 15.6836 20.4827 16.0495V17.3752C20.4827 18.8166 19.5401 20.037 18.2361 20.4532C17.9261 20.5526 17.594 20.6064 17.2501 20.6064H10.7216C10.3777 20.6064 10.1113 20.5526 9.80025 20.4532C8.49739 20.037 7.49018 18.8166 7.49018 17.3763L7.51541 10.8887C7.51541 9.44726 8.45848 8.08938 9.76251 7.6732C9.84086 7.64865 10.0319 7.62644 10.1126 7.60774L10.1133 7.06242C10.1133 6.65911 10.4408 6.33178 10.8443 6.33178H11.9826C12.3861 6.33178 12.7136 6.65911 12.7136 7.06242V7.60843H15.308V7.06242C15.308 6.65911 15.6354 6.33178 16.0389 6.33178H17.1835C17.5869 6.33178 17.9144 6.65911 17.9144 7.06242V7.59866C17.9951 7.61736 18.1817 7.63957 18.2601 7.66412C19.5641 8.07913 20.5079 9.44609 20.5079 10.8875V12.1556C20.5079 12.5215 20.2109 12.8184 19.8448 12.8184H18.6C18.234 12.8184 17.9369 12.5215 17.9369 12.1556Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"127\" height=\"32\" viewBox=\"0 0 127 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M43.4336 6.48746V25.7729C43.4336 26.237 43.0592 26.6136 42.5979 26.6136H41.1979C40.7366 26.6136 40.3622 26.237 40.3622 25.7729V6.48746C40.3622 6.02341 40.7366 5.6468 41.1979 5.6468H42.5979C43.0592 5.6468 43.4336 6.02341 43.4336 6.48746Z\" fill=\"#213856\"/>\n<path d=\"M49.4964 20.2429C49.7651 22.4932 51.613 23.962 54.2967 23.962C55.5402 23.962 57.0525 23.5652 58.0393 22.8429C58.3696 22.6008 58.8228 22.6291 59.117 22.9156L59.9313 23.7105C60.2883 24.0589 60.2696 24.6453 59.8845 24.9601C58.3522 26.2137 56.194 26.8418 54.2365 26.8418C49.4054 26.8418 46.3046 23.7522 46.3046 19.0135C46.3046 14.2749 49.4362 11.305 54.0279 11.305C58.6196 11.305 61.6923 13.9548 61.477 19.4372C61.4597 19.8878 61.0893 20.2443 60.6413 20.2443H49.495L49.4964 20.2429ZM58.4712 17.6335C58.292 15.2944 56.5925 14.0637 54.1175 14.0637C51.8805 14.0637 50.0326 15.2931 49.5552 17.6335H58.4712Z\" fill=\"#213856\"/>\n<path d=\"M73.9362 25.7729V17.9998C73.9362 16.0508 72.3678 14.4273 70.4303 14.4663C68.2975 14.508 66.9577 16.3212 66.9577 18.4854V25.7729C66.9577 26.2369 66.5833 26.6136 66.122 26.6136H64.7221C64.2607 26.6136 63.8864 26.2369 63.8864 25.7729V12.514C63.8864 12.05 64.2607 11.6733 64.7221 11.6733H65.9977C66.4256 11.6733 66.7839 11.9975 66.8294 12.4252L66.9591 13.775C67.7934 12.1555 69.5237 11.5556 71.0748 11.5556C72.9534 11.5556 74.8615 12.3357 75.6972 14.5255C76.8899 12.3357 78.7392 11.5865 80.7368 11.5865C84.7924 11.5865 86.9692 14.1664 86.9692 18.4262V25.7742C86.9692 26.2383 86.5948 26.6149 86.1335 26.6149H84.7041C84.2428 26.6149 83.8684 26.2383 83.8684 25.7742V17.8344C83.8684 16.0199 82.4297 14.4999 80.6259 14.4973C78.445 14.4932 77.0397 16.2943 77.0397 18.4867V25.7742C77.0397 26.2383 76.6653 26.6149 76.204 26.6149H74.7746C74.3133 26.6149 73.9389 26.2383 73.9389 25.7742L73.9362 25.7729Z\" fill=\"#213856\"/>\n<path d=\"M102.135 23.9274C102.492 24.2811 102.46 24.8703 102.068 25.185C100.613 26.3566 99.014 26.8663 97.1942 26.8663C92.9595 26.8663 89.4415 24.1964 89.4415 19.0973C89.4415 13.9981 92.9301 11.3282 97.1942 11.3282C98.9338 11.3282 100.431 11.7909 101.819 12.9073C102.203 13.2167 102.243 13.7897 101.904 14.1474L101.069 15.0258C100.786 15.3244 100.326 15.3728 99.9901 15.1347C99.1571 14.5456 98.1716 14.2685 97.225 14.2685C94.5707 14.2685 92.5129 16.1583 92.5129 19.0973C92.5129 22.2165 94.6603 23.8669 97.1942 23.8669C98.2265 23.8669 99.2775 23.6019 100.149 22.9563C100.481 22.7101 100.939 22.7424 101.232 23.0329L102.135 23.9274Z\" fill=\"#213856\"/>\n<path d=\"M117.171 11.6677H118.513C118.975 11.6677 119.349 12.0443 119.349 12.5084V25.7779C119.349 26.2419 118.975 26.6185 118.513 26.6185H117.212C116.771 26.6185 116.406 26.2728 116.378 25.8303L116.278 24.0228C115.294 25.9126 113.027 26.8125 111.209 26.8125C106.915 26.842 103.665 24.0524 103.665 19.0138C103.665 13.9752 107.034 11.3052 111.269 11.3052C113.356 11.3052 115.354 12.2952 116.278 13.9752L116.337 12.4774C116.354 12.0255 116.723 11.6691 117.172 11.6691L117.171 11.6677ZM106.735 19.0138C106.735 22.0738 108.882 23.9327 111.505 23.9327C117.857 23.9327 117.857 14.1245 111.505 14.1245C108.882 14.1245 106.735 15.9847 106.735 19.0138Z\" fill=\"#213856\"/>\n<path d=\"M126.118 6.48746V25.7729C126.118 26.237 125.743 26.6136 125.282 26.6136H123.882C123.421 26.6136 123.046 26.237 123.046 25.7729V6.48746C123.046 6.02341 123.421 5.6468 123.882 5.6468H125.282C125.743 5.6468 126.118 6.02341 126.118 6.48746Z\" fill=\"#213856\"/>\n<path d=\"M26.1467 0H5.66461C2.53613 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.53613 32 5.66461 32H26.1467C29.2752 32 31.8113 29.4488 31.8113 26.3018V5.69821C31.8113 2.55117 29.2752 0 26.1467 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M16.6453 14.6362H15.199C14.7829 14.6362 14.4456 14.9754 14.4456 15.3938V16.8682C14.4456 17.2866 14.7829 17.6258 15.199 17.6258H16.6453C17.0615 17.6258 17.3988 17.2866 17.3988 16.8682V15.3938C17.3988 14.9754 17.0615 14.6362 16.6453 14.6362Z\" fill=\"white\"/>\n<path d=\"M20.3798 13.8921V12.4371C20.3798 12.0189 20.0423 11.6795 19.6264 11.6795H13.7556C12.5078 11.6795 11.4953 12.6976 11.4953 13.9521L11.4666 18.3396C11.4666 19.5955 12.4792 20.6122 13.7269 20.6122H18.0636C19.3126 20.6122 20.3239 19.7839 20.3239 18.5294V18.3423C20.3239 17.9241 20.6614 17.5861 21.0773 17.5861H22.5189C22.9348 17.5861 23.2724 17.9241 23.2724 18.3423V19.8573C23.2724 21.5047 22.2013 22.8995 20.7197 23.3751C20.3676 23.4887 19.9902 23.5501 19.5995 23.5501H12.1818C11.7911 23.5501 11.4885 23.4887 11.135 23.3751C9.65469 22.8995 8.51031 21.5047 8.51031 19.8587L8.53897 12.4442C8.53897 10.7969 9.61049 9.24501 11.0921 8.76937C11.1811 8.74132 11.3982 8.71593 11.4899 8.69456L11.4907 8.07134C11.4907 7.61041 11.8628 7.23632 12.3212 7.23632H13.6146C14.073 7.23632 14.4451 7.61041 14.4451 8.07134V8.69535H17.3929V8.07134C17.3929 7.61041 17.7649 7.23632 18.2234 7.23632H19.5238C19.9822 7.23632 20.3543 7.61041 20.3543 8.07134V8.68418C20.446 8.70556 20.658 8.73094 20.747 8.759C22.2287 9.23329 23.301 10.7955 23.301 12.4429V13.8921C23.301 14.3102 22.9635 14.6496 22.5476 14.6496H21.1332C20.7173 14.6496 20.3798 14.3102 20.3798 13.8921Z\" fill=\"white\"/>\n</svg>\n","<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M10.5875 9.01618H9.41065C9.09842 9.01618 8.8453 9.2687 8.8453 9.58021V10.3708C8.8453 10.6823 9.09842 10.9348 9.41065 10.9348H10.5875C10.8997 10.9348 11.1529 10.6823 11.1529 10.3708V9.58021C11.1529 9.2687 10.8997 9.01618 10.5875 9.01618Z\" fill=\"#0C1521\"/>\n<path d=\"M15 8.4521V7.19679C14.9358 6.19687 14.2501 5.36661 13.3247 5.08505C13.2442 5.06068 13.161 5.03993 13.0769 5.02459V4.52824C13.0769 4.21689 12.8236 3.9642 12.5115 3.9642H11.5265C11.2144 3.9642 10.9611 4.21689 10.9611 4.52824V4.98758H9.03799V4.52824C9.03799 4.21689 8.78471 3.9642 8.47264 3.9642H7.48756C7.17549 3.9642 6.92221 4.21689 6.92221 4.52824V5.02639C6.83808 5.04173 6.75667 5.06249 6.67707 5.08685C5.70556 5.38376 5 6.28531 5 7.35111V12.6007C5 13.6665 5.70556 14.568 6.67707 14.8649C6.84984 14.9182 7.03166 14.9525 7.21981 14.9642H12.7856C12.972 14.9525 13.152 14.9191 13.3238 14.8658C14.2501 14.5852 14.9358 13.7549 15 12.755V11.4997C15 11.1883 14.7467 10.9357 14.4346 10.9357H13.6422C13.3302 10.9357 13.0769 11.1883 13.0769 11.4997V11.5791C13.0769 12.3886 12.4184 13.0456 11.607 13.0456H8.39303C7.58164 13.0456 6.92311 12.3886 6.92311 11.5791V8.37269C6.92311 7.56319 7.58164 6.9062 8.39303 6.9062H11.607C12.4184 6.9062 13.0769 7.56319 13.0769 8.37269V8.4521C13.0769 8.76345 13.3302 9.01613 13.6422 9.01613H14.4346C14.7467 9.01613 15 8.76345 15 8.4521Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M23.0141 0H4.98593C2.23228 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23228 28 4.98593 28H23.0141C25.7677 28 28 25.7677 28 23.0141V4.98593C28 2.23228 25.7677 0 23.0141 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M14.6709 13.1672H13.1387C12.7321 13.1672 12.4026 13.4968 12.4026 13.9033V14.935C12.4026 15.3415 12.7321 15.671 13.1387 15.671H14.6709C15.0774 15.671 15.4069 15.3415 15.4069 14.935V13.9033C15.4069 13.4968 15.0774 13.1672 14.6709 13.1672Z\" fill=\"#0C1521\"/>\n<path d=\"M20.4157 12.4311V10.7929C20.3321 9.48804 19.4394 8.40456 18.2346 8.03712C18.1298 8.00532 18.0215 7.97823 17.9119 7.95821V7.31048C17.9119 6.90417 17.5822 6.57442 17.1759 6.57442H15.8933C15.487 6.57442 15.1573 6.90417 15.1573 7.31048V7.90993H12.6535V7.31048C12.6535 6.90417 12.3237 6.57442 11.9174 6.57442H10.6349C10.2286 6.57442 9.89881 6.90417 9.89881 7.31048V7.96057C9.78928 7.98059 9.68329 8.00768 9.57965 8.03947C8.31479 8.42694 7.39618 9.60346 7.39618 10.9943V17.845C7.39618 19.2359 8.31479 20.4124 9.57965 20.7998C9.80459 20.8693 10.0413 20.9141 10.2863 20.9294H17.5327C17.7753 20.9141 18.0097 20.8705 18.2334 20.801C19.4394 20.4348 20.3321 19.3513 20.4157 18.0464V16.4082C20.4157 16.0019 20.086 15.6721 19.6797 15.6721H18.648C18.2417 15.6721 17.9119 16.0019 17.9119 16.4082V16.5118C17.9119 17.5682 17.0546 18.4256 15.9982 18.4256H11.8138C10.7574 18.4256 9.89999 17.5682 9.89999 16.5118V12.3275C9.89999 11.2711 10.7574 10.4137 11.8138 10.4137H15.9982C17.0546 10.4137 17.9119 11.2711 17.9119 12.3275V12.4311C17.9119 12.8374 18.2417 13.1672 18.648 13.1672H19.6797C20.086 13.1672 20.4157 12.8374 20.4157 12.4311Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M26.3018 0H5.69821C2.55117 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.55117 32 5.69821 32H26.3018C29.4488 32 32 29.4488 32 26.3018V5.69821C32 2.55117 29.4488 0 26.3018 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M16.7667 15.0483H15.0156C14.551 15.0483 14.1744 15.4249 14.1744 15.8895V17.0685C14.1744 17.5331 14.551 17.9097 15.0156 17.9097H16.7667C17.2313 17.9097 17.6079 17.5331 17.6079 17.0685V15.8895C17.6079 15.4249 17.2313 15.0483 16.7667 15.0483Z\" fill=\"#0C1521\"/>\n<path d=\"M23.3323 14.207V12.3348C23.2367 10.8435 22.2165 9.6052 20.8396 9.18527C20.7198 9.14893 20.5959 9.11797 20.4708 9.09509V8.35482C20.4708 7.89047 20.0939 7.51361 19.6295 7.51361H18.1638C17.6994 7.51361 17.3226 7.89047 17.3226 8.35482V9.03991H14.4611V8.35482C14.4611 7.89047 14.0842 7.51361 13.6199 7.51361H12.1541C11.6898 7.51361 11.3129 7.89047 11.3129 8.35482V9.09778C11.1877 9.12066 11.0666 9.15162 10.9482 9.18796C9.5026 9.63078 8.45276 10.9754 8.45276 12.5649V20.3943C8.45276 21.9838 9.5026 23.3284 10.9482 23.7712C11.2052 23.8506 11.4758 23.9018 11.7557 23.9193H20.0374C20.3146 23.9018 20.5825 23.852 20.8382 23.7726C22.2165 23.354 23.2367 22.1157 23.3323 20.6244V18.7522C23.3323 18.2879 22.9554 17.911 22.491 17.911H21.312C20.8476 17.911 20.4708 18.2879 20.4708 18.7522V18.8707C20.4708 20.078 19.4909 21.0578 18.2836 21.0578H13.5014C12.2941 21.0578 11.3143 20.078 11.3143 18.8707V14.0885C11.3143 12.8812 12.2941 11.9014 13.5014 11.9014H18.2836C19.4909 11.9014 20.4708 12.8812 20.4708 14.0885V14.207C20.4708 14.6713 20.8476 15.0482 21.312 15.0482H22.491C22.9554 15.0482 23.3323 14.6713 23.3323 14.207Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M32.8772 0H7.12276C3.18897 0 0 3.18897 0 7.12276V32.8772C0 36.811 3.18897 40 7.12276 40H32.8772C36.811 40 40 36.811 40 32.8772V7.12276C40 3.18897 36.811 0 32.8772 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M20.9583 18.8103H18.7695C18.1887 18.8103 17.7179 19.2811 17.7179 19.8618V21.3356C17.7179 21.9164 18.1887 22.3872 18.7695 22.3872H20.9583C21.539 22.3872 22.0098 21.9164 22.0098 21.3356V19.8618C22.0098 19.2811 21.539 18.8103 20.9583 18.8103Z\" fill=\"#0C1521\"/>\n<path d=\"M29.1653 17.7587V15.4185C29.0458 13.5543 27.7705 12.0065 26.0494 11.4816C25.8997 11.4362 25.7449 11.3975 25.5884 11.3689V10.4435C25.5884 9.8631 25.1173 9.39202 24.5369 9.39202H22.7047C22.1243 9.39202 21.6532 9.8631 21.6532 10.4435V11.2999H18.0763V10.4435C18.0763 9.8631 17.6052 9.39202 17.0248 9.39202H15.1926C14.6122 9.39202 14.1411 9.8631 14.1411 10.4435V11.3722C13.9846 11.4008 13.8332 11.4395 13.6852 11.485C11.8782 12.0385 10.5659 13.7192 10.5659 15.7062V25.4928C10.5659 27.4798 11.8782 29.1605 13.6852 29.714C14.0065 29.8133 14.3447 29.8772 14.6946 29.8991H25.0467C25.3933 29.8772 25.7281 29.815 26.0477 29.7157C27.7705 29.1925 29.0458 27.6447 29.1653 25.7805V23.4403C29.1653 22.8598 28.6942 22.3888 28.1138 22.3888H26.6399C26.0595 22.3888 25.5884 22.8598 25.5884 23.4403V23.5883C25.5884 25.0975 24.3636 26.3223 22.8545 26.3223H16.8767C15.3676 26.3223 14.1428 25.0975 14.1428 23.5883V17.6107C14.1428 16.1015 15.3676 14.8767 16.8767 14.8767H22.8545C24.3636 14.8767 25.5884 16.1015 25.5884 17.6107V17.7587C25.5884 18.3392 26.0595 18.8102 26.6399 18.8102H28.1138C28.6942 18.8102 29.1653 18.3392 29.1653 17.7587Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"80\" height=\"20\" viewBox=\"0 0 80 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M27.307 4.05466V16.1081C27.307 16.3981 27.0716 16.6335 26.7816 16.6335H25.9014C25.6114 16.6335 25.376 16.3981 25.376 16.1081V4.05466C25.376 3.76463 25.6114 3.52925 25.9014 3.52925H26.7816C27.0716 3.52925 27.307 3.76463 27.307 4.05466Z\" fill=\"white\"/>\n<path d=\"M31.1187 12.6518C31.2877 14.0583 32.4495 14.9763 34.1367 14.9763C34.9185 14.9763 35.8693 14.7283 36.4897 14.2768C36.6973 14.1255 36.9823 14.1432 37.1673 14.3222L37.6792 14.8191C37.9037 15.0368 37.8919 15.4033 37.6498 15.6C36.6864 16.3835 35.3296 16.7761 34.0989 16.7761C31.0615 16.7761 29.112 14.8451 29.112 11.8835C29.112 8.92181 31.0809 7.06562 33.9677 7.06562C36.8545 7.06562 38.7864 8.72173 38.651 12.1483C38.6401 12.4299 38.4072 12.6527 38.1256 12.6527H31.1179L31.1187 12.6518ZM36.7612 11.0209C36.6486 9.55903 35.5801 8.78982 34.024 8.78982C32.6176 8.78982 31.4558 9.55819 31.1557 11.0209H36.7612Z\" fill=\"white\"/>\n<path d=\"M46.4842 16.1081V11.2499C46.4842 10.0318 45.4981 9.01707 44.28 9.04145C42.9391 9.06751 42.0968 10.2007 42.0968 11.5534V16.1081C42.0968 16.3981 41.8614 16.6335 41.5714 16.6335H40.6912C40.4012 16.6335 40.1658 16.3981 40.1658 16.1081V7.82125C40.1658 7.53122 40.4012 7.29583 40.6912 7.29583H41.4932C41.7622 7.29583 41.9875 7.49843 42.0161 7.76576L42.0976 8.60935C42.6222 7.59719 43.71 7.22226 44.6852 7.22226C45.8663 7.22226 47.0659 7.70984 47.5914 9.07844C48.3412 7.70984 49.5039 7.24159 50.7598 7.24159C53.3095 7.24159 54.6781 8.85398 54.6781 11.5164V16.1089C54.6781 16.3989 54.4427 16.6343 54.1527 16.6343H53.2541C52.964 16.6343 52.7286 16.3989 52.7286 16.1089V11.1465C52.7286 10.0124 51.8241 9.06247 50.69 9.06079C49.3189 9.05826 48.4354 10.1839 48.4354 11.5542V16.1089C48.4354 16.3989 48.2 16.6343 47.91 16.6343H47.0113C46.7213 16.6343 46.4859 16.3989 46.4859 16.1089L46.4842 16.1081Z\" fill=\"white\"/>\n<path d=\"M64.2129 14.9546C64.4374 15.1757 64.4172 15.5439 64.1709 15.7406C63.2562 16.4729 62.2508 16.7915 61.1067 16.7915C58.4443 16.7915 56.2325 15.1227 56.2325 11.9358C56.2325 8.74884 58.4258 7.08012 61.1067 7.08012C62.2004 7.08012 63.1419 7.36931 64.0145 8.06706C64.2558 8.26042 64.281 8.61854 64.0675 8.84215L63.5429 9.39111C63.3647 9.57773 63.0755 9.608 62.8645 9.4592C62.3407 9.09099 61.7212 8.91782 61.126 8.91782C59.4573 8.91782 58.1635 10.0989 58.1635 11.9358C58.1635 13.8853 59.5136 14.9168 61.1067 14.9168C61.7556 14.9168 62.4164 14.7512 62.9645 14.3477C63.173 14.1938 63.4613 14.214 63.6455 14.3956L64.2129 14.9546Z\" fill=\"white\"/>\n<path d=\"M73.6661 7.29232H74.5102C74.8002 7.29232 75.0356 7.52771 75.0356 7.81773V16.1112C75.0356 16.4012 74.8002 16.6366 74.5102 16.6366H73.6922C73.4148 16.6366 73.1853 16.4205 73.1676 16.1439L73.1046 15.0143C72.4859 16.1954 71.0609 16.7578 69.9176 16.7578C67.2183 16.7763 65.1746 15.0327 65.1746 11.8836C65.1746 8.7345 67.2931 7.06578 69.9555 7.06578C71.2677 7.06578 72.5237 7.68451 73.1046 8.7345L73.1416 7.7984C73.1525 7.51594 73.3845 7.29316 73.667 7.29316L73.6661 7.29232ZM67.1048 11.8836C67.1048 13.7961 68.4549 14.9579 70.1043 14.9579C74.0974 14.9579 74.0974 8.82781 70.1043 8.82781C68.4549 8.82781 67.1048 9.99045 67.1048 11.8836Z\" fill=\"white\"/>\n<path d=\"M79.291 4.05466V16.1081C79.291 16.3981 79.0556 16.6335 78.7656 16.6335H77.8854C77.5954 16.6335 77.36 16.3981 77.36 16.1081V4.05466C77.36 3.76463 77.5954 3.52925 77.8854 3.52925H78.7656C79.0556 3.52925 79.291 3.76463 79.291 4.05466Z\" fill=\"white\"/>\n<path d=\"M16.4386 0H3.56138C1.59448 0 0 1.59448 0 3.56138V16.4386C0 18.4055 1.59448 20 3.56138 20H16.4386C18.4055 20 20 18.4055 20 16.4386V3.56138C20 1.59448 18.4055 0 16.4386 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M10.465 9.14765H9.55574C9.29413 9.14765 9.08205 9.35962 9.08205 9.62111V10.5427C9.08205 10.8041 9.29413 11.0161 9.55574 11.0161H10.465C10.7266 11.0161 10.9387 10.8041 10.9387 10.5427V9.62111C10.9387 9.35962 10.7266 9.14765 10.465 9.14765Z\" fill=\"#0C1521\"/>\n<path d=\"M12.8129 8.68254V7.77316C12.8129 7.51179 12.6007 7.2997 12.3392 7.2997H8.64822C7.86375 7.2997 7.22715 7.93599 7.22715 8.72007L7.20913 11.4623C7.20913 12.2472 7.84573 12.8826 8.6302 12.8826H11.3567C12.142 12.8826 12.7778 12.3649 12.7778 11.5808V11.4639C12.7778 11.2025 12.99 10.9913 13.2514 10.9913H14.1578C14.4193 10.9913 14.6315 11.2025 14.6315 11.4639V12.4108C14.6315 13.4404 13.9581 14.3122 13.0266 14.6094C12.8052 14.6804 12.568 14.7188 12.3224 14.7188H7.65879C7.41317 14.7188 7.22287 14.6804 7.00064 14.6094C6.06997 14.3122 5.35049 13.4404 5.35049 12.4117L5.36851 7.77762C5.36851 6.74804 6.04218 5.77813 6.97369 5.48086C7.02966 5.46332 7.16611 5.44746 7.22375 5.4341L7.22427 5.04459C7.22427 4.7565 7.4582 4.5227 7.74642 4.5227H8.55958C8.8478 4.5227 9.08172 4.7565 9.08172 5.04459V5.43459H10.935V5.04459C10.935 4.7565 11.1689 4.5227 11.4571 4.5227H12.2747C12.5629 4.5227 12.7969 4.7565 12.7969 5.04459V5.42761C12.8545 5.44097 12.9878 5.45684 13.0438 5.47437C13.9753 5.77081 14.6495 6.7472 14.6495 7.77679V8.68254C14.6495 8.9439 14.4373 9.15599 14.1758 9.15599H13.2866C13.0251 9.15599 12.8129 8.9439 12.8129 8.68254Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"111\" height=\"28\" viewBox=\"0 0 111 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M38.2272 5.67653V22.5513C38.2272 22.9574 37.8977 23.2869 37.4917 23.2869H36.2596C35.8535 23.2869 35.524 22.9574 35.524 22.5513V5.67653C35.524 5.27049 35.8535 4.94095 36.2596 4.94095H37.4917C37.8977 4.94095 38.2272 5.27049 38.2272 5.67653Z\" fill=\"white\"/>\n<path d=\"M43.5633 17.7126C43.7998 19.6816 45.4262 20.9668 47.7882 20.9668C48.8826 20.9668 50.2136 20.6196 51.0821 19.9876C51.3728 19.7757 51.7718 19.8004 52.0307 20.0511L52.7474 20.7467C53.0616 21.0515 53.0451 21.5646 52.7062 21.84C51.3575 22.9369 49.4581 23.4866 47.7352 23.4866C43.4832 23.4866 40.7541 20.7832 40.7541 16.6368C40.7541 12.4905 43.5103 9.89187 47.5516 9.89187C51.5929 9.89187 54.2973 12.2104 54.1078 17.0076C54.0925 17.4019 53.7665 17.7137 53.3723 17.7137H43.5621L43.5633 17.7126ZM51.4623 15.4293C51.3046 13.3826 49.8088 12.3058 47.6305 12.3058C45.6616 12.3058 44.0352 13.3815 43.615 15.4293H51.4623Z\" fill=\"white\"/>\n<path d=\"M65.0735 22.5513V15.7498C65.0735 14.0445 63.6931 12.6239 61.9878 12.658C60.1108 12.6945 58.9316 14.281 58.9316 16.1747V22.5513C58.9316 22.9573 58.602 23.2869 58.196 23.2869H56.9639C56.5578 23.2869 56.2283 22.9573 56.2283 22.5513V10.9497C56.2283 10.5437 56.5578 10.2142 56.9639 10.2142H58.0866C58.4632 10.2142 58.7786 10.4978 58.8186 10.8721L58.9327 12.0531C59.6671 10.6361 61.1899 10.1112 62.5551 10.1112C64.2085 10.1112 65.8879 10.7938 66.6234 12.7098C67.6732 10.7938 69.3008 10.1382 71.059 10.1382C74.6284 10.1382 76.5443 12.3956 76.5443 16.1229V22.5525C76.5443 22.9585 76.2147 23.288 75.8087 23.288H74.5507C74.1447 23.288 73.8151 22.9585 73.8151 22.5525V15.6051C73.8151 14.0174 72.5489 12.6875 70.9613 12.6851C69.0419 12.6816 67.805 14.2575 67.805 16.1759V22.5525C67.805 22.9585 67.4755 23.288 67.0694 23.288H65.8114C65.4054 23.288 65.0759 22.9585 65.0759 22.5525L65.0735 22.5513Z\" fill=\"white\"/>\n<path d=\"M89.892 20.9365C90.2063 21.246 90.178 21.7615 89.8332 22.0369C88.5528 23.062 87.1453 23.5081 85.5436 23.5081C81.8165 23.5081 78.7202 21.1718 78.7202 16.7101C78.7202 12.2484 81.7906 9.91217 85.5436 9.91217C87.0747 9.91217 88.3927 10.317 89.6143 11.2939C89.9521 11.5646 89.9874 12.066 89.6884 12.379L88.9541 13.1475C88.7046 13.4088 88.2998 13.4512 88.0044 13.2429C87.2712 12.7274 86.4039 12.4849 85.5707 12.4849C83.2346 12.4849 81.4234 14.1385 81.4234 16.7101C81.4234 19.4394 83.3135 20.8835 85.5436 20.8835C86.4521 20.8835 87.3771 20.6516 88.1444 20.0867C88.4363 19.8713 88.8399 19.8996 89.0977 20.1538L89.892 20.9365Z\" fill=\"white\"/>\n<path d=\"M103.126 10.2092H104.307C104.713 10.2092 105.043 10.5388 105.043 10.9448V22.5556C105.043 22.9617 104.713 23.2912 104.307 23.2912H103.162C102.774 23.2912 102.453 22.9887 102.428 22.6015L102.34 21.02C101.473 22.6735 99.4786 23.4609 97.8781 23.4609C94.0993 23.4868 91.2383 21.0458 91.2383 16.6371C91.2383 12.2283 94.204 9.89209 97.9311 9.89209C99.7682 9.89209 101.526 10.7583 102.34 12.2283L102.391 10.9178C102.407 10.5223 102.731 10.2104 103.127 10.2104L103.126 10.2092ZM93.9404 16.6371C93.9404 19.3146 95.8304 20.9411 98.1394 20.9411C103.729 20.9411 103.729 12.3589 98.1394 12.3589C95.8304 12.3589 93.9404 13.9866 93.9404 16.6371Z\" fill=\"white\"/>\n<path d=\"M111 5.67653V22.5513C111 22.9574 110.67 23.2869 110.264 23.2869H109.032C108.626 23.2869 108.297 22.9574 108.297 22.5513V5.67653C108.297 5.27049 108.626 4.94095 109.032 4.94095H110.264C110.67 4.94095 111 5.27049 111 5.67653Z\" fill=\"white\"/>\n<path d=\"M23.0125 0H4.9856C2.23213 0 0 2.23228 0 4.98593V23.0141C0 25.7677 2.23213 28 4.9856 28H23.0125C25.766 28 27.9981 25.7677 27.9981 23.0141V4.98593C27.9981 2.23228 25.766 0 23.0125 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M14.6501 12.8067H13.3771C13.0109 12.8067 12.714 13.1035 12.714 13.4696V14.7597C12.714 15.1258 13.0109 15.4226 13.3771 15.4226H14.6501C15.0163 15.4226 15.3132 15.1258 15.3132 14.7597V13.4696C15.3132 13.1035 15.0163 12.8067 14.6501 12.8067Z\" fill=\"#0C1521\"/>\n<path d=\"M17.9369 12.1556V10.8824C17.9369 10.5165 17.6398 10.2196 17.2738 10.2196H12.1067C11.0085 10.2196 10.1173 11.1104 10.1173 12.2081L10.0921 16.0472C10.0921 17.1461 10.9833 18.0357 12.0815 18.0357H15.8983C16.9976 18.0357 17.8877 17.3109 17.8877 16.2132V16.0495C17.8877 15.6836 18.1847 15.3878 18.5508 15.3878H19.8196C20.1857 15.3878 20.4827 15.6836 20.4827 16.0495V17.3752C20.4827 18.8166 19.5401 20.037 18.2361 20.4532C17.9261 20.5526 17.594 20.6064 17.2501 20.6064H10.7216C10.3777 20.6064 10.1113 20.5526 9.80025 20.4532C8.49739 20.037 7.49018 18.8166 7.49018 17.3763L7.51541 10.8887C7.51541 9.44726 8.45848 8.08938 9.76251 7.6732C9.84086 7.64865 10.0319 7.62644 10.1126 7.60774L10.1133 7.06242C10.1133 6.65911 10.4408 6.33178 10.8443 6.33178H11.9826C12.3861 6.33178 12.7136 6.65911 12.7136 7.06242V7.60843H15.308V7.06242C15.308 6.65911 15.6354 6.33178 16.0389 6.33178H17.1835C17.5869 6.33178 17.9144 6.65911 17.9144 7.06242V7.59866C17.9951 7.61736 18.1817 7.63957 18.2601 7.66412C19.5641 8.07913 20.5079 9.44609 20.5079 10.8875V12.1556C20.5079 12.5215 20.2109 12.8184 19.8448 12.8184H18.6C18.234 12.8184 17.9369 12.5215 17.9369 12.1556Z\" fill=\"#0C1521\"/>\n</svg>\n","<svg width=\"127\" height=\"32\" viewBox=\"0 0 127 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M43.4336 6.48746V25.7729C43.4336 26.237 43.0592 26.6136 42.5979 26.6136H41.1979C40.7366 26.6136 40.3622 26.237 40.3622 25.7729V6.48746C40.3622 6.02341 40.7366 5.6468 41.1979 5.6468H42.5979C43.0592 5.6468 43.4336 6.02341 43.4336 6.48746Z\" fill=\"white\"/>\n<path d=\"M49.4964 20.2429C49.7651 22.4932 51.613 23.962 54.2967 23.962C55.5402 23.962 57.0525 23.5652 58.0393 22.8429C58.3696 22.6008 58.8228 22.6291 59.117 22.9156L59.9313 23.7105C60.2883 24.0589 60.2696 24.6453 59.8845 24.9601C58.3522 26.2137 56.194 26.8418 54.2365 26.8418C49.4054 26.8418 46.3046 23.7522 46.3046 19.0135C46.3046 14.2749 49.4362 11.305 54.0279 11.305C58.6196 11.305 61.6923 13.9548 61.477 19.4372C61.4597 19.8878 61.0893 20.2443 60.6413 20.2443H49.495L49.4964 20.2429ZM58.4712 17.6335C58.292 15.2944 56.5925 14.0637 54.1175 14.0637C51.8805 14.0637 50.0326 15.2931 49.5552 17.6335H58.4712Z\" fill=\"white\"/>\n<path d=\"M73.9362 25.7729V17.9998C73.9362 16.0508 72.3678 14.4273 70.4303 14.4663C68.2975 14.508 66.9577 16.3212 66.9577 18.4854V25.7729C66.9577 26.2369 66.5833 26.6136 66.122 26.6136H64.7221C64.2607 26.6136 63.8864 26.2369 63.8864 25.7729V12.514C63.8864 12.05 64.2607 11.6733 64.7221 11.6733H65.9977C66.4256 11.6733 66.7839 11.9975 66.8294 12.4252L66.9591 13.775C67.7934 12.1555 69.5237 11.5556 71.0748 11.5556C72.9534 11.5556 74.8615 12.3357 75.6972 14.5255C76.8899 12.3357 78.7392 11.5865 80.7369 11.5865C84.7924 11.5865 86.9692 14.1664 86.9692 18.4262V25.7742C86.9692 26.2383 86.5948 26.6149 86.1335 26.6149H84.7041C84.2428 26.6149 83.8684 26.2383 83.8684 25.7742V17.8344C83.8684 16.0199 82.4297 14.4999 80.6259 14.4973C78.445 14.4932 77.0397 16.2943 77.0397 18.4867V25.7742C77.0397 26.2383 76.6653 26.6149 76.204 26.6149H74.7746C74.3133 26.6149 73.9389 26.2383 73.9389 25.7742L73.9362 25.7729Z\" fill=\"white\"/>\n<path d=\"M102.135 23.9274C102.492 24.2811 102.46 24.8703 102.068 25.185C100.613 26.3566 99.014 26.8663 97.1942 26.8663C92.9595 26.8663 89.4415 24.1964 89.4415 19.0973C89.4415 13.9981 92.9301 11.3282 97.1942 11.3282C98.9338 11.3282 100.431 11.7909 101.819 12.9073C102.203 13.2167 102.243 13.7897 101.904 14.1474L101.069 15.0258C100.786 15.3244 100.326 15.3728 99.9901 15.1347C99.1571 14.5456 98.1716 14.2685 97.225 14.2685C94.5707 14.2685 92.5129 16.1583 92.5129 19.0973C92.5129 22.2165 94.6603 23.8669 97.1942 23.8669C98.2265 23.8669 99.2774 23.6019 100.149 22.9563C100.481 22.7101 100.939 22.7424 101.232 23.0329L102.135 23.9274Z\" fill=\"white\"/>\n<path d=\"M117.171 11.6677H118.513C118.975 11.6677 119.349 12.0443 119.349 12.5084V25.7779C119.349 26.2419 118.975 26.6185 118.513 26.6185H117.212C116.771 26.6185 116.406 26.2728 116.378 25.8303L116.278 24.0228C115.294 25.9126 113.027 26.8125 111.209 26.8125C106.915 26.842 103.665 24.0524 103.665 19.0138C103.665 13.9752 107.034 11.3052 111.269 11.3052C113.356 11.3052 115.354 12.2952 116.278 13.9752L116.337 12.4774C116.354 12.0255 116.723 11.6691 117.172 11.6691L117.171 11.6677ZM106.735 19.0138C106.735 22.0738 108.882 23.9327 111.505 23.9327C117.857 23.9327 117.857 14.1245 111.505 14.1245C108.882 14.1245 106.735 15.9847 106.735 19.0138Z\" fill=\"white\"/>\n<path d=\"M126.118 6.48746V25.7729C126.118 26.237 125.743 26.6136 125.282 26.6136H123.882C123.421 26.6136 123.046 26.237 123.046 25.7729V6.48746C123.046 6.02341 123.421 5.6468 123.882 5.6468H125.282C125.743 5.6468 126.118 6.02341 126.118 6.48746Z\" fill=\"white\"/>\n<path d=\"M26.1467 0H5.66461C2.53613 0 0 2.55117 0 5.69821V26.3018C0 29.4488 2.53613 32 5.66461 32H26.1467C29.2752 32 31.8113 29.4488 31.8113 26.3018V5.69821C31.8113 2.55117 29.2752 0 26.1467 0Z\" fill=\"#FF4D4D\"/>\n<path d=\"M16.6453 14.6362H15.199C14.7829 14.6362 14.4456 14.9754 14.4456 15.3938V16.8682C14.4456 17.2866 14.7829 17.6258 15.199 17.6258H16.6453C17.0615 17.6258 17.3988 17.2866 17.3988 16.8682V15.3938C17.3988 14.9754 17.0615 14.6362 16.6453 14.6362Z\" fill=\"#0C1521\"/>\n<path d=\"M20.3798 13.8921V12.4371C20.3798 12.0189 20.0423 11.6795 19.6264 11.6795H13.7556C12.5078 11.6795 11.4953 12.6976 11.4953 13.9521L11.4666 18.3396C11.4666 19.5955 12.4792 20.6122 13.7269 20.6122H18.0636C19.3126 20.6122 20.3239 19.7839 20.3239 18.5294V18.3423C20.3239 17.9241 20.6614 17.5861 21.0773 17.5861H22.5189C22.9348 17.5861 23.2724 17.9241 23.2724 18.3423V19.8573C23.2724 21.5047 22.2013 22.8995 20.7197 23.3751C20.3676 23.4887 19.9902 23.5501 19.5995 23.5501H12.1818C11.7911 23.5501 11.4885 23.4887 11.135 23.3751C9.65469 22.8995 8.51031 21.5047 8.51031 19.8587L8.53897 12.4442C8.53897 10.7969 9.61048 9.24501 11.0921 8.76938C11.1811 8.74132 11.3982 8.71593 11.4899 8.69456L11.4907 8.07134C11.4907 7.61041 11.8628 7.23632 12.3212 7.23632H13.6146C14.073 7.23632 14.4451 7.61041 14.4451 8.07134V8.69535H17.3929V8.07134C17.3929 7.61041 17.7649 7.23632 18.2234 7.23632H19.5238C19.9822 7.23632 20.3543 7.61041 20.3543 8.07134V8.68418C20.446 8.70556 20.658 8.73094 20.747 8.759C22.2287 9.23329 23.301 10.7955 23.301 12.4429V13.8921C23.301 14.3102 22.9635 14.6496 22.5476 14.6496H21.1332C20.7173 14.6496 20.3798 14.3102 20.3798 13.8921Z\" fill=\"#0C1521\"/>\n</svg>\n","import * as React from \"react\";\nimport {\n Icon,\n faSlidersOutline,\n faXmarkOutline,\n faCheckOutline,\n} from \"@l3mpire/icons\";\nimport {\n SidePanel,\n SidePanelTrigger,\n SidePanelClose,\n SidePanelContent,\n} from \"./side-panel\";\nimport { Button } from \"./button\";\nimport { TextInput } from \"./text-input\";\nimport { TextArea } from \"./textarea\";\nimport type { FieldType, FieldColumn } from \"../../lib/user-columns\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface CreateFieldColumnPanelProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n initial?: Partial<Pick<FieldColumn, \"name\" | \"fieldType\" | \"options\">>;\n onSave: (column: Omit<FieldColumn, \"id\" | \"createdAt\" | \"kind\">) => void;\n trigger?: React.ReactNode;\n title?: string;\n saveLabel?: string;\n}\n\nconst FIELD_TYPES: { value: FieldType; label: string }[] = [\n { value: \"text\", label: \"Text\" },\n { value: \"number\", label: \"Number\" },\n { value: \"date\", label: \"Date\" },\n { value: \"select\", label: \"Select\" },\n];\n\n/**\n * Side panel to create or edit a user-defined Field column (text, number,\n * date, or single select).\n */\nexport function CreateFieldColumnPanel({\n open,\n onOpenChange,\n initial,\n onSave,\n trigger,\n title = \"Create field column\",\n saveLabel = \"Create column\",\n}: CreateFieldColumnPanelProps) {\n const [name, setName] = React.useState(initial?.name ?? \"\");\n const [fieldType, setFieldType] = React.useState<FieldType>(\n initial?.fieldType ?? \"text\",\n );\n const [optionsText, setOptionsText] = React.useState(\n (initial?.options ?? []).join(\"\\n\"),\n );\n\n const options = React.useMemo(\n () =>\n fieldType === \"select\"\n ? optionsText\n .split(\"\\n\")\n .map((o) => o.trim())\n .filter(Boolean)\n : undefined,\n [fieldType, optionsText],\n );\n\n const canSave =\n name.trim().length > 0 &&\n (fieldType !== \"select\" || (options?.length ?? 0) > 0);\n\n const handleSave = () => {\n if (!canSave) return;\n onSave({ name: name.trim(), fieldType, options });\n onOpenChange?.(false);\n };\n\n return (\n <SidePanel open={open} onOpenChange={onOpenChange}>\n {trigger && <SidePanelTrigger asChild>{trigger}</SidePanelTrigger>}\n <SidePanelContent>\n {/* Header */}\n <div className=\"flex items-center justify-between gap-base px-xl py-lg border-b border-modal-header-border\">\n <div className=\"flex items-center gap-sm min-w-0\">\n <span\n className={cn(\n \"shrink-0 inline-flex items-center justify-center h-7 w-7 rounded-md\",\n \"bg-info-message-warning-bg text-info-message-warning-icon\",\n )}\n >\n <Icon icon={faSlidersOutline} size=\"sm\" />\n </span>\n <h2 className=\"truncate text-sm font-semibold text-modal-header-title\">\n {title}\n </h2>\n </div>\n <SidePanelClose asChild>\n <Button\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n iconOnly\n aria-label=\"Close\"\n >\n <Icon icon={faXmarkOutline} size=\"sm\" />\n </Button>\n </SidePanelClose>\n </div>\n\n {/* Body */}\n <div className=\"flex-1 overflow-y-auto px-xl py-lg flex flex-col gap-lg\">\n <Field label=\"Column name\">\n <TextInput\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g. Renewal date\"\n size=\"sm\"\n />\n </Field>\n\n <Field label=\"Type\">\n <select\n value={fieldType}\n onChange={(e) => setFieldType(e.target.value as FieldType)}\n className={cn(\n \"h-8 w-full rounded-base px-sm text-xs\",\n \"bg-select-bg-default text-select-text-default\",\n \"border border-select-border-default hover:border-select-border-hover\",\n \"cursor-pointer outline-none focus-visible:ring-2 focus-visible:ring-[var(--core-text-functional-info)]\",\n )}\n >\n {FIELD_TYPES.map((t) => (\n <option key={t.value} value={t.value}>\n {t.label}\n </option>\n ))}\n </select>\n </Field>\n\n {fieldType === \"select\" && (\n <Field\n label=\"Options\"\n hint={\n options\n ? `${options.length} option${options.length === 1 ? \"\" : \"s\"}`\n : undefined\n }\n >\n <TextArea\n value={optionsText}\n onChange={(e) => setOptionsText(e.target.value)}\n placeholder=\"One option per line\"\n rows={6}\n />\n </Field>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-end gap-sm px-xl py-base border-t border-modal-footer-border\">\n <SidePanelClose asChild>\n <Button appearance=\"ghost\" intent=\"brand\" size=\"sm\">\n Cancel\n </Button>\n </SidePanelClose>\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size=\"sm\"\n disabled={!canSave}\n onClick={handleSave}\n >\n <Icon icon={faCheckOutline} size=\"xs\" />\n {saveLabel}\n </Button>\n </div>\n </SidePanelContent>\n </SidePanel>\n );\n}\n\nfunction Field({\n label,\n hint,\n children,\n}: {\n label: string;\n hint?: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-xs\">\n <label className=\"text-xs font-medium text-input-label-text\">\n {label}\n </label>\n {children}\n {hint && (\n <span className=\"text-xxs text-[var(--core-text-main-tertiary)]\">\n {hint}\n </span>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport {\n Icon,\n faChartLineUpOutline,\n faXmarkOutline,\n faCheckOutline,\n faPlusOutline,\n faTrashOutline,\n} from \"@l3mpire/icons\";\nimport {\n SidePanel,\n SidePanelTrigger,\n SidePanelClose,\n SidePanelContent,\n} from \"./side-panel\";\nimport { Button } from \"./button\";\nimport { TextInput } from \"./text-input\";\nimport { NumberInput } from \"./number-input\";\nimport { ScoreBadge } from \"./score-badge\";\nimport {\n SCORE_OPERATORS_BY_TYPE,\n SCORE_OPERATOR_LABELS,\n computeScore,\n type FieldColumn,\n type FieldType,\n type ScoreColumn,\n type ScoreOperator,\n type ScoreRule,\n} from \"../../lib/user-columns\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Public model ─────────────────────────────────────────────────────────────\n\n/** Field descriptor used to populate the field picker in each rule. */\nexport interface ScorableField {\n id: string;\n name: string;\n fieldType: FieldType;\n /** For \"select\" type, the list of allowed values shown in the value picker. */\n options?: string[];\n}\n\nexport interface ScorePreviewRow {\n id: string;\n /** Optional leading visual (avatar, icon…). */\n visual?: React.ReactNode;\n name: string;\n /** Map of field id → value, used to evaluate the rules. */\n values: Record<string, unknown>;\n}\n\nexport interface CreateScoreColumnPanelProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n initial?: Partial<Pick<ScoreColumn, \"name\" | \"rules\">>;\n fields: ScorableField[];\n /** Optional preview rows (typically the first 5 rows of the table). */\n preview?: ScorePreviewRow[];\n onSave: (column: Pick<ScoreColumn, \"name\" | \"rules\">) => void;\n trigger?: React.ReactNode;\n title?: string;\n saveLabel?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nexport function CreateScoreColumnPanel({\n open,\n onOpenChange,\n initial,\n fields,\n preview,\n onSave,\n trigger,\n title = \"Score column\",\n saveLabel = \"Save\",\n}: CreateScoreColumnPanelProps) {\n const [name, setName] = React.useState(initial?.name ?? \"Score\");\n const [rules, setRules] = React.useState<ScoreRule[]>(initial?.rules ?? []);\n\n const fieldById = React.useMemo(() => {\n const m = new Map<string, ScorableField>();\n fields.forEach((f) => m.set(f.id, f));\n return m;\n }, [fields]);\n\n const addRule = () => {\n const first = fields[0];\n if (!first) return;\n const op = SCORE_OPERATORS_BY_TYPE[first.fieldType][0];\n setRules((prev) => [\n ...prev,\n {\n id: `rule-${Date.now()}-${prev.length}`,\n fieldId: first.id,\n operator: op,\n value: \"\",\n weight: 1,\n },\n ]);\n };\n\n const updateRule = (id: string, patch: Partial<ScoreRule>) => {\n setRules((prev) =>\n prev.map((r) => (r.id === id ? { ...r, ...patch } : r)),\n );\n };\n const removeRule = (id: string) =>\n setRules((prev) => prev.filter((r) => r.id !== id));\n\n const canSave = name.trim().length > 0 && rules.length > 0;\n\n const handleSave = () => {\n if (!canSave) return;\n onSave({ name: name.trim(), rules });\n onOpenChange?.(false);\n };\n\n return (\n <SidePanel open={open} onOpenChange={onOpenChange}>\n {trigger && <SidePanelTrigger asChild>{trigger}</SidePanelTrigger>}\n <SidePanelContent>\n {/* Header */}\n <div className=\"flex items-center justify-between gap-base px-xl py-lg border-b border-modal-header-border\">\n <div className=\"flex items-center gap-sm min-w-0 flex-1\">\n <span\n className={cn(\n \"shrink-0 inline-flex items-center justify-center h-7 w-7 rounded-md\",\n \"bg-info-message-success-bg text-info-message-success-icon\",\n )}\n >\n <Icon icon={faChartLineUpOutline} size=\"sm\" />\n </span>\n <TextInput\n size=\"sm\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={title}\n className=\"flex-1\"\n />\n </div>\n <SidePanelClose asChild>\n <Button\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n iconOnly\n aria-label=\"Close\"\n >\n <Icon icon={faXmarkOutline} size=\"sm\" />\n </Button>\n </SidePanelClose>\n </div>\n\n {/* Body */}\n <div className=\"flex-1 overflow-y-auto px-xl py-lg flex flex-col gap-lg\">\n {/* Rules */}\n <section className=\"flex flex-col gap-xs\">\n <span className=\"text-xs font-medium text-input-label-text\">\n Rules\n </span>\n <span className=\"text-xxs text-[var(--core-text-main-tertiary)]\">\n Sum the points of every rule that matches.\n </span>\n <div className=\"flex flex-col gap-xs mt-xs\">\n {rules.map((rule, idx) => (\n <ScoreRuleRow\n key={rule.id}\n rule={rule}\n fields={fields}\n fieldById={fieldById}\n prefix={idx === 0 ? \"If\" : \"+\"}\n onChange={(patch) => updateRule(rule.id, patch)}\n onRemove={() => removeRule(rule.id)}\n />\n ))}\n <Button\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n onClick={addRule}\n disabled={fields.length === 0}\n >\n <Icon icon={faPlusOutline} size=\"xs\" />\n Add rule\n </Button>\n </div>\n </section>\n\n {/* Preview */}\n {preview && preview.length > 0 && (\n <section className=\"flex flex-col gap-xs\">\n <span className=\"text-xs font-medium text-input-label-text\">\n Preview\n </span>\n <span className=\"text-xxs text-[var(--core-text-main-tertiary)]\">\n First {preview.length} rows\n </span>\n <div className=\"flex flex-col gap-xs mt-xs border border-dropdown-border rounded-base\">\n {preview.map((row) => {\n const { score, matched, total } = computeScore(row.values, {\n id: \"preview\",\n kind: \"score\",\n name,\n rules,\n createdAt: 0,\n });\n return (\n <div\n key={row.id}\n className=\"flex items-center gap-base px-base py-xs\"\n >\n {row.visual && (\n <span className=\"shrink-0\">{row.visual}</span>\n )}\n <span className=\"flex-1 truncate text-xs\">\n {row.name}\n </span>\n <ScoreBadge\n score={score}\n matched={matched}\n total={total}\n />\n </div>\n );\n })}\n </div>\n </section>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-end gap-sm px-xl py-base border-t border-modal-footer-border\">\n <SidePanelClose asChild>\n <Button appearance=\"ghost\" intent=\"brand\" size=\"sm\">\n Cancel\n </Button>\n </SidePanelClose>\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size=\"sm\"\n disabled={!canSave}\n onClick={handleSave}\n >\n <Icon icon={faCheckOutline} size=\"xs\" />\n {saveLabel}\n </Button>\n </div>\n </SidePanelContent>\n </SidePanel>\n );\n}\n\nCreateScoreColumnPanel.displayName = \"CreateScoreColumnPanel\";\n\n// ── Score rule row ──────────────────────────────────────────────────────────\n\ninterface ScoreRuleRowProps {\n rule: ScoreRule;\n fields: ScorableField[];\n fieldById: Map<string, ScorableField>;\n prefix: string;\n onChange: (patch: Partial<ScoreRule>) => void;\n onRemove: () => void;\n}\n\nfunction ScoreRuleRow({\n rule,\n fields,\n fieldById,\n prefix,\n onChange,\n onRemove,\n}: ScoreRuleRowProps) {\n const field = fieldById.get(rule.fieldId);\n const operators = field\n ? SCORE_OPERATORS_BY_TYPE[field.fieldType]\n : ([\"is\"] as ScoreOperator[]);\n\n const valueIsSelect = field?.fieldType === \"select\" && field.options;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-xs p-xs rounded-base border border-dropdown-border bg-dropdown-bg\",\n )}\n >\n <span className=\"shrink-0 text-xxs text-[var(--core-text-main-tertiary)] w-5\">\n {prefix}\n </span>\n <select\n value={rule.fieldId}\n onChange={(e) => {\n const f = fieldById.get(e.target.value);\n const nextOp = f\n ? SCORE_OPERATORS_BY_TYPE[f.fieldType][0]\n : rule.operator;\n onChange({ fieldId: e.target.value, operator: nextOp, value: \"\" });\n }}\n className={cn(\n \"h-7 rounded-base px-xs text-xxs\",\n \"bg-select-bg-default text-select-text-default border border-select-border-default\",\n \"cursor-pointer outline-none\",\n )}\n >\n {fields.map((f) => (\n <option key={f.id} value={f.id}>\n {f.name}\n </option>\n ))}\n </select>\n <select\n value={rule.operator}\n onChange={(e) =>\n onChange({ operator: e.target.value as ScoreOperator, value: \"\" })\n }\n className={cn(\n \"h-7 rounded-base px-xs text-xxs\",\n \"bg-select-bg-default text-select-text-default border border-select-border-default\",\n \"cursor-pointer outline-none\",\n )}\n >\n {operators.map((op) => (\n <option key={op} value={op}>\n {SCORE_OPERATOR_LABELS[op]}\n </option>\n ))}\n </select>\n {valueIsSelect ? (\n <select\n value={String(rule.value)}\n onChange={(e) => onChange({ value: e.target.value })}\n className={cn(\n \"h-7 flex-1 min-w-0 rounded-base px-xs text-xxs\",\n \"bg-select-bg-default text-select-text-default border border-select-border-default\",\n \"cursor-pointer outline-none\",\n )}\n >\n <option value=\"\" disabled>\n Pick…\n </option>\n {(field?.options ?? []).map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n ) : (\n <TextInput\n size=\"sm\"\n value={String(rule.value)}\n onChange={(e) =>\n onChange({\n value:\n field?.fieldType === \"number\"\n ? Number(e.target.value)\n : e.target.value,\n })\n }\n placeholder=\"Value\"\n className=\"flex-1 min-w-0\"\n />\n )}\n <NumberInput\n value={rule.weight}\n onChange={(n) => onChange({ weight: n })}\n size=\"sm\"\n className=\"w-16\"\n />\n <button\n type=\"button\"\n aria-label=\"Remove rule\"\n onClick={onRemove}\n className=\"shrink-0 inline-flex items-center justify-center h-6 w-6 rounded-base text-[var(--core-text-functional-critical)] hover:bg-info-message-alert-bg\"\n >\n <Icon icon={faTrashOutline} size=\"xs\" />\n </button>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faMinusOutline,\n faPlusOutline,\n faCircleExclamationOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\n\n// ── Stepper button styles ────────────────────────────────────────────────────\n\nconst stepperButtonVariants = cva(\n [\n \"shrink-0 flex items-center justify-center\",\n \"border border-text-input-border-default\",\n \"cursor-pointer transition-colors\",\n ],\n {\n variants: {\n size: {\n sm: \"p-sm\",\n md: \"p-[10px]\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nconst stepperButtonStates = {\n enabled: [\n \"bg-gradient-to-t from-text-input-button-bg from-[10%] to-text-input-button-gradient-to\",\n \"hover:from-text-input-button-bg-hover hover:from-[0%] hover:to-text-input-button-gradient-to\",\n \"active:from-text-input-button-bg-hover active:from-[0%] active:to-text-input-button-gradient-to\",\n ],\n disabled: [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"cursor-not-allowed\",\n ],\n};\n\n// ── Input styles ─────────────────────────────────────────────────────────────\n\nconst inputVariants = cva(\n [\n \"min-w-[48px] text-center border-y border-text-input-border-default\",\n \"bg-text-input-bg-default\",\n \"text-sm font-regular leading-sm\",\n \"text-text-input-text-default\",\n \"outline-none\",\n \"[appearance:textfield]\",\n \"[&::-webkit-outer-spin-button]:appearance-none\",\n \"[&::-webkit-inner-spin-button]:appearance-none\",\n ],\n {\n variants: {\n size: {\n sm: \"px-base py-sm\",\n md: \"px-lg py-[10px]\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// ── Wrapper styles (for focus ring) ──────────────────────────────────────────\n\nconst wrapperStates = {\n default: [\n \"focus-within:shadow-focus-ring\",\n \"focus-within:[&_button]:border-text-input-border-hover\",\n \"focus-within:[&_input]:border-text-input-border-hover\",\n ],\n error: [\n \"[&_button]:border-text-input-border-error\",\n \"[&_input]:border-text-input-border-error\",\n ],\n disabled: [],\n};\n\nconst errorGuidance = {\n icon: \"shrink-0 text-text-input-error-icon\",\n text: \"text-xs font-medium leading-xs text-text-input-error-text\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface NumberInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\" | \"onChange\">,\n VariantProps<typeof inputVariants> {\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n error?: boolean;\n errorMessage?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n className,\n size,\n value: controlledValue,\n defaultValue = 0,\n onChange,\n min,\n max,\n step = 1,\n label,\n labelType,\n error,\n errorMessage,\n disabled,\n id,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n const errorId = error && errorMessage ? `${inputId}-error` : undefined;\n\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const currentValue = isControlled ? controlledValue : internalValue;\n\n const resolvedSize = size ?? \"md\";\n const state = disabled ? \"disabled\" : error ? \"error\" : \"default\";\n\n const clamp = (val: number) => {\n let clamped = val;\n if (min != null) clamped = Math.max(min, clamped);\n if (max != null) clamped = Math.min(max, clamped);\n return clamped;\n };\n\n const setValue = (val: number) => {\n const clamped = clamp(val);\n if (!isControlled) setInternalValue(clamped);\n onChange?.(clamped);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const parsed = parseInt(e.target.value, 10);\n if (!isNaN(parsed)) {\n setValue(parsed);\n } else if (e.target.value === \"\" || e.target.value === \"-\") {\n // Allow typing negative sign or clearing\n if (!isControlled) setInternalValue(0);\n }\n };\n\n const handleBlur = () => {\n // Re-clamp on blur\n setValue(currentValue);\n };\n\n const decrement = () => {\n if (disabled) return;\n setValue(currentValue - step);\n };\n\n const increment = () => {\n if (disabled) return;\n setValue(currentValue + step);\n };\n\n const atMin = min != null && currentValue <= min;\n const atMax = max != null && currentValue >= max;\n\n // Auto-size the input: 48px base, grow only when content would overflow\n const valueStr = String(currentValue);\n const charCount = valueStr.length;\n // 48px fits ~3 chars comfortably; grow beyond that\n const inputWidth = charCount > 3 ? `${48 + (charCount - 3) * 9}px` : undefined;\n\n return (\n <div className={cn(\"flex flex-col gap-xs\", className)}>\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <div\n className={cn(\n \"inline-flex w-fit rounded-md shadow-sm\",\n wrapperStates[state],\n )}\n >\n <button\n type=\"button\"\n disabled={disabled || atMin}\n onClick={decrement}\n aria-label=\"Decrease\"\n className={cn(\n stepperButtonVariants({ size: resolvedSize }),\n \"rounded-l-md -mr-px\",\n stepperButtonStates[disabled || atMin ? \"disabled\" : \"enabled\"],\n )}\n >\n <Icon\n icon={faMinusOutline}\n size=\"sm\"\n className={cn(\n disabled || atMin\n ? \"text-text-input-text-disabled\"\n : \"text-text-input-text-default\",\n )}\n />\n </button>\n\n <input\n ref={ref}\n id={inputId}\n type=\"number\"\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n value={currentValue}\n onChange={handleInputChange}\n onBlur={handleBlur}\n min={min}\n max={max}\n step={step}\n style={inputWidth ? { width: inputWidth } : undefined}\n className={cn(\n inputVariants({ size: resolvedSize }),\n \"-mx-px\",\n disabled && [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"text-text-input-text-disabled\",\n \"cursor-not-allowed\",\n ],\n error && \"border-text-input-border-error\",\n )}\n {...props}\n />\n\n <button\n type=\"button\"\n disabled={disabled || atMax}\n onClick={increment}\n aria-label=\"Increase\"\n className={cn(\n stepperButtonVariants({ size: resolvedSize }),\n \"rounded-r-md -ml-px\",\n stepperButtonStates[disabled || atMax ? \"disabled\" : \"enabled\"],\n )}\n >\n <Icon\n icon={faPlusOutline}\n size=\"sm\"\n className={cn(\n disabled || atMax\n ? \"text-text-input-text-disabled\"\n : \"text-text-input-text-default\",\n )}\n />\n </button>\n </div>\n\n {error && errorMessage && (\n <div className=\"flex items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = \"NumberInput\";\n\nexport { NumberInput, type NumberInputProps };\n","// ── Field columns ────────────────────────────────────────────────────────────\n\nexport type FieldType = \"text\" | \"number\" | \"date\" | \"select\";\n\nexport interface FieldColumn {\n id: string;\n kind: \"field\";\n name: string;\n fieldType: FieldType;\n /** Required when fieldType === \"select\". */\n options?: string[];\n createdAt: number;\n}\n\n// ── Score columns ────────────────────────────────────────────────────────────\n\nexport type ScoreOperator =\n | \"is\"\n | \"is_not\"\n | \"contains\"\n | \"gte\"\n | \"lte\"\n | \"gt\"\n | \"lt\"\n | \"eq\";\n\nexport interface ScoreRule {\n id: string;\n /** ID of the field being tested. */\n fieldId: string;\n operator: ScoreOperator;\n value: string | number;\n /** Points (positive or negative). */\n weight: number;\n}\n\nexport interface ScoreColumn {\n id: string;\n kind: \"score\";\n name: string;\n rules: ScoreRule[];\n createdAt: number;\n}\n\n// ── DB / AI columns (referenced for the union) ───────────────────────────────\n\nexport interface DbColumn {\n id: string;\n kind: \"db\";\n name: string;\n}\n\nexport interface AIColumnRef {\n id: string;\n kind: \"ai\";\n name: string;\n}\n\n/** Union of every column kind that can appear in the column manager. */\nexport type BrowsableColumn = DbColumn | FieldColumn | ScoreColumn | AIColumnRef;\n\n// ── Operators per field type ─────────────────────────────────────────────────\n\nexport const SCORE_OPERATORS_BY_TYPE: Record<FieldType, ScoreOperator[]> = {\n text: [\"is\", \"contains\"],\n number: [\"gte\", \"lte\", \"gt\", \"lt\", \"eq\"],\n date: [\"gte\", \"lte\", \"eq\"],\n select: [\"is\", \"is_not\"],\n};\n\nexport const SCORE_OPERATOR_LABELS: Record<ScoreOperator, string> = {\n is: \"is\",\n is_not: \"is not\",\n contains: \"contains\",\n gte: \"≥\",\n lte: \"≤\",\n gt: \">\",\n lt: \"<\",\n eq: \"=\",\n};\n\n// ── Score computation ────────────────────────────────────────────────────────\n\nexport interface ScoreResult {\n score: number;\n matched: number;\n total: number;\n}\n\n/**\n * Compute the score for a row against the rules of a ScoreColumn.\n * Returns the sum of weights for every matching rule plus a matched/total\n * counter for display.\n */\nexport function computeScore(\n row: Record<string, unknown>,\n scoreColumn: ScoreColumn,\n): ScoreResult {\n let score = 0;\n let matched = 0;\n for (const rule of scoreColumn.rules) {\n if (matchRule(row[rule.fieldId], rule)) {\n score += rule.weight;\n matched += 1;\n }\n }\n return { score, matched, total: scoreColumn.rules.length };\n}\n\nfunction matchRule(value: unknown, rule: ScoreRule): boolean {\n switch (rule.operator) {\n case \"is\":\n return String(value) === String(rule.value);\n case \"is_not\":\n return String(value) !== String(rule.value);\n case \"contains\":\n return typeof value === \"string\"\n ? value.toLowerCase().includes(String(rule.value).toLowerCase())\n : false;\n case \"gte\":\n return toNumber(value) >= toNumber(rule.value);\n case \"lte\":\n return toNumber(value) <= toNumber(rule.value);\n case \"gt\":\n return toNumber(value) > toNumber(rule.value);\n case \"lt\":\n return toNumber(value) < toNumber(rule.value);\n case \"eq\":\n return toNumber(value) === toNumber(rule.value);\n }\n}\n\nfunction toNumber(v: unknown): number {\n if (typeof v === \"number\") return v;\n if (typeof v === \"string\") {\n const n = Number(v);\n return Number.isFinite(n) ? n : Number.NaN;\n }\n return Number.NaN;\n}\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Icon, faXmarkOutline, faPenOutline, faGripDotsVerticalSolid, faPlusSolid, faChevronDownSolid, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge } from \"./badge\";\nimport { Button } from \"./button\";\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\n\n// ── Drag context ────────────────────────────────────────────────────────────\n\ninterface BrowserTabContextValue {\n draggable: boolean;\n dragIndex: number | null;\n dropIndex: number | null;\n onItemDragStart: (index: number) => void;\n onItemDragOver: (e: React.DragEvent, index: number) => void;\n onItemDragEnd: () => void;\n onItemDrop: (index: number) => void;\n itemIndex: number;\n}\n\nconst BrowserTabContext = React.createContext<BrowserTabContextValue | null>(null);\n\n// ── BrowserTabItem ───────────────────────────────────────────────────────────\n\ninterface BrowserTabItemProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: IconDefinition;\n label: string;\n badge?: string;\n isActive?: boolean;\n /** Pinned tabs can't be closed and show a \"Pinned tab\" tooltip on hover. */\n pinned?: boolean;\n /** When true, an edit (pencil) button appears in the hover overlay, left of the close button. */\n isEditable?: boolean;\n /** Called when the edit button is clicked. */\n onEdit?: (e: React.MouseEvent) => void;\n onClose?: (e: React.MouseEvent) => void;\n /** Called with the new label after double-click rename. Omit to disable rename. */\n onRename?: (newLabel: string) => void;\n}\n\nconst BrowserTabItem = React.forwardRef<HTMLDivElement, BrowserTabItemProps>(\n ({ className, icon, label, badge, isActive = false, pinned = false, isEditable = false, onEdit, onClose, onRename, ...props }, ref) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const [isEditing, setIsEditing] = React.useState(false);\n const [editValue, setEditValue] = React.useState(label);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const ctx = React.useContext(BrowserTabContext);\n\n React.useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n const commitRename = () => {\n setIsEditing(false);\n const trimmed = editValue.trim();\n if (trimmed && trimmed !== label && onRename) {\n onRename(trimmed);\n } else {\n setEditValue(label);\n }\n };\n\n const cancelRename = () => {\n setIsEditing(false);\n setEditValue(label);\n };\n\n // Drag props injected via context\n const dragProps = ctx?.draggable\n ? {\n draggable: true,\n onDragStart: () => ctx.onItemDragStart(ctx.itemIndex),\n onDragOver: (e: React.DragEvent) => ctx.onItemDragOver(e, ctx.itemIndex),\n onDrop: () => ctx.onItemDrop(ctx.itemIndex),\n onDragEnd: () => ctx.onItemDragEnd(),\n }\n : {};\n\n const isDragged = ctx?.draggable && ctx.dragIndex === ctx.itemIndex;\n const isDropTarget = ctx?.draggable && ctx.dropIndex === ctx.itemIndex && ctx.dragIndex !== ctx.itemIndex;\n\n const showGrip = ctx?.draggable && isHovered;\n\n const tab = (\n <div\n ref={ref}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n \"relative shrink-0 p-xs rounded-tl-base rounded-tr-base cursor-pointer select-none transition-opacity\",\n \"border-solid border-browser-tab-item-border\",\n isActive\n ? \"bg-browser-tab-item-bg border-l border-r border-t mb-[-1px] z-10\"\n : \"border-0\",\n isDragged && \"opacity-40\",\n isDropTarget && \"ring-2 ring-inset ring-blue-400\",\n className,\n )}\n {...dragProps}\n {...props}\n >\n {/* Inner pill — owns hover bg/radius/shadow (inactive tabs only) */}\n <div\n className={cn(\n \"relative flex items-center gap-base px-xs py-2xs transition-[background-color,border-radius,box-shadow]\",\n isHovered && !isActive\n ? \"bg-browser-tab-item-hover-bg rounded-sm shadow-sm\"\n : \"bg-browser-tab-item-bg rounded-base\",\n )}\n >\n {/* Leading icon — swaps to grip-dots on hover when draggable */}\n {icon && (\n <div className=\"shrink-0\">\n <Icon\n icon={showGrip ? faGripDotsVerticalSolid : icon}\n size=\"xs\"\n className={cn(\n showGrip\n ? \"text-browser-tab-item-hover-icon cursor-grab\"\n : isActive\n ? \"text-browser-tab-item-active-icon\"\n : \"text-browser-tab-item-inactive-icon\",\n )}\n />\n </div>\n )}\n\n {/* Label — inline editable on double-click when onRename is provided */}\n {isEditing ? (\n <input\n ref={inputRef}\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onBlur={commitRename}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commitRename();\n if (e.key === \"Escape\") cancelRename();\n }}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"text-sm font-medium leading-sm bg-transparent outline-none p-0 m-0\",\n \"border-b border-browser-tab-item-border border-dashed border-t-0 border-l-0 border-r-0\",\n isActive\n ? \"text-browser-tab-item-active-text\"\n : \"text-browser-tab-item-inactive-text\",\n )}\n style={{ width: `${Math.max(editValue.length + 1, 2)}ch` }}\n />\n ) : (\n <span\n className={cn(\n \"text-sm font-medium leading-sm whitespace-nowrap\",\n isActive\n ? \"text-browser-tab-item-active-text\"\n : \"text-browser-tab-item-inactive-text\",\n )}\n onDoubleClick={(e) => {\n if (onRename) {\n e.stopPropagation();\n setEditValue(label);\n setIsEditing(true);\n }\n }}\n >\n {label}\n </span>\n )}\n\n {/* Badge */}\n {badge && (\n <Badge variant=\"light\" type=\"neutral\" size=\"sm\">\n {badge}\n </Badge>\n )}\n\n {/* Action overlay — hover-only, non-pinned tabs. Holds an optional\n edit button (left) and the close button (right), both absolutely\n positioned with a gradient fade so they never take layout space —\n the label slides under the gradient instead of being pushed. */}\n {!pinned && (isEditable || onClose) && (\n <div\n aria-hidden={!isHovered}\n className={cn(\n \"absolute right-0 top-0 bottom-0 flex items-center justify-end gap-2xs pl-2xl pr-2xs\",\n \"transition-opacity duration-150 bg-gradient-to-l from-[72%] to-transparent\",\n isActive\n ? \"from-browser-tab-item-bg rounded-r-base\"\n : \"from-browser-tab-item-hover-bg rounded-r-sm\",\n isHovered ? \"opacity-100\" : \"opacity-0 pointer-events-none\",\n )}\n >\n {isEditable && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onEdit?.(e);\n }}\n tabIndex={isHovered ? 0 : -1}\n className={cn(\n \"shrink-0 flex items-center justify-center cursor-pointer rounded-2xs p-2xs\",\n \"hover:bg-black/5 transition-colors\",\n isActive\n ? \"text-browser-tab-item-active-icon\"\n : \"text-browser-tab-item-inactive-icon\",\n )}\n aria-label={`Edit ${label}`}\n >\n <Icon icon={faPenOutline} size=\"xs\" />\n </button>\n )}\n {onClose && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClose(e);\n }}\n tabIndex={isHovered ? 0 : -1}\n className={cn(\n \"shrink-0 flex items-center justify-center cursor-pointer rounded-2xs p-2xs\",\n \"hover:bg-black/5 transition-colors\",\n isActive\n ? \"text-browser-tab-item-active-icon\"\n : \"text-browser-tab-item-inactive-icon\",\n )}\n aria-label={`Close ${label}`}\n >\n <Icon icon={faXmarkOutline} size=\"xs\" />\n </button>\n )}\n </div>\n )}\n </div>\n\n {/* Active-tab bottom frame:\n - Vertical masks hide the bottom 8px of border-l/-r (which otherwise extend past where the arc begins).\n Positioned at -1px because abs children anchor to the padding box (inside the border).\n - Concave corners draw the outward arc and mask the bar's border-b in their 8px width. */}\n {isActive && (\n <>\n <span aria-hidden className=\"pointer-events-none absolute bottom-0 left-[-1px] w-px h-[8px] bg-browser-tab-item-bg\" />\n <span aria-hidden className=\"pointer-events-none absolute bottom-0 right-[-1px] w-px h-[8px] bg-browser-tab-item-bg\" />\n <span aria-hidden className=\"pointer-events-none absolute bottom-0 left-[-8px] size-[8px]\">\n <span className=\"absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg\" />\n <span className=\"absolute inset-0 rounded-br-[8px] border-b border-r border-solid border-browser-tab-item-border\" />\n </span>\n <span aria-hidden className=\"pointer-events-none absolute bottom-0 right-[-8px] size-[8px]\">\n <span className=\"absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg\" />\n <span className=\"absolute inset-0 rounded-bl-[8px] border-b border-l border-solid border-browser-tab-item-border\" />\n </span>\n </>\n )}\n </div>\n );\n\n // Pinned tabs surface a \"Pinned tab\" tooltip on hover (and never show a\n // close button — handled above). Only mount the tooltip machinery when\n // actually pinned.\n if (pinned) {\n return (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>{tab}</TooltipTrigger>\n <TooltipContent side=\"bottom\" hasArrow={false}>\n Pinned tab\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return tab;\n },\n);\nBrowserTabItem.displayName = \"BrowserTabItem\";\n\n// ── Overflow detection hook ──────────────────────────────────────────────────\n\nfunction useOverflowDetection(\n containerRef: React.RefObject<HTMLDivElement | null>,\n childCount: number,\n) {\n const [visibleCount, setVisibleCount] = React.useState(childCount);\n\n React.useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const measure = () => {\n const children = Array.from(container.children) as HTMLElement[];\n if (children.length === 0) {\n setVisibleCount(childCount);\n return;\n }\n\n const containerRight = container.getBoundingClientRect().right;\n let count = 0;\n for (const child of children) {\n const childRight = child.getBoundingClientRect().right;\n if (childRight <= containerRight + 1) {\n count++;\n } else {\n break;\n }\n }\n setVisibleCount(Math.max(1, count));\n };\n\n const observer = new ResizeObserver(measure);\n observer.observe(container);\n measure();\n\n return () => observer.disconnect();\n }, [containerRef, childCount]);\n\n return visibleCount;\n}\n\n// ── BrowserTab (container) ───────────────────────────────────────────────────\n\ninterface BrowserTabProps extends React.HTMLAttributes<HTMLDivElement> {\n onAddTab?: () => void;\n /** Enable drag-to-reorder on tab items. */\n draggable?: boolean;\n /** Called when a tab is dragged to a new position. */\n onReorder?: (fromIndex: number, toIndex: number) => void;\n /** Called when a hidden tab is selected from the overflow menu. Swaps it with the last visible tab. */\n onOverflowSelect?: (hiddenIndex: number, lastVisibleIndex: number) => void;\n}\n\nconst BrowserTab = React.forwardRef<HTMLDivElement, BrowserTabProps>(\n ({ className, children, onAddTab, draggable = false, onReorder, onOverflowSelect, ...props }, ref) => {\n const [dragIndex, setDragIndex] = React.useState<number | null>(null);\n const [dropIndex, setDropIndex] = React.useState<number | null>(null);\n const tabsContainerRef = React.useRef<HTMLDivElement>(null);\n\n const childArray = React.Children.toArray(children).filter(React.isValidElement);\n const visibleCount = useOverflowDetection(tabsContainerRef, childArray.length);\n const hasOverflow = visibleCount < childArray.length;\n\n const ctxBase = {\n draggable,\n dragIndex,\n dropIndex,\n onItemDragStart: (index: number) => setDragIndex(index),\n onItemDragOver: (e: React.DragEvent, index: number) => {\n e.preventDefault();\n setDropIndex(index);\n },\n onItemDragEnd: () => {\n setDragIndex(null);\n setDropIndex(null);\n },\n onItemDrop: (toIdx: number) => {\n if (dragIndex !== null && dragIndex !== toIdx && onReorder) {\n onReorder(dragIndex, toIdx);\n }\n setDragIndex(null);\n setDropIndex(null);\n },\n };\n\n // Extract label/icon/badge from hidden children for the overflow menu\n const hiddenItems = childArray.slice(visibleCount).map((child, i) => {\n const childProps = (child as React.ReactElement<BrowserTabItemProps>).props;\n return {\n index: visibleCount + i,\n label: childProps.label,\n icon: childProps.icon,\n badge: childProps.badge,\n isActive: childProps.isActive,\n };\n });\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-end w-full h-[44px] border-b border-browser-tab-border pl-base pr-xl\",\n className,\n )}\n {...props}\n >\n {/* Tabs area — clip horizontally, allow vertical overflow for active tab overlap.\n pl-base reserves space for the first active tab's left concave corner (which sits at -8px). */}\n <div\n ref={tabsContainerRef}\n className=\"flex items-center flex-1 min-w-0 pl-base\"\n style={{ overflowX: \"clip\", overflowY: \"visible\" }}\n >\n {childArray.map((child, index) => (\n <BrowserTabContext.Provider key={index} value={{ ...ctxBase, itemIndex: index }}>\n {child}\n </BrowserTabContext.Provider>\n ))}\n {/* Add tab button (inline next to last tab when no overflow) */}\n {onAddTab && !hasOverflow && (\n <Button\n className=\"ml-base\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n iconOnly\n leftIcon={faPlusSolid}\n onClick={onAddTab}\n aria-label=\"Add tab\"\n />\n )}\n </div>\n\n {/* Overflow dropdown */}\n {hasOverflow && (\n <DropdownMenuPrimitive.Root>\n <DropdownMenuPrimitive.Trigger asChild>\n <Button\n className=\"mb-sm\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n iconOnly\n leftIcon={faChevronDownSolid}\n aria-label=\"Show more tabs\"\n />\n </DropdownMenuPrimitive.Trigger>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n sideOffset={4}\n align=\"end\"\n className={cn(\n \"z-50 flex flex-col gap-base overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg p-base shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n )}\n >\n {hiddenItems.map((item) => (\n <DropdownMenuPrimitive.Item\n key={item.index}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer hover:bg-dropdown-item-hover outline-none\",\n item.isActive && \"bg-dropdown-item-hover\",\n )}\n onSelect={() => {\n if (onOverflowSelect) {\n onOverflowSelect(item.index, visibleCount - 1);\n }\n }}\n >\n {item.icon && (\n <Icon\n icon={item.icon}\n size=\"xs\"\n className={cn(\n item.isActive\n ? \"text-browser-tab-item-active-icon\"\n : \"text-browser-tab-item-inactive-icon\",\n )}\n />\n )}\n <span\n className={cn(\n \"text-sm font-medium leading-sm whitespace-nowrap\",\n item.isActive\n ? \"text-browser-tab-item-active-text\"\n : \"text-browser-tab-item-inactive-text\",\n )}\n >\n {item.label}\n </span>\n {item.badge && (\n <Badge variant=\"light\" type=\"neutral\" size=\"sm\">\n {item.badge}\n </Badge>\n )}\n </DropdownMenuPrimitive.Item>\n ))}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </DropdownMenuPrimitive.Root>\n )}\n\n {/* Add tab button (after overflow chevron when overflowing).\n mb-sm lifts the button off the divider line so it centers with the tabs\n (bar is items-end). */}\n {onAddTab && hasOverflow && (\n <Button\n className=\"mb-sm\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n iconOnly\n leftIcon={faPlusSolid}\n onClick={onAddTab}\n aria-label=\"Add tab\"\n />\n )}\n </div>\n );\n },\n);\nBrowserTab.displayName = \"BrowserTab\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n BrowserTab,\n BrowserTabItem,\n type BrowserTabProps,\n type BrowserTabItemProps,\n};\n","import * as React from \"react\";\nimport {\n Icon,\n faXmarkOutline,\n faEllipsisOutline,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Button, type ButtonProps } from \"./button\";\nimport {\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n} from \"./dropdown-menu\";\nimport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n} from \"./tooltip\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface BulkActionItem {\n id: string;\n label: string;\n icon?: IconDefinition;\n appearance?: ButtonProps[\"appearance\"];\n intent?: ButtonProps[\"intent\"];\n disabled?: boolean;\n onClick?: () => void;\n}\n\nexport interface BulkActionProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Number of currently selected items. */\n count: number;\n /** Called when the user clicks the Clear button. */\n onClear?: () => void;\n /** Label shown next to the count. Defaults to \"selected\". */\n countLabel?: string;\n /**\n * Label for the right-side close button. Shown as a hover tooltip and used\n * as its `aria-label`. Defaults to \"Clear\".\n */\n clearLabel?: string;\n /** Action items rendered on the right side. Overflow collapses into a \"more\" menu. */\n actions: BulkActionItem[];\n /**\n * @deprecated Prefer `position`. `true` maps to `\"sticky\"`, `false` to `\"static\"`.\n * Kept for backward compatibility; ignored if `position` is set explicitly.\n */\n sticky?: boolean;\n /**\n * Where to anchor the bar.\n * - `\"sticky\"` (default) — sticks to the bottom of its scroll container.\n * - `\"static\"` — flows inline; position it manually.\n * - `\"floating-top\"` — pill centred above the parent (the parent must be\n * `position: relative`), slides in from the bottom. Use it to float the\n * bar just above a pagination footer.\n */\n position?: \"sticky\" | \"static\" | \"floating-top\";\n}\n\n// ── BulkAction ──────────────────────────────────────────────────────────────\n\nconst GAP_PX = 8; // gap-base\nconst MORE_BTN_FALLBACK = 36;\n\nconst BulkAction = React.forwardRef<HTMLDivElement, BulkActionProps>(\n (\n {\n count,\n onClear,\n countLabel = \"selected\",\n clearLabel = \"Clear\",\n actions,\n sticky = true,\n position,\n className,\n ...props\n },\n ref,\n ) => {\n // Resolve position with a backward-compatible default. New consumers should\n // pass `position` explicitly; old ones keep `sticky`.\n const resolvedPosition: \"sticky\" | \"static\" | \"floating-top\" =\n position ?? (sticky ? \"sticky\" : \"static\");\n const slotRef = React.useRef<HTMLDivElement>(null);\n const measureRef = React.useRef<HTMLDivElement>(null);\n const moreBtnMeasureRef = React.useRef<HTMLButtonElement>(null);\n const [visibleCount, setVisibleCount] = React.useState(actions.length);\n\n // Recompute how many actions fit in the available slot width.\n React.useLayoutEffect(() => {\n const slot = slotRef.current;\n const measure = measureRef.current;\n if (!slot || !measure) return;\n\n const recompute = () => {\n const itemEls = Array.from(measure.children) as HTMLElement[];\n if (itemEls.length === 0) {\n setVisibleCount(0);\n return;\n }\n const widths = itemEls.map((el) => el.offsetWidth);\n const totalWithGaps =\n widths.reduce((a, b) => a + b, 0) + GAP_PX * (widths.length - 1);\n const available = slot.clientWidth;\n\n if (totalWithGaps <= available) {\n setVisibleCount(widths.length);\n return;\n }\n\n const moreBtnWidth =\n moreBtnMeasureRef.current?.offsetWidth ?? MORE_BTN_FALLBACK;\n const reserved = available - moreBtnWidth - GAP_PX;\n let used = 0;\n let fit = 0;\n for (let i = 0; i < widths.length; i++) {\n const next = used + widths[i] + (i > 0 ? GAP_PX : 0);\n if (next <= reserved) {\n used = next;\n fit++;\n } else {\n break;\n }\n }\n setVisibleCount(fit);\n };\n\n recompute();\n const ro = new ResizeObserver(recompute);\n ro.observe(slot);\n ro.observe(measure);\n return () => ro.disconnect();\n }, [actions]);\n\n const visibleItems = actions.slice(0, visibleCount);\n const overflowItems = actions.slice(visibleCount);\n\n return (\n <div\n ref={ref}\n role=\"toolbar\"\n aria-label=\"Bulk actions\"\n className={cn(\n \"flex items-center gap-xl px-lg py-base min-w-0\",\n \"bg-bulk-action-bg border border-bulk-action-border\",\n \"shadow-[0px_0px_6px_0px_rgba(0,0,0,0.02),0px_2px_4px_0px_rgba(0,0,0,0.08)]\",\n // Sticky / static keep the original top-only rounded look anchored\n // to the bottom; floating-top is a centred pill above the parent.\n resolvedPosition === \"sticky\" &&\n \"w-full rounded-tl-lg rounded-tr-lg border-b-0 sticky bottom-0 z-10\",\n resolvedPosition === \"static\" &&\n \"w-full rounded-tl-lg rounded-tr-lg border-b-0\",\n resolvedPosition === \"floating-top\" &&\n \"absolute left-1/2 -translate-x-1/2 bottom-full mb-base w-max max-w-[92vw] z-20 rounded-lg shadow-elevation-lg animate-in slide-in-from-bottom-4 fade-in duration-200\",\n className,\n )}\n {...props}\n >\n {/* ── Selection count (left) ──────────────────────────────── */}\n <span className=\"text-sm font-regular leading-sm text-bulk-action-count whitespace-nowrap shrink-0\">\n {count} {countLabel}\n </span>\n\n {/* ── Actions slot (responsive, middle) ───────────────────── */}\n <div\n ref={slotRef}\n className=\"relative flex flex-1 items-center gap-base min-w-0 overflow-hidden\"\n >\n {/* Visible buttons */}\n {visibleItems.map((item) => (\n <ActionButton key={item.id} item={item} />\n ))}\n\n {/* More menu */}\n {overflowItems.length > 0 && (\n <DropdownMenuRoot>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n appearance=\"outlined\"\n intent=\"brand\"\n size=\"md\"\n iconOnly\n leftIcon={faEllipsisOutline}\n aria-label=\"More actions\"\n />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" side=\"top\" sideOffset={8}>\n {overflowItems.map((item) => (\n <DropdownMenuItem\n key={item.id}\n icon={item.icon}\n label={item.label}\n onClick={() => !item.disabled && item.onClick?.()}\n />\n ))}\n </DropdownMenuContent>\n </DropdownMenuRoot>\n )}\n\n {/* Hidden measurement layer — full natural widths for every item */}\n <div\n ref={measureRef}\n aria-hidden\n className=\"pointer-events-none absolute inset-0 flex items-center gap-base opacity-0 invisible\"\n >\n {actions.map((item) => (\n <ActionButton key={`measure-${item.id}`} item={item} tabIndex={-1} />\n ))}\n </div>\n {/* Hidden reference for the \"more\" button width */}\n <button\n ref={moreBtnMeasureRef}\n aria-hidden\n tabIndex={-1}\n className=\"pointer-events-none absolute opacity-0 invisible h-8 w-8 min-w-8\"\n >\n <Icon icon={faEllipsisOutline} size=\"sm\" />\n </button>\n </div>\n\n {/* ── Clear button (right) — clearLabel shows as a hover tooltip ─ */}\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"md\"\n iconOnly\n leftIcon={faXmarkOutline}\n onClick={onClear}\n aria-label={clearLabel}\n className=\"shrink-0\"\n />\n </TooltipTrigger>\n <TooltipContent side=\"top\" hasArrow={false}>\n {clearLabel}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n );\n },\n);\nBulkAction.displayName = \"BulkAction\";\n\n// ── ActionButton (internal) ─────────────────────────────────────────────────\n\ninterface ActionButtonProps {\n item: BulkActionItem;\n tabIndex?: number;\n}\n\nconst ActionButton: React.FC<ActionButtonProps> = ({ item, tabIndex }) => (\n <Button\n type=\"button\"\n appearance={item.appearance ?? \"outlined\"}\n intent={item.intent ?? \"brand\"}\n size=\"md\"\n leftIcon={item.icon}\n disabled={item.disabled}\n onClick={item.onClick}\n tabIndex={tabIndex}\n className=\"shrink-0\"\n >\n {item.label}\n </Button>\n);\n\nexport { BulkAction };\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Shared text styles ──────────────────────────────────────────────────────\n\nconst textSm =\n \"text-sm font-regular leading-sm\";\n\nconst textXs =\n \"text-xs font-regular leading-xs\";\n\nconst textXsMedium =\n \"text-xs font-medium leading-xs\";\n\nconst textSmMedium =\n \"text-sm font-medium leading-sm\";\n\n// ── Container styles ────────────────────────────────────────────────────────\n\nconst containerStyle = [\n \"flex flex-col gap-base overflow-clip\",\n \"bg-dropdown-bg\",\n \"border border-dropdown-border\",\n \"rounded-lg\",\n \"p-xs\",\n \"shadow-lg\",\n];\n\n// ── DropdownMenu (static container) ─────────────────────────────────────────\n\ninterface DropdownMenuProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(containerStyle, className)} {...props}>\n {children}\n </div>\n ),\n);\nDropdownMenu.displayName = \"DropdownMenu\";\n\n// ── Radix-powered interactive dropdown ──────────────────────────────────────\n\nconst DropdownMenuRoot = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, children, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n containerStyle,\n \"z-50\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\n// ── DropdownMenuList ─────────────────────────────────────────────────────────\n\ninterface DropdownMenuListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenuList = React.forwardRef<HTMLDivElement, DropdownMenuListProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col\", className)} role=\"listbox\" {...props}>\n {children}\n </div>\n ),\n);\nDropdownMenuList.displayName = \"DropdownMenuList\";\n\n// ── DropdownMenuItem ─────────────────────────────────────────────────────────\n\nconst itemStyle =\n \"flex items-center gap-base p-base rounded-base cursor-pointer hover:bg-dropdown-item-hover\";\n\ninterface DropdownMenuItemProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: IconDefinition;\n avatar?: React.ReactNode;\n flag?: React.ReactNode;\n label: string;\n description?: string;\n badge?: React.ReactNode;\n action?: React.ReactNode;\n isActive?: boolean;\n}\n\nconst DropdownMenuItem = React.forwardRef<HTMLDivElement, DropdownMenuItemProps>(\n (\n {\n className,\n icon,\n avatar,\n flag,\n label,\n description,\n badge,\n action,\n isActive,\n children,\n onClick,\n ...props\n },\n ref,\n ) => {\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // If the click didn't originate from the checkbox itself, toggle it\n const target = e.target as HTMLElement;\n if (!target.closest(\"button[role='checkbox']\")) {\n const checkbox = e.currentTarget.querySelector<HTMLButtonElement>(\n \"button[role='checkbox']\",\n );\n checkbox?.click();\n }\n onClick?.(e);\n },\n [onClick],\n );\n\n return (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={isActive}\n className={cn(\n itemStyle,\n isActive && \"bg-dropdown-item-hover\",\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n {children}\n {avatar}\n {flag}\n {icon && (\n <Icon\n icon={icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n )}\n <div className=\"flex flex-1 items-center gap-sm min-w-0\">\n <span className={cn(\"truncate shrink-0\", textSm, \"text-dropdown-item-text\")}>\n {label}\n </span>\n {description && (\n <span className={cn(\"truncate\", textXs, \"text-dropdown-item-secondary\")}>\n {description}\n </span>\n )}\n </div>\n {badge}\n {action}\n </div>\n );\n },\n);\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\n// ── Radix-powered DropdownMenuItem ───────────────────────────────────────────\n\ninterface DropdownMenuRadixItemProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> {\n icon?: IconDefinition;\n avatar?: React.ReactNode;\n flag?: React.ReactNode;\n label: string;\n description?: string;\n badge?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nconst DropdownMenuRadixItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n DropdownMenuRadixItemProps\n>(\n (\n {\n className,\n icon,\n avatar,\n flag,\n label,\n description,\n badge,\n action,\n children,\n ...props\n },\n ref,\n ) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n itemStyle,\n \"outline-none focus:bg-dropdown-item-hover\",\n className,\n )}\n {...props}\n >\n {children}\n {avatar}\n {flag}\n {icon && (\n <Icon\n icon={icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n )}\n <div className=\"flex flex-1 items-center gap-sm min-w-0\">\n <span className={cn(\"truncate shrink-0\", textSm, \"text-dropdown-item-text\")}>\n {label}\n </span>\n {description && (\n <span className={cn(\"truncate\", textXs, \"text-dropdown-item-secondary\")}>\n {description}\n </span>\n )}\n </div>\n {badge}\n {action}\n </DropdownMenuPrimitive.Item>\n ),\n);\nDropdownMenuRadixItem.displayName = \"DropdownMenuRadixItem\";\n\n// ── DropdownMenuHeading ──────────────────────────────────────────────────────\n\ninterface DropdownMenuHeadingProps extends React.HTMLAttributes<HTMLDivElement> {\n action?: React.ReactNode;\n}\n\nconst DropdownMenuHeading = React.forwardRef<\n HTMLDivElement,\n DropdownMenuHeadingProps\n>(({ className, action, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-base p-base rounded-base\",\n className,\n )}\n {...props}\n >\n <span className={cn(\"flex-1 truncate uppercase\", textXsMedium, \"text-dropdown-heading-text\")}>\n {children}\n </span>\n {action}\n </div>\n));\nDropdownMenuHeading.displayName = \"DropdownMenuHeading\";\n\n// ── DropdownMenuClear ────────────────────────────────────────────────────────\n\nconst clearStyle = [\n \"sticky bottom-0 -mx-base -mb-base\",\n \"flex items-center justify-center\",\n \"h-10 min-w-[80px] px-lg py-[10px]\",\n \"bg-gradient-to-t from-dropdown-bg from-[10%] to-dropdown-bg\",\n \"border border-dropdown-border\",\n \"shadow-sm\",\n \"cursor-pointer\",\n];\n\ninterface DropdownMenuClearProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nconst DropdownMenuClear = React.forwardRef<\n HTMLButtonElement,\n DropdownMenuClearProps\n>(({ className, children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(clearStyle, textSmMedium, \"text-dropdown-clear-text\", className)}\n {...props}\n >\n {children}\n </button>\n));\nDropdownMenuClear.displayName = \"DropdownMenuClear\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n // Static (presentational) components — backward compatible\n DropdownMenu,\n DropdownMenuList,\n DropdownMenuItem,\n DropdownMenuHeading,\n DropdownMenuClear,\n // Radix-powered interactive components\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuRadixItem,\n // Types\n type DropdownMenuProps,\n type DropdownMenuListProps,\n type DropdownMenuItemProps,\n type DropdownMenuHeadingProps,\n type DropdownMenuClearProps,\n type DropdownMenuRadixItemProps,\n};\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TruncatedTextProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\"> {\n /** Full text content. Used both for display and as the tooltip body. */\n children: string;\n /**\n * Optional explicit tooltip body. Defaults to `children`. Useful when the\n * displayed string is formatted but the tooltip should show a different form.\n */\n tooltip?: React.ReactNode;\n /** Hover delay before the tooltip opens (ms). */\n delayDuration?: number;\n /** Forwarded to the inner `<span>`. */\n className?: string;\n}\n\n// ── TruncatedText ───────────────────────────────────────────────────────────\n//\n// Renders a `<span>` with `truncate` semantics and conditionally wraps it in\n// a tooltip when the text is actually clipped (`scrollWidth > clientWidth`).\n//\n// The span is `inline-block` (not raw `inline`) so that `max-width` and the\n// `scrollWidth`/`clientWidth` measurements work in any parent — without this,\n// an inline `<span>` reports `clientWidth: 0` and the tooltip never mounts.\n\nconst TruncatedText = React.forwardRef<HTMLSpanElement, TruncatedTextProps>(\n ({ children, tooltip, delayDuration = 300, className, ...props }, forwardedRef) => {\n const [el, setEl] = React.useState<HTMLSpanElement | null>(null);\n const [isTruncated, setIsTruncated] = React.useState(false);\n\n // Ref callback that captures the live element AND forwards to the consumer's ref.\n // Using state (not useRef) ensures the effect re-runs when the span instance\n // changes (e.g. when we re-render to mount the tooltip wrapper).\n const setRef = React.useCallback(\n (node: HTMLSpanElement | null) => {\n setEl(node);\n if (typeof forwardedRef === \"function\") forwardedRef(node);\n else if (forwardedRef) {\n (forwardedRef as React.MutableRefObject<HTMLSpanElement | null>).current = node;\n }\n },\n [forwardedRef],\n );\n\n React.useLayoutEffect(() => {\n if (!el) return;\n const check = () => setIsTruncated(el.scrollWidth > el.clientWidth);\n check();\n const ro = new ResizeObserver(check);\n ro.observe(el);\n return () => ro.disconnect();\n }, [el, children]);\n\n const span = (\n <span\n ref={setRef}\n className={cn(\n \"inline-block max-w-full min-w-0 align-bottom truncate\",\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n\n if (!isTruncated) return span;\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{span}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-sm font-regular leading-sm max-w-[320px] data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n {tooltip ?? children}\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n },\n);\n\nTruncatedText.displayName = \"TruncatedText\";\n\nexport { TruncatedText };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { faFaceSmileOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n//\n// Emoji shape emitted by emoji-mart's `onEmojiSelect` callback. We re-declare\n// it locally so consumers don't need to import from `@emoji-mart/react`.\n//\n// See https://github.com/missive/emoji-mart#-events.\n\nexport interface EmojiSelection {\n id: string;\n name: string;\n native: string;\n unified: string;\n keywords: string[];\n shortcodes: string;\n skin?: number;\n}\n\nexport type EmojiPickerLocale = \"en\" | \"fr\";\n\ninterface CommonEmojiPickerProps {\n /** Called with the selected emoji. */\n onSelect: (emoji: EmojiSelection) => void;\n /** Picker locale (defaults to `\"en\"`). */\n locale?: EmojiPickerLocale;\n /**\n * Auto-tracks `data-theme=\"dark\"` on `<html>` by default. Pass an explicit\n * `\"light\"` or `\"dark\"` to override.\n */\n theme?: \"light\" | \"dark\" | \"auto\";\n /** Pre-selected skin tone (1–6). */\n skin?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Hide the search bar. */\n searchPosition?: \"sticky\" | \"static\" | \"none\";\n /** Hide the skin-tone selector button. */\n skinTonePosition?: \"preview\" | \"search\" | \"none\";\n /** Hide the bottom preview bar. */\n previewPosition?: \"top\" | \"bottom\" | \"none\";\n /** Hide the category navigation row. */\n navPosition?: \"top\" | \"bottom\" | \"none\";\n /** Per-row emoji count (default emoji-mart value: 9). */\n perLine?: number;\n /** Maximum number of recent emojis kept by emoji-mart (localStorage). */\n maxFrequentRows?: number;\n}\n\nexport interface EmojiPickerProps extends CommonEmojiPickerProps {\n className?: string;\n}\n\n// ── i18n bundles ────────────────────────────────────────────────────────────\n//\n// Two minimal locale dictionaries for emoji-mart's `i18n` prop. The English\n// dict mirrors emoji-mart's own defaults; the French dict is a curated\n// translation. Add more languages here as needed.\n\nconst EN_I18N = {\n search: \"Search\",\n search_no_results_1: \"No emoji\",\n search_no_results_2: \"We couldn't find this one\",\n pick: \"Pick an emoji…\",\n add_custom: \"Add custom emoji\",\n categories: {\n activity: \"Activity\",\n custom: \"Custom\",\n flags: \"Flags\",\n foods: \"Food & Drink\",\n frequent: \"Frequently used\",\n nature: \"Animals & Nature\",\n objects: \"Objects\",\n people: \"Smileys & People\",\n places: \"Travel & Places\",\n search: \"Search Results\",\n symbols: \"Symbols\",\n },\n skins: {\n \"1\": \"Default\",\n \"2\": \"Light\",\n \"3\": \"Medium-Light\",\n \"4\": \"Medium\",\n \"5\": \"Medium-Dark\",\n \"6\": \"Dark\",\n choose: \"Choose default skin tone\",\n },\n} as const;\n\nconst FR_I18N = {\n search: \"Rechercher\",\n search_no_results_1: \"Aucun emoji\",\n search_no_results_2: \"Impossible de trouver celui-ci\",\n pick: \"Choisissez un emoji…\",\n add_custom: \"Ajouter un emoji personnalisé\",\n categories: {\n activity: \"Activité\",\n custom: \"Personnalisé\",\n flags: \"Drapeaux\",\n foods: \"Nourriture & boisson\",\n frequent: \"Fréquemment utilisés\",\n nature: \"Animaux & nature\",\n objects: \"Objets\",\n people: \"Smileys & personnes\",\n places: \"Voyages & lieux\",\n search: \"Résultats\",\n symbols: \"Symboles\",\n },\n skins: {\n \"1\": \"Par défaut\",\n \"2\": \"Claire\",\n \"3\": \"Moyennement claire\",\n \"4\": \"Moyenne\",\n \"5\": \"Moyennement foncée\",\n \"6\": \"Foncée\",\n choose: \"Choisir la couleur de peau par défaut\",\n },\n} as const;\n\nconst I18N_BUNDLES = { en: EN_I18N, fr: FR_I18N };\n\n// ── Theme auto-detection ────────────────────────────────────────────────────\n\nfunction useDocumentTheme(): \"light\" | \"dark\" {\n const [theme, setTheme] = React.useState<\"light\" | \"dark\">(\"light\");\n\n React.useEffect(() => {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n const read = () => {\n setTheme(root.dataset.theme === \"dark\" ? \"dark\" : \"light\");\n };\n read();\n const observer = new MutationObserver(read);\n observer.observe(root, { attributes: true, attributeFilter: [\"data-theme\"] });\n return () => observer.disconnect();\n }, []);\n\n return theme;\n}\n\n// ── Lazy emoji-mart loader ──────────────────────────────────────────────────\n//\n// emoji-mart's data bundle is ~150 KB gzipped. We dynamically import the\n// Picker + data so the cost is paid only when the picker actually mounts,\n// keeping the rest of @l3mpire/ui slim.\n\ninterface LoadedPicker {\n Picker: any;\n data: any;\n}\n\nlet pickerCache: Promise<LoadedPicker> | null = null;\n\nasync function loadPicker(): Promise<LoadedPicker> {\n if (!pickerCache) {\n pickerCache = Promise.all([\n import(\"@emoji-mart/react\"),\n import(\"@emoji-mart/data\"),\n ]).then(([reactMod, dataMod]) => ({\n Picker: (reactMod as any).default ?? reactMod,\n data: (dataMod as any).default ?? dataMod,\n }));\n }\n return pickerCache;\n}\n\n// ── EmojiPicker (inline) ────────────────────────────────────────────────────\n\nconst EmojiPicker = React.forwardRef<HTMLDivElement, EmojiPickerProps>(\n ({ className, onSelect, locale = \"en\", theme: themeProp, ...pickerProps }, ref) => {\n const docTheme = useDocumentTheme();\n const theme = themeProp ?? docTheme;\n\n const [loaded, setLoaded] = React.useState<LoadedPicker | null>(null);\n React.useEffect(() => {\n let alive = true;\n loadPicker().then((mod) => {\n if (alive) setLoaded(mod);\n });\n return () => {\n alive = false;\n };\n }, []);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"lemds-emoji-picker inline-flex overflow-clip\",\n \"bg-emoji-picker-bg border border-emoji-picker-border rounded-lg shadow-lg\",\n className,\n )}\n >\n {loaded ? (\n <loaded.Picker\n data={loaded.data}\n onEmojiSelect={onSelect}\n theme={theme}\n i18n={I18N_BUNDLES[locale]}\n {...pickerProps}\n />\n ) : (\n <div className=\"flex h-[420px] w-[352px] items-center justify-center text-emoji-picker-text-muted text-sm font-regular leading-sm\">\n Loading…\n </div>\n )}\n </div>\n );\n },\n);\nEmojiPicker.displayName = \"EmojiPicker\";\n\n// ── EmojiPickerPopover ──────────────────────────────────────────────────────\n\nexport interface EmojiPickerPopoverProps extends CommonEmojiPickerProps {\n /**\n * Custom trigger element. Provide via `children` together with `asChild`-style\n * composition (Radix passes the trigger props down). When omitted, a default\n * ghost icon-only Button with the face-smile icon is rendered.\n */\n children?: React.ReactNode;\n /** Controlled open state. */\n open?: boolean;\n /** Open-state change handler. */\n onOpenChange?: (open: boolean) => void;\n /** Popover side (default `\"bottom\"`). */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Popover alignment (default `\"start\"`). */\n align?: \"start\" | \"center\" | \"end\";\n /** Distance from the trigger in px (default 6). */\n sideOffset?: number;\n /** `aria-label` for the default trigger (ignored when `children` is set). */\n triggerAriaLabel?: string;\n}\n\nconst EmojiPickerPopover = React.forwardRef<\n HTMLButtonElement,\n EmojiPickerPopoverProps\n>(\n (\n {\n children,\n open,\n onOpenChange,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 6,\n triggerAriaLabel = \"Pick an emoji\",\n onSelect,\n ...emojiPickerProps\n },\n ref,\n ) => {\n const handleSelect = (emoji: EmojiSelection) => {\n onSelect(emoji);\n onOpenChange?.(false);\n };\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>\n {children ?? (\n <Button\n ref={ref}\n type=\"button\"\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"md\"\n iconOnly\n leftIcon={faFaceSmileOutline}\n aria-label={triggerAriaLabel}\n />\n )}\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={sideOffset}\n side={side}\n align={align}\n className=\"z-50 outline-none\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <EmojiPicker onSelect={handleSelect} {...emojiPickerProps} />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n },\n);\nEmojiPickerPopover.displayName = \"EmojiPickerPopover\";\n\nexport { EmojiPicker, EmojiPickerPopover };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, type IconDefinition, type IconSize } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst linkVariants = cva(\n [\n \"inline-flex items-center\",\n \"font-medium\",\n \"transition-colors cursor-pointer\",\n \"disabled:pointer-events-none\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n ],\n {\n variants: {\n intent: {\n neutral: [\n \"text-link-neutral-text-default\",\n \"hover:text-link-neutral-text-hover\",\n \"active:text-link-neutral-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n brand: [\n \"text-link-brand-text-default\",\n \"hover:text-link-brand-text-hover\",\n \"active:text-link-brand-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n alert: [\n \"text-link-alert-text-default\",\n \"hover:text-link-alert-text-hover\",\n \"active:text-link-alert-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n success: [\n \"text-link-success-text-default\",\n \"hover:text-link-success-text-hover\",\n \"active:text-link-success-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n warning: [\n \"text-link-warning-text-default\",\n \"hover:text-link-warning-text-hover\",\n \"active:text-link-warning-text-pressed\",\n \"disabled:text-link-disabled-text\",\n ],\n },\n size: {\n sm: [\n \"text-xs\",\n \"leading-xs\",\n \"gap-xs\",\n ],\n md: [\n \"text-sm\",\n \"leading-sm\",\n \"gap-sm\",\n ],\n },\n },\n defaultVariants: {\n intent: \"neutral\",\n size: \"md\",\n },\n },\n);\n\n// ── Icon size mapping ────────────────────────────────────────────────────────\n\nconst iconSizeMap: Record<NonNullable<LinkProps[\"size\"]>, IconSize> = {\n sm: \"xs\", // 12px\n md: \"sm\", // 14px\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface LinkProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement>,\n VariantProps<typeof linkVariants> {\n asChild?: boolean;\n disabled?: boolean;\n leftIcon?: IconDefinition;\n rightIcon?: IconDefinition;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n className,\n intent,\n size,\n asChild = false,\n disabled,\n leftIcon,\n rightIcon,\n children,\n ...props\n },\n ref,\n ) => {\n const iconSize = iconSizeMap[size ?? \"md\"];\n\n const variantClasses = linkVariants({\n intent,\n size,\n className,\n });\n\n if (asChild) {\n return (\n <Slot ref={ref} className={cn(variantClasses)} {...props}>\n {children}\n </Slot>\n );\n }\n\n return (\n <a\n ref={ref}\n className={cn(variantClasses)}\n aria-disabled={disabled || undefined}\n {...(disabled ? { tabIndex: -1, role: \"link\" } : {})}\n {...props}\n >\n {leftIcon && (\n <Icon\n icon={leftIcon}\n size={iconSize}\n className=\"text-current\"\n />\n )}\n {children}\n {rightIcon && (\n <Icon\n icon={rightIcon}\n size={iconSize}\n className=\"text-current\"\n />\n )}\n </a>\n );\n },\n);\n\nLink.displayName = \"Link\";\n\nexport { Link, linkVariants, type LinkProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faCircleInfoSolid,\n faCircleCheckSolid,\n faCircleExclamationSolid,\n faTriangleExclamationSolid,\n faStarsSolid,\n faXmarkSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Link } from \"./link\";\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst infoMessageVariants = cva(\n \"flex items-start gap-lg px-xl py-base rounded-lg\",\n {\n variants: {\n type: {\n info: \"bg-info-message-info-bg\",\n success: \"bg-info-message-success-bg\",\n alert: \"bg-info-message-alert-bg\",\n warning: \"bg-info-message-warning-bg\",\n empty: \"bg-info-message-empty-bg\",\n // Reuses the info palette but swaps the icon for the stars glyph,\n // signalling that the message is AI-generated.\n ai: \"bg-info-message-info-bg\",\n },\n },\n defaultVariants: { type: \"info\" },\n },\n);\n\n// ── Per-type icon + color mapping ────────────────────────────────────────────\n\nconst typeIconMap: Record<string, { icon: IconDefinition; color: string }> = {\n info: { icon: faCircleInfoSolid, color: \"text-info-message-info-icon\" },\n success: { icon: faCircleCheckSolid, color: \"text-info-message-success-icon\" },\n alert: { icon: faCircleExclamationSolid, color: \"text-info-message-alert-icon\" },\n warning: { icon: faTriangleExclamationSolid, color: \"text-info-message-warning-icon\" },\n empty: { icon: faCircleInfoSolid, color: \"text-info-message-empty-icon\" },\n ai: { icon: faStarsSolid, color: \"text-info-message-info-icon\" },\n};\n\n// ── Text styles ─────────────────────────────────────────────────────────────\n\nconst titleStyle =\n \"text-sm font-medium leading-sm text-info-message-title\";\n\nconst descriptionStyle =\n \"text-xs font-regular leading-xs text-info-message-description\";\n\nconst closeButtonStyle =\n \"inline-flex shrink-0 items-center justify-center p-xs rounded-base text-info-message-close hover:bg-black/5 transition-colors\";\n\n// Map info message type to Link intent\nconst typeLinkIntentMap: Record<string, \"brand\" | \"neutral\" | \"alert\" | \"success\" | \"warning\"> = {\n info: \"brand\",\n success: \"success\",\n alert: \"alert\",\n warning: \"warning\",\n empty: \"neutral\",\n ai: \"brand\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface InfoMessageProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n VariantProps<typeof infoMessageVariants> {\n title: React.ReactNode;\n description?: React.ReactNode;\n onClose?: () => void;\n action?: React.ReactNode;\n /** Render a semantically-colored link below the description. */\n linkLabel?: string;\n linkHref?: string;\n onLinkClick?: () => void;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst InfoMessage = React.forwardRef<HTMLDivElement, InfoMessageProps>(\n ({ className, type = \"info\", title, description, onClose, action, linkLabel, linkHref, onLinkClick, ...props }, ref) => {\n const { icon, color } = typeIconMap[type ?? \"info\"];\n const isTitleOnly = !description && !linkLabel;\n\n return (\n <div\n ref={ref}\n className={cn(infoMessageVariants({ type }), isTitleOnly && \"items-center\", className)}\n role=\"status\"\n {...props}\n >\n <div className=\"flex flex-1 items-center gap-base\">\n <Icon icon={icon} size=\"sm\" className={cn(\"shrink-0\", color)} />\n <div className=\"flex flex-1 flex-col gap-2xs\">\n <span className={titleStyle}>{title}</span>\n {description && <span className={descriptionStyle}>{description}</span>}\n {linkLabel && (\n <Link\n intent={typeLinkIntentMap[type ?? \"info\"]}\n size=\"md\"\n href={linkHref}\n onClick={onLinkClick}\n >\n {linkLabel}\n </Link>\n )}\n </div>\n {action}\n </div>\n {onClose && (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onClose} className={closeButtonStyle} aria-label=\"Close\">\n <Icon icon={faXmarkSolid} size=\"md\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Close</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n );\n },\n);\n\nInfoMessage.displayName = \"InfoMessage\";\n\nexport { InfoMessage, infoMessageVariants, type InfoMessageProps };\n","import * as React from \"react\";\nimport * as ToastPrimitive from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faCircleInfoSolid,\n faCircleCheckSolid,\n faCircleExclamationSolid,\n faTriangleExclamationSolid,\n faXmarkSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst toastVariants = cva(\n [\n \"flex flex-col items-end w-[308px] gap-lg p-xl\",\n \"rounded-lg\",\n \"border border-toast-border\",\n \"bg-gradient-to-b to-background to-[60%]\",\n \"[background-size:100%_calc(100%+120px)] [background-position:0_-120px]\",\n \"shadow-md\",\n ],\n {\n variants: {\n type: {\n info: \"from-toast-info-bg\",\n success: \"from-toast-success-bg\",\n alert: \"from-toast-alert-bg\",\n warning: \"from-toast-warning-bg\",\n },\n },\n defaultVariants: { type: \"info\" },\n },\n);\n\nconst iconContainerVariants = cva(\n \"shrink-0 size-10 rounded-base overflow-clip flex items-center justify-center\",\n {\n variants: {\n type: {\n info: \"bg-toast-info-bg\",\n success: \"bg-toast-success-bg\",\n alert: \"bg-toast-alert-bg\",\n warning: \"bg-toast-warning-bg\",\n },\n },\n defaultVariants: { type: \"info\" },\n },\n);\n\n// ── Per-type icon + color mapping ────────────────────────────────────────────\n\nconst typeIconMap: Record<string, { icon: IconDefinition; color: string }> = {\n info: { icon: faCircleInfoSolid, color: \"text-toast-info-icon\" },\n success: { icon: faCircleCheckSolid, color: \"text-toast-success-icon\" },\n alert: { icon: faCircleExclamationSolid, color: \"text-toast-alert-icon\" },\n warning: { icon: faTriangleExclamationSolid, color: \"text-toast-warning-icon\" },\n};\n\n// ── Text styles ─────────────────────────────────────────────────────────────\n\nconst titleStyle =\n \"text-sm font-medium leading-sm text-toast-title\";\n\nconst subtitleStyle =\n \"text-sm font-regular leading-sm text-toast-subtitle\";\n\nconst closeButtonStyle =\n \"inline-flex shrink-0 items-center justify-center self-start p-sm rounded-lg text-toast-close hover:bg-black/5 transition-colors\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface ToastProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Root>,\n \"title\" | \"type\"\n >,\n VariantProps<typeof toastVariants> {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n onClose?: () => void;\n actions?: React.ReactNode;\n}\n\n// ── Toast Provider & Viewport ────────────────────────────────────────────────\n\nconst ToastProvider = ToastPrimitive.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Viewport\n ref={ref}\n className={cn(\n \"fixed top-0 right-0 z-[100] flex max-h-screen w-full flex-col-reverse p-xl sm:flex-col md:max-w-[420px]\",\n className,\n )}\n {...props}\n />\n));\nToastViewport.displayName = \"ToastViewport\";\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Toast = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitive.Root>,\n ToastProps\n>(({ className, type = \"info\", title, subtitle, onClose, actions, open, onOpenChange, ...props }, ref) => {\n const { icon, color } = typeIconMap[type ?? \"info\"];\n\n const handleOpenChange = (value: boolean) => {\n if (!value) onClose?.();\n onOpenChange?.(value);\n };\n\n const content = (\n <ToastPrimitive.Root\n ref={ref}\n open={open}\n onOpenChange={handleOpenChange}\n className={cn(toastVariants({ type }), !actions && \"min-h-[80px]\", className)}\n {...props}\n >\n <div className=\"flex w-full items-center gap-lg\">\n <div className={iconContainerVariants({ type })}>\n <Icon icon={icon} size=\"lg\" className={color} />\n </div>\n\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <ToastPrimitive.Title className={titleStyle}>{title}</ToastPrimitive.Title>\n {subtitle && (\n <ToastPrimitive.Description className={subtitleStyle}>\n {subtitle}\n </ToastPrimitive.Description>\n )}\n </div>\n\n {onClose && (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <ToastPrimitive.Close className={closeButtonStyle} aria-label=\"Close\">\n <Icon icon={faXmarkSolid} size=\"sm\" />\n </ToastPrimitive.Close>\n </TooltipTrigger>\n <TooltipContent>Close</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n\n {actions && (\n <div className=\"flex items-center gap-2\">{actions}</div>\n )}\n </ToastPrimitive.Root>\n );\n\n // Auto-wrap in Provider if used standalone (outside a ToastProvider)\n return (\n <ToastPrimitive.Provider swipeDirection=\"right\">\n {content}\n <ToastPrimitive.Viewport />\n </ToastPrimitive.Provider>\n );\n});\n\nToast.displayName = \"Toast\";\n\nexport {\n Toast,\n ToastProvider,\n ToastViewport,\n toastVariants,\n type ToastProps,\n};\n","import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst trackStyles = {\n base: \"peer inline-flex shrink-0 cursor-pointer items-center h-4 w-7 rounded-full transition-colors focus-visible:outline-none\",\n off: [\n \"bg-switch-off-track-default\",\n \"hover:bg-switch-off-track-hover\",\n ],\n on: [\n \"data-[state=checked]:bg-switch-on-track-default\",\n \"data-[state=checked]:hover:bg-switch-on-track-hover\",\n ],\n pressed: \"active:[box-shadow:0_0_0_3px_#316bff26]\",\n disabled: [\n \"disabled:pointer-events-none\",\n \"disabled:bg-switch-off-track-disabled\",\n \"data-[state=checked]:disabled:bg-switch-on-track-disabled\",\n ],\n};\n\nconst thumbStyle =\n \"pointer-events-none block rounded-full size-3 translate-x-0.5 bg-switch-thumb-bg shadow-md transition-transform data-[state=checked]:translate-x-[13px]\";\n\nconst labelBase =\n \"cursor-pointer select-none text-sm font-medium leading-sm\";\n\nconst labelColor = {\n default: \"text-switch-label-text\",\n disabled: \"pointer-events-none text-switch-label-disabled\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> {\n label?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Switch = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, label, disabled, id, ...props }, ref) => {\n const innerId = id ?? React.useId();\n\n return (\n <div className=\"inline-flex items-center gap-base\">\n <SwitchPrimitive.Root\n ref={ref}\n id={innerId}\n disabled={disabled}\n className={cn(\n trackStyles.base,\n trackStyles.off,\n trackStyles.on,\n trackStyles.pressed,\n trackStyles.disabled,\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb className={thumbStyle} />\n </SwitchPrimitive.Root>\n {label && (\n <label\n htmlFor={innerId}\n className={cn(labelBase, labelColor[disabled ? \"disabled\" : \"default\"])}\n >\n {label}\n </label>\n )}\n </div>\n );\n});\n\nSwitch.displayName = \"Switch\";\n\nexport { Switch, type SwitchProps };\n","import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst cardStyles = {\n base: [\n \"group relative flex w-full items-center gap-base rounded-lg border border-solid p-lg text-left transition-colors\",\n \"border-switch-card-border\",\n \"focus-visible:outline-none focus-visible:shadow-focus-ring\",\n \"disabled:pointer-events-none disabled:opacity-60\",\n \"cursor-pointer\",\n ],\n bg: [\n \"bg-switch-card-bg-off\",\n \"data-[state=checked]:bg-switch-card-bg-on\",\n ],\n};\n\nconst trackStyles = [\n \"inline-flex shrink-0 items-center h-4 w-7 rounded-full transition-colors\",\n \"bg-switch-off-track-default\",\n \"group-hover:bg-switch-off-track-hover\",\n \"group-data-[state=checked]:bg-switch-on-track-default\",\n \"group-data-[state=checked]:group-hover:bg-switch-on-track-hover\",\n \"group-disabled:bg-switch-off-track-disabled\",\n \"group-data-[state=checked]:group-disabled:bg-switch-on-track-disabled\",\n];\n\nconst thumbStyle =\n \"pointer-events-none block rounded-full size-3 translate-x-0.5 bg-switch-thumb-bg shadow-md transition-transform group-data-[state=checked]:translate-x-[13px]\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SwitchCardProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n \"title\"\n > {\n title: string;\n description?: string;\n icon?: IconDefinition;\n}\n\n// ── Component ───────────────────────────────────────────────────────────────\n\nconst SwitchCard = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n SwitchCardProps\n>(({ className, title, description, icon, ...props }, ref) => (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(cardStyles.base, cardStyles.bg, className)}\n {...props}\n >\n {icon && (\n <Icon icon={icon} size=\"xs\" className=\"shrink-0 text-switch-card-icon\" />\n )}\n <div className=\"flex flex-1 flex-col gap-2xs min-w-0 text-left\">\n <span className=\"truncate text-sm font-medium leading-sm text-switch-card-title\">\n {title}\n </span>\n {description && (\n <span className=\"text-xs font-regular leading-xs text-switch-card-description\">\n {description}\n </span>\n )}\n </div>\n <span className={cn(trackStyles)}>\n <SwitchPrimitive.Thumb className={thumbStyle} />\n </span>\n </SwitchPrimitive.Root>\n));\nSwitchCard.displayName = \"SwitchCard\";\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport { SwitchCard, type SwitchCardProps };\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Size definitions ─────────────────────────────────────────────────────────\n\nconst avatarVariants = cva(\n \"relative inline-flex shrink-0 items-center justify-center overflow-clip\",\n {\n variants: {\n size: {\n sm: \"size-4\",\n md: \"size-5\",\n lg: \"size-6\",\n xl: \"size-8\",\n },\n shape: {\n rounded: \"rounded-full\",\n squared: \"\",\n },\n },\n compoundVariants: [\n { shape: \"squared\", size: \"sm\", class: \"rounded-xs\" },\n { shape: \"squared\", size: \"md\", class: \"rounded-sm\" },\n { shape: \"squared\", size: \"lg\", class: \"rounded-base\" },\n { shape: \"squared\", size: \"xl\", class: \"rounded-base\" },\n ],\n defaultVariants: {\n size: \"xl\",\n shape: \"rounded\",\n },\n },\n);\n\nconst initialsFontSize: Record<string, string> = {\n sm: \"text-[8px] leading-[14px]\",\n md: \"text-xs leading-2xs\",\n lg: \"text-sm leading-sm\",\n xl: \"text-base leading-base\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface AvatarProps\n extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>,\n VariantProps<typeof avatarVariants> {\n src?: string;\n alt?: string;\n initials?: string;\n badge?: React.ReactNode;\n /** `\"rounded\"` (circle) for people/users, `\"squared\"` for companies/orgs. */\n shape?: \"rounded\" | \"squared\";\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Avatar = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Root>,\n AvatarProps\n>(({ className, size = \"xl\", shape = \"rounded\", src, alt, initials, badge, ...props }, ref) => {\n return (\n <div className=\"relative inline-flex\">\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n avatarVariants({ size, shape }),\n \"bg-avatar-fallback-bg\",\n className,\n )}\n {...props}\n >\n <AvatarPrimitive.Image\n src={src}\n alt={alt ?? \"\"}\n className=\"absolute inset-0 size-full object-cover\"\n />\n <AvatarPrimitive.Fallback\n delayMs={0}\n className={cn(\n \"font-medium\",\n \"text-avatar-fallback-text\",\n \"select-none text-center\",\n initialsFontSize[size ?? \"xl\"],\n )}\n >\n {initials ?? \"??\"}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n {badge && size === \"xl\" && (\n <div className=\"absolute bottom-0 right-0 size-4 overflow-clip rounded-full\">\n {badge}\n </div>\n )}\n </div>\n );\n});\n\nAvatar.displayName = \"Avatar\";\n\nexport { Avatar, avatarVariants, type AvatarProps };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Icon, faCheckSolid } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst rootStyles = {\n base: \"peer shrink-0 size-4 rounded-sm inline-flex items-center justify-center transition-colors cursor-pointer focus-visible:outline-none\",\n unchecked: [\n \"bg-checkbox-unchecked-bg\",\n \"border border-checkbox-unchecked-border-default\",\n \"hover:border-checkbox-unchecked-border-hover\",\n \"active:border-checkbox-unchecked-border-pressed\",\n \"active:[box-shadow:0_0_0_3px_#316bff26]\",\n ],\n checked: [\n \"data-[state=checked]:bg-checkbox-checked-bg-default\",\n \"data-[state=checked]:border-transparent\",\n \"data-[state=checked]:hover:bg-checkbox-checked-bg-hover\",\n \"data-[state=checked]:active:bg-checkbox-checked-bg-pressed\",\n \"data-[state=checked]:active:[box-shadow:0_0_0_3px_#316bff26]\",\n ],\n disabled: [\n \"disabled:pointer-events-none\",\n \"disabled:bg-checkbox-disabled-bg\",\n \"disabled:border-checkbox-disabled-border\",\n \"data-[state=checked]:disabled:bg-checkbox-disabled-bg\",\n \"data-[state=checked]:disabled:border-transparent\",\n ],\n};\n\nconst iconStyle = {\n default: \"text-checkbox-checked-icon\",\n disabled: \"text-checkbox-disabled-icon\",\n};\n\nconst labelBase =\n \"cursor-pointer select-none overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium leading-sm\";\n\nconst labelColor = {\n default: \"text-checkbox-label-default\",\n disabled: \"pointer-events-none text-checkbox-label-disabled\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n label?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Checkbox = React.forwardRef<\n React.ComponentRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, label, disabled, id, ...props }, ref) => {\n const innerId = id ?? React.useId();\n\n return (\n <div className=\"inline-flex items-center gap-base\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={innerId}\n disabled={disabled}\n className={cn(\n rootStyles.base,\n rootStyles.unchecked,\n rootStyles.checked,\n rootStyles.disabled,\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n forceMount\n className={cn(\n \"flex items-center justify-center transition-opacity\",\n \"data-[state=unchecked]:opacity-0\",\n \"data-[state=checked]:opacity-100\",\n \"data-[state=indeterminate]:opacity-100\",\n )}\n >\n <Icon\n icon={faCheckSolid}\n size=\"xs\"\n className={iconStyle[disabled ? \"disabled\" : \"default\"]}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label\n htmlFor={innerId}\n className={cn(labelBase, labelColor[disabled ? \"disabled\" : \"default\"])}\n >\n {label}\n </label>\n )}\n </div>\n );\n});\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox, type CheckboxProps };\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst itemStyles = {\n base: \"peer shrink-0 size-4 rounded-full inline-flex items-center justify-center transition-colors cursor-pointer focus-visible:outline-none\",\n unselected: [\n \"bg-radio-unselected-bg\",\n \"border border-radio-unselected-border-default\",\n \"hover:border-radio-unselected-border-hover\",\n \"active:border-radio-unselected-border-pressed\",\n \"active:[box-shadow:0_0_0_3px_#316bff26]\",\n ],\n selected: [\n \"data-[state=checked]:bg-radio-selected-bg-default\",\n \"data-[state=checked]:border-transparent\",\n \"data-[state=checked]:hover:bg-radio-selected-bg-hover\",\n \"data-[state=checked]:active:bg-radio-selected-bg-pressed\",\n \"data-[state=checked]:active:[box-shadow:0_0_0_3px_#316bff26]\",\n ],\n disabled: [\n \"disabled:pointer-events-none\",\n \"disabled:bg-radio-disabled-bg\",\n \"disabled:border-radio-disabled-border\",\n \"data-[state=checked]:disabled:bg-radio-disabled-bg\",\n \"data-[state=checked]:disabled:border-transparent\",\n ],\n};\n\nconst dotStyle = {\n default: \"bg-radio-selected-dot\",\n disabled: \"bg-radio-disabled-dot\",\n};\n\nconst labelBase =\n \"cursor-pointer select-none overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium leading-sm\";\n\nconst labelColor = {\n default: \"text-radio-label-default\",\n disabled: \"pointer-events-none text-radio-label-disabled\",\n};\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\ninterface RadioGroupProps\n extends React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {}\n\ninterface RadioGroupItemProps\n extends React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item> {\n label?: string;\n}\n\n// ── RadioGroup ──────────────────────────────────────────────────────────────\n\nconst RadioGroup = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(\"flex flex-col gap-base\", className)}\n {...props}\n />\n));\nRadioGroup.displayName = \"RadioGroup\";\n\n// ── RadioGroupItem ──────────────────────────────────────────────────────────\n\nconst RadioGroupItem = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({ className, label, disabled, id, ...props }, ref) => {\n const innerId = id ?? React.useId();\n\n return (\n <div className=\"inline-flex items-center gap-base\">\n <RadioGroupPrimitive.Item\n ref={ref}\n id={innerId}\n disabled={disabled}\n className={cn(\n itemStyles.base,\n itemStyles.unselected,\n itemStyles.selected,\n itemStyles.disabled,\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span\n className={cn(\n \"size-1.5 rounded-full transition-opacity\",\n dotStyle[disabled ? \"disabled\" : \"default\"],\n )}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n {label && (\n <label\n htmlFor={innerId}\n className={cn(labelBase, labelColor[disabled ? \"disabled\" : \"default\"])}\n >\n {label}\n </label>\n )}\n </div>\n );\n});\nRadioGroupItem.displayName = \"RadioGroupItem\";\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n RadioGroup,\n RadioGroupItem,\n type RadioGroupProps,\n type RadioGroupItemProps,\n};\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Style maps ──────────────────────────────────────────────────────────────\n\nconst cardStyles = {\n base: [\n \"group relative flex w-full items-start gap-base rounded-lg border border-solid p-lg text-left transition-colors\",\n \"focus-visible:outline-none focus-visible:shadow-focus-ring\",\n \"disabled:pointer-events-none disabled:opacity-60\",\n \"cursor-pointer\",\n ],\n bg: [\n \"bg-radio-card-bg-default\",\n \"hover:bg-radio-card-bg-hover\",\n \"active:bg-radio-card-bg-pressed\",\n ],\n border: [\n \"border-radio-card-border-unselected\",\n \"data-[state=checked]:border-radio-card-border-selected-default\",\n \"data-[state=checked]:hover:border-radio-card-border-selected-hover\",\n \"data-[state=checked]:active:border-radio-card-border-selected-pressed\",\n \"data-[state=checked]:shadow-sm\",\n ],\n};\n\nconst indicatorStyles = {\n base: \"shrink-0 size-4 rounded-full inline-flex items-center justify-center transition-colors\",\n unselected: \"bg-radio-unselected-bg border border-radio-unselected-border-default\",\n selected: [\n \"group-data-[state=checked]:bg-radio-selected-bg-default\",\n \"group-data-[state=checked]:border-transparent\",\n ],\n};\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\ninterface RadioCardProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>,\n \"title\"\n > {\n title: string;\n description?: string;\n icon?: IconDefinition;\n hideIndicator?: boolean;\n}\n\ninterface RadioCardGroupProps\n extends React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {\n label?: string;\n orientation?: \"horizontal\" | \"vertical\";\n}\n\n// ── RadioCardGroup ──────────────────────────────────────────────────────────\n\nconst RadioCardGroup = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Root>,\n RadioCardGroupProps\n>(({ className, label, orientation = \"horizontal\", ...props }, ref) => (\n <div className=\"flex flex-col gap-xs w-full\">\n {label && (\n <span className=\"text-xs font-medium leading-xs text-radio-card-group-label\">\n {label}\n </span>\n )}\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(\n \"flex gap-base w-full\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n className,\n )}\n {...props}\n />\n </div>\n));\nRadioCardGroup.displayName = \"RadioCardGroup\";\n\n// ── RadioCard ───────────────────────────────────────────────────────────────\n\nconst RadioCard = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Item>,\n RadioCardProps\n>(({ className, title, description, icon, hideIndicator, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n cardStyles.base,\n cardStyles.bg,\n cardStyles.border,\n \"flex-1 min-w-0\",\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-1 items-center gap-base min-w-0\">\n {icon && (\n <Icon\n icon={icon}\n size=\"xs\"\n className=\"shrink-0 text-radio-card-icon\"\n />\n )}\n <div className=\"flex flex-1 flex-col gap-2xs min-w-0 text-left\">\n <span className=\"truncate text-sm font-medium leading-sm text-radio-card-title\">\n {title}\n </span>\n {description && (\n <span className=\"truncate text-xs font-regular leading-xs text-radio-card-description\">\n {description}\n </span>\n )}\n </div>\n </div>\n {!hideIndicator && (\n <span\n className={cn(\n indicatorStyles.base,\n indicatorStyles.unselected,\n indicatorStyles.selected,\n )}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span className=\"size-1.5 rounded-full bg-radio-selected-dot\" />\n </RadioGroupPrimitive.Indicator>\n </span>\n )}\n </RadioGroupPrimitive.Item>\n));\nRadioCard.displayName = \"RadioCard\";\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n RadioCard,\n RadioCardGroup,\n type RadioCardProps,\n type RadioCardGroupProps,\n};\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useSidebarContext } from \"./sidebar\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SidebarHeadingItemProps extends React.HTMLAttributes<HTMLDivElement> {\n label: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst SidebarHeadingItem = React.forwardRef<HTMLDivElement, SidebarHeadingItemProps>(\n ({ className, label, ...props }, ref) => {\n const { isCollapsed } = useSidebarContext();\n\n if (isCollapsed) {\n // In collapsed mode, render as a small spacer (matches Figma: empty heading)\n return <div ref={ref} className=\"h-xs w-full\" {...props} />;\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center w-full\",\n \"text-xs leading-xs font-medium text-sidebar-heading-text mb-base\",\n className,\n )}\n {...props}\n >\n {label}\n </div>\n );\n },\n);\n\nSidebarHeadingItem.displayName = \"SidebarHeadingItem\";\n\nexport { SidebarHeadingItem, type SidebarHeadingItemProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faChevronDownSolid, faStarsOutline, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge } from \"./badge\";\nimport { useSidebarContext } from \"./sidebar\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst sidebarItemVariants = cva(\n [\n \"flex items-center gap-base rounded-base transition-colors cursor-pointer\",\n ],\n {\n variants: {\n state: {\n default: \"\",\n hover: \"bg-sidebar-item-hover-bg\",\n active: \"bg-sidebar-item-active-bg\",\n },\n type: {\n default: \"px-xl py-base\",\n collapsed: \"p-base justify-center\",\n },\n },\n defaultVariants: {\n state: \"default\",\n type: \"default\",\n },\n },\n);\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SidebarItemProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"type\">,\n VariantProps<typeof sidebarItemVariants> {\n icon?: IconDefinition;\n solidIcon?: IconDefinition;\n avatar?: React.ReactNode;\n label?: string;\n hasBadge?: boolean;\n badgeCount?: string;\n hasSubItems?: boolean;\n isNew?: boolean;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst SidebarItem = React.forwardRef<HTMLDivElement, SidebarItemProps>(\n (\n {\n className,\n state = \"default\",\n type,\n icon,\n solidIcon,\n avatar,\n label,\n hasBadge = false,\n badgeCount = \"+99\",\n hasSubItems = false,\n isNew = false,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const sidebarCtx = useSidebarContext();\n const isActive = state === \"active\";\n const resolvedType = type ?? (sidebarCtx.isCollapsed ? \"collapsed\" : \"default\");\n const isCollapsed = resolvedType === \"collapsed\";\n\n const useSolid = isActive || state === \"hover\" || isHovered;\n\n const iconColorClass = isActive\n ? \"text-sidebar-item-active-icon\"\n : \"text-sidebar-item-default-icon\";\n\n const textColorClass = isActive\n ? \"text-sidebar-item-active-text\"\n : \"text-sidebar-item-default-text\";\n\n return (\n <div\n ref={ref}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n sidebarItemVariants({ state, type: resolvedType }),\n \"group hover:bg-sidebar-item-hover-bg\",\n isActive && \"hover:bg-sidebar-item-active-bg\",\n className,\n )}\n {...props}\n >\n {avatar ? (\n <span className=\"shrink-0\">{avatar}</span>\n ) : icon ? (\n <Icon\n icon={icon}\n solidIcon={solidIcon}\n solid={useSolid}\n size=\"sm\"\n className={cn(\"shrink-0\", iconColorClass)}\n />\n ) : null}\n\n {!isCollapsed && (\n <>\n <span\n className={cn(\n \"flex-1 min-w-0 truncate text-sm leading-sm font-medium\",\n textColorClass,\n )}\n >\n {label}\n </span>\n\n {(isNew || hasBadge) && (\n <div className=\"flex items-center gap-xs shrink-0\">\n {isNew && (\n <Badge variant=\"light\" type=\"primary\" size=\"sm\" icon={faStarsOutline}>\n New\n </Badge>\n )}\n {hasBadge && (\n <Badge variant=\"solid\" type=\"critical\" size=\"sm\">\n {badgeCount}\n </Badge>\n )}\n </div>\n )}\n\n {hasSubItems && (\n <Icon\n icon={faChevronDownSolid}\n size=\"sm\"\n className=\"shrink-0 text-sidebar-item-chevron\"\n />\n )}\n </>\n )}\n </div>\n );\n },\n);\n\nSidebarItem.displayName = \"SidebarItem\";\n\nexport { SidebarItem, sidebarItemVariants, type SidebarItemProps };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faChevronDownSolid,\n faChevronUpSolid,\n faCircleExclamationOutline,\n faXmarkSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\nimport { TruncatedText } from \"./truncated-text\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst selectVariants = cva(\n [\n \"flex items-center w-full border cursor-pointer transition-colors\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"disabled:pointer-events-none\",\n ],\n {\n variants: {\n size: {\n sm: \"px-base gap-base rounded-base min-w-[80px]\",\n md: \"px-lg gap-base rounded-md\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// Height for each size (total outer height in px, including border)\nconst selectHeight = { sm: 32, md: 40 } as const;\n\n// Chip height per select size\nconst chipHeight = { sm: 20, md: 24 } as const;\n\n// ── State style maps ─────────────────────────────────────────────────────────\n\nconst triggerStates = {\n default: [\n \"bg-gradient-to-t from-select-bg-default from-[10%] to-select-bg-gradient-to\",\n \"border-select-border-default\",\n \"shadow-sm\",\n \"hover:from-select-bg-hover hover:from-[0%] hover:to-select-bg-gradient-to\",\n \"hover:border-select-border-hover\",\n ],\n active: [\n \"from-select-bg-hover from-[0%] to-select-bg-gradient-to\",\n \"border-select-border-hover\",\n ],\n error: [\n \"bg-select-bg-error\",\n \"border-select-border-error\",\n \"shadow-sm\",\n ],\n disabled: [\n \"bg-select-bg-disabled\",\n \"border-select-border-disabled\",\n \"shadow-none\",\n ],\n};\n\nconst textColor = {\n value: \"text-select-text-default\",\n placeholder: \"text-select-text-placeholder\",\n disabled: \"text-select-text-disabled\",\n};\n\nconst iconColor = {\n default: \"text-select-icon\",\n disabled: \"text-select-text-disabled\",\n};\n\nconst errorGuidance = {\n icon: \"shrink-0 text-select-error-icon\",\n text: \"text-xs font-medium leading-xs text-select-error-text\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface SelectProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"type\">,\n VariantProps<typeof selectVariants> {\n error?: boolean;\n errorMessage?: string;\n placeholder?: string;\n value?: string;\n /** @deprecated Use `tags` instead for multi-select display. */\n multiCount?: number;\n tags?: string[];\n onTagRemove?: (tag: string) => void;\n icon?: IconDefinition;\n avatar?: React.ReactNode;\n flag?: React.ReactNode;\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\n// ── SelectChips (overflow-aware tag row) ─────────────────────────────────────\n\ninterface SelectChipsProps {\n tags: string[];\n onTagRemove?: (tag: string) => void;\n chipHeightPx: number;\n}\n\nfunction SelectChips({ tags, onTagRemove, chipHeightPx }: SelectChipsProps) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const measureRef = React.useRef<HTMLDivElement>(null);\n const [visibleCount, setVisibleCount] = React.useState(tags.length);\n\n React.useLayoutEffect(() => {\n const container = containerRef.current;\n const measureRow = measureRef.current;\n if (!container || !measureRow) return;\n\n const measure = () => {\n const containerWidth = container.getBoundingClientRect().width;\n const chips = Array.from(\n measureRow.children,\n ) as HTMLElement[];\n\n // How much space does the +X chip need? ~32px\n const overflowChipWidth = 32;\n let usedWidth = 0;\n let count = 0;\n\n for (const chip of chips) {\n const chipWidth = chip.getBoundingClientRect().width;\n const gapWidth = count > 0 ? 4 : 0; // gap-xs = 4px\n const projectedWidth = usedWidth + gapWidth + chipWidth;\n\n // Check: would adding this chip + the overflow chip still fit?\n const remaining = tags.length - (count + 1);\n const needsOverflow = remaining > 0;\n const totalNeeded = projectedWidth + (needsOverflow ? 4 + overflowChipWidth : 0);\n\n if (totalNeeded <= containerWidth) {\n usedWidth = projectedWidth;\n count++;\n } else {\n break;\n }\n }\n\n setVisibleCount(Math.max(1, count));\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n observer.observe(container);\n return () => observer.disconnect();\n }, [tags]);\n\n const overflowCount = tags.length - visibleCount;\n const overflowTags = tags.slice(visibleCount);\n\n const chipClass = cn(\n \"inline-flex items-center gap-xs shrink-0\",\n \"px-sm rounded-base\",\n \"bg-tag-neutral-bg text-tag-neutral-text\",\n \"text-xs font-medium leading-xs\",\n \"whitespace-nowrap\",\n );\n\n return (\n <div className=\"flex flex-1 items-center gap-xs min-w-0 overflow-hidden relative\">\n {/* Hidden measurement row — renders all chips off-screen to measure widths */}\n <div\n ref={measureRef}\n aria-hidden\n className=\"absolute flex items-center gap-xs pointer-events-none\"\n style={{ visibility: \"hidden\", whiteSpace: \"nowrap\", top: 0, left: 0 }}\n >\n {tags.map((tag) => (\n <span key={tag} className={chipClass} style={{ height: chipHeightPx }}>\n <span className=\"truncate max-w-[100px]\">{tag}</span>\n {onTagRemove && (\n <span className=\"inline-flex shrink-0 w-3 h-3\" />\n )}\n </span>\n ))}\n </div>\n\n {/* Visible row */}\n <div ref={containerRef} className=\"flex flex-1 items-center gap-xs overflow-hidden\">\n {tags.slice(0, visibleCount).map((tag) => (\n <span\n key={tag}\n className={chipClass}\n style={{ height: chipHeightPx }}\n >\n <TruncatedText className=\"max-w-[100px]\">{tag}</TruncatedText>\n {onTagRemove && (\n <button\n type=\"button\"\n aria-label={`Remove ${tag}`}\n className=\"inline-flex shrink-0 items-center justify-center cursor-pointer rounded-sm hover:opacity-70\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n onTagRemove(tag);\n }}\n >\n <Icon icon={faXmarkSolid} size=\"xs\" />\n </button>\n )}\n </span>\n ))}\n {overflowCount > 0 && (\n <TooltipPrimitive.Provider>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span\n className={cn(chipClass, \"cursor-default\")}\n style={{ height: chipHeightPx }}\n >\n +{overflowCount}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className={cn(\n \"z-50 px-base py-sm rounded-lg shadow-lg\",\n \"bg-tooltip-default-bg text-tooltip-default-text\",\n \"text-xs font-regular leading-xs\",\n \"flex flex-col gap-xs\",\n \"data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out]\",\n \"data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\",\n )}\n >\n {overflowTags.map((t) => (\n <span key={t}>{t}</span>\n ))}\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n )}\n </div>\n </div>\n );\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Select = React.forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n className,\n size,\n error,\n errorMessage,\n placeholder = \"Select...\",\n value,\n multiCount,\n tags,\n onTagRemove,\n icon,\n avatar,\n flag,\n label,\n labelType,\n isOpen: controlledOpen,\n onOpenChange,\n disabled,\n children,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const triggerId = props.id ?? autoId;\n const errorId = error && errorMessage ? `${triggerId}-error` : undefined;\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isOpen = controlledOpen ?? internalOpen;\n\n const handleOpenChange = (open: boolean) => {\n if (disabled) return;\n setInternalOpen(open);\n onOpenChange?.(open);\n };\n\n const resolvedSize = size ?? \"md\";\n const hasTags = tags != null && tags.length > 0;\n const hasValue = hasTags || (value != null && value !== \"\");\n const isActive = isOpen && !error && !disabled;\n const icColor = iconColor[disabled ? \"disabled\" : \"default\"];\n\n // Resolve trigger state\n const triggerState = disabled\n ? triggerStates.disabled\n : error\n ? triggerStates.error\n : triggerStates.default;\n\n // Fixed height + vertical centering, padding adapts for tags\n const heightPx = selectHeight[resolvedSize];\n\n return (\n <PopoverPrimitive.Root\n open={isOpen}\n onOpenChange={handleOpenChange}\n >\n <div className=\"relative flex flex-col gap-xs\">\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n style={{ height: heightPx }}\n className={cn(\n selectVariants({ size }),\n triggerState,\n isActive && triggerStates.active,\n // Reduce vertical padding when tags are present\n hasTags ? \"py-xs\" : resolvedSize === \"sm\" ? \"py-sm\" : \"py-[10px]\",\n className,\n )}\n {...props}\n >\n {avatar}\n {flag}\n {icon && (\n <Icon icon={icon} size=\"sm\" className={cn(\"shrink-0\", icColor)} />\n )}\n\n {tags && tags.length > 0 ? (\n <SelectChips\n tags={tags}\n onTagRemove={onTagRemove}\n chipHeightPx={chipHeight[resolvedSize]}\n />\n ) : (\n <span\n className={cn(\n \"flex-1 truncate text-left\",\n disabled\n ? textColor.disabled\n : hasValue\n ? textColor.value\n : textColor.placeholder,\n )}\n >\n {hasValue ? value : placeholder}\n </span>\n )}\n\n <Icon\n icon={isOpen ? faChevronUpSolid : faChevronDownSolid}\n size=\"sm\"\n className={cn(\"shrink-0\", icColor)}\n />\n </button>\n </PopoverPrimitive.Trigger>\n\n {error && errorMessage && (\n <div className=\"flex items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n </div>\n\n {children && (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className={cn(\n \"z-50 w-[var(--radix-popover-trigger-width)]\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n )}\n </PopoverPrimitive.Root>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select, selectVariants, type SelectProps };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge } from \"./badge\";\n\n// ── Tabs (root + list) ──────────────────────────────────────────────────────\n\ninterface TabsProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root> {}\n\nconst Tabs = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Root>,\n TabsProps\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Root ref={ref} className={cn(\"flex flex-col\", className)} {...props} />\n));\nTabs.displayName = \"Tabs\";\n\n// ── TabList ─────────────────────────────────────────────────────────────────\n\ninterface TabListProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> {\n /** Add horizontal padding (px-xl) when used inline within a page section. */\n hasOffset?: boolean;\n}\n\nconst TabList = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.List>,\n TabListProps\n>(({ className, hasOffset = false, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"flex items-center gap-base pt-base border-b border-tab-border\",\n hasOffset && \"px-xl\",\n className,\n )}\n {...props}\n />\n));\nTabList.displayName = \"TabList\";\n\n// ── TabTrigger ──────────────────────────────────────────────────────────────\n\ninterface TabTriggerProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> {\n badge?: string;\n}\n\nconst TabTrigger = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Trigger>,\n TabTriggerProps\n>(({ className, badge, children, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"group flex flex-col items-start pb-base cursor-pointer\",\n \"data-[state=active]:border-b data-[state=active]:border-tab-item-active-border\",\n \"data-[state=active]:mb-[-1px] data-[state=active]:z-10\",\n className,\n )}\n {...props}\n >\n <div\n className={cn(\n \"flex items-center justify-center gap-sm px-base py-xs rounded-base\",\n \"group-hover:bg-tab-item-hover-bg\",\n \"group-data-[state=active]:bg-tab-item-active-bg\",\n )}\n >\n <span\n className={cn(\n \"text-sm font-medium leading-sm whitespace-nowrap\",\n \"text-tab-item-default-text\",\n \"group-data-[state=active]:text-tab-item-active-text\",\n )}\n >\n {children}\n </span>\n {badge && (\n <Badge variant=\"light\" type=\"neutral\" size=\"sm\">\n {badge}\n </Badge>\n )}\n </div>\n </TabsPrimitive.Trigger>\n));\nTabTrigger.displayName = \"TabTrigger\";\n\n// ── TabContent ──────────────────────────────────────────────────────────────\n\ninterface TabContentProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content> {}\n\nconst TabContent = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Content>,\n TabContentProps\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\"outline-none\", className)}\n {...props}\n />\n));\nTabContent.displayName = \"TabContent\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n Tabs,\n TabList,\n TabTrigger,\n TabContent,\n type TabsProps,\n type TabListProps,\n type TabTriggerProps,\n type TabContentProps,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, faXmarkSolid, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst tagVariants = cva(\n [\n \"inline-flex items-center\",\n \"gap-xs\",\n \"rounded-base\",\n \"font-medium\",\n \"whitespace-nowrap\",\n ],\n {\n variants: {\n variant: {\n brand: [\n \"bg-tag-brand-bg\",\n \"text-tag-brand-text\",\n ],\n neutral: [\n \"bg-tag-neutral-bg\",\n \"text-tag-neutral-text\",\n ],\n },\n // Categorical tones — soft style with a subtle border.\n // When `tone` is set it overrides `variant` (handled in the component).\n tone: {\n indigo: \"bg-tag-indigo-bg text-tag-indigo-text border border-tag-indigo-border\",\n rose: \"bg-tag-rose-bg text-tag-rose-text border border-tag-rose-border\",\n lime: \"bg-tag-lime-bg text-tag-lime-text border border-tag-lime-border\",\n violet: \"bg-tag-violet-bg text-tag-violet-text border border-tag-violet-border\",\n cyan: \"bg-tag-cyan-bg text-tag-cyan-text border border-tag-cyan-border\",\n orange: \"bg-tag-orange-bg text-tag-orange-text border border-tag-orange-border\",\n emerald: \"bg-tag-emerald-bg text-tag-emerald-text border border-tag-emerald-border\",\n fuchsia: \"bg-tag-fuchsia-bg text-tag-fuchsia-text border border-tag-fuchsia-border\",\n amber: \"bg-tag-amber-bg text-tag-amber-text border border-tag-amber-border\",\n slate: \"bg-tag-slate-bg text-tag-slate-text border border-tag-slate-border\",\n teal: \"bg-tag-teal-bg text-tag-teal-text border border-tag-teal-border\",\n sky: \"bg-tag-sky-bg text-tag-sky-text border border-tag-sky-border\",\n purple: \"bg-tag-purple-bg text-tag-purple-text border border-tag-purple-border\",\n pink: \"bg-tag-pink-bg text-tag-pink-text border border-tag-pink-border\",\n },\n size: {\n sm: [\n \"p-xs\",\n \"text-xs\",\n \"leading-xs\",\n ],\n md: [\n \"p-sm\",\n \"text-sm\",\n \"leading-sm\",\n ],\n },\n },\n // variant default is applied in the component so `tone` can suppress it.\n defaultVariants: {\n size: \"sm\",\n },\n },\n);\n\n// ── Icon size mapping ────────────────────────────────────────────────────────\n\nconst iconSizeMap = { sm: \"xs\", md: \"sm\" } as const;\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TagProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"type\">,\n VariantProps<typeof tagVariants> {\n icon?: IconDefinition;\n onClose?: () => void;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Tag = React.forwardRef<HTMLSpanElement, TagProps>(\n ({ className, variant, tone, size, icon, onClose, children, ...props }, ref) => {\n const iconSize = iconSizeMap[size ?? \"sm\"];\n\n return (\n <span\n ref={ref}\n className={cn(\n tagVariants({\n // A categorical tone is self-contained and overrides variant.\n variant: tone != null ? undefined : variant ?? \"brand\",\n tone,\n size,\n }),\n className,\n )}\n {...props}\n >\n {icon && (\n <Icon icon={icon} size={iconSize} className=\"shrink-0\" />\n )}\n {children}\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center\",\n \"rounded-base cursor-pointer\",\n \"p-xs\",\n size === \"md\" && \"p-sm rounded-lg\",\n )}\n aria-label=\"Remove\"\n >\n <Icon icon={faXmarkSolid} size={iconSize} />\n </button>\n )}\n </span>\n );\n },\n);\n\nTag.displayName = \"Tag\";\n\nexport { Tag, tagVariants, type TagProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n Icon,\n faCircleExclamationOutline,\n faXmarkSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { InputLabel, type InputLabelProps } from \"./input-label\";\nimport { TruncatedText } from \"./truncated-text\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst chipInputVariants = cva(\n [\n \"flex flex-wrap items-center w-full border transition-colors\",\n \"text-sm\",\n \"font-regular\",\n \"leading-sm\",\n \"gap-xs\",\n ],\n {\n variants: {\n size: {\n sm: \"px-base py-sm rounded-base\",\n md: \"px-lg py-[10px] rounded-md\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n// ── State style maps ─────────────────────────────────────────────────────────\n\nconst wrapperStates = {\n default: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-default\",\n \"text-text-input-text-default\",\n \"hover:border-text-input-border-hover\",\n \"focus-within:border-text-input-border-hover\",\n \"focus-within:shadow-focus-ring\",\n ],\n success: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-success\",\n \"text-text-input-text-default\",\n ],\n error: [\n \"bg-text-input-bg-default\",\n \"border-text-input-border-error\",\n \"text-text-input-text-default\",\n ],\n disabled: [\n \"bg-text-input-bg-disabled\",\n \"border-text-input-border-disabled\",\n \"text-text-input-text-disabled\",\n \"cursor-not-allowed\",\n ],\n};\n\nfunction resolveState(error?: boolean, success?: boolean, disabled?: boolean) {\n if (disabled) return \"disabled\" as const;\n if (error) return \"error\" as const;\n if (success) return \"success\" as const;\n return \"default\" as const;\n}\n\n// Chip height (h-5 = 20px) matches the input's `leading-sm` so the first chip\n// drops into the existing text row without pushing the wrapper taller.\n// Extra chips wrap to new rows and the wrapper grows naturally from there.\nconst chipStyle = [\n \"inline-flex items-center gap-xs shrink-0\",\n \"h-5 px-sm rounded-base\",\n \"bg-tag-neutral-bg text-tag-neutral-text\",\n \"text-xs font-medium leading-xs\",\n \"whitespace-nowrap\",\n];\n\nconst errorGuidance = {\n icon: \"shrink-0 text-text-input-error-icon\",\n text: \"text-xs font-medium leading-xs text-text-input-error-text\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface ChipInputProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">,\n VariantProps<typeof chipInputVariants> {\n values: string[];\n onChange: (values: string[]) => void;\n placeholder?: string;\n label?: string;\n labelType?: InputLabelProps[\"type\"];\n error?: boolean;\n errorMessage?: string;\n success?: boolean;\n disabled?: boolean;\n iconLeft?: IconDefinition;\n /** Max number of chips (0 = unlimited) */\n max?: number;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst ChipInput = React.forwardRef<HTMLDivElement, ChipInputProps>(\n (\n {\n className,\n size,\n values,\n onChange,\n placeholder = \"Type a value and press Enter\",\n label,\n labelType,\n error,\n errorMessage,\n success,\n disabled,\n iconLeft,\n max = 0,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const inputId = props.id ?? autoId;\n const errorId = error && errorMessage ? `${inputId}-error` : undefined;\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = React.useState(\"\");\n\n const state = resolveState(error, success, disabled);\n\n const addChip = (val: string) => {\n const trimmed = val.trim();\n if (!trimmed) return;\n if (values.includes(trimmed)) return;\n if (max > 0 && values.length >= max) return;\n onChange([...values, trimmed]);\n setInputValue(\"\");\n };\n\n const removeChip = (val: string) => {\n onChange(values.filter((v) => v !== val));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addChip(inputValue);\n } else if (e.key === \"Backspace\" && inputValue === \"\" && values.length > 0) {\n removeChip(values[values.length - 1]);\n }\n };\n\n const handleWrapperClick = () => {\n inputRef.current?.focus();\n };\n\n return (\n <div className=\"flex flex-col gap-xs\">\n {label && (\n <InputLabel type={labelType} disabled={disabled}>\n {label}\n </InputLabel>\n )}\n\n <div\n ref={ref}\n role=\"textbox\"\n aria-disabled={disabled || undefined}\n className={cn(\n chipInputVariants({ size }),\n wrapperStates[state],\n \"cursor-text\",\n className,\n )}\n onClick={handleWrapperClick}\n {...props}\n >\n {iconLeft && (\n <Icon\n icon={iconLeft}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n disabled ? \"text-text-input-text-disabled\" : \"text-text-input-icon\",\n )}\n />\n )}\n\n {values.map((val) => (\n <span key={val} className={cn(chipStyle)}>\n <TruncatedText className=\"max-w-[150px]\">{val}</TruncatedText>\n {!disabled && (\n <button\n type=\"button\"\n aria-label={`Remove ${val}`}\n className=\"inline-flex shrink-0 items-center justify-center cursor-pointer rounded-sm hover:opacity-70\"\n onClick={(e) => {\n e.stopPropagation();\n removeChip(val);\n }}\n >\n <Icon icon={faXmarkSolid} size=\"xs\" />\n </button>\n )}\n </span>\n ))}\n\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={errorId}\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className={cn(\n \"flex-1 min-w-[120px] bg-transparent outline-none\",\n \"[font-size:inherit] font-[inherit] leading-[inherit] [color:inherit]\",\n disabled\n ? \"placeholder:text-text-input-text-disabled cursor-not-allowed\"\n : \"placeholder:text-text-input-text-placeholder\",\n )}\n />\n </div>\n\n {error && errorMessage && (\n <div className=\"flex items-center gap-xs\">\n <Icon icon={faCircleExclamationOutline} size=\"xs\" className={errorGuidance.icon} />\n <span id={errorId} className={errorGuidance.text}>{errorMessage}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nChipInput.displayName = \"ChipInput\";\n\nexport { ChipInput, chipInputVariants, type ChipInputProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cn } from \"../../lib/utils\";\n\n// ── CVA variant definitions ──────────────────────────────────────────────────\n\nconst typographyVariants = cva(\"\", {\n variants: {\n variant: {\n h1: \"text-xl leading-lg\",\n h2: \"text-lg leading-md\",\n h3: \"text-md leading-base\",\n lg: \"text-base leading-base\",\n md: \"text-sm leading-sm\",\n sm: \"text-xs leading-xs\",\n xs: \"text-xxs leading-2xs\",\n },\n weight: {\n regular: \"font-regular\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n solid: \"font-solid\",\n },\n },\n defaultVariants: {\n variant: \"md\",\n weight: \"regular\",\n },\n});\n\n// ── Default element mapping ──────────────────────────────────────────────────\n\nconst defaultElementMap: Record<string, React.ElementType> = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n lg: \"p\",\n md: \"p\",\n sm: \"p\",\n xs: \"p\",\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface TypographyProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof typographyVariants> {\n as?: React.ElementType;\n asChild?: boolean;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Typography = React.forwardRef<HTMLElement, TypographyProps>(\n ({ className, variant = \"md\", weight, as, asChild = false, ...props }, ref) => {\n // Figma text styles: H1 = Semi Bold (600); H2/H3 = Medium (500); body = Regular (400)\n const defaultWeight = variant === \"h1\" ? \"semibold\" : variant === \"h2\" || variant === \"h3\" ? \"medium\" : \"regular\";\n const resolvedWeight = weight ?? defaultWeight;\n const Comp = asChild ? Slot : as ?? defaultElementMap[variant ?? \"md\"] ?? \"p\";\n\n return (\n <Comp\n ref={ref}\n className={cn(typographyVariants({ variant, weight: resolvedWeight }), className)}\n {...props}\n />\n );\n },\n);\n\nTypography.displayName = \"Typography\";\n\nexport { Typography, typographyVariants, type TypographyProps };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n// ── UserMenu (container) ────────────────────────────────────────────────────\n\ninterface UserMenuProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst UserMenu = React.forwardRef<HTMLDivElement, UserMenuProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col w-[260px] overflow-clip\",\n \"bg-user-menu-bg\",\n \"border border-user-menu-border\",\n \"rounded-lg\",\n \"shadow-lg\",\n \"divide-y divide-user-menu-border\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n ),\n);\nUserMenu.displayName = \"UserMenu\";\n\n// ── UserMenuInfoRow (header / footer) ───────────────────────────────────────\n\ninterface UserMenuInfoRowProps extends React.HTMLAttributes<HTMLDivElement> {\n avatar: React.ReactNode;\n name: React.ReactNode;\n subtitle?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nconst UserMenuInfoRow = React.forwardRef<HTMLDivElement, UserMenuInfoRowProps>(\n ({ className, avatar, name, subtitle, action, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-base p-xl\", className)}\n {...props}\n >\n {avatar}\n <div className=\"flex flex-1 flex-col min-w-0\">\n <span className=\"text-sm font-medium leading-sm text-user-menu-name truncate\">\n {name}\n </span>\n {subtitle && (\n <span className=\"text-xs font-regular leading-xs text-user-menu-subtitle truncate\">\n {subtitle}\n </span>\n )}\n </div>\n {action}\n </div>\n ),\n);\nUserMenuInfoRow.displayName = \"UserMenuInfoRow\";\n\n// ── UserMenuSection (items wrapper) ─────────────────────────────────────────\n\ninterface UserMenuSectionProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst UserMenuSection = React.forwardRef<HTMLDivElement, UserMenuSectionProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col p-base\", className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nUserMenuSection.displayName = \"UserMenuSection\";\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n UserMenu,\n UserMenuInfoRow,\n UserMenuSection,\n type UserMenuProps,\n type UserMenuInfoRowProps,\n type UserMenuSectionProps,\n};\n","import * as React from \"react\";\nimport {\n Modal,\n ModalClose,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalFooter,\n} from \"./modal\";\nimport { Button } from \"./button\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface DialogProps {\n /** Controls whether the dialog is open. */\n open?: boolean;\n /** Called when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** The dialog title. */\n title: string;\n /** Optional description below the title. */\n description?: string;\n /** Intent controls the primary action button color. */\n intent?: \"brand\" | \"alert\";\n /** Label for the primary action button. */\n primaryLabel?: string;\n /** Callback when the primary action is clicked. */\n onPrimaryAction?: () => void;\n /** Whether the primary action is disabled. */\n primaryDisabled?: boolean;\n /** Label for the cancel button. Defaults to \"Cancel\". */\n cancelLabel?: string;\n /** Callback when cancel is clicked. Defaults to closing the dialog. */\n onCancel?: () => void;\n /** Optional secondary action (rendered between cancel and primary). */\n secondaryLabel?: string;\n /** Callback for the secondary action. */\n onSecondaryAction?: () => void;\n /** Additional className for the content container. */\n className?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst Dialog = React.forwardRef<HTMLDivElement, DialogProps>(\n (\n {\n open,\n onOpenChange,\n title,\n description,\n intent = \"brand\",\n primaryLabel = \"Confirm\",\n onPrimaryAction,\n primaryDisabled,\n cancelLabel = \"Cancel\",\n onCancel,\n secondaryLabel,\n onSecondaryAction,\n className,\n },\n ref,\n ) => {\n const handleCancel = onCancel ?? (() => onOpenChange?.(false));\n\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size=\"sm\" ref={ref} className={className}>\n <ModalHeader showBorder={false} onClose={handleCancel}>\n <ModalTitle>{title}</ModalTitle>\n {description && <ModalDescription>{description}</ModalDescription>}\n </ModalHeader>\n\n <ModalFooter>\n <ModalClose asChild>\n <Button appearance=\"ghost\" intent=\"brand\" size=\"md\" onClick={handleCancel}>\n {cancelLabel}\n </Button>\n </ModalClose>\n <div className=\"flex items-center gap-lg\">\n {secondaryLabel && (\n <Button appearance=\"outlined\" intent=\"brand\" size=\"md\" onClick={onSecondaryAction}>\n {secondaryLabel}\n </Button>\n )}\n <Button\n appearance=\"solid\"\n intent={intent}\n size=\"md\"\n onClick={onPrimaryAction}\n disabled={primaryDisabled}\n >\n {primaryLabel}\n </Button>\n </div>\n </ModalFooter>\n </ModalContent>\n </Modal>\n );\n },\n);\n\nDialog.displayName = \"Dialog\";\n\n// ── Exports ──────────────────────────────────────────────────────────────────\n\nexport { Dialog, type DialogProps };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Button, type ButtonProps } from \"./button\";\n\n/* ── CVA ───────────────────────────────────────────────────────────────────── */\n\nconst emptyStateVariants = cva(\n \"flex flex-col items-center text-center\",\n {\n variants: {\n size: {\n md: \"gap-xl\",\n sm: \"gap-lg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst iconContainerVariants = cva(\n [\n \"flex items-center justify-center shrink-0\",\n \"bg-table-bg border border-table-border\",\n \"overflow-hidden\",\n ],\n {\n variants: {\n size: {\n md: \"size-10 rounded-[14px] shadow-md\",\n sm: \"size-12 rounded-[16px] shadow-sm\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface EmptyStateProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof emptyStateVariants> {\n /** FontAwesome icon to display */\n icon?: IconDefinition;\n /** Title text */\n title: string;\n /** Optional description text */\n description?: string;\n /** Primary action button props */\n primaryAction?: ButtonProps & { label: string };\n /** Secondary action button props */\n secondaryAction?: ButtonProps & { label: string };\n}\n\n/* ── Component ─────────────────────────────────────────────────────────────── */\n\nconst EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n (\n {\n className,\n size = \"md\",\n icon,\n title,\n description,\n primaryAction,\n secondaryAction,\n ...props\n },\n ref,\n ) => {\n const isMd = size === \"md\";\n\n return (\n <div\n ref={ref}\n className={cn(emptyStateVariants({ size }), className)}\n {...props}\n >\n {/* Icon container */}\n {icon && (\n <div className={iconContainerVariants({ size })}>\n <Icon\n icon={icon}\n size={isMd ? \"md\" : \"sm\"}\n className=\"text-table-cell-text-secondary\"\n />\n </div>\n )}\n\n {/* Text content */}\n <div className=\"flex flex-col gap-xs w-full\">\n <p\n className={cn(\n \"font-medium text-table-cell-text-primary\",\n isMd ? \"text-base leading-base\" : \"text-sm leading-sm\",\n )}\n >\n {title}\n </p>\n {description && (\n <p\n className={cn(\n \"font-regular text-table-cell-text-secondary\",\n isMd ? \"text-sm leading-sm\" : \"text-xs leading-xs\",\n )}\n >\n {description}\n </p>\n )}\n </div>\n\n {/* Actions */}\n {(primaryAction || secondaryAction) && (\n <div\n className={cn(\n \"flex items-center\",\n isMd ? \"gap-xl\" : \"gap-base\",\n )}\n >\n {secondaryAction && (\n <Button\n appearance=\"outlined\"\n intent=\"brand\"\n size={isMd ? \"lg\" : \"md\"}\n {...secondaryAction}\n >\n {secondaryAction.label}\n </Button>\n )}\n {primaryAction && (\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size={isMd ? \"lg\" : \"md\"}\n {...primaryAction}\n >\n {primaryAction.label}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n },\n);\nEmptyState.displayName = \"EmptyState\";\n\n/* ── Exports ───────────────────────────────────────────────────────────────── */\n\nexport { EmptyState, emptyStateVariants };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Avatar } from \"./avatar\";\nimport { Badge, type BadgeProps } from \"./badge\";\nimport { Link } from \"./link\";\nimport { Button, type ButtonProps } from \"./button\";\n\n/* ── AvatarCell ────────────────────────────────────────────────────────────── */\n\nexport interface AvatarCellProps {\n name: string;\n subtitle?: string;\n src?: string;\n /**\n * Avatar shape. `\"rounded\"` (circle) for people, `\"squared\"` for companies.\n * @default \"rounded\"\n */\n shape?: \"rounded\" | \"squared\";\n className?: string;\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .map((part) => part[0])\n .filter(Boolean)\n .slice(0, 2)\n .join(\"\")\n .toUpperCase();\n}\n\nconst AvatarCell: React.FC<AvatarCellProps> = ({\n name,\n subtitle,\n src,\n shape = \"rounded\",\n className,\n}) => (\n <div className={cn(\"flex items-center gap-lg\", className)}>\n <Avatar initials={getInitials(name)} src={src} alt={name} size=\"lg\" shape={shape} />\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-table-cell-text-primary leading-sm\">\n {name}\n </span>\n {subtitle && (\n <span className=\"text-xs font-regular text-table-cell-text-secondary leading-xs\">\n {subtitle}\n </span>\n )}\n </div>\n </div>\n);\nAvatarCell.displayName = \"AvatarCell\";\n\n/* ── StatusCell ─────────────────────────────────────────────────────────────── */\n\nexport interface StatusCellProps {\n label: string;\n variant?: BadgeProps[\"variant\"];\n type?: BadgeProps[\"type\"];\n size?: BadgeProps[\"size\"];\n className?: string;\n}\n\nconst StatusCell: React.FC<StatusCellProps> = ({\n label,\n variant = \"light\",\n type = \"primary\",\n size = \"lg\",\n className,\n}) => (\n <div className={cn(\"flex items-center\", className)}>\n {/* Compact badge for table rows: keep 14px font but tighten vertical\n padding to 2px (py-2xs) so it sits comfortably in the 40px row. */}\n <Badge variant={variant} type={type} size={size} className=\"py-2xs\">\n {label}\n </Badge>\n </div>\n);\nStatusCell.displayName = \"StatusCell\";\n\n/* ── NumberCell ──────────────────────────────────────────────────────────────── */\n\nexport interface NumberCellProps {\n value: number | string;\n /** Optional secondary stat (e.g., \"+12%\") */\n secondaryStat?: string;\n /** Color intent for the secondary stat */\n secondaryIntent?: \"success\" | \"warning\" | \"critical\" | \"neutral\";\n /** Number formatting options */\n formatOptions?: Intl.NumberFormatOptions;\n locale?: string;\n align?: \"left\" | \"right\";\n className?: string;\n}\n\nconst secondaryIntentColors = {\n success: \"text-badge-light-success-text\",\n warning: \"text-badge-light-warning-text\",\n critical: \"text-badge-light-critical-text\",\n neutral: \"text-table-cell-text-secondary\",\n} as const;\n\nconst NumberCell: React.FC<NumberCellProps> = ({\n value,\n secondaryStat,\n secondaryIntent = \"neutral\",\n formatOptions,\n locale,\n align = \"right\",\n className,\n}) => {\n const formatted =\n typeof value === \"number\" && formatOptions\n ? new Intl.NumberFormat(locale, formatOptions).format(value)\n : String(value);\n\n return (\n <div\n className={cn(\n \"flex items-center gap-sm\",\n align === \"right\" && \"justify-end\",\n className,\n )}\n >\n <span className=\"text-sm font-regular text-table-cell-text-primary\">\n {formatted}\n </span>\n {secondaryStat && (\n <span\n className={cn(\n \"text-xs font-regular\",\n secondaryIntentColors[secondaryIntent],\n )}\n >\n {secondaryStat}\n </span>\n )}\n </div>\n );\n};\nNumberCell.displayName = \"NumberCell\";\n\n/* ── DateCell ───────────────────────────────────────────────────────────────── */\n\nexport interface DateCellProps {\n date: Date | string;\n format?: Intl.DateTimeFormatOptions;\n locale?: string;\n className?: string;\n}\n\nconst defaultDateFormat: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n};\n\nconst DateCell: React.FC<DateCellProps> = ({\n date,\n format = defaultDateFormat,\n locale,\n className,\n}) => {\n const d = typeof date === \"string\" ? new Date(date) : date;\n const formatted = d.toLocaleDateString(locale, format);\n\n return (\n <span\n className={cn(\n \"text-sm font-regular text-table-cell-text-primary\",\n className,\n )}\n >\n {formatted}\n </span>\n );\n};\nDateCell.displayName = \"DateCell\";\n\n/* ── EmailCell ──────────────────────────────────────────────────────────────── */\n\nexport interface EmailCellProps {\n email: string;\n className?: string;\n}\n\nconst EmailCell: React.FC<EmailCellProps> = ({ email, className }) => (\n <Link\n intent=\"brand\"\n size=\"md\"\n href={`mailto:${email}`}\n className={cn(\"font-regular\", className)}\n >\n {email}\n </Link>\n);\nEmailCell.displayName = \"EmailCell\";\n\n/* ── LinkCell ───────────────────────────────────────────────────────────────── */\n\nexport interface LinkCellProps {\n href: string;\n label?: string;\n target?: string;\n className?: string;\n}\n\nconst LinkCell: React.FC<LinkCellProps> = ({\n href,\n label,\n target = \"_blank\",\n className,\n}) => (\n <Link intent=\"brand\" size=\"md\" href={href} target={target} className={className}>\n {label ?? href}\n </Link>\n);\nLinkCell.displayName = \"LinkCell\";\n\n/* ── TextCell ───────────────────────────────────────────────────────────────── */\n\nexport interface TextCellProps {\n value: string;\n secondary?: boolean;\n className?: string;\n}\n\nconst TextCell: React.FC<TextCellProps> = ({\n value,\n secondary = false,\n className,\n}) => (\n <span\n className={cn(\n \"text-sm font-regular\",\n secondary\n ? \"text-table-cell-text-secondary\"\n : \"text-table-cell-text-primary\",\n className,\n )}\n >\n {value}\n </span>\n);\nTextCell.displayName = \"TextCell\";\n\n/* ── ButtonCell ─────────────────────────────────────────────────────────────── */\n\nexport interface ButtonCellProps extends ButtonProps {\n className?: string;\n}\n\nconst ButtonCell: React.FC<ButtonCellProps> = ({\n className,\n children,\n ...props\n}) => (\n <div className={cn(\"flex items-center\", className)}>\n <Button size=\"sm\" appearance=\"ghost\" intent=\"brand\" {...props}>\n {children}\n </Button>\n </div>\n);\nButtonCell.displayName = \"ButtonCell\";\n\n/* ── EditableCell ──────────────────────────────────────────────────────────── */\n\nexport interface EditableCellProps {\n value: string;\n onSave: (value: string) => void;\n className?: string;\n}\n\nconst EditableCell: React.FC<EditableCellProps> = ({\n value,\n onSave,\n className,\n}) => {\n const [isEditing, setIsEditing] = React.useState(false);\n const [draft, setDraft] = React.useState(value);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n setDraft(value);\n }, [value]);\n\n React.useEffect(() => {\n if (isEditing) {\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n }, [isEditing]);\n\n const handleSave = () => {\n setIsEditing(false);\n if (draft !== value) {\n onSave(draft);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") {\n setDraft(value);\n setIsEditing(false);\n }\n };\n\n if (isEditing) {\n return (\n <input\n ref={inputRef}\n className={cn(\n \"w-full bg-transparent text-sm font-regular text-table-cell-text-primary\",\n \"outline-none border-b border-table-border py-0 h-[20px]\",\n className,\n )}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n />\n );\n }\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"text-sm font-regular text-table-cell-text-primary cursor-text leading-sm h-[20px] inline-block\",\n className,\n )}\n onDoubleClick={() => setIsEditing(true)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setIsEditing(true);\n }\n }}\n aria-label={`Edit ${value}`}\n >\n {value}\n </span>\n );\n};\nEditableCell.displayName = \"EditableCell\";\n\n/* ── RowActions ────────────────────────────────────────────────────────────── */\n\nexport interface RowActionsProps {\n children: React.ReactNode;\n className?: string;\n}\n\nconst RowActions: React.FC<RowActionsProps> = ({ children, className }) => (\n <div\n className={cn(\n \"flex items-center gap-xs opacity-0 transition-opacity\",\n \"group-hover/row:opacity-100\",\n className,\n )}\n >\n {children}\n </div>\n);\nRowActions.displayName = \"RowActions\";\n\n/* ── Exports ───────────────────────────────────────────────────────────────── */\n\nexport {\n AvatarCell,\n StatusCell,\n NumberCell,\n DateCell,\n EmailCell,\n LinkCell,\n TextCell,\n ButtonCell,\n EditableCell,\n RowActions,\n};\n","import * as React from \"react\";\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n type RowSelectionState,\n type ColumnOrderState,\n type ColumnPinningState,\n type ColumnSizingState,\n type PaginationState,\n type OnChangeFn,\n type Table as TanstackTable,\n type Header,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n horizontalListSortingStrategy,\n useSortable,\n arrayMove,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport {\n Icon,\n faChevronLeftOutline,\n faChevronRightOutline,\n faSortSolid,\n faSortUpSolid,\n faSortDownSolid,\n faFilterSolid,\n faFilterOutline,\n faGripDotsVerticalSolid,\n faEllipsisVerticalSolid,\n type IconDefinition,\n} from \"@l3mpire/icons\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"./table\";\nimport { DataTableSettingsModal } from \"./data-table-settings-modal\";\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface DataTableProps<TData, TValue> {\n /** Column definitions — see TanStack Table docs */\n columns: ColumnDef<TData, TValue>[];\n /** Row data array */\n data: TData[];\n\n /** Enable client-side sorting */\n enableSorting?: boolean;\n /** Enable client-side column filtering */\n enableFiltering?: boolean;\n /** Enable client-side pagination */\n enablePagination?: boolean;\n /** Enable row selection via checkbox */\n enableRowSelection?: boolean;\n /** Enable column visibility toggling */\n enableColumnVisibility?: boolean;\n /** Enable column pinning */\n enableColumnPinning?: boolean;\n /** Enable column resizing */\n enableColumnResizing?: boolean;\n /** Enable column drag reordering */\n enableColumnDrag?: boolean;\n /**\n * Render a sticky-right \"Manage table\" button in the header row that opens\n * a modal letting the user toggle column visibility. Reads/writes the\n * controlled `columnVisibility` + `onColumnVisibilityChange` props.\n *\n * Implies `enableColumnVisibility`.\n */\n enableTableSettings?: boolean;\n /**\n * Column IDs that cannot be hidden from the manage-table modal.\n * Defaults to columns with `enableHiding: false`, plus any column with id `select`.\n */\n lockedColumnIds?: string[];\n /** Override the manage-table modal title. Defaults to \"Manage table\". */\n tableSettingsTitle?: string;\n\n /** Controlled sorting state */\n sorting?: SortingState;\n onSortingChange?: OnChangeFn<SortingState>;\n\n /** Controlled column filters state */\n columnFilters?: ColumnFiltersState;\n onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>;\n\n /** Controlled pagination state */\n pagination?: PaginationState;\n onPaginationChange?: OnChangeFn<PaginationState>;\n\n /** Controlled row selection state */\n rowSelection?: RowSelectionState;\n onRowSelectionChange?: OnChangeFn<RowSelectionState>;\n\n /** Controlled column visibility state */\n columnVisibility?: VisibilityState;\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>;\n\n /** Controlled column order state */\n columnOrder?: ColumnOrderState;\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>;\n\n /** Controlled column pinning state */\n columnPinning?: ColumnPinningState;\n onColumnPinningChange?: OnChangeFn<ColumnPinningState>;\n\n /** Render prop to access the table instance for external controls */\n children?: (table: TanstackTable<TData>) => React.ReactNode;\n\n /** className for the table wrapper */\n className?: string;\n\n /** Custom empty state (renders inside a full-width cell) */\n emptyState?: React.ReactNode;\n\n /** Simple empty message string (fallback if emptyState not provided) */\n emptyMessage?: React.ReactNode;\n\n /** Add border-top to the header (useful in full-width / no container layouts) */\n bordered?: boolean;\n\n /**\n * Who owns the horizontal scroll container.\n * - `self` (default) — Table wraps in `<div class=\"overflow-auto\">`.\n * - `parent` — no wrapping scroll container; parent must scroll. Required\n * when sticky column pinning has to compose with a page-level scroll.\n */\n scrollContainer?: \"self\" | \"parent\";\n\n /**\n * Render slot mounted as a `<th>` at the right end of the header row.\n * Useful for hosting a custom column manager next to the headers.\n */\n columnManagerSlot?: React.ReactNode;\n}\n\n/* ── Column meta augmentation ─────────────────────────────────────────────── */\n\ndeclare module \"@tanstack/react-table\" {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ColumnMeta<TData extends unknown, TValue> {\n icon?: IconDefinition;\n enableDrag?: boolean;\n filterType?: \"string\" | \"number\" | \"date\" | \"select\";\n filterOptions?: string[];\n }\n}\n\n/* ── Filter operators by type ─────────────────────────────────────────────── */\n\nexport type FilterOperator =\n | \"contains\"\n | \"does_not_contain\"\n | \"is\"\n | \"is_not\"\n | \"starts_with\"\n | \"ends_with\"\n | \"is_empty\"\n | \"is_not_empty\"\n | \"equals\"\n | \"not_equals\"\n | \"greater_than\"\n | \"less_than\"\n | \"greater_than_or_equal\"\n | \"less_than_or_equal\"\n | \"between\"\n | \"is_before\"\n | \"is_after\"\n | \"is_between\"\n | \"is_any_of\"\n | \"is_none_of\";\n\nconst filterOperatorsByType: Record<\n string,\n { value: FilterOperator; label: string }[]\n> = {\n string: [\n { value: \"contains\", label: \"Contains\" },\n { value: \"does_not_contain\", label: \"Does not contain\" },\n { value: \"is\", label: \"Is\" },\n { value: \"is_not\", label: \"Is not\" },\n { value: \"starts_with\", label: \"Starts with\" },\n { value: \"ends_with\", label: \"Ends with\" },\n { value: \"is_empty\", label: \"Is empty\" },\n { value: \"is_not_empty\", label: \"Is not empty\" },\n ],\n number: [\n { value: \"equals\", label: \"Equals\" },\n { value: \"not_equals\", label: \"Does not equal\" },\n { value: \"greater_than\", label: \"Greater than\" },\n { value: \"less_than\", label: \"Less than\" },\n { value: \"greater_than_or_equal\", label: \"Greater than or equal\" },\n { value: \"less_than_or_equal\", label: \"Less than or equal\" },\n { value: \"between\", label: \"Between\" },\n { value: \"is_empty\", label: \"Is empty\" },\n { value: \"is_not_empty\", label: \"Is not empty\" },\n ],\n date: [\n { value: \"is\", label: \"Is\" },\n { value: \"is_before\", label: \"Is before\" },\n { value: \"is_after\", label: \"Is after\" },\n { value: \"is_between\", label: \"Is between\" },\n { value: \"is_empty\", label: \"Is empty\" },\n { value: \"is_not_empty\", label: \"Is not empty\" },\n ],\n select: [\n { value: \"is\", label: \"Is\" },\n { value: \"is_not\", label: \"Is not\" },\n { value: \"is_any_of\", label: \"Is any of\" },\n { value: \"is_none_of\", label: \"Is none of\" },\n ],\n};\n\nconst noValueOperators = new Set<FilterOperator>([\n \"is_empty\",\n \"is_not_empty\",\n]);\n\n/* ── ColumnFilterPopover ──────────────────────────────────────────────────── */\n\nfunction ColumnFilterPopover({\n filterType = \"string\",\n filterValue,\n onApply,\n onClear,\n children,\n}: {\n filterType?: \"string\" | \"number\" | \"date\" | \"select\";\n filterValue: unknown;\n onApply: (value: { operator: FilterOperator; value: string }) => void;\n onClear: () => void;\n children: React.ReactNode;\n}) {\n const operators =\n filterOperatorsByType[filterType] ?? filterOperatorsByType.string;\n const [operator, setOperator] = React.useState<FilterOperator>(\n operators[0].value,\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n if (open && filterValue && typeof filterValue === \"object\") {\n const fv = filterValue as { operator?: FilterOperator; value?: string };\n if (fv.operator) setOperator(fv.operator);\n if (fv.value) setInputValue(fv.value);\n } else if (open && !filterValue) {\n setOperator(operators[0].value);\n setInputValue(\"\");\n }\n }, [open, filterValue, operators]);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className={cn(\n \"z-50 w-[240px] rounded-lg border border-table-border bg-table-bg p-lg shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex flex-col gap-sm\">\n <span className=\"text-xs font-medium text-table-head-text\">\n Filter\n </span>\n <select\n className={cn(\n \"h-8 w-full rounded-base border border-table-border bg-table-bg\",\n \"px-sm text-xs text-table-cell-text-primary\",\n \"cursor-pointer outline-none\",\n )}\n value={operator}\n onChange={(e) => setOperator(e.target.value as FilterOperator)}\n >\n {operators.map((op) => (\n <option key={op.value} value={op.value}>\n {op.label}\n </option>\n ))}\n </select>\n {!noValueOperators.has(operator) && (\n <input\n type={\n filterType === \"number\"\n ? \"number\"\n : filterType === \"date\"\n ? \"date\"\n : \"text\"\n }\n placeholder=\"Value...\"\n className={cn(\n \"h-8 w-full rounded-base border border-table-border bg-table-bg\",\n \"px-sm text-xs text-table-cell-text-primary\",\n \"outline-none placeholder:text-table-cell-text-secondary\",\n )}\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n onApply({ operator, value: inputValue });\n setOpen(false);\n }\n }}\n />\n )}\n <div className=\"flex items-center justify-end gap-xs pt-xs\">\n <Button\n appearance=\"ghost\"\n intent=\"brand\"\n size=\"sm\"\n onClick={() => {\n onClear();\n setOpen(false);\n }}\n >\n Clear\n </Button>\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size=\"sm\"\n onClick={() => {\n onApply({ operator, value: inputValue });\n setOpen(false);\n }}\n >\n Apply\n </Button>\n </div>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\n/* ── Draggable header cell ────────────────────────────────────────────────── */\n\nfunction DraggableHeaderCell<TData>({\n header,\n enableSorting,\n enableFiltering,\n enableColumnResizing,\n isDragEnabled,\n}: {\n header: Header<TData, unknown>;\n enableSorting?: boolean;\n enableFiltering?: boolean;\n enableColumnResizing?: boolean;\n isDragEnabled?: boolean;\n}) {\n const meta = header.column.columnDef.meta;\n const canSort = enableSorting && header.column.getCanSort();\n const isSorted = header.column.getIsSorted();\n const isFiltered = header.column.getIsFiltered();\n const leadingIcon = meta?.icon;\n const canDrag = isDragEnabled && meta?.enableDrag !== false;\n const filterType = meta?.filterType ?? \"string\";\n const [isHovered, setIsHovered] = React.useState(false);\n\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id: header.column.id,\n disabled: !canDrag,\n });\n\n const pinned = header.column.getIsPinned();\n const style: React.CSSProperties = {\n width: enableColumnResizing ? header.getSize() : undefined,\n minWidth: enableColumnResizing\n ? header.column.columnDef.minSize\n : undefined,\n maxWidth: enableColumnResizing\n ? header.column.columnDef.maxSize\n : undefined,\n transform: CSS.Translate.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n // Pinning sticky positioning — must override the default `relative` we\n // also use for the resize handle. The resize handle is still absolutely\n // positioned because it references `right: 0` relative to the cell.\n ...(pinned === \"left\"\n ? {\n position: \"sticky\" as const,\n left: header.column.getStart(\"left\"),\n zIndex: isDragging ? 5 : 3,\n }\n : pinned === \"right\"\n ? {\n position: \"sticky\" as const,\n right: header.column.getAfter(\"right\"),\n zIndex: isDragging ? 5 : 3,\n }\n : {\n position: \"relative\" as const,\n zIndex: isDragging ? 1 : undefined,\n }),\n };\n\n return (\n <TableHead\n ref={setNodeRef}\n colSpan={header.colSpan}\n style={style}\n data-pinned={pinned || undefined}\n className={cn(\n canSort && \"cursor-pointer select-none\",\n // Pinned columns keep their bg so the scrolling content can pass\n // under them. The default `bg-table-head-bg-default` is already on\n // <th> so we only need to add a divider on the boundary.\n pinned === \"left\" && \"shadow-[1px_0_0_0_var(--core-border-main-primary)]\",\n pinned === \"right\" && \"shadow-[-1px_0_0_0_var(--core-border-main-primary)]\",\n )}\n onClick={canSort ? header.column.getToggleSortingHandler() : undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div className=\"flex items-center gap-xs\">\n {/* Leading: icon by default, drag handle on hover */}\n {leadingIcon && (\n canDrag ? (\n <div\n {...attributes}\n {...listeners}\n className=\"shrink-0 flex items-center cursor-grab\"\n onClick={(e) => e.stopPropagation()}\n >\n <Icon\n icon={isHovered ? faGripDotsVerticalSolid : leadingIcon}\n size=\"xs\"\n className=\"text-table-head-icon\"\n />\n </div>\n ) : (\n <Icon\n icon={leadingIcon}\n size=\"xs\"\n className=\"shrink-0 text-table-head-icon\"\n />\n )\n )}\n {!leadingIcon && canDrag && isHovered && (\n <div\n {...attributes}\n {...listeners}\n className=\"shrink-0 flex items-center cursor-grab\"\n onClick={(e) => e.stopPropagation()}\n >\n <Icon\n icon={faGripDotsVerticalSolid}\n size=\"xs\"\n className=\"text-table-head-icon\"\n />\n </div>\n )}\n\n {/* Label — fills remaining space */}\n <span className=\"flex-1 truncate\">\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </span>\n\n {/* Sort icon — visible on hover or when active */}\n {canSort && (isSorted || isHovered) && (\n <Icon\n icon={\n isSorted === \"asc\"\n ? faSortUpSolid\n : isSorted === \"desc\"\n ? faSortDownSolid\n : faSortSolid\n }\n size=\"xs\"\n className=\"shrink-0 text-table-head-icon\"\n />\n )}\n\n {/* Filter popover — visible on hover or when filtered */}\n {enableFiltering && (isFiltered || isHovered) && (\n <ColumnFilterPopover\n filterType={filterType}\n filterValue={header.column.getFilterValue()}\n onApply={(val) => header.column.setFilterValue(val)}\n onClear={() => header.column.setFilterValue(undefined)}\n >\n <button\n type=\"button\"\n onClick={(e) => e.stopPropagation()}\n className=\"shrink-0 p-0 border-0 bg-transparent cursor-pointer\"\n >\n <Icon\n icon={isFiltered ? faFilterSolid : faFilterOutline}\n size=\"xs\"\n className=\"text-table-head-icon\"\n />\n </button>\n </ColumnFilterPopover>\n )}\n </div>\n\n {/* Resize handle */}\n {enableColumnResizing && header.column.getCanResize() && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onDoubleClick={() => header.column.resetSize()}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"absolute right-0 top-0 h-full w-[4px] cursor-col-resize select-none touch-none\",\n \"hover:bg-table-head-text/20\",\n header.column.getIsResizing() && \"bg-table-head-text/30\",\n )}\n />\n )}\n </TableHead>\n );\n}\n\n/* ── Custom filter function ───────────────────────────────────────────────── */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction operatorFilterFn(\n row: any,\n columnId: string,\n filterValue: any,\n): boolean {\n if (typeof filterValue === \"string\") {\n const cellValue = String(row.getValue(columnId) ?? \"\").toLowerCase();\n return cellValue.includes(filterValue.toLowerCase());\n }\n\n if (!filterValue || typeof filterValue !== \"object\") return true;\n\n const { operator, value } = filterValue as {\n operator: FilterOperator;\n value: string;\n };\n const cellValue = row.getValue(columnId);\n const cellStr = String(cellValue ?? \"\").toLowerCase();\n const filterStr = (value ?? \"\").toLowerCase();\n\n switch (operator) {\n case \"contains\":\n return cellStr.includes(filterStr);\n case \"does_not_contain\":\n return !cellStr.includes(filterStr);\n case \"is\":\n case \"equals\":\n return cellStr === filterStr;\n case \"is_not\":\n case \"not_equals\":\n return cellStr !== filterStr;\n case \"starts_with\":\n return cellStr.startsWith(filterStr);\n case \"ends_with\":\n return cellStr.endsWith(filterStr);\n case \"is_empty\":\n return cellStr === \"\";\n case \"is_not_empty\":\n return cellStr !== \"\";\n case \"greater_than\":\n return Number(cellValue) > Number(value);\n case \"less_than\":\n return Number(cellValue) < Number(value);\n case \"greater_than_or_equal\":\n return Number(cellValue) >= Number(value);\n case \"less_than_or_equal\":\n return Number(cellValue) <= Number(value);\n case \"is_before\": {\n const d = new Date(String(cellValue));\n return d < new Date(value);\n }\n case \"is_after\": {\n const d = new Date(String(cellValue));\n return d > new Date(value);\n }\n case \"between\": {\n const parts = value.split(\",\").map((s) => Number(s.trim()));\n if (parts.length !== 2) return true;\n const num = Number(cellValue);\n return num >= parts[0] && num <= parts[1];\n }\n case \"is_between\": {\n const parts = value.split(\",\").map((s) => s.trim());\n if (parts.length !== 2) return true;\n const d = new Date(String(cellValue));\n return d >= new Date(parts[0]) && d <= new Date(parts[1]);\n }\n case \"is_any_of\": {\n const options = value.split(\",\").map((s) => s.trim().toLowerCase());\n return options.includes(cellStr);\n }\n case \"is_none_of\": {\n const options = value.split(\",\").map((s) => s.trim().toLowerCase());\n return !options.includes(cellStr);\n }\n default:\n return true;\n }\n}\n\n/* ── DataTable ─────────────────────────────────────────────────────────────── */\n\nfunction DataTableInner<TData, TValue>({\n columns,\n data,\n enableSorting = false,\n enableFiltering = false,\n enablePagination = false,\n enableRowSelection = false,\n enableColumnVisibility = false,\n enableColumnPinning = false,\n enableColumnResizing = false,\n enableColumnDrag = false,\n enableTableSettings = false,\n lockedColumnIds,\n tableSettingsTitle,\n sorting: sortingProp,\n onSortingChange,\n columnFilters: columnFiltersProp,\n onColumnFiltersChange,\n pagination: paginationProp,\n onPaginationChange,\n rowSelection: rowSelectionProp,\n onRowSelectionChange,\n columnVisibility: columnVisibilityProp,\n onColumnVisibilityChange,\n columnOrder: columnOrderProp,\n onColumnOrderChange,\n columnPinning: columnPinningProp,\n onColumnPinningChange,\n children,\n className,\n emptyState,\n emptyMessage = \"No results.\",\n bordered = false,\n scrollContainer = \"self\",\n columnManagerSlot,\n}: DataTableProps<TData, TValue>) {\n // enableTableSettings implies enableColumnVisibility — the modal needs the\n // controlled visibility map to be in sync with the table state.\n const effectiveColumnVisibility =\n enableColumnVisibility || enableTableSettings;\n\n // Modal state for the manage-table button (only used when enabled).\n const [tableSettingsOpen, setTableSettingsOpen] = React.useState(false);\n\n // Internal state (used when not controlled)\n const [internalSorting, setInternalSorting] =\n React.useState<SortingState>([]);\n const [internalColumnFilters, setInternalColumnFilters] =\n React.useState<ColumnFiltersState>([]);\n const [internalPagination, setInternalPagination] =\n React.useState<PaginationState>({ pageIndex: 0, pageSize: 10 });\n const [internalRowSelection, setInternalRowSelection] =\n React.useState<RowSelectionState>({});\n const [internalColumnVisibility, setInternalColumnVisibility] =\n React.useState<VisibilityState>({});\n const [internalColumnOrder, setInternalColumnOrder] =\n React.useState<ColumnOrderState>([]);\n const [internalColumnPinning, setInternalColumnPinning] =\n React.useState<ColumnPinningState>({});\n const [internalColumnSizing, setInternalColumnSizing] =\n React.useState<ColumnSizingState>({});\n\n // Derive column order: controlled > internal > default from column defs\n const columnOrder =\n columnOrderProp ?? internalColumnOrder;\n const setColumnOrder = onColumnOrderChange ?? setInternalColumnOrder;\n\n // Resolve every column id once, used both to seed the order and to detect\n // newly-added columns that should be auto-appended.\n const allColumnIds = React.useMemo(\n () =>\n columns\n .map((c) => {\n if (\"accessorKey\" in c && c.accessorKey) return String(c.accessorKey);\n if (\"id\" in c && c.id) return c.id;\n return \"\";\n })\n .filter(Boolean),\n [columns],\n );\n\n // Initialize column order from column defs if empty, and auto-append any\n // newly added column ID so a fresh user-created column shows up at the end\n // instead of being silently ignored by the stale order.\n React.useEffect(() => {\n if (!enableColumnDrag) return;\n if (columnOrder.length === 0) {\n setColumnOrder(allColumnIds);\n return;\n }\n const missing = allColumnIds.filter((id) => !columnOrder.includes(id));\n if (missing.length > 0) {\n setColumnOrder([...columnOrder, ...missing]);\n }\n }, [enableColumnDrag, columnOrder, allColumnIds, setColumnOrder]);\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n ...(enableSorting && {\n enableSorting: true,\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: onSortingChange ?? setInternalSorting,\n }),\n\n // Filtering\n ...(enableFiltering && {\n enableColumnFilters: true,\n getFilteredRowModel: getFilteredRowModel(),\n onColumnFiltersChange:\n onColumnFiltersChange ?? setInternalColumnFilters,\n filterFns: {\n operator: operatorFilterFn,\n },\n globalFilterFn: operatorFilterFn,\n }),\n defaultColumn: {\n filterFn: operatorFilterFn,\n },\n\n // Pagination\n ...(enablePagination && {\n getPaginationRowModel: getPaginationRowModel(),\n onPaginationChange: onPaginationChange ?? setInternalPagination,\n }),\n\n // Row selection\n ...(enableRowSelection && {\n enableRowSelection: true,\n onRowSelectionChange:\n onRowSelectionChange ?? setInternalRowSelection,\n }),\n\n // Column visibility\n ...(effectiveColumnVisibility && {\n onColumnVisibilityChange:\n onColumnVisibilityChange ?? setInternalColumnVisibility,\n }),\n\n // Column order (always wire up for drag reorder)\n onColumnOrderChange: setColumnOrder,\n\n // Column pinning\n ...(enableColumnPinning && {\n enableColumnPinning: true,\n onColumnPinningChange:\n onColumnPinningChange ?? setInternalColumnPinning,\n }),\n\n // Column resizing\n ...(enableColumnResizing && {\n enableColumnResizing: true,\n columnResizeMode: \"onChange\" as const,\n onColumnSizingChange: setInternalColumnSizing,\n }),\n\n state: {\n ...(enableSorting && {\n sorting: sortingProp ?? internalSorting,\n }),\n ...(enableFiltering && {\n columnFilters: columnFiltersProp ?? internalColumnFilters,\n }),\n ...(enablePagination && {\n pagination: paginationProp ?? internalPagination,\n }),\n ...(enableRowSelection && {\n rowSelection: rowSelectionProp ?? internalRowSelection,\n }),\n ...(effectiveColumnVisibility && {\n columnVisibility: columnVisibilityProp ?? internalColumnVisibility,\n }),\n columnOrder,\n ...(enableColumnPinning && {\n columnPinning: columnPinningProp ?? internalColumnPinning,\n }),\n ...(enableColumnResizing && {\n columnSizing: internalColumnSizing,\n }),\n },\n });\n\n // dnd-kit sensors — activate after 5px movement to avoid conflicts with clicks\n const sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: { distance: 5 },\n }),\n useSensor(TouchSensor, {\n activationConstraint: { delay: 150, tolerance: 5 },\n }),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const currentOrder = table.getState().columnOrder;\n const ids =\n currentOrder.length > 0\n ? currentOrder\n : table.getAllLeafColumns().map((c) => c.id);\n\n const oldIndex = ids.indexOf(String(active.id));\n const newIndex = ids.indexOf(String(over.id));\n if (oldIndex === -1 || newIndex === -1) return;\n\n const newOrder = arrayMove(ids, oldIndex, newIndex);\n setColumnOrder(newOrder);\n },\n [table, setColumnOrder],\n );\n\n // Column IDs for sortable context\n const columnIds = React.useMemo(\n () => table.getAllLeafColumns().map((c) => c.id),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [table.getAllLeafColumns().length, columnOrder],\n );\n\n // CSS variables for column sizing (performance: avoids inline style recalc per cell)\n const columnSizeVars = React.useMemo(() => {\n if (!enableColumnResizing) return {};\n const headers = table.getFlatHeaders();\n const vars: Record<string, string> = {};\n for (const header of headers) {\n vars[`--header-${header.id}-size`] = `${header.getSize()}px`;\n vars[`--col-${header.column.id}-size`] = `${header.column.getSize()}px`;\n }\n return vars;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enableColumnResizing, table.getState().columnSizing]);\n\n // Total table width for column resizing — allows horizontal overflow\n const totalSize = enableColumnResizing\n ? table.getTotalSize()\n : undefined;\n\n const tableContent = (\n <div className={cn(\"w-full\", className)} style={columnSizeVars as React.CSSProperties}>\n <Table\n scrollContainer={scrollContainer}\n style={totalSize ? { width: totalSize, tableLayout: \"fixed\" } : undefined}\n className={totalSize ? \"w-auto\" : undefined}\n >\n <TableHeader\n className={cn(bordered && \"border-t border-table-border\")}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {enableColumnDrag ? (\n <SortableContext\n items={columnIds}\n strategy={horizontalListSortingStrategy}\n >\n {headerGroup.headers.map((header) => (\n <DraggableHeaderCell\n key={header.id}\n header={header}\n enableSorting={enableSorting}\n enableFiltering={enableFiltering}\n enableColumnResizing={enableColumnResizing}\n isDragEnabled={enableColumnDrag}\n />\n ))}\n </SortableContext>\n ) : (\n headerGroup.headers.map((header) => (\n <DraggableHeaderCell\n key={header.id}\n header={header}\n enableSorting={enableSorting}\n enableFiltering={enableFiltering}\n enableColumnResizing={enableColumnResizing}\n isDragEnabled={false}\n />\n ))\n )}\n {columnManagerSlot && (\n <th\n className=\"sticky right-0 z-[4] w-10 min-w-10 p-0 bg-table-head-bg-default border-b border-l border-table-border\"\n >\n <span className=\"flex items-center justify-center h-full\">\n {columnManagerSlot}\n </span>\n </th>\n )}\n {enableTableSettings && (\n <th\n role=\"button\"\n aria-label={tableSettingsTitle ?? \"Manage table\"}\n onClick={() => setTableSettingsOpen(true)}\n className={cn(\n \"sticky right-0 z-[4] w-10 min-w-10 p-0 cursor-pointer\",\n \"bg-table-head-bg-default border-b border-l border-table-border\",\n \"text-table-head-icon\",\n \"opacity-0 pointer-events-none\",\n \"transition-[opacity,color,background-color] duration-150\",\n \"group-hover/row:opacity-100 group-hover/row:pointer-events-auto\",\n \"hover:bg-table-head-bg-hover hover:text-table-cell-text-primary\",\n )}\n >\n <span className=\"flex items-center justify-center h-full\">\n <Icon icon={faEllipsisVerticalSolid} size=\"xs\" />\n </span>\n </th>\n )}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n >\n {row.getVisibleCells().map((cell) => {\n const cellPinned = cell.column.getIsPinned();\n const cellStyle: React.CSSProperties = {\n ...(enableColumnResizing\n ? { width: `var(--col-${cell.column.id}-size)` }\n : {}),\n ...(cellPinned === \"left\"\n ? {\n position: \"sticky\" as const,\n left: cell.column.getStart(\"left\"),\n zIndex: 2,\n }\n : cellPinned === \"right\"\n ? {\n position: \"sticky\" as const,\n right: cell.column.getAfter(\"right\"),\n zIndex: 2,\n }\n : {}),\n };\n return (\n <TableCell\n key={cell.id}\n style={cellStyle}\n data-pinned={cellPinned || undefined}\n className={cn(\n enableColumnResizing && \"truncate\",\n // Pinned cells need an opaque background so scrolled\n // content does not show through.\n cellPinned === \"left\" &&\n \"bg-table-row-bg-default group-hover/row:bg-table-row-bg-hover data-[state=selected]:bg-table-row-bg-selected shadow-[1px_0_0_0_var(--core-border-main-primary)]\",\n cellPinned === \"right\" &&\n \"bg-table-row-bg-default group-hover/row:bg-table-row-bg-hover data-[state=selected]:bg-table-row-bg-selected shadow-[-1px_0_0_0_var(--core-border-main-primary)]\",\n )}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))\n ) : (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell\n colSpan={columns.length}\n className=\"h-48 text-center border-b-0\"\n >\n {emptyState ?? (\n <span className=\"text-sm text-table-cell-text-secondary\">\n {emptyMessage}\n </span>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n {children?.(table)}\n {enableTableSettings && (\n <DataTableSettingsModal\n open={tableSettingsOpen}\n onOpenChange={setTableSettingsOpen}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns={columns as ColumnDef<any, any>[]}\n columnVisibility={columnVisibilityProp ?? internalColumnVisibility}\n onApply={(next) => {\n const apply =\n onColumnVisibilityChange ?? setInternalColumnVisibility;\n apply(next as VisibilityState);\n }}\n lockedColumnIds={lockedColumnIds}\n title={tableSettingsTitle}\n />\n )}\n </div>\n );\n\n if (enableColumnDrag) {\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n {tableContent}\n </DndContext>\n );\n }\n\n return tableContent;\n}\n\n/* ── DataTablePagination ──────────────────────────────────────────────────── */\n\nexport interface DataTablePaginationProps<TData> {\n table: TanstackTable<TData>;\n pageSizeOptions?: number[];\n className?: string;\n}\n\nfunction DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 20, 30, 50, 100],\n className,\n}: DataTablePaginationProps<TData>) {\n const selectedCount = table.getFilteredSelectedRowModel().rows.length;\n const totalCount = table.getFilteredRowModel().rows.length;\n const pageIndex = table.getState().pagination.pageIndex;\n const pageCount = table.getPageCount();\n\n return (\n <div\n className={cn(\n \"flex items-center justify-between px-xl py-lg\",\n className,\n )}\n >\n {/* Left: selection info */}\n <div className=\"text-xs text-table-cell-text-secondary\">\n {selectedCount > 0 && (\n <span>\n {selectedCount} of {totalCount} row(s) selected\n </span>\n )}\n </div>\n\n {/* Right: page size + navigation */}\n <div className=\"flex items-center gap-xl\">\n {/* Rows per page */}\n <div className=\"flex items-center gap-sm\">\n <span className=\"text-xs text-table-cell-text-secondary whitespace-nowrap\">\n Rows per page\n </span>\n <select\n className={cn(\n \"h-8 rounded-base border border-table-border bg-table-bg\",\n \"px-sm text-xs text-table-cell-text-primary\",\n \"cursor-pointer outline-none\",\n )}\n value={table.getState().pagination.pageSize}\n onChange={(e) => table.setPageSize(Number(e.target.value))}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n\n {/* Page indicator */}\n <span className=\"text-xs text-table-cell-text-secondary whitespace-nowrap\">\n Page {pageIndex + 1} of {pageCount}\n </span>\n\n {/* Navigation buttons */}\n <div className=\"flex items-center gap-xs\">\n <Button\n appearance=\"outlined\"\n intent=\"brand\"\n size=\"md\"\n leftIcon={faChevronLeftOutline}\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Previous page\"\n />\n <Button\n appearance=\"outlined\"\n intent=\"brand\"\n size=\"md\"\n leftIcon={faChevronRightOutline}\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Next page\"\n />\n </div>\n </div>\n </div>\n );\n}\n\n/* ── Exports ──────────────────────────────────────────────────────────────── */\n\nconst DataTable = Object.assign(DataTableInner, { displayName: \"DataTable\" });\nObject.assign(DataTablePagination, { displayName: \"DataTablePagination\" });\n\nexport { DataTable, DataTablePagination, flexRender };\nexport {\n DataTableSettingsModal,\n type DataTableSettingsModalProps,\n} from \"./data-table-settings-modal\";\nexport type {\n ColumnDef,\n SortingState,\n ColumnFiltersState,\n RowSelectionState,\n};\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Table ─────────────────────────────────────────────────────────────────── */\n\nexport type TableScrollContainer = \"self\" | \"parent\";\n\nexport interface TableProps extends React.HTMLAttributes<HTMLTableElement> {\n /**\n * Who owns the horizontal scroll container.\n * - `self` (default) — Table wraps in `<div class=\"overflow-auto\">`. Good\n * for sectioned layouts but breaks sticky column pinning against a page\n * scroll.\n * - `parent` — no wrapping scroll container. The parent layout must\n * provide scrolling. Required for sticky column pinning to work against\n * the page or a sticky body scroll.\n */\n scrollContainer?: TableScrollContainer;\n}\n\nconst Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ className, scrollContainer = \"self\", ...props }, ref) => {\n const tableEl = (\n <table\n ref={ref}\n className={cn(\n \"w-full caption-bottom border-collapse text-sm\",\n className,\n )}\n {...props}\n />\n );\n if (scrollContainer === \"parent\") return tableEl;\n return <div className=\"relative w-full overflow-auto\">{tableEl}</div>;\n },\n);\nTable.displayName = \"Table\";\n\n/* ── TableHeader ───────────────────────────────────────────────────────────── */\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn(\"bg-table-head-bg-default\", className)}\n {...props}\n />\n));\nTableHeader.displayName = \"TableHeader\";\n\n/* ── TableBody ─────────────────────────────────────────────────────────────── */\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"[&_tr:last-child_td]:border-b-0\", className)} {...props} />\n));\nTableBody.displayName = \"TableBody\";\n\n/* ── TableFooter ───────────────────────────────────────────────────────────── */\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t border-table-border bg-table-bg font-medium\",\n className,\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\n/* ── TableRow ──────────────────────────────────────────────────────────────── */\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"group/row border-b border-table-border bg-table-row-bg-default transition-colors\",\n \"hover:bg-table-row-bg-hover\",\n \"data-[state=selected]:bg-table-row-bg-selected\",\n className,\n )}\n {...props}\n />\n));\nTableRow.displayName = \"TableRow\";\n\n/* ── TableHead ─────────────────────────────────────────────────────────────── */\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n // Fixed 32px header, 12px horizontal padding, no vertical padding.\n \"group/head h-8 px-lg py-0 text-left align-middle text-xs font-medium leading-xs\",\n \"text-table-head-text bg-table-head-bg-default\",\n \"hover:bg-table-head-bg-hover\",\n \"border-b border-r border-table-border last:border-r-0\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = \"TableHead\";\n\n/* ── TableCell ─────────────────────────────────────────────────────────────── */\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n // Fixed 40px row, 12px horizontal padding, no vertical padding.\n \"h-10 px-lg py-0 align-middle text-sm font-regular\",\n \"text-table-cell-text-primary\",\n \"border-b border-r border-table-border last:border-r-0\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n));\nTableCell.displayName = \"TableCell\";\n\n/* ── TableCaption ──────────────────────────────────────────────────────────── */\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-lg text-sm text-table-cell-text-secondary\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\n/* ── Exports ───────────────────────────────────────────────────────────────── */\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableRow,\n TableHead,\n TableCell,\n TableCaption,\n};\n","import * as React from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport {\n Modal,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalBody,\n ModalFooter,\n ModalClose,\n} from \"./modal\";\nimport { Button } from \"./button\";\nimport { SearchBar } from \"./search-bar\";\nimport { Checkbox } from \"./checkbox\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyColumnDef = ColumnDef<any, any>;\n\nexport interface DataTableSettingsModalProps {\n /** Controlled open state */\n open: boolean;\n /** Open-state change handler */\n onOpenChange: (open: boolean) => void;\n /** All column definitions to expose for hide/show */\n columns: AnyColumnDef[];\n /** Current visibility map: `{ [columnId]: boolean }` */\n columnVisibility: Record<string, boolean>;\n /** Called when the user presses Apply with the next visibility map */\n onApply: (visibility: Record<string, boolean>) => void;\n /**\n * Column IDs the user cannot hide (filtered out of the list).\n * Defaults to columns whose `enableHiding` is `false`, plus any column with id `select`.\n */\n lockedColumnIds?: string[];\n /** Modal title — defaults to \"Manage table\" */\n title?: string;\n /** Optional class for the modal content */\n className?: string;\n}\n\n/* ── Helpers ───────────────────────────────────────────────────────────────── */\n\nfunction getColKey(col: AnyColumnDef): string {\n return col.id ?? (col as { accessorKey?: string }).accessorKey ?? \"\";\n}\n\nfunction getColLabel(col: AnyColumnDef): string {\n const h = col.header;\n if (typeof h === \"string\") return h;\n return getColKey(col);\n}\n\nfunction inferLockedIds(columns: AnyColumnDef[]): string[] {\n const ids: string[] = [\"select\"];\n for (const c of columns) {\n if (c.enableHiding === false) {\n const key = getColKey(c);\n if (key) ids.push(key);\n }\n }\n return ids;\n}\n\n/* ── DataTableSettingsModal ────────────────────────────────────────────────── */\n\nexport function DataTableSettingsModal({\n open,\n onOpenChange,\n columns,\n columnVisibility,\n onApply,\n lockedColumnIds,\n title = \"Manage table\",\n className,\n}: DataTableSettingsModalProps) {\n const [draft, setDraft] = React.useState(columnVisibility);\n const [search, setSearch] = React.useState(\"\");\n\n // Re-seed draft + clear search whenever the modal opens.\n const prevOpen = React.useRef(open);\n if (open && !prevOpen.current) {\n setDraft(columnVisibility);\n setSearch(\"\");\n }\n prevOpen.current = open;\n\n const lockedIds = React.useMemo(\n () => lockedColumnIds ?? inferLockedIds(columns),\n [lockedColumnIds, columns],\n );\n\n const editable = React.useMemo(\n () =>\n columns.filter((c) => {\n const key = getColKey(c);\n return key && !lockedIds.includes(key);\n }),\n [columns, lockedIds],\n );\n\n const filtered = React.useMemo(() => {\n if (!search) return editable;\n const q = search.toLowerCase();\n return editable.filter((c) => getColLabel(c).toLowerCase().includes(q));\n }, [editable, search]);\n\n const visibleCount = editable.filter(\n (c) => draft[getColKey(c)] !== false,\n ).length;\n const totalCount = editable.length;\n\n const toggle = (key: string) =>\n setDraft((p) => ({ ...p, [key]: p[key] === false ? true : false }));\n\n const showAll = () => {\n const next = { ...draft };\n for (const c of editable) next[getColKey(c)] = true;\n setDraft(next);\n };\n\n const hideAll = () => {\n const next = { ...draft };\n for (const c of editable) next[getColKey(c)] = false;\n setDraft(next);\n };\n\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size=\"sm\" className={className}>\n <ModalHeader onClose={() => onOpenChange(false)}>\n <ModalTitle>{title}</ModalTitle>\n </ModalHeader>\n <ModalBody>\n <div className=\"flex flex-col gap-lg\">\n <div className=\"flex items-center justify-between gap-base\">\n <span className=\"text-sm font-medium text-table-cell-text-secondary\">\n Columns {visibleCount} / {totalCount}\n </span>\n <div className=\"flex items-center gap-sm\">\n <button\n type=\"button\"\n onClick={showAll}\n className=\"text-xs font-medium text-link-brand-text-default hover:text-link-brand-text-hover hover:underline cursor-pointer bg-transparent border-0 p-0\"\n >\n Show all\n </button>\n <span className=\"text-xs text-table-cell-text-secondary\">·</span>\n <button\n type=\"button\"\n onClick={hideAll}\n className=\"text-xs font-medium text-link-brand-text-default hover:text-link-brand-text-hover hover:underline cursor-pointer bg-transparent border-0 p-0\"\n >\n Hide all\n </button>\n </div>\n </div>\n\n <SearchBar\n size=\"sm\"\n placeholder=\"Search columns\"\n value={search}\n onChange={(e) =>\n setSearch((e.target as HTMLInputElement).value)\n }\n onClear={() => setSearch(\"\")}\n />\n\n <div\n className={cn(\n \"flex flex-col max-h-[360px] overflow-auto rounded-base\",\n \"border border-table-border\",\n )}\n >\n {filtered.length === 0 ? (\n <div className=\"py-lg text-center text-sm text-table-cell-text-secondary\">\n No columns found\n </div>\n ) : (\n filtered.map((c) => {\n const key = getColKey(c);\n const label = getColLabel(c);\n const checked = draft[key] !== false;\n return (\n <label\n key={key}\n className={cn(\n \"flex items-center gap-base px-base py-sm cursor-pointer\",\n \"border-b border-table-border last:border-b-0\",\n \"hover:bg-table-row-bg-hover transition-colors\",\n )}\n >\n <Checkbox\n checked={checked}\n onCheckedChange={() => toggle(key)}\n />\n <span className=\"text-sm text-table-cell-text-primary\">\n {label}\n </span>\n </label>\n );\n })\n )}\n </div>\n </div>\n </ModalBody>\n <ModalFooter>\n <ModalClose asChild>\n <Button appearance=\"ghost\" intent=\"brand\" size=\"md\">\n Cancel\n </Button>\n </ModalClose>\n <Button\n appearance=\"solid\"\n intent=\"brand\"\n size=\"md\"\n onClick={() => {\n onApply(draft);\n onOpenChange(false);\n }}\n >\n Apply\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n );\n}\n\nDataTableSettingsModal.displayName = \"DataTableSettingsModal\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { TruncatedText } from \"../truncated-text\";\n\n// ── Segment variants ────────────────────────────────────────────────────────\n\nconst filterChipSegmentVariants = cva(\n [\"flex items-center shrink-0 transition-colors\"],\n {\n variants: {\n type: {\n property: \"gap-xs px-base py-sm\",\n operator: \"gap-0 px-base py-sm\",\n value: \"gap-xs px-base py-sm\",\n placeholder: \"gap-0 px-base py-sm\",\n button: \"gap-0 p-0\",\n },\n hasBorder: {\n true: \"border-r border-filter-chip-segment-border\",\n false: \"\",\n },\n },\n defaultVariants: {\n type: \"property\",\n hasBorder: false,\n },\n },\n);\n\n// ── FilterChipSegment ───────────────────────────────────────────────────────\n\nexport interface FilterChipSegmentProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"type\">,\n VariantProps<typeof filterChipSegmentVariants> {\n /** Segment type determines content layout and text styling. */\n segmentType?: \"property\" | \"operator\" | \"value\" | \"placeholder\" | \"button\";\n /** Icon definition for Property segments. */\n icon?: IconDefinition;\n /** Text label for the segment. */\n label?: string;\n /** Optional badge count (shown on Value segments). */\n badgeCount?: number;\n /** Custom content slot (e.g., avatar in Value segment). */\n adornment?: React.ReactNode;\n /** Called when the kebab button is clicked (Button segment). */\n onKebabClick?: (e: React.MouseEvent) => void;\n}\n\n// ── Truncated label with overflow tooltip ──────────────────────────────────\n//\n// Thin wrapper around the shared TruncatedText helper that adds the\n// per-segment `max-w-[160px]` constraint when the `truncate` flag is set.\n\nfunction TruncatedLabel({\n label,\n truncate,\n className,\n}: {\n label: string;\n truncate: boolean;\n className?: string;\n}) {\n if (!truncate) return <span className={className}>{label}</span>;\n return (\n <TruncatedText className={cn(className, \"max-w-[160px]\")}>\n {label}\n </TruncatedText>\n );\n}\n\n// ── FilterChipSegment ───────────────────────────────────────────────────────\n\nconst FilterChipSegment = React.forwardRef<\n HTMLDivElement,\n FilterChipSegmentProps\n>(\n (\n {\n className,\n segmentType = \"property\",\n hasBorder,\n icon,\n label,\n badgeCount,\n adornment,\n onKebabClick,\n children,\n ...props\n },\n ref,\n ) => {\n if (segmentType === \"button\") {\n return (\n <div\n ref={ref}\n className={cn(filterChipSegmentVariants({ type: \"button\", hasBorder: false }), className)}\n {...props}\n >\n <button\n type=\"button\"\n onClick={onKebabClick}\n className=\"flex items-center justify-center p-sm cursor-pointer hover:bg-filter-chip-segment-bg-hover active:bg-filter-chip-segment-bg-pressed transition-colors\"\n aria-label=\"Filter actions\"\n >\n <span className=\"size-5 flex items-center justify-center text-sm leading-sm text-filter-chip-kebab-text\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <circle cx=\"10\" cy=\"4.5\" r=\"1.5\" />\n <circle cx=\"10\" cy=\"10\" r=\"1.5\" />\n <circle cx=\"10\" cy=\"15.5\" r=\"1.5\" />\n </svg>\n </span>\n </button>\n {children}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n filterChipSegmentVariants({ type: segmentType, hasBorder }),\n \"cursor-pointer hover:bg-filter-chip-segment-bg-hover active:bg-filter-chip-segment-bg-pressed\",\n className,\n )}\n {...props}\n >\n {/* Slot (avatar, custom icon — Value type) */}\n {adornment && segmentType === \"value\" && (\n <span className=\"shrink-0 inline-flex items-center justify-center leading-none\">\n {adornment}\n </span>\n )}\n\n {/* Property icon */}\n {icon && segmentType === \"property\" && (\n <Icon\n icon={icon}\n size=\"sm\"\n className=\"shrink-0 text-filter-chip-segment-icon\"\n />\n )}\n\n {/* Label */}\n {label && (\n <TruncatedLabel\n label={label}\n truncate={segmentType === \"value\"}\n className={cn(\n \"text-sm font-medium leading-sm whitespace-nowrap\",\n segmentType === \"placeholder\"\n ? \"text-filter-chip-segment-placeholder\"\n : \"text-filter-chip-segment-text\",\n )}\n />\n )}\n\n {/* Badge count */}\n {badgeCount != null && badgeCount > 0 && (\n <span className=\"flex items-center gap-2xs p-2xs rounded-xs bg-filter-chip-badge-bg\">\n <span className=\"text-[10px] font-medium leading-2xs text-filter-chip-badge-text\">\n {badgeCount}\n </span>\n </span>\n )}\n\n {children}\n </div>\n );\n },\n);\nFilterChipSegment.displayName = \"FilterChipSegment\";\n\nexport { FilterChipSegment, filterChipSegmentVariants };\n","import * as React from \"react\";\nimport type { IconDefinition } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { FilterChipSegment } from \"./filter-chip-segment\";\n\n// ── FilterChip ──────────────────────────────────────────────────────────────\n\nexport interface FilterChipProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Icon for the property segment. */\n icon?: IconDefinition;\n /** Property label. */\n property: string;\n /** Operator label (e.g., \"Contains\"). Omit for incomplete chips. */\n operator?: string;\n /** Value label. Omit if the filter has no value yet. */\n value?: string;\n /** Optional badge count on the value segment (e.g., multi-select count). */\n badgeCount?: number;\n /** Optional adornment in the value segment (e.g., avatar). */\n valueAdornment?: React.ReactNode;\n /** Called when the property segment is clicked. */\n onPropertyClick?: () => void;\n /** Called when the operator segment is clicked. */\n onOperatorClick?: () => void;\n /** Called when the value segment is clicked. */\n onValueClick?: () => void;\n /** Called when the kebab button is clicked. */\n onKebabClick?: (e: React.MouseEvent) => void;\n}\n\nconst FilterChip = React.forwardRef<HTMLDivElement, FilterChipProps>(\n (\n {\n className,\n icon,\n property,\n operator,\n value,\n badgeCount,\n valueAdornment,\n onPropertyClick,\n onOperatorClick,\n onValueClick,\n onKebabClick,\n ...props\n },\n ref,\n ) => {\n const hasOperator = !!operator;\n const hasValue = hasOperator && value != null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center overflow-clip\",\n \"bg-filter-chip-bg border border-filter-chip-border rounded-md shadow-sm\",\n className,\n )}\n {...props}\n >\n {/* Property segment — always visible */}\n <FilterChipSegment\n segmentType=\"property\"\n hasBorder\n icon={icon}\n label={property}\n onClick={onPropertyClick}\n />\n\n {/* Operator or placeholder */}\n <FilterChipSegment\n segmentType={hasOperator ? \"operator\" : \"placeholder\"}\n hasBorder\n label={hasOperator ? operator : \"Select condition\"}\n onClick={onOperatorClick}\n />\n\n {/* Value, placeholder, or hidden */}\n {hasOperator && (\n <FilterChipSegment\n segmentType={hasValue ? \"value\" : \"placeholder\"}\n hasBorder\n label={hasValue ? value : \"Select condition\"}\n adornment={valueAdornment}\n badgeCount={badgeCount}\n onClick={onValueClick}\n />\n )}\n\n {/* Kebab button — only when operator is set */}\n {hasOperator && (\n <FilterChipSegment\n segmentType=\"button\"\n onKebabClick={onKebabClick}\n />\n )}\n </div>\n );\n },\n);\nFilterChip.displayName = \"FilterChip\";\n\nexport { FilterChip };\n","import type {\n DataType,\n OperatorType,\n FilterCondition,\n FilterGroup,\n FilterNode,\n FilterValue,\n EnumOption,\n EnumOptionIntent,\n} from \"./types\";\n\n// ── Enum option helpers ────────────────────────────────────────────────────\n\nexport interface ResolvedEnumOption {\n value: string;\n label: string;\n icon?: import(\"@l3mpire/icons\").IconDefinition;\n intent?: EnumOptionIntent;\n}\n\n/**\n * Normalize an `EnumOption` (string or object form) to a `ResolvedEnumOption`\n * with a guaranteed label.\n */\nexport function resolveEnumOption(opt: EnumOption): ResolvedEnumOption {\n if (typeof opt === \"string\") return { value: opt, label: opt };\n return {\n value: opt.value,\n label: opt.label ?? opt.value,\n icon: opt.icon,\n intent: opt.intent,\n };\n}\n\n/** Find the resolved option matching a raw filter value. */\nexport function findEnumOption(\n value: string,\n options?: EnumOption[],\n): ResolvedEnumOption | undefined {\n if (!options) return undefined;\n for (const opt of options) {\n const r = resolveEnumOption(opt);\n if (r.value === value) return r;\n }\n return undefined;\n}\n\nexport const OPERATORS_BY_TYPE: Record<DataType, OperatorType[]> = {\n text: [\n \"contains\", \"does not contain\", \"is\", \"is not\",\n \"starts with\", \"ends with\", \"is empty\", \"is not empty\",\n ],\n number: [\"=\", \"≠\", \">\", \"<\", \"≥\", \"≤\", \"is between\", \"is empty\", \"is not empty\"],\n date: [\n \"is\", \"is before\", \"is after\", \"is on or before\", \"is on or after\",\n \"is between\", \"is empty\", \"is not empty\",\n ],\n enum: [\"is\", \"is not\", \"is any of\", \"is none of\", \"is empty\", \"is not empty\"],\n tags: [\n \"contains\", \"does not contain\", \"contains any of\", \"contains all of\",\n \"is empty\", \"is not empty\",\n ],\n boolean: [\"is true\", \"is false\"],\n relation: [\"is\", \"is not\", \"is any of\", \"is none of\", \"is empty\", \"is not empty\"],\n};\n\nexport const DEFAULT_OPERATOR_BY_TYPE: Record<DataType, OperatorType> = {\n text: \"contains\",\n number: \"=\",\n date: \"is between\",\n enum: \"is any of\",\n tags: \"contains\",\n boolean: \"is true\",\n relation: \"is\",\n};\n\nexport function isNoValueOperator(operator: OperatorType): boolean {\n return [\"is empty\", \"is not empty\", \"is true\", \"is false\"].includes(operator);\n}\n\nexport function getDefaultOperator(type: DataType): OperatorType {\n return DEFAULT_OPERATOR_BY_TYPE[type];\n}\n\nexport function createFilterWithDefaults(\n propertyId: string,\n type: DataType,\n): FilterCondition {\n const operator = getDefaultOperator(type);\n return {\n id: crypto.randomUUID(),\n propertyId,\n operator,\n value: type === \"boolean\" ? true : null,\n };\n}\n\nexport function getValueInputType(\n type: DataType,\n operator: OperatorType,\n): string | null {\n if (isNoValueOperator(operator)) return null;\n if (type === \"text\") return \"TextInput\";\n if (type === \"number\")\n return operator === \"is between\" ? \"NumberRange\" : \"NumberInput\";\n if (type === \"date\") {\n if (operator === \"is between\") return \"DateRange\";\n return \"DatePicker\";\n }\n if (type === \"enum\")\n return [\"is any of\", \"is none of\"].includes(operator)\n ? \"MultiSelect\"\n : \"SingleSelect\";\n if (type === \"tags\")\n return [\"contains any of\", \"contains all of\"].includes(operator)\n ? \"MultiSelect\"\n : \"SingleSelect\";\n if (type === \"relation\")\n return [\"is any of\", \"is none of\"].includes(operator)\n ? \"MultiRelationPicker\"\n : \"RelationPicker\";\n return null;\n}\n\n// ── Display formatting ─────────────────────────────────────────────────────\n\nexport function formatFilterValue(\n value: FilterValue,\n dynamicOptions?: import(\"./types\").DynamicOption[],\n full?: boolean,\n options?: EnumOption[],\n): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n if (value instanceof Date) {\n return value.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return undefined;\n if (value.length === 2 && typeof value[0] === \"number\") {\n return `${value[0]} – ${value[1]}`;\n }\n if (value.length === 2 && value[0] instanceof Date) {\n const fmt = (d: Date) =>\n d.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", year: \"numeric\" });\n return `${fmt(value[0])} – ${value[1] instanceof Date ? fmt(value[1]) : \"…\"}`;\n }\n if (full) {\n return (value as string[])\n .map((v) => resolveLabel(String(v), dynamicOptions, options))\n .join(\", \");\n }\n return resolveLabel(String(value[0]), dynamicOptions, options);\n }\n return resolveLabel(String(value), dynamicOptions, options);\n}\n\nfunction resolveLabel(\n raw: string,\n dynamicOptions?: import(\"./types\").DynamicOption[],\n options?: EnumOption[],\n): string {\n if (dynamicOptions) {\n const dyn = dynamicOptions.find((o) => o.value === raw);\n if (dyn) return dyn.label;\n }\n const enumOpt = findEnumOption(raw, options);\n if (enumOpt) return enumOpt.label;\n return raw;\n}\n\nexport function getBadgeCount(value: FilterValue): number | undefined {\n if (\n Array.isArray(value) &&\n value.length > 1 &&\n typeof value[0] === \"string\"\n ) {\n return value.length;\n }\n return undefined;\n}\n\n// ── Tree helpers for nested filter groups ──────────────────────────────────\n\n/** Type guard: is this node a FilterGroup? */\nexport function isFilterGroup(node: FilterNode): node is FilterGroup {\n return (node as FilterGroup).type === \"group\";\n}\n\n/** Create an empty group (no children — the popover will show a draft row). */\nexport function createEmptyGroup(): FilterGroup {\n return {\n id: crypto.randomUUID(),\n type: \"group\",\n children: [],\n };\n}\n\n/** Deep clone a node tree, assigning fresh UUIDs to every node. */\nexport function duplicateNode(node: FilterNode): FilterNode {\n if (isFilterGroup(node)) {\n return {\n ...node,\n id: crypto.randomUUID(),\n children: node.children.map(duplicateNode),\n };\n }\n return { ...node, id: crypto.randomUUID() };\n}\n\n/** Wrap a single condition inside a new group. */\nexport function wrapInGroup(condition: FilterCondition): FilterGroup {\n return {\n id: crypto.randomUUID(),\n type: \"group\",\n logicOperator: condition.logicOperator,\n children: [{ ...condition, logicOperator: undefined }],\n };\n}\n\n/** Unwrap a group — returns the first condition inside, or null if empty. */\nexport function unwrapGroup(group: FilterGroup): FilterCondition | null {\n const first = group.children.find((c) => !isFilterGroup(c)) as\n | FilterCondition\n | undefined;\n if (!first) return null;\n return { ...first, logicOperator: group.logicOperator };\n}\n\n/** Immutable: update a node by id anywhere in the tree. */\nexport function updateNodeInTree(\n nodes: FilterNode[],\n id: string,\n updater: (node: FilterNode) => FilterNode,\n): FilterNode[] {\n return nodes.map((node) => {\n if (node.id === id) return updater(node);\n if (isFilterGroup(node)) {\n const updated = updateNodeInTree(node.children, id, updater);\n if (updated !== node.children) return { ...node, children: updated };\n }\n return node;\n });\n}\n\n/**\n * Immutable: toggle the logic operator for ALL siblings at the same level as\n * the node with `id`. Within a group every connector must be the same — toggling\n * one flips them all.\n */\nexport function toggleGroupLogicInTree(\n nodes: FilterNode[],\n id: string,\n): FilterNode[] {\n const idx = nodes.findIndex((n) => n.id === id);\n if (idx >= 0) {\n const current = nodes[idx].logicOperator ?? \"and\";\n const next = current === \"and\" ? \"or\" : \"and\";\n return nodes.map((n, i) =>\n i === 0 ? n : { ...n, logicOperator: next },\n );\n }\n return nodes.map((node) => {\n if (isFilterGroup(node)) {\n const updated = toggleGroupLogicInTree(node.children, id);\n if (updated !== node.children) return { ...node, children: updated };\n }\n return node;\n });\n}\n\n/** Immutable: remove a node by id anywhere in the tree. */\nexport function removeNodeFromTree(\n nodes: FilterNode[],\n id: string,\n): FilterNode[] {\n const result: FilterNode[] = [];\n for (const node of nodes) {\n if (node.id === id) continue;\n if (isFilterGroup(node)) {\n const updated = removeNodeFromTree(node.children, id);\n result.push(updated !== node.children ? { ...node, children: updated } : node);\n } else {\n result.push(node);\n }\n }\n return result;\n}\n\n/** Immutable: insert a node after the node with `afterId` in the same array. */\nexport function insertAfterInTree(\n nodes: FilterNode[],\n afterId: string,\n newNode: FilterNode,\n): FilterNode[] {\n const result: FilterNode[] = [];\n let inserted = false;\n for (const node of nodes) {\n result.push(node);\n if (node.id === afterId) {\n result.push(newNode);\n inserted = true;\n } else if (!inserted && isFilterGroup(node)) {\n const updated = insertAfterInTree(node.children, afterId, newNode);\n if (updated.length !== node.children.length) {\n result[result.length - 1] = { ...node, children: updated };\n inserted = true;\n }\n }\n }\n return result;\n}\n\n/** Immutable: replace a node by id with another node. */\nexport function replaceNodeInTree(\n nodes: FilterNode[],\n id: string,\n replacement: FilterNode,\n): FilterNode[] {\n return nodes.map((node) => {\n if (node.id === id) return replacement;\n if (isFilterGroup(node)) {\n const updated = replaceNodeInTree(node.children, id, replacement);\n if (updated !== node.children) return { ...node, children: updated };\n }\n return node;\n });\n}\n\n/** Count all leaf conditions in a tree. */\nexport function countConditions(nodes: FilterNode[]): number {\n let count = 0;\n for (const node of nodes) {\n if (isFilterGroup(node)) {\n count += countConditions(node.children);\n } else {\n count++;\n }\n }\n return count;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── FilterBar ───────────────────────────────────────────────────────────────\n\nexport interface FilterBarProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Composable filter bar layout. Splits into a left group (search, sort, chips,\n * filters button) and a right group (discard, save). Pass children for the left\n * side and use `actions` slot for the right side.\n *\n * ```tsx\n * <FilterBar>\n * <FilterBarLeft>\n * <SearchBar ... />\n * <SortButton ... />\n * <FilterChip ... />\n * <FilterBarButton ... />\n * </FilterBarLeft>\n * <FilterBarRight>\n * <Button>Discard changes</Button>\n * <SaveViewButton ... />\n * </FilterBarRight>\n * </FilterBar>\n * ```\n */\nconst FilterBar = React.forwardRef<HTMLDivElement, FilterBarProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-start justify-between w-full\",\n className,\n )}\n role=\"toolbar\"\n aria-label=\"Filters\"\n aria-orientation=\"horizontal\"\n {...props}\n >\n {children}\n </div>\n ),\n);\nFilterBar.displayName = \"FilterBar\";\n\n// ── FilterBarLeft ───────────────────────────────────────────────────────────\n\nexport interface FilterBarLeftProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FilterBarLeft = React.forwardRef<HTMLDivElement, FilterBarLeftProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-base flex-wrap\", className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nFilterBarLeft.displayName = \"FilterBarLeft\";\n\n// ── FilterBarRight ──────────────────────────────────────────────────────────\n\nexport interface FilterBarRightProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FilterBarRight = React.forwardRef<HTMLDivElement, FilterBarRightProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-base shrink-0\", className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nFilterBarRight.displayName = \"FilterBarRight\";\n\nexport { FilterBar, FilterBarLeft, FilterBarRight };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon, type IconDefinition } from \"@l3mpire/icons\";\nimport {\n faArrowUpSmallBigOutline,\n faArrowDownBigSmallOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SortField {\n id: string;\n label: string;\n icon: IconDefinition;\n}\n\nexport interface SortButtonProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n fields: SortField[];\n activeField: string;\n direction: \"asc\" | \"desc\";\n onChange?: (field: string, direction: \"asc\" | \"desc\") => void;\n /** Show only the sort icon, no label. */\n iconOnly?: boolean;\n}\n\n// ── SortButton ──────────────────────────────────────────────────────────────\n\nconst SortButton: React.FC<SortButtonProps> = ({\n className,\n fields,\n activeField,\n direction,\n onChange,\n iconOnly = false,\n ...props\n}) => {\n const [open, setOpen] = React.useState(false);\n\n const activeFieldDef = fields.find((f) => f.id === activeField);\n const activeLabel = activeFieldDef?.label ?? activeField;\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex items-center gap-xs\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n iconOnly ? \"size-8 justify-center p-0\" : \"px-lg py-sm min-w-[80px]\",\n className,\n )}\n >\n <Icon\n icon={\n direction === \"asc\"\n ? faArrowUpSmallBigOutline\n : faArrowDownBigSmallOutline\n }\n size=\"sm\"\n className=\"shrink-0 text-foreground\"\n />\n {!iconOnly && (\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap\">\n <span className=\"text-muted-foreground\">\n Sort by{\" \"}\n </span>\n <span className=\"text-foreground\">\n {activeLabel}\n </span>\n </span>\n )}\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col gap-xs overflow-clip p-xs\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[180px]\",\n )}\n >\n {/* Field list */}\n <div className=\"flex flex-col\">\n {fields.map((field) => (\n <button\n key={field.id}\n type=\"button\"\n onClick={() => {\n onChange?.(field.id, direction);\n setOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors\",\n \"hover:bg-dropdown-item-hover\",\n field.id === activeField\n ? \"bg-dropdown-item-hover\"\n : \"\",\n )}\n >\n <Icon\n icon={field.icon}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n field.id === activeField\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n />\n <span\n className={cn(\n \"flex-1 text-sm font-regular leading-sm text-left truncate\",\n field.id === activeField\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n >\n {field.label}\n </span>\n </button>\n ))}\n </div>\n\n {/* Separator */}\n <div className=\"h-px bg-border\" />\n\n {/* Direction toggle */}\n <div className=\"flex flex-col\">\n <button\n type=\"button\"\n onClick={() => {\n onChange?.(activeField, \"asc\");\n setOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors\",\n \"hover:bg-dropdown-item-hover\",\n direction === \"asc\"\n ? \"bg-dropdown-item-hover\"\n : \"\",\n )}\n >\n <Icon\n icon={faArrowUpSmallBigOutline}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n direction === \"asc\"\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n />\n <span\n className={cn(\n \"flex-1 text-sm font-regular leading-sm text-left\",\n direction === \"asc\"\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n >\n Ascending\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => {\n onChange?.(activeField, \"desc\");\n setOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors\",\n \"hover:bg-dropdown-item-hover\",\n direction === \"desc\"\n ? \"bg-dropdown-item-hover\"\n : \"\",\n )}\n >\n <Icon\n icon={faArrowDownBigSmallOutline}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n direction === \"desc\"\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n />\n <span\n className={cn(\n \"flex-1 text-sm font-regular leading-sm text-left\",\n direction === \"desc\"\n ? \"text-foreground\"\n : \"text-dropdown-item-icon\",\n )}\n >\n Descending\n </span>\n </button>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nSortButton.displayName = \"SortButton\";\n\nexport { SortButton };\n","import * as React from \"react\";\nimport { Icon, faFilterOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── FilterBarButton ─────────────────────────────────────────────────────────\n\nexport interface FilterBarButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Number of active filters (shown as badge if > 0). */\n count?: number;\n /** Show only the icon, no label. */\n iconOnly?: boolean;\n}\n\nconst FilterBarButton = React.forwardRef<\n HTMLButtonElement,\n FilterBarButtonProps\n>(({ className, count, iconOnly = false, children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"shrink-0 flex items-center gap-sm overflow-hidden\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n iconOnly\n ? count ? \"px-sm justify-center\" : \"size-8 justify-center p-0\"\n : \"px-base py-sm min-w-[80px]\",\n className,\n )}\n {...props}\n >\n <Icon\n icon={faFilterOutline}\n size=\"sm\"\n className=\"shrink-0 text-foreground\"\n />\n {!iconOnly && (\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap text-foreground\">\n {children ?? \"Filters\"}\n </span>\n )}\n {count != null && count > 0 && (\n <span className=\"flex items-center p-2xs rounded-xs bg-filter-chip-badge-bg\">\n <span className=\"text-[10px] font-medium leading-2xs text-filter-chip-badge-text\">\n {count}\n </span>\n </span>\n )}\n </button>\n));\nFilterBarButton.displayName = \"FilterBarButton\";\n\nexport { FilterBarButton };\n","import * as React from \"react\";\nimport { Icon, faChevronDownOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── SaveViewButton ──────────────────────────────────────────────────────────\n\nexport interface SaveViewButtonProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Label for the main action. */\n label?: string;\n /** Called when the main \"Save view\" button is clicked. */\n onSave?: () => void;\n /** Called when the chevron dropdown is clicked. */\n onDropdown?: () => void;\n}\n\n/**\n * Split button for saving filtered views (outlined, neutral).\n * Left side: \"Save view\" (rounded-left).\n * Right side: chevron-down dropdown (e.g. Save for me / Save for everyone).\n */\nconst SaveViewButton = React.forwardRef<HTMLDivElement, SaveViewButtonProps>(\n ({ className, label = \"Save view\", onSave, onDropdown, ...props }, ref) => {\n const sharedStyle = [\n \"relative flex items-center justify-center\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default\",\n \"shadow-sm cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:from-[0%] hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n \"hover:border-btn-outlined-neutral-border-hover\",\n ];\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center\", className)}\n {...props}\n >\n {/* Main button */}\n <button\n type=\"button\"\n onClick={onSave}\n className={cn(\n sharedStyle,\n \"gap-sm px-base py-sm min-w-[80px]\",\n \"rounded-l-md -mr-px\",\n )}\n >\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap text-btn-outlined-neutral-text-default\">\n {label}\n </span>\n </button>\n\n {/* Dropdown chevron */}\n <button\n type=\"button\"\n onClick={onDropdown}\n aria-label=\"More save options\"\n className={cn(\n sharedStyle,\n \"p-sm\",\n \"rounded-r-md -ml-px\",\n )}\n >\n <Icon\n icon={faChevronDownOutline}\n size=\"sm\"\n className=\"text-btn-outlined-neutral-text-default\"\n />\n </button>\n </div>\n );\n },\n);\nSaveViewButton.displayName = \"SaveViewButton\";\n\nexport { SaveViewButton };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../../lib/utils\";\nimport { OPERATORS_BY_TYPE, isNoValueOperator } from \"./utils\";\nimport type { DataType, OperatorType } from \"./types\";\n\n// ── OperatorSelector ────────────────────────────────────────────────────────\n\nexport interface OperatorSelectorProps {\n dataType: DataType;\n activeOperator: OperatorType | null;\n onSelect: (operator: OperatorType) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst OperatorSelector: React.FC<OperatorSelectorProps> = ({\n dataType,\n activeOperator,\n onSelect,\n open,\n onOpenChange,\n children,\n}) => {\n const operators = OPERATORS_BY_TYPE[dataType];\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[180px]\",\n )}\n >\n {operators.map((op) => (\n <button\n key={op}\n type=\"button\"\n onClick={() => onSelect(op)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n op === activeOperator && \"bg-dropdown-item-hover\",\n )}\n >\n <span\n className={cn(\n \"text-sm font-regular leading-sm\",\n op === activeOperator\n ? \"text-foreground font-medium\"\n : \"text-dropdown-item-text\",\n )}\n >\n {op}\n </span>\n {isNoValueOperator(op) && (\n <span className=\"ml-auto text-xs text-muted-foreground\">\n instant\n </span>\n )}\n </button>\n ))}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nOperatorSelector.displayName = \"OperatorSelector\";\n\n// ── OperatorList (inline, no popover) ───────────────────────────────────────\n// Used inside FilterEditor where we render operators inline, not in a popover.\n\nexport interface OperatorListProps {\n dataType: DataType;\n activeOperator: OperatorType | null;\n onSelect: (operator: OperatorType) => void;\n}\n\nconst OperatorList: React.FC<OperatorListProps> = ({\n dataType,\n activeOperator,\n onSelect,\n}) => {\n const operators = OPERATORS_BY_TYPE[dataType];\n\n return (\n <div className=\"flex flex-col\">\n {operators.map((op) => (\n <button\n key={op}\n type=\"button\"\n onClick={() => onSelect(op)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n op === activeOperator && \"bg-dropdown-item-hover\",\n )}\n >\n <span\n className={cn(\n \"text-sm font-regular leading-sm\",\n op === activeOperator\n ? \"text-foreground font-medium\"\n : \"text-dropdown-item-text\",\n )}\n >\n {op}\n </span>\n </button>\n ))}\n </div>\n );\n};\nOperatorList.displayName = \"OperatorList\";\n\nexport { OperatorSelector, OperatorList };\n","export const inputClasses = [\n \"w-full px-base py-sm rounded-base border border-input\",\n \"bg-background text-sm font-regular leading-sm text-foreground\",\n \"placeholder:text-muted-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-0\",\n].join(\" \");\n\nexport const halfInputClasses = [\n \"flex-1 px-base py-sm rounded-base border border-input\",\n \"bg-background text-sm font-regular leading-sm text-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring\",\n].join(\" \");\n","import * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { inputClasses } from \"./shared\";\nimport { Button } from \"../../button\";\nimport type { FilterValue } from \"../types\";\n\nexport interface TextValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst TextValueInput: React.FC<TextValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") onSubmit?.();\n };\n\n return (\n <div className={cn(\"flex flex-col gap-base p-xs\", className)}>\n <input\n type=\"text\"\n value={(value as string) ?? \"\"}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Enter value...\"\n autoFocus\n className={inputClasses}\n />\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nTextValueInput.displayName = \"TextValueInput\";\n\nexport { TextValueInput };\n","import * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { inputClasses, halfInputClasses } from \"./shared\";\nimport { Button } from \"../../button\";\nimport type { FilterValue } from \"../types\";\n\nexport interface NumberValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst NumberValueInput: React.FC<NumberValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") onSubmit?.();\n };\n\n return (\n <div className={cn(\"flex flex-col gap-base p-xs\", className)}>\n <input\n type=\"number\"\n value={(value as number) ?? \"\"}\n onChange={(e) => onChange(e.target.value ? Number(e.target.value) : null)}\n onKeyDown={handleKeyDown}\n placeholder=\"Enter number...\"\n autoFocus\n className={inputClasses}\n />\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nNumberValueInput.displayName = \"NumberValueInput\";\n\nexport interface NumberRangeValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst NumberRangeValueInput: React.FC<NumberRangeValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const rangeVal = (value as [number, number]) ?? [0, 0];\n\n return (\n <div className={cn(\"flex flex-col gap-base p-xs\", className)}>\n <div className=\"flex items-center gap-base\">\n <input\n type=\"number\"\n value={rangeVal[0] ?? \"\"}\n onChange={(e) => onChange([Number(e.target.value), rangeVal[1]])}\n placeholder=\"Min\"\n autoFocus\n className={halfInputClasses}\n />\n <span className=\"text-sm text-muted-foreground\">and</span>\n <input\n type=\"number\"\n value={rangeVal[1] ?? \"\"}\n onChange={(e) => onChange([rangeVal[0], Number(e.target.value)])}\n placeholder=\"Max\"\n className={halfInputClasses}\n />\n </div>\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nNumberRangeValueInput.displayName = \"NumberRangeValueInput\";\n\nexport { NumberValueInput, NumberRangeValueInput };\n","import * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport {\n DatePicker,\n DatePickerCalendar,\n DatePickerSelects,\n DatePickerSuggestions,\n DatePickerPanel,\n DatePickerFooter,\n getDefaultSuggestions,\n type DateRange,\n} from \"../../date-picker\";\nimport { Button } from \"../../button\";\nimport type { FilterValue, OperatorType } from \"../types\";\n\n// ── Relative date presets (for \"is relative\" operator) ──────────────────────\n\nexport const RELATIVE_DATE_PRESETS = [\n { group: \"Past\", options: [\"Today\", \"Yesterday\", \"Last 7 days\", \"Last 14 days\", \"Last 30 days\", \"Last 90 days\"] },\n { group: \"Current\", options: [\"This week\", \"This month\", \"This quarter\", \"This year\"] },\n { group: \"Future\", options: [\"Tomorrow\", \"Next 7 days\", \"Next 14 days\", \"Next 30 days\", \"Next week\", \"Next month\", \"Next quarter\"] },\n];\n\n// ── DateCalendarValueInput ──────────────────────────────────────────────────\n// Handles all calendar-based date operators: single date (is, is before, etc.)\n// and range (is between). Uses the real DatePicker compound component.\n\nexport interface DateCalendarValueInputProps {\n operator: OperatorType;\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst DateCalendarValueInput: React.FC<DateCalendarValueInputProps> = ({\n operator,\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const isRange = operator === \"is between\";\n\n // Convert FilterValue ↔ DatePicker value types\n const pickerValue = React.useMemo(() => {\n if (isRange) {\n if (Array.isArray(value) && value.length === 2) {\n const [from, to] = value as [Date | null, Date | null];\n if (from instanceof Date) {\n return { from, to: to instanceof Date ? to : undefined } as DateRange;\n }\n }\n return undefined;\n }\n return value instanceof Date ? value : undefined;\n }, [value, isRange]);\n\n const handleValueChange = (v: Date | DateRange) => {\n if (v instanceof Date) {\n onChange(v);\n if (!isRange) onSubmit?.();\n } else {\n const range = v as DateRange;\n if (range.from && range.to) {\n onChange([range.from, range.to]);\n } else if (range.from) {\n onChange([range.from, null as unknown as Date]);\n }\n }\n };\n\n const suggestions = React.useMemo(() => getDefaultSuggestions(), []);\n\n return (\n <div className={cn(\"flex flex-col\", className)}>\n <DatePicker\n mode={isRange ? \"range\" : \"single\"}\n value={pickerValue}\n onValueChange={handleValueChange}\n >\n {isRange && <DatePickerSelects />}\n {isRange ? (\n <DatePickerPanel>\n <DatePickerCalendar />\n <DatePickerSuggestions suggestions={suggestions} />\n </DatePickerPanel>\n ) : (\n <DatePickerCalendar />\n )}\n {isRange && (\n <DatePickerFooter>\n <div />\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" onClick={onSubmit}>\n Apply\n </Button>\n </DatePickerFooter>\n )}\n </DatePicker>\n </div>\n );\n};\nDateCalendarValueInput.displayName = \"DateCalendarValueInput\";\n\n// ── PresetTagsValueInput (unchanged — for \"is relative\") ───────────────────\n\nexport interface PresetTagsValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst PresetTagsValueInput: React.FC<PresetTagsValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => (\n <div className={cn(\"flex flex-col gap-base p-xs max-w-[280px]\", className)}>\n {RELATIVE_DATE_PRESETS.map((group) => (\n <div key={group.group} className=\"flex flex-col gap-xs\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground uppercase px-xs\">\n {group.group}\n </span>\n <div className=\"flex flex-wrap gap-xs\">\n {group.options.map((preset) => (\n <button\n key={preset}\n type=\"button\"\n onClick={() => {\n onChange(preset);\n onSubmit?.();\n }}\n className={cn(\n \"px-base py-2xs rounded-base border cursor-pointer transition-colors text-sm font-regular leading-sm\",\n value === preset\n ? \"border-ring bg-primary text-primary-foreground\"\n : \"border-input bg-background text-foreground hover:bg-accent\",\n )}\n >\n {preset}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n);\nPresetTagsValueInput.displayName = \"PresetTagsValueInput\";\n\nexport { DateCalendarValueInput, PresetTagsValueInput };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n Icon,\n faChevronLeftOutline,\n faChevronRightOutline,\n faArrowRightOutline,\n faCalendarOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../lib/utils\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport type DateRange = { from: Date; to?: Date };\n\nexport type DatePickerMode = \"single\" | \"range\";\n\nexport interface DatePickerSuggestion {\n label: string;\n getValue: () => Date | DateRange;\n}\n\n// ── Calendar utilities ──────────────────────────────────────────────────────\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\n/** 0 = Mon, 6 = Sun (ISO week) */\nfunction getWeekdayIndex(date: Date): number {\n return (date.getDay() + 6) % 7;\n}\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction isInRange(date: Date, from: Date, to: Date): boolean {\n const t = date.getTime();\n return t >= from.getTime() && t <= to.getTime();\n}\n\nfunction startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\nconst WEEKDAYS = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"] as const;\n\nconst MONTH_NAMES = [\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\",\n] as const;\n\n// ── Context ─────────────────────────────────────────────────────────────────\n\ninterface DatePickerContextValue {\n mode: DatePickerMode;\n selected: Date | DateRange | undefined;\n onSelect: (date: Date) => void;\n month: number;\n year: number;\n setMonth: (m: number) => void;\n setYear: (y: number) => void;\n goToPrevMonth: () => void;\n goToNextMonth: () => void;\n today: Date;\n hoveredDate: Date | undefined;\n setHoveredDate: (d: Date | undefined) => void;\n}\n\nconst DatePickerContext = React.createContext<DatePickerContextValue | null>(\n null,\n);\n\nfunction useDatePickerContext() {\n const ctx = React.useContext(DatePickerContext);\n if (!ctx)\n throw new Error(\"DatePicker compound components must be used within <DatePicker>\");\n return ctx;\n}\n\n// ── DatePicker (Root) ───────────────────────────────────────────────────────\n\nexport interface DatePickerProps extends React.HTMLAttributes<HTMLDivElement> {\n mode?: DatePickerMode;\n value?: Date | DateRange;\n onValueChange?: (value: Date | DateRange) => void;\n defaultMonth?: number;\n defaultYear?: number;\n}\n\nconst DatePicker = React.forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n className,\n mode = \"single\",\n value,\n onValueChange,\n defaultMonth,\n defaultYear,\n children,\n ...props\n },\n ref,\n ) => {\n const today = React.useMemo(() => startOfDay(new Date()), []);\n\n const initialDate = React.useMemo(() => {\n if (value) {\n if (value instanceof Date) return value;\n return value.from;\n }\n return today;\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const [month, setMonth] = React.useState(\n defaultMonth ?? initialDate.getMonth(),\n );\n const [year, setYear] = React.useState(\n defaultYear ?? initialDate.getFullYear(),\n );\n const [hoveredDate, setHoveredDate] = React.useState<Date | undefined>();\n\n const goToPrevMonth = React.useCallback(() => {\n setMonth((m) => {\n if (m === 0) {\n setYear((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }, []);\n\n const goToNextMonth = React.useCallback(() => {\n setMonth((m) => {\n if (m === 11) {\n setYear((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }, []);\n\n const onSelect = React.useCallback(\n (date: Date) => {\n if (mode === \"single\") {\n onValueChange?.(date);\n return;\n }\n // Range mode\n if (!value || value instanceof Date) {\n // Start a new range\n onValueChange?.({ from: date });\n return;\n }\n const range = value as DateRange;\n if (range.to || date.getTime() < range.from.getTime()) {\n // Start new range\n onValueChange?.({ from: date });\n } else {\n // Complete the range\n onValueChange?.({ from: range.from, to: date });\n }\n },\n [mode, value, onValueChange],\n );\n\n const ctxValue = React.useMemo<DatePickerContextValue>(\n () => ({\n mode,\n selected: value,\n onSelect,\n month,\n year,\n setMonth,\n setYear,\n goToPrevMonth,\n goToNextMonth,\n today,\n hoveredDate,\n setHoveredDate,\n }),\n [\n mode,\n value,\n onSelect,\n month,\n year,\n goToPrevMonth,\n goToNextMonth,\n today,\n hoveredDate,\n ],\n );\n\n return (\n <DatePickerContext.Provider value={ctxValue}>\n <div\n ref={ref}\n className={cn(\n \"flex flex-col overflow-clip\",\n \"bg-datepicker-bg border border-datepicker-border rounded-lg shadow-lg\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </DatePickerContext.Provider>\n );\n },\n);\nDatePicker.displayName = \"DatePicker\";\n\n// ── DatePickerSelects ───────────────────────────────────────────────────────\n\nexport interface DatePickerSelectsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n formatDate?: (date: Date) => string;\n}\n\nfunction defaultFormatDate(date: Date): string {\n return date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\nconst DatePickerSelects = React.forwardRef<\n HTMLDivElement,\n DatePickerSelectsProps\n>(({ className, formatDate = defaultFormatDate, ...props }, ref) => {\n const { selected } = useDatePickerContext();\n\n const fromDate =\n selected instanceof Date\n ? selected\n : selected?.from;\n const toDate =\n selected instanceof Date ? undefined : selected?.to;\n\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-start pt-xl px-xl\", className)}\n {...props}\n >\n <div className=\"flex items-center gap-base w-full\">\n <div className=\"flex-1 flex items-center gap-base min-w-0 px-base py-sm bg-gradient-to-t from-[var(--color-select-bg-default)] to-[var(--color-select-bg-gradient-to)] border border-[var(--color-select-border-default)] rounded-base shadow-sm\">\n <span className=\"flex-1 text-sm font-regular leading-sm text-datepicker-header-text truncate\">\n {fromDate ? formatDate(fromDate) : \"Start date\"}\n </span>\n <Icon icon={faCalendarOutline} size=\"sm\" className=\"shrink-0 text-datepicker-header-text\" />\n </div>\n <Icon\n icon={faArrowRightOutline}\n size=\"sm\"\n className=\"shrink-0 text-datepicker-header-weekday\"\n />\n <div className=\"flex-1 flex items-center gap-base min-w-0 px-base py-sm bg-gradient-to-t from-[var(--color-select-bg-default)] to-[var(--color-select-bg-gradient-to)] border border-[var(--color-select-border-default)] rounded-base shadow-sm\">\n <span className=\"flex-1 text-sm font-regular leading-sm text-datepicker-header-text truncate\">\n {toDate ? formatDate(toDate) : \"End date\"}\n </span>\n <Icon icon={faCalendarOutline} size=\"sm\" className=\"shrink-0 text-datepicker-header-text\" />\n </div>\n </div>\n </div>\n );\n});\nDatePickerSelects.displayName = \"DatePickerSelects\";\n\n// ── DatePickerDay (internal) ────────────────────────────────────────────────\n\ninterface DatePickerDayProps {\n date: Date;\n isOutside: boolean;\n}\n\nconst DatePickerDay: React.FC<DatePickerDayProps> = ({ date, isOutside }) => {\n const { mode, selected, onSelect, today, hoveredDate, setHoveredDate } =\n useDatePickerContext();\n\n const isToday = isSameDay(date, today);\n\n const isSelected =\n selected instanceof Date\n ? isSameDay(date, selected)\n : selected?.from\n ? isSameDay(date, selected.from) ||\n (selected.to ? isSameDay(date, selected.to) : false)\n : false;\n\n const isRangeStart =\n mode === \"range\" &&\n selected &&\n !(selected instanceof Date) &&\n selected.from &&\n isSameDay(date, selected.from);\n\n const isRangeEnd =\n mode === \"range\" &&\n selected &&\n !(selected instanceof Date) &&\n selected.to &&\n isSameDay(date, selected.to);\n\n // Fully selected range\n const inRange =\n mode === \"range\" &&\n selected &&\n !(selected instanceof Date) &&\n selected.from &&\n selected.to &&\n !isSelected &&\n isInRange(date, selected.from, selected.to);\n\n // Preview range while hovering (only when from is set but to is not)\n const inPreviewRange =\n mode === \"range\" &&\n selected &&\n !(selected instanceof Date) &&\n selected.from &&\n !selected.to &&\n hoveredDate &&\n !isSelected &&\n hoveredDate.getTime() > selected.from.getTime() &&\n isInRange(date, selected.from, hoveredDate);\n\n const isInRangeOrPreview = inRange || inPreviewRange;\n\n return (\n <button\n type=\"button\"\n onClick={() => !isOutside && onSelect(date)}\n onMouseEnter={() => mode === \"range\" && setHoveredDate(date)}\n onMouseLeave={() => mode === \"range\" && setHoveredDate(undefined)}\n disabled={isOutside}\n className={cn(\n \"relative flex flex-col items-center justify-center w-9 rounded-full p-2 cursor-pointer transition-colors\",\n \"text-sm font-medium leading-sm text-center\",\n // Default\n !isOutside && !isSelected && !isInRangeOrPreview &&\n \"text-datepicker-day-text-default hover:bg-datepicker-day-bg-hover\",\n // Outside month (disabled)\n isOutside && \"text-datepicker-day-text-disabled cursor-default\",\n // Selected\n isSelected &&\n \"bg-datepicker-day-bg-selected text-datepicker-day-text-selected\",\n // In range\n isInRangeOrPreview &&\n \"bg-datepicker-day-bg-range text-datepicker-day-text-range\",\n // Range start/end get full rounded; in-range items could be less rounded\n (isRangeStart || isRangeEnd) && \"rounded-full\",\n )}\n >\n {date.getDate()}\n {isToday && !isOutside && (\n <span className=\"absolute bottom-0.5 left-1/2 -translate-x-1/2 size-1.5 rounded-full bg-datepicker-day-today\" />\n )}\n </button>\n );\n};\n\n// ── DatePickerCalendar ──────────────────────────────────────────────────────\n\nexport interface DatePickerCalendarProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Content rendered above the calendar grid (e.g. DatePickerSelects). */\n header?: React.ReactNode;\n}\n\nconst DatePickerCalendar = React.forwardRef<\n HTMLDivElement,\n DatePickerCalendarProps\n>(({ className, header, ...props }, ref) => {\n const { month, year, goToPrevMonth, goToNextMonth } =\n useDatePickerContext();\n\n // Build the 6-week grid\n const weeks = React.useMemo(() => {\n const firstDay = new Date(year, month, 1);\n const startOffset = getWeekdayIndex(firstDay); // days from previous month\n const daysInMonth = getDaysInMonth(year, month);\n const daysInPrevMonth = getDaysInMonth(\n month === 0 ? year - 1 : year,\n month === 0 ? 11 : month - 1,\n );\n\n const days: { date: Date; isOutside: boolean }[] = [];\n\n // Previous month trailing days\n for (let i = startOffset - 1; i >= 0; i--) {\n const d = daysInPrevMonth - i;\n days.push({\n date: new Date(\n month === 0 ? year - 1 : year,\n month === 0 ? 11 : month - 1,\n d,\n ),\n isOutside: true,\n });\n }\n\n // Current month\n for (let d = 1; d <= daysInMonth; d++) {\n days.push({ date: new Date(year, month, d), isOutside: false });\n }\n\n // Next month leading days (fill up to 6 rows = 42 cells)\n const remaining = 42 - days.length;\n for (let d = 1; d <= remaining; d++) {\n days.push({\n date: new Date(\n month === 11 ? year + 1 : year,\n month === 11 ? 0 : month + 1,\n d,\n ),\n isOutside: true,\n });\n }\n\n // Split into weeks\n const result: { date: Date; isOutside: boolean }[][] = [];\n for (let i = 0; i < days.length; i += 7) {\n result.push(days.slice(i, i + 7));\n }\n return result;\n }, [month, year]);\n\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col\", className)}\n {...props}\n >\n {header}\n <div className=\"flex flex-col gap-xl p-xl\">\n {/* Month navigation */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-base font-medium leading-base text-datepicker-header-text\">\n {MONTH_NAMES[month]} {year}\n </span>\n <div className=\"flex items-center gap-xs\">\n <button\n type=\"button\"\n onClick={goToPrevMonth}\n className=\"flex items-center justify-center p-xs rounded-base hover:bg-datepicker-day-bg-hover transition-colors cursor-pointer\"\n aria-label=\"Previous month\"\n >\n <Icon icon={faChevronLeftOutline} size=\"xs\" className=\"text-datepicker-header-nav\" />\n </button>\n <button\n type=\"button\"\n onClick={goToNextMonth}\n className=\"flex items-center justify-center p-xs rounded-base hover:bg-datepicker-day-bg-hover transition-colors cursor-pointer\"\n aria-label=\"Next month\"\n >\n <Icon icon={faChevronRightOutline} size=\"xs\" className=\"text-datepicker-header-nav\" />\n </button>\n </div>\n </div>\n\n {/* Calendar grid */}\n <div className=\"flex flex-col\">\n {/* Weekday headers */}\n <div className=\"grid grid-cols-7 gap-base py-sm\">\n {WEEKDAYS.map((day) => (\n <span\n key={day}\n className=\"w-9 text-center text-xs font-regular leading-xs text-datepicker-header-weekday\"\n >\n {day}\n </span>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"flex flex-col\">\n {weeks.map((week, wi) => (\n <div key={wi} className=\"grid grid-cols-7 gap-base\">\n {week.map((day, di) => (\n <DatePickerDay\n key={di}\n date={day.date}\n isOutside={day.isOutside}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n});\nDatePickerCalendar.displayName = \"DatePickerCalendar\";\n\n// ── DatePickerSuggestions ───────────────────────────────────────────────────\n\nexport interface DatePickerSuggestionsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n suggestions: DatePickerSuggestion[];\n formatDate?: (date: Date) => string;\n}\n\nconst DatePickerSuggestions = React.forwardRef<\n HTMLDivElement,\n DatePickerSuggestionsProps\n>(\n (\n { className, suggestions, formatDate = defaultFormatDate, ...props },\n ref,\n ) => {\n const { onSelect, mode } = useDatePickerContext();\n const onValueChange = React.useContext(DatePickerContext)\n ? undefined\n : undefined;\n\n // We need access to the parent's onValueChange — we get it from context indirectly\n // by calling onSelect for single mode or through the parent for range mode\n const ctx = useDatePickerContext();\n\n const handleClick = (suggestion: DatePickerSuggestion) => {\n const val = suggestion.getValue();\n if (val instanceof Date) {\n ctx.onSelect(val);\n } else {\n // For range: select from, then to\n ctx.onSelect(val.from);\n if (val.to) {\n // Need to set the range directly — use a microtask to let state settle\n setTimeout(() => ctx.onSelect(val.to!), 0);\n }\n }\n };\n\n const formatSuggestionDate = (suggestion: DatePickerSuggestion): string => {\n const val = suggestion.getValue();\n if (val instanceof Date) {\n return formatDate(val);\n }\n const from = formatDate(val.from);\n const to = val.to ? formatDate(val.to) : \"\";\n return to ? `${from} - ${to}` : from;\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col border-l border-datepicker-border self-stretch shrink-0\",\n className,\n )}\n {...props}\n >\n {/* Heading */}\n <div className=\"pt-xl px-base\">\n <div className=\"flex items-center p-base rounded-base\">\n <span className=\"flex-1 text-xs font-medium leading-xs text-datepicker-suggestion-heading uppercase truncate\">\n Suggestions\n </span>\n </div>\n </div>\n\n {/* List */}\n <div className=\"flex flex-1 flex-col p-base min-w-[222px]\">\n {suggestions.map((suggestion, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => handleClick(suggestion)}\n className=\"flex items-center gap-sm p-base rounded-base hover:bg-datepicker-suggestion-hover transition-colors cursor-pointer text-left\"\n >\n <span className=\"text-sm font-regular leading-sm text-datepicker-suggestion-text truncate shrink-0\">\n {suggestion.label}\n </span>\n <span className=\"text-xs font-regular leading-xs text-datepicker-suggestion-date truncate\">\n {formatSuggestionDate(suggestion)}\n </span>\n </button>\n ))}\n </div>\n </div>\n );\n },\n);\nDatePickerSuggestions.displayName = \"DatePickerSuggestions\";\n\n// ── DatePickerFooter ────────────────────────────────────────────────────────\n\nexport interface DatePickerFooterProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DatePickerFooter = React.forwardRef<HTMLDivElement, DatePickerFooterProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-between p-xl\",\n \"border-t border-datepicker-footer-border\",\n \"bg-datepicker-bg\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n ),\n);\nDatePickerFooter.displayName = \"DatePickerFooter\";\n\n// ── DatePickerPanel ─────────────────────────────────────────────────────────\n// Convenience layout component that arranges calendar + suggestions side by side\n\nexport interface DatePickerPanelProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DatePickerPanel = React.forwardRef<HTMLDivElement, DatePickerPanelProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-start\", className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nDatePickerPanel.displayName = \"DatePickerPanel\";\n\n// ── Popover wrappers ────────────────────────────────────────────────────────\n\nconst DatePickerRoot = PopoverPrimitive.Root;\n\nconst DatePickerTrigger = PopoverPrimitive.Trigger;\n\nconst DatePickerPopover = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, sideOffset = 4, align = \"start\", children, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n align={align}\n className={cn(\n \"z-50\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n));\nDatePickerPopover.displayName = \"DatePickerPopover\";\n\n// ── Default suggestions helper ──────────────────────────────────────────────\n\nexport function getDefaultSuggestions(\n referenceDate?: Date,\n): DatePickerSuggestion[] {\n const now = referenceDate ?? new Date();\n const today = startOfDay(now);\n const dayOfWeek = getWeekdayIndex(today);\n\n const startOfThisWeek = new Date(today);\n startOfThisWeek.setDate(today.getDate() - dayOfWeek);\n\n const endOfThisWeek = new Date(startOfThisWeek);\n endOfThisWeek.setDate(startOfThisWeek.getDate() + 6);\n\n const startOfThisMonth = new Date(today.getFullYear(), today.getMonth(), 1);\n const endOfThisMonth = new Date(\n today.getFullYear(),\n today.getMonth() + 1,\n 0,\n );\n\n const startOfThisYear = new Date(today.getFullYear(), 0, 1);\n const endOfThisYear = new Date(today.getFullYear(), 11, 31);\n\n const startOfLastWeek = new Date(startOfThisWeek);\n startOfLastWeek.setDate(startOfThisWeek.getDate() - 7);\n const endOfLastWeek = new Date(startOfThisWeek);\n endOfLastWeek.setDate(startOfThisWeek.getDate() - 1);\n\n const startOfLastMonth = new Date(\n today.getFullYear(),\n today.getMonth() - 1,\n 1,\n );\n const endOfLastMonth = new Date(today.getFullYear(), today.getMonth(), 0);\n\n const startOfLastYear = new Date(today.getFullYear() - 1, 0, 1);\n const endOfLastYear = new Date(today.getFullYear() - 1, 11, 31);\n\n return [\n { label: \"Today\", getValue: () => today },\n {\n label: \"This week\",\n getValue: () => ({ from: startOfThisWeek, to: endOfThisWeek }),\n },\n {\n label: \"This month\",\n getValue: () => ({ from: startOfThisMonth, to: endOfThisMonth }),\n },\n {\n label: \"This year\",\n getValue: () => ({ from: startOfThisYear, to: endOfThisYear }),\n },\n {\n label: \"Last week\",\n getValue: () => ({ from: startOfLastWeek, to: endOfLastWeek }),\n },\n {\n label: \"Last month\",\n getValue: () => ({ from: startOfLastMonth, to: endOfLastMonth }),\n },\n {\n label: \"Last year\",\n getValue: () => ({ from: startOfLastYear, to: endOfLastYear }),\n },\n ];\n}\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n DatePicker,\n DatePickerCalendar,\n DatePickerSelects,\n DatePickerSuggestions,\n DatePickerFooter,\n DatePickerPanel,\n DatePickerRoot,\n DatePickerTrigger,\n DatePickerPopover,\n};\n","import * as React from \"react\";\nimport { Icon } from \"@l3mpire/icons\";\nimport { cn } from \"../../../../lib/utils\";\nimport { Button } from \"../../button\";\nimport { resolveEnumOption, type ResolvedEnumOption } from \"../utils\";\nimport type {\n FilterValue,\n DynamicOption,\n EnumOption,\n EnumOptionIntent,\n} from \"../types\";\n\n// ── Intent dot ──────────────────────────────────────────────────────────────\n\nconst intentDotClass: Record<EnumOptionIntent, string> = {\n primary: \"bg-primary\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n critical: \"bg-destructive\",\n neutral: \"bg-muted-foreground\",\n};\n\nconst IntentDot: React.FC<{ intent: EnumOptionIntent }> = ({ intent }) => (\n <span\n className={cn(\n \"shrink-0 size-2 rounded-full\",\n intentDotClass[intent],\n )}\n aria-hidden\n />\n);\n\n// ── Leading visual (icon OR intent dot) ─────────────────────────────────────\n\nconst OptionLeading: React.FC<{ option: ResolvedEnumOption }> = ({ option }) => {\n if (option.icon) {\n return (\n <Icon\n icon={option.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n );\n }\n if (option.intent) {\n return <IntentDot intent={option.intent} />;\n }\n return null;\n};\n\n// ── DynamicOptionRow (shared between single & multi) ────────────────────────\n\ninterface DynamicOptionRowProps {\n option: DynamicOption;\n selected: boolean;\n multi: boolean;\n onClick: () => void;\n}\n\nconst DynamicOptionRow: React.FC<DynamicOptionRowProps> = ({\n option,\n selected,\n multi,\n onClick,\n}) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex items-start gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n selected && \"bg-dropdown-item-hover\",\n )}\n >\n {multi && (\n <span\n className={cn(\n \"mt-[2px] flex items-center justify-center size-4 rounded-xs border transition-colors shrink-0\",\n selected\n ? \"bg-primary border-primary\"\n : \"border-input bg-background\",\n )}\n >\n {selected && (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M2 5L4 7L8 3\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </span>\n )}\n <span className=\"flex-1 flex flex-col gap-2xs min-w-0\">\n <span className=\"text-sm font-regular leading-sm text-foreground truncate\">\n {option.label}\n </span>\n {option.description && (\n <span className=\"text-xs font-regular leading-xs text-muted-foreground\">\n {option.description}\n </span>\n )}\n </span>\n </button>\n);\n\n\n// ── SingleSelectValueInput ──────────────────────────────────────────────────\n\nexport interface SingleSelectValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n options: EnumOption[];\n dynamicOptions?: DynamicOption[];\n className?: string;\n}\n\nconst SingleSelectValueInput: React.FC<SingleSelectValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n options,\n dynamicOptions,\n className,\n}) => {\n const pick = (v: string) => {\n onChange(v);\n onSubmit?.();\n };\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-xs p-xs max-h-[280px] overflow-y-auto\",\n className,\n )}\n >\n {dynamicOptions?.map((opt) => (\n <DynamicOptionRow\n key={opt.value}\n option={opt}\n selected={value === opt.value}\n multi={false}\n onClick={() => pick(opt.value)}\n />\n ))}\n {options.map((rawOpt) => {\n const opt = resolveEnumOption(rawOpt);\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => pick(opt.value)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n value === opt.value && \"bg-dropdown-item-hover\",\n )}\n >\n <OptionLeading option={opt} />\n <span className=\"text-sm font-regular leading-sm text-foreground truncate\">\n {opt.label}\n </span>\n </button>\n );\n })}\n </div>\n );\n};\nSingleSelectValueInput.displayName = \"SingleSelectValueInput\";\n\n// ── MultiSelectValueInput ───────────────────────────────────────────────────\n\nexport interface MultiSelectValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n options: EnumOption[];\n dynamicOptions?: DynamicOption[];\n className?: string;\n}\n\nconst MultiSelectValueInput: React.FC<MultiSelectValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n options,\n dynamicOptions,\n className,\n}) => {\n const selected = Array.isArray(value) ? (value as string[]) : [];\n const toggle = (v: string) => {\n const next = selected.includes(v)\n ? selected.filter((s) => s !== v)\n : [...selected, v];\n onChange(next);\n };\n\n return (\n <div className={cn(\"flex flex-col gap-xs p-xs\", className)}>\n <div className=\"flex flex-col max-h-[240px] overflow-y-auto\">\n {dynamicOptions?.map((opt) => (\n <DynamicOptionRow\n key={opt.value}\n option={opt}\n selected={selected.includes(opt.value)}\n multi\n onClick={() => toggle(opt.value)}\n />\n ))}\n {options.map((rawOpt) => {\n const opt = resolveEnumOption(rawOpt);\n const isSelected = selected.includes(opt.value);\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => toggle(opt.value)}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n )}\n >\n <span\n className={cn(\n \"flex items-center justify-center size-4 rounded-xs border transition-colors shrink-0\",\n isSelected\n ? \"bg-primary border-primary\"\n : \"border-input bg-background\",\n )}\n >\n {isSelected && (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M2 5L4 7L8 3\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </span>\n <OptionLeading option={opt} />\n <span className=\"text-sm font-regular leading-sm text-foreground truncate\">\n {opt.label}\n </span>\n </button>\n );\n })}\n </div>\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nMultiSelectValueInput.displayName = \"MultiSelectValueInput\";\n\nexport { SingleSelectValueInput, MultiSelectValueInput };\n","import * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { inputClasses } from \"./shared\";\nimport { Button } from \"../../button\";\nimport type { FilterValue } from \"../types\";\n\n// ── RelationValueInput (stub — will wire to real relation picker) ────────────\n\nexport interface RelationValueInputProps {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n className?: string;\n}\n\nconst RelationValueInput: React.FC<RelationValueInputProps> = ({\n value,\n onChange,\n onSubmit,\n className,\n}) => {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") onSubmit?.();\n };\n\n return (\n <div className={cn(\"flex flex-col gap-base p-xs\", className)}>\n <input\n type=\"text\"\n value={(value as string) ?? \"\"}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Search...\"\n autoFocus\n className={inputClasses}\n />\n <Button appearance=\"solid\" intent=\"brand\" size=\"sm\" className=\"self-end\" onClick={onSubmit}>\n Apply\n </Button>\n </div>\n );\n};\nRelationValueInput.displayName = \"RelationValueInput\";\n\nexport { RelationValueInput };\n","import * as React from \"react\";\nimport { getValueInputType } from \"./utils\";\nimport { TextValueInput } from \"./value-inputs/text-value-input\";\nimport { NumberValueInput, NumberRangeValueInput } from \"./value-inputs/number-value-input\";\nimport { DateCalendarValueInput } from \"./value-inputs/date-value-input\";\nimport { SingleSelectValueInput, MultiSelectValueInput } from \"./value-inputs/select-value-input\";\nimport { RelationValueInput } from \"./value-inputs/relation-value-input\";\nimport type {\n DataType,\n OperatorType,\n FilterValue,\n DynamicOption,\n EnumOption,\n} from \"./types\";\n\n// ── ValueInput ──────────────────────────────────────────────────────────────\n\nexport interface ValueInputProps {\n dataType: DataType;\n operator: OperatorType;\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n onSubmit?: () => void;\n options?: EnumOption[];\n /** Dynamic/smart entries rendered at the top with a divider. */\n dynamicOptions?: DynamicOption[];\n className?: string;\n}\n\nconst ValueInput: React.FC<ValueInputProps> = ({\n dataType,\n operator,\n value,\n onChange,\n onSubmit,\n options = [],\n dynamicOptions,\n className,\n}) => {\n const inputType = getValueInputType(dataType, operator);\n if (!inputType) return null;\n\n switch (inputType) {\n case \"TextInput\":\n return <TextValueInput value={value} onChange={onChange} onSubmit={onSubmit} className={className} />;\n case \"NumberInput\":\n return <NumberValueInput value={value} onChange={onChange} onSubmit={onSubmit} className={className} />;\n case \"NumberRange\":\n return <NumberRangeValueInput value={value} onChange={onChange} onSubmit={onSubmit} className={className} />;\n case \"SingleSelect\":\n return (\n <SingleSelectValueInput\n value={value}\n onChange={onChange}\n onSubmit={onSubmit}\n options={options}\n dynamicOptions={dynamicOptions}\n className={className}\n />\n );\n case \"MultiSelect\":\n return (\n <MultiSelectValueInput\n value={value}\n onChange={onChange}\n onSubmit={onSubmit}\n options={options}\n dynamicOptions={dynamicOptions}\n className={className}\n />\n );\n case \"DatePicker\":\n case \"DateRange\":\n return (\n <DateCalendarValueInput\n operator={operator}\n value={value}\n onChange={onChange}\n onSubmit={onSubmit}\n className={className}\n />\n );\n case \"RelationPicker\":\n case \"MultiRelationPicker\":\n return <RelationValueInput value={value} onChange={onChange} onSubmit={onSubmit} className={className} />;\n default:\n return null;\n }\n};\nValueInput.displayName = \"ValueInput\";\n\nexport { ValueInput };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n Icon,\n faChevronLeftOutline,\n faChevronRightOutline,\n faMagnifyingGlassOutline,\n faFilterOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport type { PropertyDefinition } from \"./types\";\n\n// ── PropertySelector ────────────────────────────────────────────────────────\n\nexport interface PropertySelectorProps {\n properties: PropertyDefinition[];\n onSelect: (property: PropertyDefinition) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n /**\n * When provided, renders an \"Advanced filter\" item at the bottom of the\n * popover with a divider above it.\n */\n onAdvancedFilter?: () => void;\n /** Count of existing advanced filter rules, displayed next to the item. */\n advancedFilterCount?: number;\n}\n\n// ── AdvancedFilterFooter ────────────────────────────────────────────────────\n\nconst AdvancedFilterFooter: React.FC<{\n onClick: (e: React.MouseEvent) => void;\n count: number;\n}> = ({ onClick, count }) => (\n <div className=\"shrink-0 flex flex-col\">\n <div className=\"h-px bg-dropdown-border mx-xs\" />\n <button\n type=\"button\"\n onPointerDown={(e) => e.preventDefault()}\n onClick={onClick}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={faFilterOutline}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n Advanced filter\n </span>\n {count > 0 && (\n <span className=\"text-xs font-regular leading-xs text-muted-foreground\">\n {count} {count === 1 ? \"rule\" : \"rules\"}\n </span>\n )}\n </button>\n </div>\n);\n\ninterface GroupInfo {\n group: string;\n groupLabel: string;\n groupIcon: import(\"@l3mpire/icons\").IconDefinition;\n count: number;\n}\n\nconst PropertySelector: React.FC<PropertySelectorProps> = ({\n properties,\n onSelect,\n open,\n onOpenChange,\n children,\n onAdvancedFilter,\n advancedFilterCount = 0,\n}) => {\n // NOTE: stopPropagation + preventDefault are CRITICAL here. Without them,\n // the click bubbles out and Radix interprets it as a \"click outside\" on the\n // newly-opened advanced popover, closing it instantly (race condition\n // between opening one popover while clicking inside another).\n const handleAdvancedClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onAdvancedFilter?.();\n };\n const showAdvancedFooter = !!onAdvancedFilter;\n const [activeGroup, setActiveGroup] = React.useState<string | null>(null);\n const [search, setSearch] = React.useState(\"\");\n\n // Reset state when popover closes\n React.useEffect(() => {\n if (!open) {\n setActiveGroup(null);\n setSearch(\"\");\n }\n }, [open]);\n\n // Set of group ids that are pinned to root (any prop in the group having\n // groupPinned: true flags the whole group).\n const pinnedGroupIds = React.useMemo(() => {\n const set = new Set<string>();\n for (const p of properties) {\n if (p.groupPinned) set.add(p.group);\n }\n return set;\n }, [properties]);\n\n // Properties belonging to pinned groups, rendered flat at the root of the\n // popover (no category click).\n const pinnedProperties = React.useMemo(\n () => properties.filter((p) => pinnedGroupIds.has(p.group)),\n [properties, pinnedGroupIds],\n );\n\n // Group info for non-pinned groups only (pinned groups are flattened).\n const groups = React.useMemo<GroupInfo[]>(() => {\n const map = new Map<string, GroupInfo>();\n for (const prop of properties) {\n if (pinnedGroupIds.has(prop.group)) continue;\n const existing = map.get(prop.group);\n if (existing) {\n existing.count++;\n } else {\n map.set(prop.group, {\n group: prop.group,\n groupLabel: prop.groupLabel,\n groupIcon: prop.icon,\n count: 1,\n });\n }\n }\n return Array.from(map.values());\n }, [properties, pinnedGroupIds]);\n\n // Filtered pinned properties (for root-level search)\n const filteredPinnedProperties = React.useMemo(() => {\n if (!search || activeGroup) return pinnedProperties;\n const lower = search.toLowerCase();\n return pinnedProperties.filter((p) =>\n p.label.toLowerCase().includes(lower),\n );\n }, [pinnedProperties, search, activeGroup]);\n\n // Filtered groups (by group name when searching at level 1)\n const filteredGroups = React.useMemo(() => {\n if (!search || activeGroup) return groups;\n const lower = search.toLowerCase();\n // Show groups whose name matches OR that contain matching properties\n return groups.filter(\n (g) =>\n g.groupLabel.toLowerCase().includes(lower) ||\n properties.some(\n (p) => p.group === g.group && p.label.toLowerCase().includes(lower),\n ),\n );\n }, [groups, properties, search, activeGroup]);\n\n // Filtered properties for level 2\n const filteredProperties = React.useMemo(() => {\n if (!activeGroup) return [];\n const groupProps = properties.filter((p) => p.group === activeGroup);\n if (!search) return groupProps;\n const lower = search.toLowerCase();\n return groupProps.filter((p) => p.label.toLowerCase().includes(lower));\n }, [properties, activeGroup, search]);\n\n const activeGroupInfo = groups.find((g) => g.group === activeGroup);\n\n // Non-pinned properties that match the current search — rendered flat below\n // the pinned section when searching at level 1.\n const nonPinnedSearchResults = React.useMemo(() => {\n if (!search || activeGroup) return [];\n const lower = search.toLowerCase();\n return properties.filter(\n (p) =>\n !pinnedGroupIds.has(p.group) &&\n p.label.toLowerCase().includes(lower),\n );\n }, [properties, search, activeGroup, pinnedGroupIds]);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n // Prevent Radix from returning focus to the trigger on close. When\n // the user clicks \"Advanced filter\", we want to open another popover\n // right away; a delayed focus return would fire DismissableLayer's\n // onFocusOutside on that new popover and close it instantly.\n onCloseAutoFocus={(e) => e.preventDefault()}\n className={cn(\n \"z-50 flex flex-col gap-xs overflow-hidden p-xs\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[230px] max-h-[360px]\",\n )}\n >\n {activeGroup === null ? (\n /* ── Level 1: Search + (pinned props) + Categories ──────── */\n <div className=\"flex flex-col gap-xs flex-1 min-h-0\">\n {/* Search */}\n <div className=\"shrink-0 flex items-center gap-base px-lg py-base border border-input rounded-md\">\n <Icon\n icon={faMagnifyingGlassOutline}\n size=\"sm\"\n className=\"shrink-0 text-muted-foreground\"\n />\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search...\"\n autoFocus\n className=\"flex-1 text-sm font-regular leading-sm text-foreground bg-transparent outline-none placeholder:text-muted-foreground\"\n />\n </div>\n\n <div className=\"flex flex-col flex-1 min-h-0 overflow-y-auto\">\n {/* Pinned properties (flat, no category click) */}\n {filteredPinnedProperties.map((prop) => (\n <button\n key={prop.id}\n type=\"button\"\n onClick={() => {\n onSelect(prop);\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={prop.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n {prop.label}\n </span>\n </button>\n ))}\n\n {search ? (\n /* ── Flat matches across non-pinned groups ────────── */\n nonPinnedSearchResults.map((prop) => (\n <button\n key={prop.id}\n type=\"button\"\n onClick={() => {\n onSelect(prop);\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={prop.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n {prop.label}\n </span>\n <span className=\"text-xs font-regular leading-xs text-muted-foreground\">\n {prop.groupLabel}\n </span>\n </button>\n ))\n ) : (\n /* ── Category list ────────────────────────────────── */\n filteredGroups.map((g) => (\n <button\n key={g.group}\n type=\"button\"\n onClick={() => {\n setActiveGroup(g.group);\n setSearch(\"\");\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={g.groupIcon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n {g.groupLabel}\n </span>\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">\n {g.count}\n </span>\n <Icon\n icon={faChevronRightOutline}\n size=\"xs\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n </button>\n ))\n )}\n\n {filteredPinnedProperties.length === 0 &&\n (search\n ? nonPinnedSearchResults.length === 0\n : filteredGroups.length === 0) && (\n <span className=\"p-base text-sm text-muted-foreground\">\n No results\n </span>\n )}\n </div>\n </div>\n ) : (\n /* ── Level 2: Properties ─────────────────────────────────── */\n <div className=\"flex flex-col gap-xs flex-1 min-h-0\">\n {/* Back button */}\n <button\n type=\"button\"\n onClick={() => {\n setActiveGroup(null);\n setSearch(\"\");\n }}\n className=\"shrink-0 flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={faChevronLeftOutline}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-xs font-medium leading-xs text-muted-foreground text-left truncate\">\n {activeGroupInfo?.groupLabel}\n </span>\n </button>\n\n {/* Search */}\n <div className=\"shrink-0 flex items-center gap-base px-lg py-base border border-input rounded-md\">\n <Icon\n icon={faMagnifyingGlassOutline}\n size=\"sm\"\n className=\"shrink-0 text-muted-foreground\"\n />\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search...\"\n autoFocus\n className=\"flex-1 text-sm font-regular leading-sm text-foreground bg-transparent outline-none placeholder:text-muted-foreground\"\n />\n </div>\n\n {/* Property list */}\n <div className=\"flex flex-col flex-1 min-h-0 overflow-y-auto\">\n {filteredProperties.map((prop) => (\n <button\n key={prop.id}\n type=\"button\"\n onClick={() => {\n onSelect(prop);\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={prop.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"flex-1 text-sm font-regular leading-sm text-dropdown-item-text text-left truncate\">\n {prop.label}\n </span>\n </button>\n ))}\n {filteredProperties.length === 0 && (\n <span className=\"p-base text-sm text-muted-foreground\">\n No results\n </span>\n )}\n </div>\n </div>\n )}\n\n {showAdvancedFooter && (\n <AdvancedFilterFooter\n onClick={handleAdvancedClick}\n count={advancedFilterCount}\n />\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nPropertySelector.displayName = \"PropertySelector\";\n\nexport { PropertySelector };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon, faArrowRightOutline, faTrashOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── KebabMenu ───────────────────────────────────────────────────────────────\n\nexport interface KebabMenuProps {\n onConvertToAdvanced?: () => void;\n /** When true, label reads \"Add to advanced filters\" instead of \"Convert to advanced\". */\n hasAdvancedFilters?: boolean;\n onDelete?: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst KebabMenu: React.FC<KebabMenuProps> = ({\n onConvertToAdvanced,\n hasAdvancedFilters = false,\n onDelete,\n open,\n onOpenChange,\n children,\n}) => (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"end\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[210px]\",\n )}\n >\n {onConvertToAdvanced && (\n <button\n type=\"button\"\n onClick={() => {\n onConvertToAdvanced();\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={faArrowRightOutline}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"text-sm font-regular leading-sm text-dropdown-item-text\">\n {hasAdvancedFilters ? \"Add to advanced filters\" : \"Convert to advanced\"}\n </span>\n </button>\n )}\n\n {onConvertToAdvanced && onDelete && (\n <div className=\"h-px mx-base my-xs bg-border\" />\n )}\n\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => {\n onDelete();\n onOpenChange?.(false);\n }}\n className=\"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-dropdown-item-hover\"\n >\n <Icon\n icon={faTrashOutline}\n size=\"sm\"\n className=\"shrink-0 text-destructive\"\n />\n <span className=\"text-sm font-regular leading-sm text-destructive\">\n Delete filter\n </span>\n </button>\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n);\nKebabMenu.displayName = \"KebabMenu\";\n\nexport { KebabMenu };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { OperatorList } from \"./operator-selector\";\nimport { ValueInput } from \"./value-input\";\nimport { isNoValueOperator } from \"./utils\";\nimport type { PropertyDefinition, FilterCondition, OperatorType, FilterValue } from \"./types\";\n\n// ── FilterEditor ────────────────────────────────────────────────────────────\n\nexport interface FilterEditorProps {\n propertyDef: PropertyDefinition;\n condition: FilterCondition;\n mode: \"add\" | \"edit\";\n onUpdate: (condition: FilterCondition) => void;\n onClose: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst FilterEditor: React.FC<FilterEditorProps> = ({\n propertyDef,\n condition,\n mode,\n onUpdate,\n onClose,\n open,\n onOpenChange,\n children,\n}) => {\n // In \"add\" mode, skip operator selection (already pre-selected) → show value\n // In \"edit\" mode, show operator list first\n const [view, setView] = React.useState<\"operator\" | \"value\">(\n mode === \"add\" ? \"value\" : \"operator\",\n );\n const [localOperator, setLocalOperator] = React.useState<OperatorType | null>(\n condition.operator,\n );\n const [localValue, setLocalValue] = React.useState<FilterValue>(\n condition.value,\n );\n\n // Reset view when mode changes or popover opens\n React.useEffect(() => {\n if (open) {\n setView(mode === \"add\" ? \"value\" : \"operator\");\n setLocalOperator(condition.operator);\n setLocalValue(condition.value);\n }\n }, [open, mode, condition.operator, condition.value]);\n\n const handleOperatorSelect = (op: OperatorType) => {\n setLocalOperator(op);\n if (isNoValueOperator(op)) {\n // Instant apply — no value needed\n onUpdate({ ...condition, operator: op, value: null });\n onOpenChange?.(false);\n onClose();\n } else {\n // If operator changed to a different value type, reset value\n if (op !== localOperator) {\n setLocalValue(null);\n }\n setView(\"value\");\n }\n };\n\n const handleSubmit = () => {\n onUpdate({ ...condition, operator: localOperator, value: localValue });\n onOpenChange?.(false);\n onClose();\n };\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"min-w-[240px]\",\n )}\n >\n {/* Header — property context */}\n <div className=\"flex items-center gap-base px-base pt-base pb-xs border-b border-border\">\n <Icon\n icon={propertyDef.icon}\n size=\"sm\"\n className=\"shrink-0 text-dropdown-item-icon\"\n />\n <span className=\"text-sm font-medium leading-sm text-foreground\">\n {propertyDef.label}\n </span>\n {localOperator && view === \"value\" && (\n <button\n type=\"button\"\n onClick={() => setView(\"operator\")}\n className=\"ml-auto text-xs font-regular text-muted-foreground hover:text-foreground cursor-pointer transition-colors\"\n >\n {localOperator} ▾\n </button>\n )}\n </div>\n\n {/* Body */}\n {view === \"operator\" ? (\n <div className=\"p-xs\">\n <OperatorList\n dataType={propertyDef.type}\n activeOperator={localOperator}\n onSelect={handleOperatorSelect}\n />\n </div>\n ) : (\n localOperator && (\n <ValueInput\n dataType={propertyDef.type}\n operator={localOperator}\n value={localValue}\n onChange={setLocalValue}\n onSubmit={handleSubmit}\n options={propertyDef.options}\n dynamicOptions={propertyDef.dynamicOptions}\n />\n )\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nFilterEditor.displayName = \"FilterEditor\";\n\nexport { FilterEditor };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { FilterChipSegment } from \"./filter-chip-segment\";\nimport { OperatorList } from \"./operator-selector\";\nimport { ValueInput } from \"./value-input\";\nimport { PropertySelector } from \"./property-selector\";\nimport { KebabMenu } from \"./kebab-menu\";\nimport {\n isNoValueOperator,\n getValueInputType,\n formatFilterValue,\n getBadgeCount,\n findEnumOption,\n} from \"./utils\";\nimport type {\n PropertyDefinition,\n FilterCondition,\n OperatorType,\n FilterValue,\n} from \"./types\";\n\n// ── Segment Popover (shared wrapper) ────────────────────────────────────────\n\ninterface SegmentPopoverProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n trigger: React.ReactNode;\n children: React.ReactNode;\n align?: \"start\" | \"center\" | \"end\";\n minWidth?: string;\n}\n\nconst SegmentPopover: React.FC<SegmentPopoverProps> = ({\n open,\n onOpenChange,\n trigger,\n children,\n align = \"start\",\n minWidth = \"240px\",\n}) => (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{trigger}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align={align}\n className={cn(\n \"z-50 flex flex-col overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n )}\n style={{ minWidth }}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n);\n\n// ── InteractiveFilterChip ───────────────────────────────────────────────────\n\nexport interface InteractiveFilterChipProps {\n propertyDef: PropertyDefinition;\n condition: FilterCondition;\n /** All available properties (for the property segment popover). */\n properties?: PropertyDefinition[];\n /** \"add\" auto-opens the value popover. */\n mode?: \"add\" | \"edit\";\n autoOpen?: boolean;\n onUpdate: (condition: FilterCondition) => void;\n /** Called when the property is changed (e.g., pick a different property). */\n onPropertyChange?: (property: PropertyDefinition) => void;\n onDelete: () => void;\n onConvertToAdvanced?: () => void;\n hasAdvancedFilters?: boolean;\n className?: string;\n}\n\nconst InteractiveFilterChip: React.FC<InteractiveFilterChipProps> = ({\n propertyDef,\n condition,\n properties,\n mode = \"edit\",\n autoOpen = false,\n onUpdate,\n onPropertyChange,\n onDelete,\n onConvertToAdvanced,\n hasAdvancedFilters = false,\n className,\n}) => {\n const [operatorOpen, setOperatorOpen] = React.useState(false);\n const [valueOpen, setValueOpen] = React.useState(false);\n const [propertyOpen, setPropertyOpen] = React.useState(false);\n const [kebabOpen, setKebabOpen] = React.useState(false);\n const [pendingValueOpen, setPendingValueOpen] = React.useState(false);\n\n // Auto-open value popover for newly added filters\n const autoOpenHandled = React.useRef(false);\n React.useEffect(() => {\n if (\n autoOpen &&\n !autoOpenHandled.current &&\n condition.operator &&\n !isNoValueOperator(condition.operator)\n ) {\n autoOpenHandled.current = true;\n setValueOpen(true);\n }\n }, [autoOpen, condition.operator]);\n\n // Open value popover after operator popover closes (when pending)\n React.useEffect(() => {\n if (!operatorOpen && pendingValueOpen) {\n setPendingValueOpen(false);\n setValueOpen(true);\n }\n }, [operatorOpen, pendingValueOpen]);\n\n const handleOperatorSelect = (op: OperatorType) => {\n if (isNoValueOperator(op)) {\n onUpdate({ ...condition, operator: op, value: null });\n setOperatorOpen(false);\n } else {\n const resetValue = op !== condition.operator ? null : condition.value;\n onUpdate({ ...condition, operator: op, value: resetValue });\n setOperatorOpen(false);\n if (resetValue == null) {\n setPendingValueOpen(true);\n }\n }\n };\n\n const handleValueChange = (val: FilterValue) => {\n onUpdate({ ...condition, value: val });\n };\n\n const handleValueSubmit = () => {\n setValueOpen(false);\n };\n\n const hasOperator = !!condition.operator;\n const displayValue = formatFilterValue(\n condition.value,\n propertyDef.dynamicOptions,\n false,\n propertyDef.options,\n );\n const hasValue = hasOperator && displayValue != null;\n const badgeCount = getBadgeCount(condition.value);\n\n // Resolve the leading visual (icon) for the selected enum value — shows up\n // as an adornment on the value segment so users recognize the option at a\n // glance without reading the label.\n const valueLeading = React.useMemo<React.ReactNode>(() => {\n const v = condition.value;\n const raw =\n typeof v === \"string\"\n ? v\n : Array.isArray(v) && typeof v[0] === \"string\"\n ? (v[0] as string)\n : null;\n if (!raw) return null;\n const opt = findEnumOption(raw, propertyDef.options);\n if (opt?.icon) {\n return (\n <Icon\n icon={opt.icon}\n size=\"sm\"\n className=\"shrink-0 text-filter-chip-segment-icon\"\n />\n );\n }\n return null;\n }, [condition.value, propertyDef.options]);\n\n return (\n <div\n className={cn(\n \"inline-flex items-center overflow-clip\",\n \"bg-filter-chip-bg border border-filter-chip-border rounded-lg shadow-sm\",\n className,\n )}\n >\n {/* ── Property segment ─────────────────────────────────────── */}\n {properties ? (\n <PropertySelector\n properties={properties}\n onSelect={(prop) => {\n onPropertyChange?.(prop);\n setPropertyOpen(false);\n }}\n open={propertyOpen}\n onOpenChange={setPropertyOpen}\n >\n <div>\n <FilterChipSegment\n segmentType=\"property\"\n hasBorder\n icon={propertyDef.icon}\n label={propertyDef.label}\n onClick={() => setPropertyOpen(true)}\n />\n </div>\n </PropertySelector>\n ) : (\n <FilterChipSegment\n segmentType=\"property\"\n hasBorder\n icon={propertyDef.icon}\n label={propertyDef.label}\n />\n )}\n\n {/* ── Operator segment ─────────────────────────────────────── */}\n <SegmentPopover\n open={operatorOpen}\n onOpenChange={setOperatorOpen}\n minWidth=\"180px\"\n trigger={\n <div>\n <FilterChipSegment\n segmentType={hasOperator ? \"operator\" : \"placeholder\"}\n hasBorder\n label={hasOperator ? (condition.operator as string) : \"Select condition\"}\n onClick={() => setOperatorOpen(true)}\n />\n </div>\n }\n >\n <div className=\"p-xs\">\n <OperatorList\n dataType={propertyDef.type}\n activeOperator={condition.operator}\n onSelect={handleOperatorSelect}\n />\n </div>\n </SegmentPopover>\n\n {/* ── Value segment (only when operator is set) ────────────── */}\n {hasOperator && condition.operator && !isNoValueOperator(condition.operator) && (() => {\n // DatePicker / DateRange need wider popovers; everything else uses 240px\n const inputType = getValueInputType(propertyDef.type, condition.operator!);\n const dateWide = inputType === \"DatePicker\" || inputType === \"DateRange\";\n return (\n <SegmentPopover\n open={valueOpen}\n onOpenChange={setValueOpen}\n minWidth={dateWide ? \"auto\" : \"240px\"}\n trigger={\n <div>\n <FilterChipSegment\n segmentType={hasValue ? \"value\" : \"placeholder\"}\n hasBorder\n label={hasValue ? displayValue : \"Enter value\"}\n badgeCount={badgeCount}\n adornment={hasValue ? valueLeading : undefined}\n onClick={() => setValueOpen(true)}\n />\n </div>\n }\n >\n <ValueInput\n dataType={propertyDef.type}\n operator={condition.operator}\n value={condition.value}\n onChange={handleValueChange}\n onSubmit={handleValueSubmit}\n options={propertyDef.options}\n dynamicOptions={propertyDef.dynamicOptions}\n />\n </SegmentPopover>\n );\n })()}\n\n {/* ── Value segment for no-value operators (read-only) ─────── */}\n {hasOperator && condition.operator && isNoValueOperator(condition.operator) && (\n <FilterChipSegment\n segmentType=\"value\"\n hasBorder\n label={condition.operator}\n />\n )}\n\n {/* ── Kebab button ─────────────────────────────────────────── */}\n {hasOperator && (\n <KebabMenu\n open={kebabOpen}\n onOpenChange={setKebabOpen}\n onConvertToAdvanced={onConvertToAdvanced}\n hasAdvancedFilters={hasAdvancedFilters}\n onDelete={onDelete}\n >\n <div>\n <FilterChipSegment\n segmentType=\"button\"\n onKebabClick={(e) => {\n e.stopPropagation();\n setKebabOpen(true);\n }}\n />\n </div>\n </KebabMenu>\n )}\n </div>\n );\n};\nInteractiveFilterChip.displayName = \"InteractiveFilterChip\";\n\nexport { InteractiveFilterChip };\n","import * as React from \"react\";\nimport { Icon, faPlusOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { FilterBar, FilterBarLeft, FilterBarRight } from \"./filter-bar\";\nimport { FilterBarButton } from \"./filter-bar-button\";\nimport { InteractiveFilterChip } from \"./interactive-filter-chip\";\nimport { PropertySelector } from \"./property-selector\";\nimport { AdvancedChip } from \"./advanced-chip\";\nimport { AdvancedPopover } from \"./advanced-popover\";\nimport { SummaryChip } from \"./summary-chip\";\nimport { SortButton, type SortField } from \"./sort-button\";\nimport { useFilterBarMode, type FilterBarMode } from \"./use-filter-bar-mode\";\nimport { createFilterWithDefaults, isNoValueOperator, countConditions, formatFilterValue } from \"./utils\";\nimport type {\n PropertyDefinition,\n FilterCondition,\n FilterNode,\n FilterState,\n} from \"./types\";\n\n// ── FilterSystem ────────────────────────────────────────────────────────────\n\nexport interface FilterSystemProps {\n properties: PropertyDefinition[];\n filterState: FilterState;\n onFilterStateChange: (state: FilterState) => void;\n sortFields?: SortField[];\n /** Force a specific mode instead of auto-detecting via ResizeObserver. */\n mode?: FilterBarMode;\n /** Width breakpoint (px) for switching to minimal mode. Default: 600. */\n breakpoint?: number;\n /**\n * Constrain popovers to stay within the container bounds. Use this when\n * FilterSystem lives inside an iframe or a fixed-width panel where content\n * must not overflow.\n */\n bounded?: boolean;\n children?: React.ReactNode;\n /**\n * Right-aligned slot on Row 1 — always visible, even while the user edits\n * filters. Use for \"Create\", \"Import\", \"Start tasks\" and similar page-level\n * actions.\n */\n actions?: React.ReactNode;\n /**\n * Right-aligned slot on Row 2 — only visible when the filters row is\n * rendered. Use for view-related actions that only make sense while editing\n * filters, e.g. \"Discard changes\" + \"Save view\".\n */\n filterActions?: React.ReactNode;\n /**\n * Uncontrolled initial state of Row 2 (filter chips row). Defaults to `true`\n * — the row is expanded as soon as a filter exists. Toggled by clicking the\n * Filters button on Row 1. Ignored when `filtersRowExpanded` is provided.\n */\n defaultFiltersRowExpanded?: boolean;\n /** Controlled expanded state of Row 2. */\n filtersRowExpanded?: boolean;\n onFiltersRowExpandedChange?: (expanded: boolean) => void;\n className?: string;\n}\n\nconst FilterSystem: React.FC<FilterSystemProps> = ({\n properties,\n filterState,\n onFilterStateChange,\n sortFields,\n mode: modeOverride,\n breakpoint,\n bounded = false,\n children,\n actions,\n filterActions,\n defaultFiltersRowExpanded = true,\n filtersRowExpanded,\n onFiltersRowExpandedChange,\n className,\n}) => {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const mode = useFilterBarMode(containerRef, modeOverride, breakpoint);\n const collisionBoundary = bounded ? containerRef.current : undefined;\n\n const [propertySelectorOpen, setPropertySelectorOpen] = React.useState(false);\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const [summaryOpen, setSummaryOpen] = React.useState(false);\n const [pendingFilterId, setPendingFilterId] = React.useState<string | null>(null);\n\n // Row 2 expanded state (controlled / uncontrolled).\n const [internalExpanded, setInternalExpanded] = React.useState(\n defaultFiltersRowExpanded,\n );\n const isExpandedControlled = filtersRowExpanded !== undefined;\n const rowExpanded = isExpandedControlled ? filtersRowExpanded : internalExpanded;\n const setRowExpanded = React.useCallback(\n (next: boolean) => {\n if (!isExpandedControlled) setInternalExpanded(next);\n onFiltersRowExpandedChange?.(next);\n },\n [isExpandedControlled, onFiltersRowExpandedChange],\n );\n\n const totalCount = filterState.basicFilters.length + countConditions(filterState.advancedFilters);\n\n // When filters transition from 0 → 1 (e.g. user just added the first one),\n // ensure Row 2 is visible regardless of prior collapsed state.\n const prevTotalCount = React.useRef(totalCount);\n React.useEffect(() => {\n if (prevTotalCount.current === 0 && totalCount > 0) {\n setRowExpanded(true);\n }\n prevTotalCount.current = totalCount;\n }, [totalCount, setRowExpanded]);\n\n const handleAddFilter = (property: PropertyDefinition) => {\n const newFilter = createFilterWithDefaults(property.id, property.type);\n\n if (newFilter.operator && isNoValueOperator(newFilter.operator)) {\n onFilterStateChange({\n ...filterState,\n basicFilters: [...filterState.basicFilters, newFilter],\n });\n return;\n }\n\n setPendingFilterId(newFilter.id);\n onFilterStateChange({\n ...filterState,\n basicFilters: [...filterState.basicFilters, newFilter],\n });\n };\n\n const handleUpdateFilter = (updated: FilterCondition) => {\n onFilterStateChange({\n ...filterState,\n basicFilters: filterState.basicFilters.map((f) =>\n f.id === updated.id ? updated : f,\n ),\n });\n if (pendingFilterId === updated.id) {\n setPendingFilterId(null);\n }\n };\n\n const handleDeleteFilter = (id: string) => {\n onFilterStateChange({\n ...filterState,\n basicFilters: filterState.basicFilters.filter((f) => f.id !== id),\n });\n };\n\n const handlePropertyChange = (filterId: string, newProp: PropertyDefinition) => {\n const newCondition = createFilterWithDefaults(newProp.id, newProp.type);\n onFilterStateChange({\n ...filterState,\n basicFilters: filterState.basicFilters.map((f) =>\n f.id === filterId ? { ...newCondition, id: filterId } : f,\n ),\n });\n if (newCondition.operator && !isNoValueOperator(newCondition.operator)) {\n setPendingFilterId(filterId);\n }\n };\n\n const handleConvertToAdvanced = (id: string) => {\n const filter = filterState.basicFilters.find((f) => f.id === id);\n if (!filter) return;\n onFilterStateChange({\n ...filterState,\n basicFilters: filterState.basicFilters.filter((f) => f.id !== id),\n advancedFilters: [...filterState.advancedFilters, filter],\n });\n };\n\n const handleAdvancedFiltersChange = (filters: FilterNode[]) => {\n onFilterStateChange({ ...filterState, advancedFilters: filters });\n };\n\n const handleClearAdvanced = () => {\n onFilterStateChange({ ...filterState, advancedFilters: [] });\n };\n\n const handleClearAll = () => {\n onFilterStateChange({\n ...filterState,\n basicFilters: [],\n advancedFilters: [],\n });\n };\n\n const handleSortChange = (field: string, direction: \"asc\" | \"desc\") => {\n onFilterStateChange({ ...filterState, sort: { field, direction } });\n };\n\n const getPropertyDef = (propertyId: string): PropertyDefinition | undefined =>\n properties.find((p) => p.id === propertyId);\n\n const hasAdvanced = filterState.advancedFilters.length > 0;\n const isMinimal = mode === \"minimal\" || mode === \"icon\";\n const isIconOnly = mode === \"icon\";\n\n const handleOpenAdvanced = () => {\n setPropertySelectorOpen(false);\n // Defer opening the target popover to the next frame. This + the\n // onCloseAutoFocus/onOpenAutoFocus preventDefault on both popovers is\n // what stops Radix's DismissableLayer from seeing the focus shift\n // (triggered by the previous popover returning focus to its trigger)\n // as a \"focus outside\" and instantly dismissing the new popover.\n requestAnimationFrame(() => {\n if (isMinimal) {\n setSummaryOpen(true);\n } else {\n setAdvancedOpen(true);\n }\n });\n };\n const advancedFilterCount = filterState.advancedFilters.length;\n const showAdvancedChip = hasAdvanced || advancedOpen;\n\n\n // ── Row 2 visibility (full mode only) ────────────────────────────────────\n const showFiltersRow = !isMinimal && totalCount > 0 && rowExpanded;\n\n // ── Filters button behavior on Row 1 (full mode) ─────────────────────────\n // - No filters: opens PropertySelector (wrapped as its trigger)\n // - Has filters: plain button that toggles Row 2 visibility\n const filtersButton = totalCount === 0 ? (\n <PropertySelector\n properties={properties}\n onSelect={handleAddFilter}\n open={propertySelectorOpen}\n onOpenChange={setPropertySelectorOpen}\n onAdvancedFilter={handleOpenAdvanced}\n advancedFilterCount={advancedFilterCount}\n >\n <FilterBarButton />\n </PropertySelector>\n ) : (\n <FilterBarButton\n count={totalCount}\n onClick={() => setRowExpanded(!rowExpanded)}\n aria-expanded={rowExpanded}\n />\n );\n\n return (\n <div\n ref={containerRef}\n className={cn(\"w-full flex flex-col\", className)}\n >\n {/* ── Row 1 — always rendered ──────────────────────────────────── */}\n <FilterBar>\n <FilterBarLeft className=\"flex-wrap flex-1 min-w-0\">\n {children}\n\n {/* Sort button */}\n {sortFields && filterState.sort && (\n <SortButton\n fields={sortFields}\n activeField={filterState.sort.field}\n direction={filterState.sort.direction}\n onChange={handleSortChange}\n iconOnly={isMinimal}\n />\n )}\n\n {/* ── MINIMAL / ICON MODE ────────────────────────────────── */}\n {isMinimal ? (\n <SummaryChip\n count={totalCount}\n filters={[...filterState.basicFilters, ...filterState.advancedFilters]}\n properties={properties}\n onFiltersChange={(nodes) => {\n onFilterStateChange({\n ...filterState,\n basicFilters: [],\n advancedFilters: nodes,\n });\n }}\n onClearAll={handleClearAll}\n open={summaryOpen}\n onOpenChange={setSummaryOpen}\n collisionBoundary={collisionBoundary}\n tooltipContent={totalCount > 0 ? buildFilterTooltip([...filterState.basicFilters, ...filterState.advancedFilters], properties) : undefined}\n >\n <FilterBarButton\n iconOnly={isIconOnly}\n count={totalCount > 0 ? totalCount : undefined}\n />\n </SummaryChip>\n ) : (\n /* ── FULL MODE — Filters button only on Row 1 ────────── */\n filtersButton\n )}\n\n {/* Clear button — minimal mode keeps the inline Clear. Full mode's\n Clear lives on Row 2. */}\n {isMinimal && !isIconOnly && totalCount > 0 && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"shrink-0 flex items-center gap-sm px-base py-sm min-h-[32px] max-h-[32px] rounded-md cursor-pointer transition-colors text-btn-ghost-brand-text-default hover:bg-btn-ghost-brand-bg-hover hover:text-btn-ghost-brand-text-hover active:bg-btn-ghost-brand-bg-pressed active:text-btn-ghost-brand-text-pressed\"\n >\n <span className=\"text-sm font-medium leading-sm\">\n Clear\n </span>\n </button>\n )}\n </FilterBarLeft>\n\n {actions && (\n <FilterBarRight className=\"shrink-0\">\n {actions}\n </FilterBarRight>\n )}\n </FilterBar>\n\n {/* ── Row 2 — full mode only, when filters exist and expanded ─── */}\n {showFiltersRow && (\n <div\n className=\"flex items-start justify-between w-full pt-sm\"\n role=\"toolbar\"\n aria-label=\"Active filters\"\n >\n <div className=\"flex items-center gap-base flex-wrap flex-1 min-w-0\">\n {showAdvancedChip && (\n <AdvancedPopover\n filters={filterState.advancedFilters}\n properties={properties}\n onFiltersChange={handleAdvancedFiltersChange}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n collisionBoundary={collisionBoundary}\n >\n <AdvancedChip\n count={filterState.advancedFilters.length}\n onClick={() => setAdvancedOpen(true)}\n onClear={handleClearAdvanced}\n />\n </AdvancedPopover>\n )}\n\n {/* Basic filter chips */}\n {filterState.basicFilters.map((filter) => {\n const propDef = getPropertyDef(filter.propertyId);\n if (!propDef) return null;\n return (\n <InteractiveFilterChip\n key={filter.id}\n propertyDef={propDef}\n condition={filter}\n properties={properties}\n mode={pendingFilterId === filter.id ? \"add\" : \"edit\"}\n autoOpen={pendingFilterId === filter.id}\n onUpdate={handleUpdateFilter}\n onPropertyChange={(newProp) => handlePropertyChange(filter.id, newProp)}\n onDelete={() => handleDeleteFilter(filter.id)}\n onConvertToAdvanced={() => handleConvertToAdvanced(filter.id)}\n hasAdvancedFilters={hasAdvanced}\n />\n );\n })}\n\n {/* Add filter \"+\" — compact trigger next to existing chips */}\n <PropertySelector\n properties={properties}\n onSelect={handleAddFilter}\n open={propertySelectorOpen}\n onOpenChange={setPropertySelectorOpen}\n onAdvancedFilter={handleOpenAdvanced}\n advancedFilterCount={advancedFilterCount}\n >\n <button\n type=\"button\"\n className=\"shrink-0 inline-flex items-center justify-center size-8 rounded-md border border-btn-outlined-neutral-border-default bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default shadow-sm cursor-pointer transition-colors hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\"\n aria-label=\"Add filter\"\n >\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n </button>\n </PropertySelector>\n\n {/* Clear */}\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"shrink-0 flex items-center gap-sm px-base py-sm min-h-[32px] max-h-[32px] rounded-md cursor-pointer transition-colors text-btn-ghost-brand-text-default hover:bg-btn-ghost-brand-bg-hover hover:text-btn-ghost-brand-text-hover active:bg-btn-ghost-brand-bg-pressed active:text-btn-ghost-brand-text-pressed\"\n >\n <span className=\"text-sm font-medium leading-sm\">Clear</span>\n </button>\n </div>\n\n {filterActions && (\n <div className=\"flex items-center shrink-0 gap-sm\">\n {filterActions}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\nFilterSystem.displayName = \"FilterSystem\";\n\n// ── Filter tooltip content ─────────────────────────────────────────────────\n\nfunction buildFilterTooltip(\n nodes: FilterNode[],\n properties: PropertyDefinition[],\n): React.ReactNode {\n const renderNodes = (items: FilterNode[], depth: number): React.ReactNode[] => {\n const result: React.ReactNode[] = [];\n for (let i = 0; i < items.length; i++) {\n const node = items[i];\n const connector = i > 0 ? (node.logicOperator ?? \"and\").toUpperCase() : null;\n\n if (\"children\" in node && node.type === \"group\") {\n if (connector) {\n result.push(\n <div key={`${node.id}-conn`} style={{ paddingLeft: depth * 8 }}>\n <span className=\"opacity-50 text-xs\">{connector}</span>\n </div>,\n );\n }\n result.push(...renderNodes(node.children, depth + 1));\n } else {\n const f = node as FilterCondition;\n const prop = properties.find((p) => p.id === f.propertyId);\n if (!prop) continue;\n const val = formatFilterValue(f.value, prop.dynamicOptions, true);\n result.push(\n <div key={f.id} style={{ paddingLeft: depth * 8 }}>\n {connector && <span className=\"opacity-50 text-xs\">{connector} </span>}\n <span className=\"font-medium\">{prop.label}</span>{\" \"}\n <span className=\"opacity-60\">{f.operator}</span>{\" \"}\n {val && <span>{val}</span>}\n </div>,\n );\n }\n }\n return result;\n };\n\n return <div className=\"flex flex-col gap-2xs\">{renderNodes(nodes, 0)}</div>;\n}\n\nexport { FilterSystem };\n","import * as React from \"react\";\nimport { Icon, faXmarkOutline, faFilterOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── Shared button style (outlined neutral, matching SortButton/FilterBarButton) ──\n\nconst btnBase = [\n \"flex items-center justify-center\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n];\n\n// ── AdvancedChip ────────────────────────────────────────────────────────────\n\nexport interface AdvancedChipProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Number of advanced filters. */\n count: number;\n /** Called when the close (×) button is clicked. */\n onClear?: () => void;\n}\n\nconst AdvancedChip = React.forwardRef<HTMLButtonElement, AdvancedChipProps>(\n ({ className, count, onClear, onClick, ...props }, ref) => (\n <div className={cn(\"inline-flex items-center\", className)}>\n {/* Main button — label + badge */}\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n className={cn(\n btnBase,\n \"gap-sm px-base py-sm min-w-[80px]\",\n \"rounded-l-md -mr-px\",\n )}\n {...props}\n >\n <Icon\n icon={faFilterOutline}\n size=\"sm\"\n className=\"shrink-0 text-foreground\"\n />\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap text-foreground\">\n Advanced filters\n </span>\n {count > 0 && (\n <span className=\"flex items-center p-2xs rounded-xs bg-filter-chip-badge-bg\">\n <span className=\"text-[10px] font-medium leading-2xs text-filter-chip-badge-text\">\n {count}\n </span>\n </span>\n )}\n </button>\n\n {/* Close button */}\n {onClear && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onClear();\n }}\n className={cn(\n btnBase,\n \"p-sm\",\n \"rounded-r-md -ml-px\",\n )}\n aria-label=\"Clear all advanced filters\"\n >\n <Icon icon={faXmarkOutline} size=\"sm\" className=\"text-foreground\" />\n </button>\n )}\n </div>\n ),\n);\nAdvancedChip.displayName = \"AdvancedChip\";\n\nexport { AdvancedChip };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Icon, faPlusOutline, faChevronDownOutline, faXmarkOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { AdvancedRow } from \"./advanced-row\";\nimport { AdvancedGroup } from \"./advanced-group\";\nimport { PropertySelector } from \"./property-selector\";\nimport {\n createFilterWithDefaults,\n createEmptyGroup,\n isFilterGroup,\n duplicateNode,\n wrapInGroup,\n unwrapGroup,\n removeNodeFromTree,\n updateNodeInTree,\n insertAfterInTree,\n replaceNodeInTree,\n toggleGroupLogicInTree,\n} from \"./utils\";\nimport type {\n PropertyDefinition,\n FilterCondition,\n FilterNode,\n} from \"./types\";\n\n// ── Ghost button style ─────────────────────────────────────────────────────\n\nconst ghostBtn = [\n \"flex items-center gap-sm px-base py-sm\",\n \"min-h-[32px]\",\n \"cursor-pointer transition-colors text-sm font-medium leading-sm\",\n \"rounded-md hover:bg-accent\",\n];\n\n// ── AdvancedPopover ─────────────────────────────────────────────────────────\n\nexport interface AdvancedPopoverProps {\n filters: FilterNode[];\n properties: PropertyDefinition[];\n onFiltersChange: (filters: FilterNode[]) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n collisionBoundary?: Element | null;\n}\n\nconst AdvancedPopover: React.FC<AdvancedPopoverProps> = ({\n filters,\n properties,\n onFiltersChange,\n open,\n onOpenChange,\n children,\n collisionBoundary,\n}) => {\n const [addSelectorOpen, setAddSelectorOpen] = React.useState(false);\n const [draftPickerOpen, setDraftPickerOpen] = React.useState(false);\n const [groupSelectorOpen, setGroupSelectorOpen] = React.useState(false);\n\n const getPropertyDef = (propertyId: string) =>\n properties.find((p) => p.id === propertyId);\n\n // ── Handlers ──────────────────────────────────────────────\n\n const handleAddFilter = (property: PropertyDefinition) => {\n const newFilter = createFilterWithDefaults(property.id, property.type);\n onFiltersChange([...filters, newFilter]);\n setAddSelectorOpen(false);\n };\n\n const handleAddGroup = () => {\n const group = createEmptyGroup();\n onFiltersChange([...filters, group]);\n setGroupSelectorOpen(false);\n };\n\n const handleClearAll = () => {\n onFiltersChange([]);\n onOpenChange?.(false);\n };\n\n // Tree operations\n const handleUpdateNode = (id: string, updated: FilterNode) => {\n onFiltersChange(updateNodeInTree(filters, id, () => updated));\n };\n\n const handleDeleteNode = (id: string) => {\n onFiltersChange(removeNodeFromTree(filters, id));\n };\n\n const handleDuplicateNode = (id: string) => {\n const find = (nodes: FilterNode[]): FilterNode | undefined => {\n for (const n of nodes) {\n if (n.id === id) return n;\n if (isFilterGroup(n)) {\n const found = find(n.children);\n if (found) return found;\n }\n }\n };\n const node = find(filters);\n if (!node) return;\n const clone = duplicateNode(node);\n clone.logicOperator = node.logicOperator ?? \"and\";\n onFiltersChange(insertAfterInTree(filters, id, clone));\n };\n\n const handleWrapInGroup = (id: string) => {\n const find = (nodes: FilterNode[]): FilterCondition | undefined => {\n for (const n of nodes) {\n if (n.id === id && !isFilterGroup(n)) return n as FilterCondition;\n if (isFilterGroup(n)) {\n const found = find(n.children);\n if (found) return found;\n }\n }\n };\n const condition = find(filters);\n if (!condition) return;\n const group = wrapInGroup(condition);\n onFiltersChange(replaceNodeInTree(filters, id, group));\n };\n\n const handleUnwrapGroup = (id: string) => {\n const find = (nodes: FilterNode[]): import(\"./types\").FilterGroup | undefined => {\n for (const n of nodes) {\n if (n.id === id && isFilterGroup(n)) return n;\n if (isFilterGroup(n)) {\n const found = find(n.children);\n if (found) return found;\n }\n }\n };\n const group = find(filters);\n if (!group) return;\n const replacement = unwrapGroup(group);\n if (replacement) {\n onFiltersChange(replaceNodeInTree(filters, id, replacement));\n } else {\n onFiltersChange(removeNodeFromTree(filters, id));\n }\n };\n\n const toggleLogicOp = (id: string) => {\n onFiltersChange(toggleGroupLogicInTree(filters, id));\n };\n\n // Update children of a specific group\n const handleGroupChildrenChange = (groupId: string, children: FilterNode[]) => {\n onFiltersChange(\n updateNodeInTree(filters, groupId, (n) =>\n isFilterGroup(n) ? { ...n, children } : n,\n ),\n );\n };\n\n // ── Recursive renderer ────────────────────────────────────\n\n const renderNode = (node: FilterNode, index: number): React.ReactNode => {\n const connector =\n index === 0\n ? \"Where\" as const\n : (node.logicOperator ?? \"and\") === \"and\"\n ? \"And\" as const\n : \"Or\" as const;\n\n if (isFilterGroup(node)) {\n return (\n <AdvancedGroup\n key={node.id}\n connector={connector}\n onConnectorToggle={index > 0 ? () => toggleLogicOp(node.id) : undefined}\n onDuplicate={() => handleDuplicateNode(node.id)}\n onTurnIntoFilter={() => handleUnwrapGroup(node.id)}\n onDelete={() => handleDeleteNode(node.id)}\n properties={properties}\n onAddFilter={(prop) => {\n const newFilter = createFilterWithDefaults(prop.id, prop.type);\n handleGroupChildrenChange(node.id, [...node.children, newFilter]);\n }}\n >\n {node.children.length === 0 ? (\n /* Draft row in empty group */\n <DraftRow\n properties={properties}\n onSelect={(prop) => {\n const newFilter = createFilterWithDefaults(prop.id, prop.type);\n handleGroupChildrenChange(node.id, [newFilter]);\n }}\n />\n ) : (\n node.children.map((child, i) => renderNode(child, i))\n )}\n </AdvancedGroup>\n );\n }\n\n const propDef = getPropertyDef(node.propertyId);\n if (!propDef) return null;\n\n return (\n <AdvancedRow\n key={node.id}\n connector={connector}\n onConnectorToggle={index > 0 ? () => toggleLogicOp(node.id) : undefined}\n propertyDef={propDef}\n condition={node as FilterCondition}\n properties={properties}\n onUpdate={(updated) => handleUpdateNode(node.id, updated)}\n onPropertyChange={(p) => {\n const newCondition = createFilterWithDefaults(p.id, p.type);\n handleUpdateNode(node.id, { ...newCondition, id: node.id });\n }}\n onDelete={() => handleDeleteNode(node.id)}\n onDuplicate={() => handleDuplicateNode(node.id)}\n onTurnIntoGroup={() => handleWrapInGroup(node.id)}\n />\n );\n };\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{children}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n collisionPadding={16}\n collisionBoundary={collisionBoundary ?? undefined}\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={cn(\n \"z-50 flex flex-col\",\n \"bg-background rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n collisionBoundary\n ? \"w-[min(640px,var(--radix-popover-content-available-width))] min-w-0\"\n : \"w-[min(640px,calc(100vw-32px))] min-w-[360px]\",\n )}\n >\n {/* Nodes */}\n <div className=\"flex flex-col gap-base p-base\">\n {filters.length > 0\n ? filters.map((node, i) => renderNode(node, i))\n : (\n <DraftRow\n properties={properties}\n onSelect={handleAddFilter}\n open={draftPickerOpen}\n onOpenChange={setDraftPickerOpen}\n />\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-between p-base border-t border-border\">\n <div className=\"flex items-center gap-sm\">\n {/* Add filter */}\n <PropertySelector\n properties={properties}\n onSelect={handleAddFilter}\n open={addSelectorOpen}\n onOpenChange={setAddSelectorOpen}\n >\n <button type=\"button\" className={cn(ghostBtn, \"text-foreground\")}>\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n Add filter\n </button>\n </PropertySelector>\n\n {/* Add filters group */}\n <button\n type=\"button\"\n onClick={handleAddGroup}\n className={cn(ghostBtn, \"text-foreground\")}\n >\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n Add filters group\n </button>\n </div>\n\n {/* Clear filters */}\n {filters.length > 0 && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className={cn(ghostBtn, \"text-destructive\")}\n >\n <Icon icon={faXmarkOutline} size=\"sm\" className=\"text-destructive\" />\n Clear filters\n </button>\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nAdvancedPopover.displayName = \"AdvancedPopover\";\n\n// ── DraftRow (empty \"Where | Select property\" placeholder) ─────────────────\n\ninterface DraftRowProps {\n properties: PropertyDefinition[];\n onSelect: (property: PropertyDefinition) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst DraftRow: React.FC<DraftRowProps> = ({\n properties,\n onSelect,\n open: openProp,\n onOpenChange,\n}) => {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n const setOpen = (v: boolean) => {\n if (!isControlled) setInternalOpen(v);\n onOpenChange?.(v);\n };\n\n return (\n <div className=\"flex items-center gap-base w-full min-w-0\">\n <div className=\"shrink-0 w-[64px] flex items-center justify-end\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">\n Where\n </span>\n </div>\n <PropertySelector\n properties={properties}\n onSelect={(prop) => {\n onSelect(prop);\n setOpen(false);\n }}\n open={open}\n onOpenChange={setOpen}\n >\n <button\n type=\"button\"\n className={cn(\n \"flex items-center gap-base px-base py-sm min-w-0\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n )}\n >\n <span className=\"text-sm font-regular leading-sm text-muted-foreground whitespace-nowrap\">\n Select property\n </span>\n <Icon\n icon={faChevronDownOutline}\n size=\"xs\"\n className=\"shrink-0 text-foreground\"\n />\n </button>\n </PropertySelector>\n </div>\n );\n};\n\nexport { AdvancedPopover };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { Icon, faChevronDownOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { OperatorList } from \"./operator-selector\";\nimport { ValueInput } from \"./value-input\";\nimport { FilterNodeActions } from \"./filter-node-actions\";\nimport {\n isNoValueOperator,\n getValueInputType,\n formatFilterValue,\n getBadgeCount,\n findEnumOption,\n} from \"./utils\";\nimport type {\n PropertyDefinition,\n FilterCondition,\n OperatorType,\n FilterValue,\n} from \"./types\";\n\nexport type { LogicOperator } from \"./types\";\n\n// ── Select button (shared style for property + operator selectors) ──────────\n\nconst selectBtnStyle = [\n \"flex items-center gap-base\",\n \"px-base py-sm\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-lg shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n];\n\n// ── AdvancedRow ─────────────────────────────────────────────────────────────\n\nexport interface AdvancedRowProps {\n /** \"Where\" for the first row, \"And\"/\"Or\" for subsequent. */\n connector: \"Where\" | \"And\" | \"Or\";\n /** Called when the And/Or toggle is clicked. */\n onConnectorToggle?: () => void;\n propertyDef: PropertyDefinition;\n condition: FilterCondition;\n properties: PropertyDefinition[];\n onUpdate: (condition: FilterCondition) => void;\n onPropertyChange: (property: PropertyDefinition) => void;\n onDelete: () => void;\n onDuplicate?: () => void;\n onTurnIntoGroup?: () => void;\n}\n\nconst AdvancedRow: React.FC<AdvancedRowProps> = ({\n connector,\n onConnectorToggle,\n propertyDef,\n condition,\n properties,\n onUpdate,\n onPropertyChange,\n onDelete,\n onDuplicate,\n onTurnIntoGroup,\n}) => {\n const [operatorOpen, setOperatorOpen] = React.useState(false);\n const [propertyOpen, setPropertyOpen] = React.useState(false);\n const [valueOpen, setValueOpen] = React.useState(false);\n\n // Partition properties: pinned (rendered first) vs non-pinned (after divider).\n const { pinnedProperties, unpinnedProperties } = React.useMemo(() => {\n const pinnedGroups = new Set<string>();\n for (const p of properties) {\n if (p.groupPinned) pinnedGroups.add(p.group);\n }\n const pinned: PropertyDefinition[] = [];\n const unpinned: PropertyDefinition[] = [];\n for (const p of properties) {\n if (pinnedGroups.has(p.group)) pinned.push(p);\n else unpinned.push(p);\n }\n return { pinnedProperties: pinned, unpinnedProperties: unpinned };\n }, [properties]);\n\n const handleOperatorSelect = (op: OperatorType) => {\n if (isNoValueOperator(op)) {\n onUpdate({ ...condition, operator: op, value: null });\n } else {\n const resetValue = op !== condition.operator ? null : condition.value;\n onUpdate({ ...condition, operator: op, value: resetValue });\n }\n setOperatorOpen(false);\n };\n\n const handleValueChange = (val: FilterValue) => {\n onUpdate({ ...condition, value: val });\n };\n\n const displayValue = formatFilterValue(\n condition.value,\n propertyDef.dynamicOptions,\n false,\n propertyDef.options,\n );\n\n // Leading icon for the selected (single) enum value — rendered next to the\n // label inside the value select button.\n const valueLeadingIcon = React.useMemo(() => {\n const v = condition.value;\n const raw =\n typeof v === \"string\"\n ? v\n : Array.isArray(v) && typeof v[0] === \"string\"\n ? (v[0] as string)\n : null;\n if (!raw) return null;\n return findEnumOption(raw, propertyDef.options)?.icon ?? null;\n }, [condition.value, propertyDef.options]);\n const badgeCount = getBadgeCount(condition.value);\n const hasValue = displayValue != null;\n\n return (\n <div className=\"flex items-center gap-base w-full min-w-0\">\n {/* ── Connector: Where label or And/Or toggle button ─────── */}\n {connector === \"Where\" ? (\n <div className=\"shrink-0 w-[64px] flex items-center justify-end\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">\n Where\n </span>\n </div>\n ) : (\n <div className=\"shrink-0 w-[64px] flex items-center justify-end\">\n <TooltipPrimitive.Provider delayDuration={200}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className=\"text-xs font-medium leading-xs text-muted-foreground cursor-default\">\n {connector}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-sm font-regular leading-sm data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n "Or" operator coming soon\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n </div>\n )}\n\n {/* ── Property selector ─────────────────────────────────── */}\n <PopoverPrimitive.Root open={propertyOpen} onOpenChange={setPropertyOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button type=\"button\" className={cn(selectBtnStyle, \"min-w-0\")}>\n <Icon icon={propertyDef.icon} size=\"sm\" className=\"shrink-0 text-muted-foreground\" />\n <span className=\"text-sm font-regular leading-sm text-foreground whitespace-nowrap truncate\">\n {propertyDef.label}\n </span>\n <Icon icon={faChevronDownOutline} size=\"xs\" className=\"shrink-0 text-foreground\" />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip max-h-[300px] overflow-y-auto\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"min-w-[200px]\",\n )}\n >\n {pinnedProperties.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => {\n onPropertyChange(p);\n setPropertyOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n p.id === condition.propertyId && \"bg-dropdown-item-hover\",\n )}\n >\n <Icon icon={p.icon} size=\"sm\" className=\"shrink-0 text-dropdown-item-icon\" />\n <span className=\"text-sm font-regular leading-sm text-dropdown-item-text truncate\">\n {p.label}\n </span>\n </button>\n ))}\n {unpinnedProperties.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => {\n onPropertyChange(p);\n setPropertyOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n p.id === condition.propertyId && \"bg-dropdown-item-hover\",\n )}\n >\n <Icon icon={p.icon} size=\"sm\" className=\"shrink-0 text-dropdown-item-icon\" />\n <span className=\"text-sm font-regular leading-sm text-dropdown-item-text truncate\">\n {p.label}\n </span>\n <span className=\"ml-auto text-xs font-regular leading-xs text-muted-foreground\">\n {p.groupLabel}\n </span>\n </button>\n ))}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {/* ── Operator selector ─────────────────────────────────── */}\n <PopoverPrimitive.Root open={operatorOpen} onOpenChange={setOperatorOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button type=\"button\" className={cn(selectBtnStyle, \"min-w-0\")}>\n <span className=\"text-sm font-regular leading-sm text-foreground whitespace-nowrap truncate text-left\">\n {condition.operator ?? \"Select\"}\n </span>\n <Icon icon={faChevronDownOutline} size=\"xs\" className=\"shrink-0 text-foreground\" />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"min-w-[160px]\",\n )}\n >\n <OperatorList\n dataType={propertyDef.type}\n activeOperator={condition.operator}\n onSelect={handleOperatorSelect}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {/* ── Value input ───────────────────────────────────────── */}\n {condition.operator && !isNoValueOperator(condition.operator) && (() => {\n const inputType = getValueInputType(propertyDef.type, condition.operator);\n const isInline = inputType === \"TextInput\" || inputType === \"NumberInput\";\n\n if (isInline) {\n return (\n <input\n type={inputType === \"NumberInput\" ? \"number\" : \"text\"}\n value={(condition.value as string | number) ?? \"\"}\n onChange={(e) => handleValueChange(\n inputType === \"NumberInput\" ? (e.target.value === \"\" ? null : Number(e.target.value)) : e.target.value,\n )}\n placeholder=\"Enter value...\"\n className={cn(\n \"flex-1 min-w-[80px] px-base py-sm\",\n \"bg-background border border-input rounded-base\",\n \"text-sm font-regular leading-sm text-foreground\",\n \"placeholder:text-muted-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-0\",\n )}\n />\n );\n }\n\n const dateWide = inputType === \"DatePicker\" || inputType === \"DateRange\";\n const isMulti = inputType === \"MultiSelect\" || inputType === \"MultiRelationPicker\";\n const multiTags = isMulti && Array.isArray(condition.value)\n ? (condition.value as string[]).map((v) => {\n const dyn = propertyDef.dynamicOptions?.find((o) => o.value === v);\n return dyn ? dyn.label : v;\n })\n : null;\n return (\n <PopoverPrimitive.Root open={valueOpen} onOpenChange={setValueOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className={cn(selectBtnStyle, \"flex-1 min-w-[80px] justify-between overflow-hidden\")}\n >\n {multiTags && multiTags.length > 0 ? (\n <ValueTagRow tags={multiTags} />\n ) : (\n <>\n {valueLeadingIcon && (\n <Icon\n icon={valueLeadingIcon}\n size=\"sm\"\n className=\"shrink-0 text-foreground\"\n />\n )}\n <span\n className={cn(\n \"text-sm font-regular leading-sm whitespace-nowrap truncate text-left\",\n hasValue\n ? \"text-foreground\"\n : \"text-muted-foreground\",\n )}\n title={hasValue ? displayValue : undefined}\n >\n {hasValue ? displayValue : \"Select a value\"}\n </span>\n </>\n )}\n <Icon\n icon={faChevronDownOutline}\n size=\"xs\"\n className=\"shrink-0 text-foreground\"\n />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n className={cn(\n \"z-50 flex flex-col overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n )}\n style={{ minWidth: dateWide ? \"auto\" : \"240px\" }}\n >\n <ValueInput\n dataType={propertyDef.type}\n operator={condition.operator}\n value={condition.value}\n onChange={handleValueChange}\n onSubmit={() => setValueOpen(false)}\n options={propertyDef.options}\n dynamicOptions={propertyDef.dynamicOptions}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n })()}\n\n {/* ── More actions (...) ────────────────────────────────── */}\n <FilterNodeActions\n nodeType=\"condition\"\n onDuplicate={onDuplicate ?? (() => {})}\n onConvert={onTurnIntoGroup ?? (() => {})}\n onDelete={onDelete}\n />\n </div>\n );\n};\nAdvancedRow.displayName = \"AdvancedRow\";\n\n// ── ValueTagRow (overflow-aware tags for multi-select values) ──────────────\n\nconst tagChip = cn(\n \"inline-flex items-center shrink-0 px-sm rounded-base\",\n \"bg-tag-neutral-bg text-tag-neutral-text\",\n \"text-xs font-medium leading-xs whitespace-nowrap\",\n \"h-5\",\n);\n\nfunction ValueTagRow({ tags }: { tags: string[] }) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const measureRef = React.useRef<HTMLDivElement>(null);\n const [visibleCount, setVisibleCount] = React.useState(tags.length);\n\n React.useLayoutEffect(() => {\n const container = containerRef.current;\n const measureRow = measureRef.current;\n if (!container || !measureRow) return;\n\n const measure = () => {\n const containerWidth = container.getBoundingClientRect().width;\n const chips = Array.from(measureRow.children) as HTMLElement[];\n const overflowBadgeWidth = 32;\n let usedWidth = 0;\n let count = 0;\n\n for (const chip of chips) {\n const chipWidth = chip.getBoundingClientRect().width;\n const gap = count > 0 ? 4 : 0;\n const projected = usedWidth + gap + chipWidth;\n const remaining = tags.length - (count + 1);\n const total = projected + (remaining > 0 ? 4 + overflowBadgeWidth : 0);\n if (total <= containerWidth) {\n usedWidth = projected;\n count++;\n } else {\n break;\n }\n }\n setVisibleCount(Math.max(1, count));\n };\n\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(container);\n return () => observer.disconnect();\n }, [tags]);\n\n const overflowCount = tags.length - visibleCount;\n const overflowTags = tags.slice(visibleCount);\n\n return (\n <div className=\"flex flex-1 items-center gap-xs min-w-0 overflow-hidden relative\">\n <div\n ref={measureRef}\n aria-hidden\n className=\"absolute flex items-center gap-xs pointer-events-none\"\n style={{ visibility: \"hidden\", whiteSpace: \"nowrap\", top: 0, left: 0 }}\n >\n {tags.map((t) => <span key={t} className={tagChip}>{t}</span>)}\n </div>\n <div ref={containerRef} className=\"flex flex-1 items-center gap-xs overflow-hidden\">\n {tags.slice(0, visibleCount).map((t) => (\n <span key={t} className={tagChip}>{t}</span>\n ))}\n {overflowCount > 0 && (\n <TooltipPrimitive.Provider delayDuration={200}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className={cn(tagChip, \"cursor-default bg-filter-chip-badge-bg text-filter-chip-badge-text\")}>\n +{overflowCount}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-xs font-regular leading-xs flex flex-col gap-xs data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n {overflowTags.map((t) => <span key={t}>{t}</span>)}\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n )}\n </div>\n </div>\n );\n}\n\nexport { AdvancedRow };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n Icon,\n faEllipsisOutline,\n faCopyOutline,\n faTrashOutline,\n faFolderOutline,\n faFilterOutline,\n} from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\n\n// ── FilterNodeActions ──────────────────────────────────────────────────────\n\nexport interface FilterNodeActionsProps {\n /** \"condition\" shows \"Turn into group\", \"group\" shows \"Turn into filter\". */\n nodeType: \"condition\" | \"group\";\n onDuplicate: () => void;\n /** \"Turn into group\" for conditions, \"Turn into filter\" for groups. */\n onConvert: () => void;\n onDelete: () => void;\n}\n\nconst FilterNodeActions: React.FC<FilterNodeActionsProps> = ({\n nodeType,\n onDuplicate,\n onConvert,\n onDelete,\n}) => {\n const [open, setOpen] = React.useState(false);\n\n const items = [\n {\n label: \"Duplicate\",\n icon: faCopyOutline,\n action: onDuplicate,\n },\n {\n label: nodeType === \"condition\" ? \"Turn into group\" : \"Turn into filter\",\n icon: nodeType === \"condition\" ? faFolderOutline : faFilterOutline,\n action: onConvert,\n },\n {\n label: \"Delete\",\n icon: faTrashOutline,\n action: onDelete,\n destructive: true,\n },\n ];\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className=\"shrink-0 flex items-center justify-center p-sm rounded-lg cursor-pointer transition-colors hover:bg-accent\"\n aria-label=\"More actions\"\n >\n <Icon\n icon={faEllipsisOutline}\n size=\"sm\"\n className=\"text-foreground\"\n />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"end\"\n className={cn(\n \"z-50 flex flex-col p-xs overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"min-w-[180px]\",\n )}\n >\n {items.map((item) => (\n <button\n key={item.label}\n type=\"button\"\n onClick={() => {\n item.action();\n setOpen(false);\n }}\n className={cn(\n \"flex items-center gap-base p-base rounded-base cursor-pointer transition-colors text-left\",\n \"hover:bg-dropdown-item-hover\",\n item.destructive && \"text-destructive\",\n )}\n >\n <Icon\n icon={item.icon}\n size=\"sm\"\n className={cn(\n \"shrink-0\",\n item.destructive\n ? \"text-destructive\"\n : \"text-dropdown-item-icon\",\n )}\n />\n <span\n className={cn(\n \"text-sm font-regular leading-sm\",\n item.destructive\n ? \"text-destructive\"\n : \"text-dropdown-item-text\",\n )}\n >\n {item.label}\n </span>\n </button>\n ))}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nFilterNodeActions.displayName = \"FilterNodeActions\";\n\nexport { FilterNodeActions };\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { Icon, faPlusOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { FilterNodeActions } from \"./filter-node-actions\";\nimport { PropertySelector } from \"./property-selector\";\nimport type { PropertyDefinition } from \"./types\";\n\n// ── AdvancedGroup ──────────────────────────────────────────────────────────\n\nexport interface AdvancedGroupProps {\n /** \"Where\" for the first group, \"And\"/\"Or\" for subsequent. */\n connector: \"Where\" | \"And\" | \"Or\";\n /** Called when the And/Or toggle is clicked. */\n onConnectorToggle?: () => void;\n onDuplicate: () => void;\n onTurnIntoFilter: () => void;\n onDelete: () => void;\n /** Called when user adds a filter inside this group via the inline button. */\n onAddFilter?: (property: PropertyDefinition) => void;\n properties?: PropertyDefinition[];\n children?: React.ReactNode;\n}\n\nconst AdvancedGroup: React.FC<AdvancedGroupProps> = ({\n connector,\n onConnectorToggle,\n onDuplicate,\n onTurnIntoFilter,\n onDelete,\n onAddFilter,\n properties,\n children,\n}) => {\n const [addOpen, setAddOpen] = React.useState(false);\n\n return (\n <div className=\"flex items-start gap-base w-full min-w-0\">\n {/* ── Connector: Where label or And/Or toggle button ─────── */}\n {connector === \"Where\" ? (\n <div className=\"shrink-0 w-[64px] flex items-center justify-end pt-base\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">\n Where\n </span>\n </div>\n ) : (\n <div className=\"shrink-0 w-[64px] flex items-center justify-end pt-base\">\n <TooltipPrimitive.Provider delayDuration={200}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className=\"text-xs font-medium leading-xs text-muted-foreground cursor-default\">\n {connector}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-sm font-regular leading-sm data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n "Or" operator coming soon\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n </div>\n )}\n\n {/* ── Group container ────────────────────────────────────── */}\n <div className=\"flex-1 min-w-0 flex flex-col gap-base p-base border border-border rounded-lg bg-secondary\">\n {children}\n\n {/* Add filter button inside the group */}\n {onAddFilter && properties && (\n <PropertySelector\n properties={properties}\n onSelect={(prop) => {\n onAddFilter(prop);\n setAddOpen(false);\n }}\n open={addOpen}\n onOpenChange={setAddOpen}\n >\n <button\n type=\"button\"\n className=\"flex items-center gap-sm px-base py-sm text-sm font-medium leading-sm text-muted-foreground cursor-pointer transition-colors rounded-lg hover:bg-accent hover:text-foreground w-fit\"\n >\n <Icon icon={faPlusOutline} size=\"sm\" />\n Add filter\n </button>\n </PropertySelector>\n )}\n </div>\n\n {/* ── More actions (...) ─────────────────────────────────── */}\n <div className=\"shrink-0 pt-base\">\n <FilterNodeActions\n nodeType=\"group\"\n onDuplicate={onDuplicate}\n onConvert={onTurnIntoFilter}\n onDelete={onDelete}\n />\n </div>\n </div>\n );\n};\nAdvancedGroup.displayName = \"AdvancedGroup\";\n\nexport { AdvancedGroup };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { Icon, faFilterOutline, faPlusOutline, faChevronDownOutline, faXmarkOutline } from \"@l3mpire/icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { AdvancedRow } from \"./advanced-row\";\nimport { AdvancedGroup } from \"./advanced-group\";\nimport { PropertySelector } from \"./property-selector\";\nimport {\n createFilterWithDefaults,\n createEmptyGroup,\n isFilterGroup,\n duplicateNode,\n wrapInGroup,\n unwrapGroup,\n removeNodeFromTree,\n updateNodeInTree,\n insertAfterInTree,\n replaceNodeInTree,\n toggleGroupLogicInTree,\n} from \"./utils\";\nimport type { PropertyDefinition, FilterCondition, FilterNode } from \"./types\";\n\n// ── Ghost button style ─────────────────────────────────────────────────────\n\nconst ghostBtn = [\n \"flex items-center gap-sm px-base py-sm\",\n \"min-h-[32px]\",\n \"cursor-pointer transition-colors text-sm font-medium leading-sm\",\n \"rounded-md hover:bg-accent\",\n];\n\n// ── SummaryChip ─────────────────────────────────────────────────────────────\n\nexport interface SummaryChipProps {\n count: number;\n filters: FilterNode[];\n properties: PropertyDefinition[];\n onFiltersChange: (filters: FilterNode[]) => void;\n onClearAll: () => void;\n children?: React.ReactNode;\n className?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n collisionBoundary?: Element | null;\n tooltipContent?: React.ReactNode;\n}\n\nconst SummaryChip: React.FC<SummaryChipProps> = ({\n count,\n filters,\n properties,\n onFiltersChange,\n onClearAll,\n children,\n className,\n open: openProp,\n onOpenChange,\n collisionBoundary,\n tooltipContent,\n}) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : uncontrolledOpen;\n const setOpen = (v: boolean) => {\n if (!isControlled) setUncontrolledOpen(v);\n onOpenChange?.(v);\n };\n const [addSelectorOpen, setAddSelectorOpen] = React.useState(false);\n const [draftPickerOpen, setDraftPickerOpen] = React.useState(false);\n\n const getPropertyDef = (propertyId: string) =>\n properties.find((p) => p.id === propertyId);\n\n // ── Tree operations (same as AdvancedPopover) ─────────────\n\n const handleAddFilter = (property: PropertyDefinition) => {\n const newFilter = createFilterWithDefaults(property.id, property.type);\n onFiltersChange([...filters, newFilter]);\n setAddSelectorOpen(false);\n };\n\n const handleAddGroup = () => {\n onFiltersChange([...filters, createEmptyGroup()]);\n };\n\n const handleUpdateNode = (id: string, updated: FilterNode) => {\n onFiltersChange(updateNodeInTree(filters, id, () => updated));\n };\n\n const handleDeleteNode = (id: string) => {\n const next = removeNodeFromTree(filters, id);\n onFiltersChange(next);\n if (next.length === 0) setOpen(false);\n };\n\n const handleDuplicateNode = (id: string) => {\n const find = (nodes: FilterNode[]): FilterNode | undefined => {\n for (const n of nodes) {\n if (n.id === id) return n;\n if (isFilterGroup(n)) { const f = find(n.children); if (f) return f; }\n }\n };\n const node = find(filters);\n if (!node) return;\n const clone = duplicateNode(node);\n clone.logicOperator = node.logicOperator ?? \"and\";\n onFiltersChange(insertAfterInTree(filters, id, clone));\n };\n\n const handleWrapInGroup = (id: string) => {\n const find = (nodes: FilterNode[]): FilterCondition | undefined => {\n for (const n of nodes) {\n if (n.id === id && !isFilterGroup(n)) return n as FilterCondition;\n if (isFilterGroup(n)) { const f = find(n.children); if (f) return f; }\n }\n };\n const condition = find(filters);\n if (!condition) return;\n onFiltersChange(replaceNodeInTree(filters, id, wrapInGroup(condition)));\n };\n\n const handleUnwrapGroup = (id: string) => {\n const find = (nodes: FilterNode[]): import(\"./types\").FilterGroup | undefined => {\n for (const n of nodes) {\n if (n.id === id && isFilterGroup(n)) return n;\n if (isFilterGroup(n)) { const f = find(n.children); if (f) return f; }\n }\n };\n const group = find(filters);\n if (!group) return;\n const replacement = unwrapGroup(group);\n if (replacement) {\n onFiltersChange(replaceNodeInTree(filters, id, replacement));\n } else {\n onFiltersChange(removeNodeFromTree(filters, id));\n }\n };\n\n const toggleLogicOp = (id: string) => {\n onFiltersChange(toggleGroupLogicInTree(filters, id));\n };\n\n const handleGroupChildrenChange = (groupId: string, newChildren: FilterNode[]) => {\n onFiltersChange(\n updateNodeInTree(filters, groupId, (n) =>\n isFilterGroup(n) ? { ...n, children: newChildren } : n,\n ),\n );\n };\n\n // ── Recursive renderer ────────────────────────────────────\n\n const renderNode = (node: FilterNode, index: number): React.ReactNode => {\n const connector =\n index === 0\n ? \"Where\" as const\n : (node.logicOperator ?? \"and\") === \"and\" ? \"And\" as const : \"Or\" as const;\n\n if (isFilterGroup(node)) {\n return (\n <AdvancedGroup\n key={node.id}\n connector={connector}\n onConnectorToggle={index > 0 ? () => toggleLogicOp(node.id) : undefined}\n onDuplicate={() => handleDuplicateNode(node.id)}\n onTurnIntoFilter={() => handleUnwrapGroup(node.id)}\n onDelete={() => handleDeleteNode(node.id)}\n properties={properties}\n onAddFilter={(prop) => {\n const newFilter = createFilterWithDefaults(prop.id, prop.type);\n handleGroupChildrenChange(node.id, [...node.children, newFilter]);\n }}\n >\n {node.children.length === 0 ? (\n <DraftRow\n properties={properties}\n onSelect={(prop) => {\n const newFilter = createFilterWithDefaults(prop.id, prop.type);\n handleGroupChildrenChange(node.id, [newFilter]);\n }}\n />\n ) : (\n node.children.map((child, i) => renderNode(child, i))\n )}\n </AdvancedGroup>\n );\n }\n\n const propDef = getPropertyDef(node.propertyId);\n if (!propDef) return null;\n\n return (\n <AdvancedRow\n key={node.id}\n connector={connector}\n onConnectorToggle={index > 0 ? () => toggleLogicOp(node.id) : undefined}\n propertyDef={propDef}\n condition={node as FilterCondition}\n properties={properties}\n onUpdate={(updated) => handleUpdateNode(node.id, updated)}\n onPropertyChange={(p) => {\n const newCondition = createFilterWithDefaults(p.id, p.type);\n handleUpdateNode(node.id, { ...newCondition, id: node.id });\n }}\n onDelete={() => handleDeleteNode(node.id)}\n onDuplicate={() => handleDuplicateNode(node.id)}\n onTurnIntoGroup={() => handleWrapInGroup(node.id)}\n />\n );\n };\n\n const trigger = children ?? (\n <button\n type=\"button\"\n className={cn(\n \"inline-flex items-center gap-sm px-base py-sm\",\n \"min-h-[32px] max-h-[32px]\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm\",\n \"cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n className,\n )}\n >\n <Icon icon={faFilterOutline} size=\"sm\" className=\"shrink-0 text-foreground\" />\n <span className=\"text-sm font-medium leading-sm whitespace-nowrap text-foreground\">\n Filters\n </span>\n {count > 0 && (\n <span className=\"flex items-center p-2xs rounded-xs bg-filter-chip-badge-bg\">\n <span className=\"text-[10px] font-medium leading-2xs text-filter-chip-badge-text\">{count}</span>\n </span>\n )}\n </button>\n );\n\n const hasTooltip = tooltipContent && !open;\n\n return (\n <TooltipPrimitive.Provider delayDuration={300}>\n <TooltipPrimitive.Root open={hasTooltip ? undefined : false}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <TooltipPrimitive.Trigger asChild>\n <PopoverPrimitive.Trigger asChild>\n {trigger}\n </PopoverPrimitive.Trigger>\n </TooltipPrimitive.Trigger>\n {hasTooltip && (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={4}\n className=\"z-50 px-base py-sm rounded-lg shadow-lg bg-tooltip-default-bg text-tooltip-default-text text-sm font-regular leading-sm max-w-[320px] data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out] data-[state=closed]:animate-[tooltip-out_100ms_ease-in]\"\n >\n {tooltipContent}\n <TooltipPrimitive.Arrow className=\"fill-tooltip-default-bg\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )}\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n sideOffset={4}\n align=\"start\"\n collisionPadding={16}\n collisionBoundary={collisionBoundary ?? undefined}\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={cn(\n \"z-50 flex flex-col overflow-clip\",\n \"bg-dropdown-bg border border-dropdown-border rounded-lg shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n collisionBoundary\n ? \"w-[min(640px,var(--radix-popover-content-available-width))]\"\n : \"w-[min(640px,calc(100vw-32px))]\",\n )}\n >\n <div className=\"flex flex-col gap-base p-base\">\n {filters.length > 0\n ? filters.map((node, i) => renderNode(node, i))\n : (\n <DraftRow\n properties={properties}\n onSelect={handleAddFilter}\n open={draftPickerOpen}\n onOpenChange={setDraftPickerOpen}\n />\n )}\n </div>\n\n <div className=\"flex items-center justify-between p-base border-t border-border\">\n <div className=\"flex items-center gap-sm\">\n <PropertySelector\n properties={properties}\n onSelect={handleAddFilter}\n open={addSelectorOpen}\n onOpenChange={setAddSelectorOpen}\n >\n <button type=\"button\" className={cn(ghostBtn, \"text-foreground\")}>\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n Add filter\n </button>\n </PropertySelector>\n <button type=\"button\" onClick={handleAddGroup} className={cn(ghostBtn, \"text-foreground\")}>\n <Icon icon={faPlusOutline} size=\"sm\" className=\"text-foreground\" />\n Add filters group\n </button>\n </div>\n {filters.length > 0 && (\n <button\n type=\"button\"\n onClick={() => { onClearAll(); setOpen(false); }}\n className={cn(ghostBtn, \"text-destructive\")}\n >\n <Icon icon={faXmarkOutline} size=\"sm\" className=\"text-destructive\" />\n Clear filters\n </button>\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\nSummaryChip.displayName = \"SummaryChip\";\n\n// ── DraftRow ───────────────────────────────────────────────────────────────\n\ninterface DraftRowProps {\n properties: PropertyDefinition[];\n onSelect: (property: PropertyDefinition) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst DraftRow: React.FC<DraftRowProps> = ({ properties, onSelect, open: openProp, onOpenChange }) => {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isCtrl = openProp !== undefined;\n const open = isCtrl ? openProp : internalOpen;\n const setOpen = (v: boolean) => { if (!isCtrl) setInternalOpen(v); onOpenChange?.(v); };\n\n return (\n <div className=\"flex items-center gap-base w-full min-w-0\">\n <div className=\"shrink-0 w-[64px] flex items-center justify-end\">\n <span className=\"text-xs font-medium leading-xs text-muted-foreground\">Where</span>\n </div>\n <PropertySelector properties={properties} onSelect={(p) => { onSelect(p); setOpen(false); }} open={open} onOpenChange={setOpen}>\n <button\n type=\"button\"\n className={cn(\n \"flex items-center gap-base px-base py-sm min-w-0\",\n \"bg-gradient-to-t from-btn-outlined-neutral-bg-default to-btn-outlined-neutral-bg-gradient-to-default\",\n \"border border-btn-outlined-neutral-border-default rounded-md shadow-sm cursor-pointer transition-colors\",\n \"hover:from-btn-outlined-neutral-bg-hover hover:to-btn-outlined-neutral-bg-gradient-to-hover\",\n )}\n >\n <span className=\"text-sm font-regular leading-sm text-muted-foreground whitespace-nowrap\">Select property</span>\n <Icon icon={faChevronDownOutline} size=\"xs\" className=\"shrink-0 text-foreground\" />\n </button>\n </PropertySelector>\n </div>\n );\n};\n\nexport { SummaryChip };\n","import * as React from \"react\";\n\nexport type FilterBarMode = \"default\" | \"minimal\" | \"icon\";\n\nconst DEFAULT_BREAKPOINT = 600;\n\n/**\n * Observes the container width and returns the appropriate FilterBar mode.\n * - default: > breakpoint\n * - minimal: ≤ breakpoint\n */\nexport function useFilterBarMode(\n ref: React.RefObject<HTMLElement | null>,\n override?: FilterBarMode,\n breakpoint: number = DEFAULT_BREAKPOINT,\n): FilterBarMode {\n const [mode, setMode] = React.useState<FilterBarMode>(\"default\");\n\n React.useEffect(() => {\n if (override) return;\n const el = ref.current;\n if (!el) return;\n\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n setMode(width > breakpoint ? \"default\" : \"minimal\");\n });\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [ref, override, breakpoint]);\n\n return override ?? mode;\n}\n"],"mappings":"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","names":["React","jsx","jsxs","React","faStarsOutline","React","cva","Icon","jsx","jsxs","cva","Icon","jsx","faStarsOutline","React","Icon","jsx","jsxs","Icon","React","Icon","faStarsOutline","React","cva","Icon","jsx","jsxs","cva","Icon","jsx","jsxs","Icon","faStarsOutline","React","Icon","faStarsOutline","React","DialogPrimitive","React","cva","Icon","jsx","jsxs","cva","Icon","jsx","jsxs","React","cva","Icon","faCircleExclamationOutline","React","Icon","faCircleInfoSolid","jsx","jsxs","textColor","Icon","faCircleInfoSolid","jsx","jsxs","cva","Icon","faCircleExclamationOutline","React","Icon","faCircleExclamationOutline","jsx","jsxs","errorGuidance","resolveState","Icon","faCircleExclamationOutline","jsx","jsxs","Icon","faStarsOutline","React","PopoverPrimitive","Slot","jsx","Slot","React","Icon","jsx","jsxs","Icon","React","jsx","jsxs","React","PopoverPrimitive","Icon","faCheckOutline","jsx","jsxs","Icon","faCheckOutline","React","Icon","faPenOutline","jsx","jsxs","Icon","faPenOutline","React","jsx","jsxs","React","PopoverPrimitive","Icon","faEyeSlashOutline","faTrashOutline","faPlusOutline","faStarsOutline","React","cva","Icon","faXmarkSolid","React","Icon","React","cva","jsx","cva","Fragment","jsx","jsxs","Icon","Fragment","jsx","jsxs","cva","Icon","faXmarkSolid","jsx","jsxs","faStarsOutline","Icon","faEyeSlashOutline","faTrashOutline","faPlusOutline","React","Icon","faSlidersOutline","faXmarkOutline","faCheckOutline","jsx","jsxs","Icon","faSlidersOutline","faXmarkOutline","Field","faCheckOutline","React","Icon","faChartLineUpOutline","faXmarkOutline","faCheckOutline","faPlusOutline","faTrashOutline","React","cva","Icon","faPlusOutline","faCircleExclamationOutline","jsx","jsxs","cva","wrapperStates","errorGuidance","Icon","faPlusOutline","faCircleExclamationOutline","jsx","jsxs","Icon","faChartLineUpOutline","faXmarkOutline","faPlusOutline","faCheckOutline","faTrashOutline","React","DropdownMenuPrimitive","Icon","faXmarkOutline","faPenOutline","faPlusSolid","Fragment","jsx","jsxs","Icon","faPenOutline","faXmarkOutline","faPlusSolid","React","Icon","faXmarkOutline","React","DropdownMenuPrimitive","Icon","jsx","jsxs","Icon","jsx","jsxs","Icon","faXmarkOutline","React","TooltipPrimitive","jsx","jsxs","React","PopoverPrimitive","jsx","jsxs","React","Slot","cva","Icon","jsx","jsxs","cva","iconSizeMap","Slot","Icon","React","cva","Icon","faCircleInfoSolid","faXmarkSolid","jsx","jsxs","cva","faCircleInfoSolid","Icon","faXmarkSolid","React","cva","Icon","faCircleInfoSolid","faCircleCheckSolid","faCircleExclamationSolid","faTriangleExclamationSolid","faXmarkSolid","jsx","jsxs","cva","typeIconMap","faCircleInfoSolid","faCircleCheckSolid","faCircleExclamationSolid","faTriangleExclamationSolid","titleStyle","closeButtonStyle","Icon","faXmarkSolid","React","jsx","jsxs","React","SwitchPrimitive","Icon","jsx","jsxs","trackStyles","thumbStyle","Icon","React","cva","jsx","jsxs","cva","React","Icon","jsx","jsxs","labelBase","labelColor","Icon","React","jsx","jsxs","labelBase","labelColor","React","RadioGroupPrimitive","Icon","jsx","jsxs","cardStyles","Icon","React","jsx","React","cva","Icon","faChevronDownSolid","faStarsOutline","Fragment","jsx","jsxs","cva","Icon","faStarsOutline","faChevronDownSolid","React","PopoverPrimitive","TooltipPrimitive","cva","Icon","faChevronDownSolid","faCircleExclamationOutline","faXmarkSolid","jsx","jsxs","cva","iconColor","errorGuidance","Icon","faXmarkSolid","faChevronDownSolid","faCircleExclamationOutline","React","jsx","jsxs","React","cva","Icon","faXmarkSolid","jsx","jsxs","cva","iconSizeMap","Icon","faXmarkSolid","React","cva","Icon","faCircleExclamationOutline","faXmarkSolid","jsx","jsxs","cva","wrapperStates","resolveState","errorGuidance","Icon","faXmarkSolid","faCircleExclamationOutline","React","cva","Slot","jsx","cva","Slot","React","jsx","jsxs","React","jsx","jsxs","React","cva","Icon","jsx","jsxs","cva","iconContainerVariants","Icon","React","jsx","jsxs","React","Icon","faGripDotsVerticalSolid","PopoverPrimitive","React","jsx","React","jsx","jsxs","jsx","jsxs","Icon","faGripDotsVerticalSolid","cellValue","React","cva","Icon","jsx","jsxs","cva","Icon","React","jsx","jsxs","React","jsx","React","PopoverPrimitive","Icon","faArrowUpSmallBigOutline","faArrowDownBigSmallOutline","jsx","jsxs","Icon","faArrowUpSmallBigOutline","faArrowDownBigSmallOutline","React","Icon","faFilterOutline","jsx","jsxs","Icon","faFilterOutline","React","Icon","jsx","jsxs","Icon","PopoverPrimitive","jsx","jsxs","jsx","jsxs","jsx","jsxs","React","React","PopoverPrimitive","Icon","faChevronLeftOutline","faChevronRightOutline","jsx","jsxs","Icon","faChevronLeftOutline","faChevronRightOutline","jsx","jsxs","Icon","jsx","jsxs","Icon","jsx","jsxs","jsx","React","PopoverPrimitive","Icon","faChevronLeftOutline","faChevronRightOutline","faFilterOutline","jsx","jsxs","Icon","faFilterOutline","faChevronRightOutline","faChevronLeftOutline","PopoverPrimitive","Icon","faArrowRightOutline","faTrashOutline","jsx","jsxs","Icon","faArrowRightOutline","faTrashOutline","React","PopoverPrimitive","Icon","jsx","jsxs","Icon","React","PopoverPrimitive","Icon","jsx","jsxs","Icon","React","Icon","faPlusOutline","React","Icon","faXmarkOutline","faFilterOutline","jsx","jsxs","Icon","faFilterOutline","faXmarkOutline","React","PopoverPrimitive","Icon","faPlusOutline","faChevronDownOutline","faXmarkOutline","React","PopoverPrimitive","TooltipPrimitive","Icon","faChevronDownOutline","React","PopoverPrimitive","Icon","faEllipsisOutline","faCopyOutline","faTrashOutline","faFilterOutline","jsx","jsxs","faCopyOutline","faFilterOutline","faTrashOutline","Icon","faEllipsisOutline","Fragment","jsx","jsxs","Icon","faChevronDownOutline","React","TooltipPrimitive","Icon","faPlusOutline","jsx","jsxs","Icon","faPlusOutline","jsx","jsxs","children","Icon","faPlusOutline","faXmarkOutline","faChevronDownOutline","React","PopoverPrimitive","TooltipPrimitive","Icon","faFilterOutline","faPlusOutline","faChevronDownOutline","faXmarkOutline","jsx","jsxs","ghostBtn","DraftRow","Icon","faFilterOutline","faPlusOutline","faXmarkOutline","faChevronDownOutline","React","jsx","jsxs","Icon","faPlusOutline"]}
|