@pstdio/ui 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/components/breadcrumb.d.ts +2 -0
  2. package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +2 -2
  3. package/dist/components/chat-ui/tool-rendering/shared.d.ts +1 -1
  4. package/dist/components/{tickets/ticket-board.d.ts → data-renderer/data-renderer-board.d.ts} +14 -14
  5. package/dist/components/{tickets/ticket-card.d.ts → data-renderer/data-renderer-card.d.ts} +8 -8
  6. package/dist/components/data-renderer/data-renderer-grouping.d.ts +22 -0
  7. package/dist/components/data-renderer/data-renderer-helpers.d.ts +18 -0
  8. package/dist/components/{tickets/ticket-list.d.ts → data-renderer/data-renderer-list.d.ts} +10 -10
  9. package/dist/components/{tickets/tickets-workspace.d.ts → data-renderer/data-renderer.d.ts} +14 -12
  10. package/dist/components/{tickets → data-renderer}/display-menu.d.ts +6 -6
  11. package/dist/components/data-renderer/filter-menu.d.ts +11 -0
  12. package/dist/components/{tickets → data-renderer}/tag-badge.d.ts +2 -2
  13. package/dist/components/{tickets → data-renderer}/types.d.ts +18 -18
  14. package/dist/components/data-renderer/use-data-renderer-store.d.ts +52 -0
  15. package/dist/components/resource-context-menu.d.ts +1 -1
  16. package/dist/index.d.ts +12 -11
  17. package/dist/index.js +5163 -5137
  18. package/dist/index.js.map +1 -1
  19. package/dist/theme/recipes/menu.d.ts +1 -1
  20. package/package.json +2 -2
  21. package/dist/components/tickets/filter-menu.d.ts +0 -11
  22. package/dist/components/tickets/ticket-grouping.d.ts +0 -22
  23. package/dist/components/tickets/use-workspace-store.d.ts +0 -51
  24. package/dist/components/tickets/workspace-helpers.d.ts +0 -18
  25. /package/dist/components/{tickets → data-renderer}/tag-option-icon.d.ts +0 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/activity/activity-avatar.tsx","../src/components/activity/activity-comment.tsx","../src/components/activity/activity-composer.tsx","../src/components/activity/activity-event.tsx","../src/components/activity/activity-root.tsx","../src/components/activity/activity-timeline.tsx","../src/components/activity/index.ts","../src/components/attached-panel.tsx","../src/components/breadcrumb.tsx","../src/components/bubble-button.tsx","../src/components/header.tsx","../src/components/bubble-panel.tsx","../src/utils/apply-theme-preference.ts","../src/utils/theme-preference.tsx","../src/components/code-editor.tsx","../src/components/content-placeholder.tsx","../src/components/delete-confirmation-modal.tsx","../src/components/diff-viewer/diff-size.ts","../src/components/diff-viewer/diff-card-body.tsx","../src/components/diff-viewer/diff-card-load-state.tsx","../src/components/diff-viewer/diff-card-content.tsx","../src/components/diff-viewer/diff-card.tsx","../src/components/diff-viewer/diff-drawer.tsx","../src/components/resizable-split-layout.handle.tsx","../src/components/resizable-split-layout.tsx","../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer.store.ts","../src/components/resource-context-menu.tsx","../src/components/searchable-menu.tsx","../src/components/list-row/searchable-action-menu.tsx","../src/components/list-row/list-row-actions.tsx","../src/components/list-row/list-row-menu.tsx","../src/components/list-row/list-row.tsx","../src/components/tree-list/tree-list.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx","../src/components/error-boundary.tsx","../src/components/horizontal-menu-stack.tsx","../src/components/simple-card.tsx","../src/components/integration-card.tsx","../src/components/item-section.tsx","../src/components/panel-header.constants.ts","../src/components/panel-sidebar-registration-context.ts","../src/components/toaster.tsx","../src/components/layout.tsx","../src/components/open-source-notices-screen.tsx","../src/components/palette-filter.ts","../src/components/palette-list.tsx","../src/components/palette.tsx","../src/components/palette-shortcut.tsx","../src/components/param-editor-label.tsx","../src/components/param-editor-color-input.tsx","../src/components/param-editor-date-input.tsx","../src/components/number-input.tsx","../src/components/slider.tsx","../src/components/param-editor-number-input.tsx","../src/components/param-editor-selection-input.tsx","../src/components/param-editor-text-input.tsx","../src/components/param-editor-input-group.tsx","../src/components/param-editor.tsx","../src/components/repo-picker-dialog.tsx","../src/components/session-indicator.tsx","../src/components/sidebar/sidebar.store.ts","../src/components/sidebar/sidebar-footer.tsx","../src/components/sidebar/sidebar-header.tsx","../src/components/sidebar/sidebar.tsx","../src/components/sidebar/sidebar-project-menu.tsx","../src/components/switch.tsx","../src/components/tickets/types.ts","../src/components/tickets/workspace-helpers.ts","../src/components/tickets/display-menu.tsx","../src/components/tickets/filter-menu.tsx","../src/components/workspace-badge.tsx","../src/components/tickets/tag-option-icon.ts","../src/components/tickets/tag-badge.tsx","../src/components/tickets/ticket-card.tsx","../src/components/tickets/ticket-board.tsx","../src/components/tickets/ticket-list.tsx","../src/components/tickets/ticket-grouping.ts","../src/components/tickets/use-workspace-store.ts","../src/components/tickets/tickets-workspace.tsx"],"sourcesContent":["import { Avatar, Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\n\nexport interface ActivityAvatarProps {\n actor?: ActivityActor;\n icon?: ReactNode;\n color?: string;\n background?: string;\n}\n\nexport const ActivityAvatar = (props: ActivityAvatarProps) => {\n const { actor, icon, color = \"fg.muted\", background = \"bg.muted\" } = props;\n\n if (icon) {\n return (\n <Box\n boxSize=\"18px\"\n borderRadius=\"full\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n color={color}\n background={background}\n >\n {icon}\n </Box>\n );\n }\n\n return (\n <Avatar.Root size=\"2xs\" flexShrink={0}>\n <Avatar.Image src={actor?.avatarSrc} alt={actor?.avatarAlt ?? actor?.name} />\n <Avatar.Fallback name={actor?.name} background={background} color={color} />\n </Avatar.Root>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { Children, type ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\ninterface ActivityCommentHeaderProps {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityCommentProps extends Omit<HTMLChakraProps<\"article\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n replies?: ReactNode;\n composer?: ReactNode;\n children: ReactNode;\n}\n\nexport interface ActivityReplyProps extends Omit<HTMLChakraProps<\"div\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n children: ReactNode;\n}\n\nconst TimestampSeparator = () => (\n <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />\n);\n\nconst ActivityCommentHeader = (props: ActivityCommentHeaderProps) => {\n const { actor, timestamp, actions } = props;\n\n return (\n <HStack gap=\"xs\" alignItems=\"center\" minW=\"0\">\n <ActivityAvatar actor={actor} />\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n {actor.name}\n </Text>\n {timestamp ? (\n <>\n <TimestampSeparator />\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n <Box marginLeft=\"auto\" flexShrink={0}>\n {actions}\n </Box>\n </HStack>\n );\n};\n\nexport const ActivityReply = (props: ActivityReplyProps) => {\n const { actor, timestamp, actions, children, ...rootProps } = props;\n\n return (\n <Box paddingX=\"md\" paddingY=\"sm\" {...rootProps}>\n <Stack gap=\"xs\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Box paddingLeft=\"32px\">\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\">\n {children}\n </Text>\n </Box>\n </Stack>\n </Box>\n );\n};\n\nexport const ActivityComment = (props: ActivityCommentProps) => {\n const { actor, timestamp, actions, replies, composer, children, ...rootProps } = props;\n const hasReplies = Children.count(replies) > 0;\n\n return (\n <Box\n as=\"article\"\n width=\"full\"\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"sm\"\n background=\"bg\"\n overflow=\"hidden\"\n {...rootProps}\n >\n <Stack gap=\"sm\" padding=\"md\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\" whiteSpace=\"pre-wrap\">\n {children}\n </Text>\n </Stack>\n {hasReplies ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {replies}\n </Box>\n ) : null}\n {composer ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {composer}\n </Box>\n ) : null}\n </Box>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, chakra, HStack, Icon, IconButton, Spacer, Textarea } from \"@chakra-ui/react\";\nimport { ArrowUp, Paperclip } from \"lucide-react\";\nimport type { FormEvent, ReactNode } from \"react\";\nimport { useState } from \"react\";\n\nimport { Tooltip } from \"../tooltip\";\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityComposerProps extends Omit<HTMLChakraProps<\"form\">, \"onChange\" | \"onSubmit\"> {\n actor?: ActivityActor;\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n variant?: \"standalone\" | \"inline\";\n minRows?: number;\n attachLabel?: string;\n submitLabel?: string;\n actions?: ReactNode;\n onAttach?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n}\n\nexport const ActivityComposer = (props: ActivityComposerProps) => {\n const {\n actor,\n value,\n defaultValue = \"\",\n placeholder = \"Leave a comment...\",\n variant = \"standalone\",\n minRows = variant === \"standalone\" ? 3 : 1,\n attachLabel = \"Attach file\",\n submitLabel = \"Submit comment\",\n actions,\n onAttach,\n onChange,\n onSubmit,\n ...rootProps\n } = props;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value ?? internalValue;\n const isInline = variant === \"inline\";\n const canSubmit = currentValue.trim().length > 0;\n\n const handleChange = (nextValue: string) => {\n if (value === undefined) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n };\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!canSubmit) return;\n\n onSubmit?.(currentValue.trim());\n\n if (value === undefined) {\n setInternalValue(\"\");\n }\n };\n\n return (\n <chakra.form\n width=\"full\"\n background=\"bg\"\n borderWidth={isInline ? \"0\" : \"1px\"}\n borderColor=\"border.muted\"\n borderRadius={isInline ? \"0\" : \"sm\"}\n transition=\"border-color 0.12s ease, box-shadow 0.12s ease\"\n _focusWithin={isInline ? undefined : { borderColor: \"blue.border\", boxShadow: \"mid\" }}\n onSubmit={handleSubmit}\n {...rootProps}\n >\n <HStack alignItems=\"flex-start\" gap=\"xs\" padding={isInline ? \"sm\" : \"md\"}>\n {actor ? <ActivityAvatar actor={actor} /> : null}\n <Box flex=\"1\" minW=\"0\">\n <Textarea\n value={currentValue}\n rows={minRows}\n resize=\"none\"\n border=\"0\"\n padding=\"0\"\n minH={isInline ? \"1.5rem\" : \"4rem\"}\n background=\"transparent\"\n color=\"fg\"\n textStyle=\"label/S/regular\"\n placeholder={placeholder}\n _placeholder={{ color: \"fg.subtle\" }}\n _focus={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n onChange={(event) => handleChange(event.currentTarget.value)}\n />\n <HStack gap=\"2xs\" marginTop={isInline ? \"0\" : \"sm\"}>\n {actions}\n <Spacer />\n <Tooltip content={attachLabel}>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={attachLabel} type=\"button\" onClick={onAttach}>\n <Icon as={Paperclip} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n <Tooltip content={submitLabel}>\n <IconButton size=\"2xs\" variant=\"subtle\" aria-label={submitLabel} type=\"submit\" disabled={!canSubmit}>\n <Icon as={ArrowUp} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </HStack>\n </Box>\n </HStack>\n </chakra.form>\n );\n};\n","import type { TimelineItemProps } from \"@chakra-ui/react\";\nimport { Box, Text, Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityEventProps extends Omit<TimelineItemProps, \"title\"> {\n actor?: ActivityActor;\n icon?: ReactNode;\n iconColor?: string;\n iconBackground?: string;\n timestamp?: ReactNode;\n children: ReactNode;\n}\n\nconst EventSeparator = () => <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />;\n\nexport const ActivityEvent = (props: ActivityEventProps) => {\n const {\n actor,\n icon,\n iconColor = \"fg.muted\",\n iconBackground = \"transparent\",\n timestamp,\n children,\n ...rootProps\n } = props;\n\n return (\n <Timeline.Item gap=\"xs\" minH=\"24px\" paddingX=\"md\" {...rootProps}>\n <Timeline.Connector>\n <Timeline.Separator borderColor=\"border.muted\" />\n <Timeline.Indicator outline=\"none\" shadow=\"none\" border=\"none\" background=\"transparent\">\n <ActivityAvatar actor={actor} icon={icon} color={iconColor} background={iconBackground} />\n </Timeline.Indicator>\n </Timeline.Connector>\n <Timeline.Content gap=\"0\" paddingBottom=\"xs\" minW=\"0\">\n <Timeline.Title\n marginTop=\"0\"\n gap=\"xs\"\n minW=\"0\"\n fontWeight=\"normal\"\n textStyle=\"label/S/regular\"\n color=\"fg.muted\"\n >\n {actor ? (\n <Text as=\"span\" color=\"fg\" fontWeight=\"500\" flexShrink={0}>\n {actor.name}\n </Text>\n ) : null}\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" gap=\"2xs\" minW=\"0\" flexWrap=\"wrap\">\n {children}\n </Box>\n {timestamp ? (\n <>\n <EventSeparator />\n <Text as=\"span\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n </Timeline.Title>\n </Timeline.Content>\n </Timeline.Item>\n );\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityRootProps extends StackProps {\n children: ReactNode;\n}\n\nexport interface ActivityHeaderProps extends Omit<StackProps, \"title\"> {\n title?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityFeedProps extends StackProps {\n children: ReactNode;\n}\n\nexport const ActivityRoot = (props: ActivityRootProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack width=\"full\" gap=\"md\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n\nexport const ActivityHeader = (props: ActivityHeaderProps) => {\n const { title = \"Activity\", actions, ...rootProps } = props;\n\n return (\n <HStack alignItems=\"center\" justifyContent=\"space-between\" gap=\"md\" {...rootProps}>\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {title}\n </Text>\n {actions ? <HStack gap=\"xs\">{actions}</HStack> : null}\n </HStack>\n );\n};\n\nexport const ActivityFeed = (props: ActivityFeedProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack gap=\"md\" width=\"full\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n","import type { TimelineRootProps } from \"@chakra-ui/react\";\nimport { Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityTimelineProps extends TimelineRootProps {\n children: ReactNode;\n}\n\nexport const ActivityTimeline = (props: ActivityTimelineProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Timeline.Root size=\"sm\" variant=\"plain\" width=\"full\" css={{ \"--timeline-indicator-size\": \"18px\" }} {...rootProps}>\n {children}\n </Timeline.Root>\n );\n};\n","import { ActivityAvatar } from \"./activity-avatar\";\nimport { ActivityComment, ActivityReply } from \"./activity-comment\";\nimport { ActivityComposer } from \"./activity-composer\";\nimport { ActivityEvent } from \"./activity-event\";\nimport { ActivityFeed, ActivityHeader, ActivityRoot } from \"./activity-root\";\nimport { ActivityTimeline } from \"./activity-timeline\";\n\nexport type { ActivityActor } from \"./activity.types\";\nexport type { ActivityAvatarProps } from \"./activity-avatar\";\nexport type { ActivityCommentProps, ActivityReplyProps } from \"./activity-comment\";\nexport type { ActivityComposerProps } from \"./activity-composer\";\nexport type { ActivityEventProps } from \"./activity-event\";\nexport type { ActivityFeedProps, ActivityHeaderProps, ActivityRootProps } from \"./activity-root\";\nexport type { ActivityTimelineProps } from \"./activity-timeline\";\n\nexport {\n ActivityAvatar,\n ActivityComment,\n ActivityComposer,\n ActivityEvent,\n ActivityFeed,\n ActivityHeader,\n ActivityReply,\n ActivityRoot,\n ActivityTimeline,\n};\n\nexport const Activity = {\n Root: ActivityRoot,\n Header: ActivityHeader,\n Feed: ActivityFeed,\n Timeline: ActivityTimeline,\n Event: ActivityEvent,\n Comment: ActivityComment,\n Reply: ActivityReply,\n Composer: ActivityComposer,\n Avatar: ActivityAvatar,\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nconst DEFAULT_RESIZABLE_MIN_WIDTH = \"20rem\";\n\ninterface AttachedPanelProps extends Omit<FlexProps, \"children\"> {\n children?: ReactNode;\n header?: ReactNode;\n resizable?: boolean;\n}\n\nexport const AttachedPanel = (props: AttachedPanelProps) => {\n const { children, header, width = \"28rem\", minWidth, resizable = false, ...rest } = props;\n const resolvedMinWidth = minWidth ?? (resizable ? DEFAULT_RESIZABLE_MIN_WIDTH : width);\n const resolvedWidth = resizable ? \"full\" : width;\n\n return (\n <Flex\n direction=\"column\"\n position=\"relative\"\n flexShrink={0}\n w={resolvedWidth}\n minW={resolvedMinWidth}\n h=\"100%\"\n borderLeftWidth=\"1px\"\n bg=\"bg\"\n overflow=\"hidden\"\n {...rest}\n >\n {header}\n <Flex flex=\"1\" minH={0} direction=\"column\">\n {children}\n </Flex>\n </Flex>\n );\n};\n","import { Breadcrumb as ChakraBreadcrumb, type SystemStyleObject } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface BreadcrumbItem {\n title: React.ReactNode;\n url?: string;\n onClick?: () => void;\n}\n\nexport interface BreadcrumbLinkProps {\n to: string;\n children: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends ChakraBreadcrumb.RootProps {\n separator?: React.ReactNode;\n separatorGap?: SystemStyleObject[\"gap\"];\n items: BreadcrumbItem[];\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\nconst linkProps = {\n alignItems: \"center\",\n display: \"inline-flex\",\n gap: \"2xs\",\n minW: \"0\",\n maxW: \"100%\",\n overflow: \"hidden\",\n outline: \"none\",\n boxShadow: \"none\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n _active: { outline: \"none\", boxShadow: \"none\" },\n _focus: { outline: \"none\", boxShadow: \"none\" },\n _focusVisible: { outline: \"none\", boxShadow: \"none\" },\n} as const;\n\nexport const Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(function BreadcrumbRoot(props, ref) {\n const { separator, separatorGap, items, linkComponent: LinkComponent, ...rest } = props;\n\n return (\n <ChakraBreadcrumb.Root ref={ref} {...rest}>\n <ChakraBreadcrumb.List gap={separatorGap} flexWrap=\"nowrap\" minW=\"0\" maxW=\"100%\" overflow=\"hidden\">\n {items.map((item, index) => {\n const last = index === items.length - 1;\n const isInteractive = Boolean(item.url || item.onClick);\n let itemContent: React.ReactNode;\n\n if (last && !isInteractive) {\n itemContent = <ChakraBreadcrumb.CurrentLink {...linkProps}>{item.title}</ChakraBreadcrumb.CurrentLink>;\n } else if (item.url) {\n itemContent = LinkComponent ? (\n <ChakraBreadcrumb.Link asChild {...linkProps}>\n <LinkComponent to={item.url}>{item.title}</LinkComponent>\n </ChakraBreadcrumb.Link>\n ) : (\n <ChakraBreadcrumb.Link href={item.url} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n } else if (item.onClick) {\n itemContent = (\n <ChakraBreadcrumb.Link as=\"button\" type=\"button\" onClick={item.onClick} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n } else {\n itemContent = <ChakraBreadcrumb.Link {...linkProps}>{item.title}</ChakraBreadcrumb.Link>;\n }\n\n return (\n <ChakraBreadcrumb.Item key={index} minW=\"0\" flexShrink={last ? 1 : 0} overflow=\"hidden\">\n {itemContent}\n {last ? null : (\n <ChakraBreadcrumb.Separator as=\"span\" aria-hidden flexShrink={0}>\n {separator}\n </ChakraBreadcrumb.Separator>\n )}\n </ChakraBreadcrumb.Item>\n );\n })}\n </ChakraBreadcrumb.List>\n </ChakraBreadcrumb.Root>\n );\n});\n","import { chakra, type HTMLChakraProps, IconButton, type IconButtonProps } from \"@chakra-ui/react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Tooltip } from \"./tooltip\";\n\ntype BubbleButtonStyleProps = \"boxShadow\" | \"transition\" | \"_hover\" | \"_active\" | \"borderColor\" | \"borderWidth\";\n\nexport interface BubbleButtonProps extends Omit<IconButtonProps, BubbleButtonStyleProps> {\n containerProps?: HTMLChakraProps<\"div\">;\n isOpen?: boolean;\n tooltip?: ReactNode;\n}\n\nexport const BubbleButton = forwardRef<HTMLButtonElement, BubbleButtonProps>(function BubbleButton(props, ref) {\n const { children, containerProps, isOpen = false, tooltip, ...rest } = props;\n const button = (\n <IconButton\n ref={ref}\n rounded=\"full\"\n size=\"lg\"\n borderWidth=\"1px\"\n boxShadow={isOpen ? \"none\" : \"mid\"}\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: \"border.accent\",\n boxShadow: \"mid\",\n }}\n _active={{ boxShadow: isOpen ? \"none\" : \"mid\" }}\n {...rest}\n >\n {children}\n </IconButton>\n );\n\n return (\n <chakra.div position=\"fixed\" bottom=\"6\" right=\"6\" zIndex=\"docked\" {...containerProps}>\n {tooltip ? <Tooltip content={tooltip}>{button}</Tooltip> : button}\n </chakra.div>\n );\n});\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport type HeaderVariant = \"main\" | \"narrow\" | \"input\";\n\ninterface HeaderVariantStyles {\n h: string;\n px: string;\n}\n\nconst headerVariantStyles: Record<HeaderVariant, HeaderVariantStyles> = {\n main: {\n h: \"2.5rem\",\n px: \"xs\",\n },\n narrow: {\n h: \"2rem\",\n px: \"xs\",\n },\n input: {\n h: \"3rem\",\n px: \"0\",\n },\n};\n\nexport interface HeaderProps extends Omit<StackProps, \"variant\"> {\n variant?: HeaderVariant;\n}\n\nexport const Header = React.forwardRef<HTMLDivElement, HeaderProps>(function Header(props, ref) {\n const { variant = \"main\", children, ...rest } = props;\n\n return (\n <HStack ref={ref} as=\"header\" alignItems=\"center\" borderWidth=\"0\" {...headerVariantStyles[variant]} {...rest}>\n {children}\n </HStack>\n );\n});\n","import { Box, chakra, Flex, HStack, type HTMLChakraProps, IconButton, Portal, Spacer } from \"@chakra-ui/react\";\nimport { Minus, SquareArrowOutUpRight } from \"lucide-react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Header } from \"./header\";\nimport { Tooltip } from \"./tooltip\";\n\nexport interface BubblePanelProps {\n isOpen?: boolean;\n title?: string;\n menu?: ReactNode;\n onClose?: () => void;\n closeLabel?: string;\n onPopOut?: (() => void) | null;\n popOutLabel?: string;\n width?: string;\n height?: string;\n containerProps?: HTMLChakraProps<\"section\">;\n testId?: string;\n \"aria-label\"?: string;\n children?: ReactNode;\n}\n\nexport const BubblePanel = forwardRef<HTMLDivElement, BubblePanelProps>(function BubblePanel(props, ref) {\n const {\n isOpen = false,\n title,\n menu,\n onClose,\n closeLabel,\n onPopOut,\n popOutLabel,\n width = \"28rem\",\n height = \"38rem\",\n containerProps,\n testId,\n \"aria-label\": ariaLabel,\n children,\n } = props;\n\n if (!isOpen) return null;\n\n return (\n <Portal>\n <chakra.section\n ref={ref}\n role=\"dialog\"\n data-testid={testId}\n aria-label={ariaLabel ?? title}\n position=\"fixed\"\n bottom=\"3\"\n right=\"3\"\n w={width}\n maxW=\"calc(100vw - 2rem)\"\n h={height}\n maxH=\"calc(100vh - 2rem)\"\n borderRadius=\"3xl\"\n boxShadow=\"2xl\"\n bg=\"bg\"\n zIndex=\"dropdown\"\n {...containerProps}\n >\n <Flex direction=\"column\" h=\"full\">\n <Header variant=\"main\" gap=\"sm\" flexShrink={0}>\n <HStack gap=\"1\" minW=\"0\">\n {menu}\n </HStack>\n <Spacer />\n <HStack gap=\"1\">\n {onPopOut ? (\n <Tooltip content={popOutLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={popOutLabel} onClick={onPopOut}>\n <SquareArrowOutUpRight size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n {onClose ? (\n <Tooltip content={closeLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={closeLabel} onClick={onClose}>\n <Minus size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </HStack>\n </Header>\n <Box flex=\"1\" minH={0} display=\"flex\" flexDirection=\"column\" gap=\"sm\">\n {children}\n </Box>\n </Flex>\n </chakra.section>\n </Portal>\n );\n});\n","export type ThemePreference = string;\nexport type ThemePreferenceMode = \"light\" | \"dark\";\nexport type ThemePreferenceTokens = Record<string, string>;\n\nexport interface ThemePreferenceOption {\n id: ThemePreference;\n title?: string;\n mode: ThemePreferenceMode;\n tokens?: ThemePreferenceTokens;\n monacoTheme?: unknown;\n}\n\nexport const defaultThemePreferences = [\n { id: \"pstdio-light\", mode: \"light\" },\n { id: \"pstdio-dark\", mode: \"dark\" },\n] satisfies ThemePreferenceOption[];\n\nexport const isThemePreference = (\n value: string | null,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n): value is ThemePreference => typeof value === \"string\" && themePreferences.some((theme) => theme.id === value);\n\nexport const getThemePreferenceMode = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => themePreferences.find((preference) => preference.id === theme)?.mode ?? \"light\";\n\nexport const getThemePreferenceClassName = (theme: ThemePreference) => `theme-${theme}`;\n\nexport const getThemePreferenceClassNames = (\n theme: ThemePreference,\n mode: ThemePreferenceMode = getThemePreferenceMode(theme),\n) => [mode, getThemePreferenceClassName(theme)];\n\nconst THEME_TOKEN_PATHS_ATTRIBUTE = \"data-pstdio-theme-token-paths\";\n\nconst getThemePreferenceCssVariableName = (tokenPath: string) => `--chakra-${tokenPath.replaceAll(\".\", \"-\")}`;\n\nconst removeThemeTokens = (el: HTMLElement, theme?: ThemePreferenceOption) => {\n if (!theme?.tokens) return;\n\n for (const tokenPath of Object.keys(theme.tokens)) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n};\n\nconst removeTrackedThemeTokens = (el: HTMLElement) => {\n const tokenPaths = el.getAttribute(THEME_TOKEN_PATHS_ATTRIBUTE)?.split(\"\\n\").filter(Boolean) ?? [];\n\n for (const tokenPath of tokenPaths) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n};\n\nconst applyThemeTokens = (el: HTMLElement, theme: ThemePreferenceOption) => {\n if (!theme.tokens) {\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n return;\n }\n\n for (const [tokenPath, value] of Object.entries(theme.tokens)) {\n el.style.setProperty(getThemePreferenceCssVariableName(tokenPath), value);\n }\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, Object.keys(theme.tokens).join(\"\\n\"));\n};\n\nexport const applyThemePreference = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof document === \"undefined\") return;\n\n const root = document.documentElement;\n const body = document.body;\n const preference = themePreferences.find((option) => option.id === theme) ?? { id: theme, mode: \"light\" };\n const mode = getThemePreferenceMode(theme, themePreferences);\n\n for (const el of [root, body]) {\n if (!el) continue;\n const previousTheme = el.getAttribute(\"data-theme\");\n const previousPreference = themePreferences.find((option) => option.id === previousTheme);\n\n el.classList.remove(\"light\", \"dark\");\n if (previousTheme) {\n el.classList.remove(getThemePreferenceClassName(previousTheme));\n }\n removeTrackedThemeTokens(el);\n removeThemeTokens(el, previousPreference);\n applyThemeTokens(el, preference);\n el.classList.add(...getThemePreferenceClassNames(theme, mode));\n el.setAttribute(\"data-theme\", theme);\n el.setAttribute(\"data-color-mode\", mode);\n el.style.colorScheme = mode;\n }\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from \"react\";\n\nimport {\n applyThemePreference,\n defaultThemePreferences,\n getThemePreferenceMode,\n isThemePreference,\n type ThemePreference,\n type ThemePreferenceMode,\n type ThemePreferenceOption,\n} from \"./apply-theme-preference\";\n\nconst STORAGE_KEY = \"theme-preference\";\n\nconst ThemePreferenceContext = createContext<ThemePreferenceContextValue | null>(null);\n\ninterface ThemePreferenceContextValue {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (preference: ThemePreference) => void;\n toggleThemePreference: () => void;\n}\n\ninterface ThemePreferenceProviderProps {\n children: ReactNode;\n initialPreference?: ThemePreference;\n themePreferences?: readonly ThemePreferenceOption[];\n}\n\nconst getDefaultThemePreference = (themePreferences: readonly ThemePreferenceOption[], mode: ThemePreferenceMode) =>\n themePreferences.find((preference) => preference.mode === mode)?.id ??\n themePreferences[0]?.id ??\n defaultThemePreferences[0].id;\n\nexport const getInitialThemePreference = (\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof window === \"undefined\") return getDefaultThemePreference(themePreferences, \"light\");\n\n const stored = window.localStorage.getItem(STORAGE_KEY);\n if (isThemePreference(stored, themePreferences)) return stored;\n\n const prefersDark =\n typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n return getDefaultThemePreference(themePreferences, prefersDark ? \"dark\" : \"light\");\n};\n\nexport const ThemePreferenceProvider = (props: ThemePreferenceProviderProps) => {\n const { children, themePreferences = defaultThemePreferences } = props;\n const initialPreference = props.initialPreference ?? getInitialThemePreference(themePreferences);\n const [themePreference, setThemePreference] = useState<ThemePreference>(initialPreference);\n\n useEffect(() => {\n if (!isThemePreference(themePreference, themePreferences)) {\n setThemePreference(\n getDefaultThemePreference(themePreferences, getThemePreferenceMode(themePreference, themePreferences)),\n );\n return;\n }\n\n applyThemePreference(themePreference, themePreferences);\n if (typeof window !== \"undefined\") {\n window.localStorage.setItem(STORAGE_KEY, themePreference);\n }\n }, [themePreference, themePreferences]);\n\n const toggleThemePreference = () => {\n setThemePreference((prev) => {\n const nextMode = getThemePreferenceMode(prev, themePreferences) === \"dark\" ? \"light\" : \"dark\";\n\n return getDefaultThemePreference(themePreferences, nextMode);\n });\n };\n\n return (\n <ThemePreferenceContext value={{ themePreference, themePreferences, setThemePreference, toggleThemePreference }}>\n {children}\n </ThemePreferenceContext>\n );\n};\n\nexport const useThemePreference = () => {\n const context = useContext(ThemePreferenceContext);\n\n if (!context) {\n throw new Error(\"useThemePreference must be used within a ThemePreferenceProvider\");\n }\n\n return context;\n};\n","import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../theme\";\nimport { useThemePreference } from \"../utils/theme-preference\";\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n} satisfies MonacoThemeData;\n\nconst isMonacoTheme = (value: unknown): value is MonacoThemeData =>\n typeof value === \"object\" && value !== null && \"base\" in value && \"colors\" in value;\n\ntype MonacoApi = {\n editor: {\n defineTheme: (name: string, data: MonacoThemeData) => void;\n setTheme: (name: string) => void;\n };\n};\n\nconst EDITOR_THEME_NAME = \"ps-theme\";\n\nconst useEditorTheme = () => {\n const { themePreference, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference);\n return isMonacoTheme(preference?.monacoTheme) ? preference.monacoTheme : customTheme;\n};\n\nconst useApplyEditorTheme = (editorTheme: MonacoThemeData) => {\n const monacoRef = useRef<MonacoApi | null>(null);\n\n useEffect(() => {\n const monaco = monacoRef.current;\n if (!monaco) return;\n\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n }, [editorTheme]);\n\n return (monaco: MonacoApi) => {\n monacoRef.current = monaco;\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n };\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={EDITOR_THEME_NAME}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={async (editor, monaco) => {\n applyEditorTheme(monaco);\n\n // Add JSX support\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n\n // Format on cmd+s\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n\n // Run format on the initial value\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={EDITOR_THEME_NAME}\n options={options}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(_, monaco) => {\n applyEditorTheme(monaco);\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n }}\n />\n );\n};\n","import { Box, type BoxProps, Text, type TextProps } from \"@chakra-ui/react\";\n\nexport interface ContentPlaceholderProps extends BoxProps {}\n\nexport const contentPlaceholderBackgroundImage = `url(\"data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%239C92AC' fill-opacity='0.2' fillRule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E\")`;\n\nexport const ContentPlaceholder = (props: ContentPlaceholderProps) => (\n <Box\n {...props}\n css={{\n backgroundClip: \"padding-box\",\n backgroundImage: contentPlaceholderBackgroundImage,\n display: \"flex\",\n width: \"100%\",\n }}\n />\n);\n\nexport const Label = (props: TextProps) => (\n <Box p=\"2\">\n <Text color=\"fg.muted\" fontWeight=\"medium\" textStyle=\"sm\" whiteSpace=\"nowrap\" {...props} />\n </Box>\n);\n","import { Button, CloseButton, Dialog, Stack, Text } from \"@chakra-ui/react\";\nimport { useState } from \"react\";\n\ninterface DeleteConfirmationModalProps {\n open: boolean;\n onClose: () => void;\n onDelete: () => void | Promise<void>;\n headline?: string;\n notificationText?: string;\n buttonText?: string;\n}\n\nexport type { DeleteConfirmationModalProps };\n\nexport const DeleteConfirmationModal = (props: DeleteConfirmationModalProps) => {\n const [isDeleting, setIsDeleting] = useState(false);\n const { headline, buttonText, notificationText, onDelete, open, onClose } = props;\n\n const handleDelete = async () => {\n setIsDeleting(true);\n\n try {\n await onDelete();\n onClose();\n } catch {\n // Errors surface through parent state.\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onClose}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Text textStyle=\"heading/M\">{headline}</Text>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>{notificationText}</Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"1\">\n <Button onClick={onClose}>Close</Button>\n <Button loading={isDeleting} variant=\"solid\" colorPalette=\"red\" onClick={handleDelete}>\n {buttonText}\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","export const LARGE_DIFF_LINE_THRESHOLD = 1000;\n\nconst generatedDiffFileNames = new Set([\"bun.lock\", \"bun.lockb\", \"package-lock.json\", \"pnpm-lock.yaml\", \"yarn.lock\"]);\n\nexport const getDiffLineCount = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return (input.additions ?? 0) + (input.deletions ?? 0);\n};\n\nexport const isLargeDiffContent = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return getDiffLineCount(input) > LARGE_DIFF_LINE_THRESHOLD;\n};\n\nexport const isGeneratedDiffPath = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n\n return generatedDiffFileNames.has(fileName) || fileName.endsWith(\".min.js\") || fileName.endsWith(\".generated.ts\");\n};\n","import { Box, Button } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffEditor } from \"./diff-editor\";\nimport { getDiffLineCount } from \"./diff-size\";\nimport { type BuiltDiffViewData, buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardBodyProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isLargeDiff: boolean;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardBodyModelInput extends DiffCardBodyProps {\n buildViewData?: typeof buildDiffViewData;\n}\n\nexport const createDiffCardBodyModel = (input: DiffCardBodyModelInput) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n buildViewData,\n } = input;\n\n if (isLargeDiff && !hasOptedIntoLargeDiff) {\n return {\n kind: \"placeholder\" as const,\n filePath,\n renderedLineCount: getDiffLineCount(diff),\n onShowFullDiff,\n };\n }\n\n const diffViewData = (buildViewData ?? buildDiffViewData)({\n original: oldContent,\n modified: newContent,\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n return {\n kind: \"editor\" as const,\n diffViewData,\n sideBySide: diffViewMode === \"split\",\n };\n};\n\nexport const DiffCardBody = (props: DiffCardBodyProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n const model = createDiffCardBodyModel({\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode,\n });\n\n return (\n <Box bg=\"bg\" borderBottomRadius=\"xs\" overflow=\"hidden\">\n {model.kind === \"editor\" ? (\n <DiffEditor\n original={oldContent}\n modified={newContent}\n oldPath={diff.oldPath}\n newPath={diff.newPath}\n sideBySide={model.sideBySide}\n data={model.diffViewData}\n />\n ) : (\n <LargeDiffPlaceholder\n filePath={model.filePath}\n renderedLineCount={model.renderedLineCount}\n onShowFullDiff={model.onShowFullDiff}\n />\n )}\n </Box>\n );\n};\n\ninterface LargeDiffPlaceholderProps {\n filePath: string;\n renderedLineCount: number;\n onShowFullDiff?: () => void;\n}\n\nconst LargeDiffPlaceholder = (props: LargeDiffPlaceholderProps) => {\n const { filePath, onShowFullDiff } = props;\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title=\"Large diffs are hidden by default\" paddingY=\"sm\">\n {onShowFullDiff ? (\n <Button size=\"xs\" variant=\"outline\" aria-label={`Render full diff for ${filePath}`} onClick={onShowFullDiff}>\n Show full diff\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Text } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\n\ninterface DeferredDiffLoadProps {\n title: string;\n actionLabel?: string;\n isLoadingDiff: boolean;\n onAction?: () => void;\n}\n\nexport const DeferredDiffLoad = (props: DeferredDiffLoadProps) => {\n const { title, actionLabel, isLoadingDiff, onAction } = props;\n\n return (\n <Box bg=\"bg\" p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\">\n <EmptyState title={title} paddingY=\"sm\">\n {actionLabel ? (\n <Button size=\"xs\" variant=\"outline\" loading={isLoadingDiff} onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nexport const LoadingDiffContent = () => (\n <Box bg=\"bg\" p=\"sm\" borderTop=\"1px solid\" borderColor=\"border.muted\">\n <Text textStyle=\"sm\" color=\"fg.muted\">\n Loading diff...\n </Text>\n </Box>\n);\n","import type { Diff } from \"./diff-card\";\nimport { DiffCardBody } from \"./diff-card-body\";\nimport { DeferredDiffLoad, LoadingDiffContent } from \"./diff-card-load-state\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardContentProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isExpanded: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n hasDiffContent: boolean;\n canLoadDiff: boolean;\n shouldAutoLoadDiff: boolean;\n loadError: boolean;\n isLoadingDiff: boolean;\n onLoadDiff: () => Promise<void>;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DeferredDiffLoadStateInput {\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n loadError: boolean;\n canLoadDiff: boolean;\n onLoadDiff: () => Promise<void>;\n onShowFullDiff?: () => void;\n}\n\nconst buildDeferredDiffLoadState = (input: DeferredDiffLoadStateInput) => {\n const { isLargeDiff, isGeneratedDiff, loadError, canLoadDiff, onLoadDiff, onShowFullDiff } = input;\n let title = \"Diff content is not loaded yet.\";\n let actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n let onAction: (() => void) | undefined = canLoadDiff ? () => void onLoadDiff() : undefined;\n\n if (isLargeDiff) {\n title = \"Large diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Show full diff\" : undefined;\n onAction = () => {\n onShowFullDiff?.();\n void onLoadDiff();\n };\n }\n\n if (isGeneratedDiff) {\n title = \"Generated diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n if (loadError) {\n title = \"Diff failed to load. Try again.\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n return { title, actionLabel, onAction };\n};\n\nexport const DiffCardContent = (props: DiffCardContentProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isExpanded,\n isLargeDiff,\n isGeneratedDiff,\n hasDiffContent,\n canLoadDiff,\n shouldAutoLoadDiff,\n loadError,\n isLoadingDiff,\n onLoadDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n if (!isExpanded) return null;\n\n if (!hasDiffContent && !shouldAutoLoadDiff) {\n const { title, actionLabel, onAction } = buildDeferredDiffLoadState({\n isLargeDiff,\n isGeneratedDiff,\n loadError,\n canLoadDiff,\n onLoadDiff,\n onShowFullDiff,\n });\n\n return (\n <DeferredDiffLoad title={title} actionLabel={actionLabel} isLoadingDiff={isLoadingDiff} onAction={onAction} />\n );\n }\n\n if (shouldAutoLoadDiff) {\n return <LoadingDiffContent />;\n }\n\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={isLargeDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n};\n","import { Box, Grid, IconButton, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport { DiffCardContent } from \"./diff-card-content\";\nimport { isGeneratedDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport type { DiffViewMode } from \"./types\";\n\nexport interface Diff {\n change: \"added\" | \"deleted\" | \"modified\" | \"renamed\" | \"copied\" | \"permissionChange\";\n oldPath?: string;\n newPath?: string;\n oldContent?: string;\n newContent?: string;\n additions?: number;\n deletions?: number;\n}\n\ninterface DiffCardProps {\n diff: Diff;\n isSelected?: boolean;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n onSelect?: () => void;\n onLoadDiff?: (path: string) => Promise<void>;\n hasOptedIntoLargeDiff?: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardHeaderProps {\n diff: Diff;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n}\n\nexport const shouldAutoLoadDiffContent = (input: {\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const { isExpanded, hasDiffContent, isLargeDiff, isGeneratedDiff, requestedPath, filePath } = input;\n\n return isExpanded && !hasDiffContent && !isLargeDiff && !isGeneratedDiff && requestedPath !== filePath;\n};\n\nexport const resolveRequestedDiffPath = (input: {\n requestedPath: string | null;\n filePath: string;\n hasDiffContent: boolean;\n}) => {\n const { requestedPath, filePath, hasDiffContent } = input;\n\n if (requestedPath === filePath && hasDiffContent) {\n return null;\n }\n\n return requestedPath;\n};\n\nconst useDiffContentLoader = (input: {\n filePath: string;\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, onLoadDiff } = input;\n const [isLoadingDiff, setLoadingDiff] = useState(false);\n const [requestedPath, setRequestedPath] = useState<string | null>(null);\n const [loadError, setLoadError] = useState(false);\n\n const loadDiff = async () => {\n if (!onLoadDiff || isLoadingDiff) return;\n\n setRequestedPath(filePath);\n setLoadError(false);\n setLoadingDiff(true);\n try {\n await onLoadDiff(filePath);\n } catch {\n setRequestedPath(null);\n setLoadError(true);\n } finally {\n setLoadingDiff(false);\n }\n };\n\n const shouldAutoLoadDiff = shouldAutoLoadDiffContent({\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n requestedPath,\n filePath,\n });\n\n useEffect(() => {\n setRequestedPath((current) => resolveRequestedDiffPath({ requestedPath: current, filePath, hasDiffContent }));\n }, [filePath, hasDiffContent]);\n\n useEffect(() => {\n if (!onLoadDiff || !shouldAutoLoadDiff || loadError) {\n return;\n }\n\n void loadDiff();\n });\n\n return {\n isLoadingDiff,\n loadError,\n shouldAutoLoadDiff: Boolean(onLoadDiff) && shouldAutoLoadDiff && !loadError,\n loadDiff,\n };\n};\n\nexport const DiffCard = (props: DiffCardProps) => {\n const {\n diff,\n isSelected = false,\n isExpanded = true,\n onToggleExpanded,\n onSelect,\n onLoadDiff,\n hasOptedIntoLargeDiff = false,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const oldContent = diff.oldContent || \"\";\n const newContent = diff.newContent || \"\";\n const isLargeDiff = isLargeDiffContent(diff);\n const isGeneratedDiff = isGeneratedDiffPath(filePath);\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const { isLoadingDiff, loadError, shouldAutoLoadDiff, loadDiff } = useDiffContentLoader({\n filePath,\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff: isLargeDiff && !hasOptedIntoLargeDiff,\n isGeneratedDiff,\n onLoadDiff,\n });\n\n return (\n <Box\n data-testid=\"diff-card\"\n border=\"1px solid\"\n borderColor={isSelected ? \"border.accent\" : \"border.muted\"}\n borderRadius=\"xs\"\n overflow=\"visible\"\n bg=\"bg\"\n width=\"100%\"\n maxW=\"100%\"\n transition=\"border-color 0.14s ease\"\n _hover={{ borderColor: \"border.accent\" }}\n onClick={onSelect}\n >\n <DiffCardHeader diff={diff} isExpanded={isExpanded} onToggleExpanded={onToggleExpanded} />\n\n <DiffCardContent\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isExpanded={isExpanded}\n isLargeDiff={isLargeDiff}\n isGeneratedDiff={isGeneratedDiff}\n hasDiffContent={hasDiffContent}\n canLoadDiff={Boolean(onLoadDiff)}\n shouldAutoLoadDiff={shouldAutoLoadDiff}\n loadError={loadError}\n isLoadingDiff={isLoadingDiff}\n onLoadDiff={loadDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n};\n\nexport const DiffCardHeader = (props: DiffCardHeaderProps) => {\n const { diff, isExpanded = true, onToggleExpanded } = props;\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const additions = diff.additions ?? 0;\n const deletions = diff.deletions ?? 0;\n\n return (\n <Grid\n data-testid=\"diff-card-header\"\n templateColumns=\"auto minmax(0, 1fr) auto\"\n px=\"xs\"\n py=\"2xs\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderBottom={isExpanded ? \"1px solid\" : \"none\"}\n borderColor=\"border.muted\"\n borderTopRadius=\"xs\"\n borderBottomRadius={isExpanded ? \"0\" : \"xs\"}\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n bg=\"bg\"\n cursor=\"pointer\"\n transition=\"background 0.14s ease\"\n _hover={{ bg: \"bg\" }}\n onClick={() => onToggleExpanded?.()}\n gap=\"sm\"\n >\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleExpanded?.();\n }}\n flexShrink={0}\n >\n {isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </IconButton>\n\n <Box minW={0} overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" title={filePath}>\n {diff.change === \"renamed\" ? (\n <Text as=\"span\" textStyle=\"sm\">\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" mr=\"xs\">\n {diff.oldPath}\n </Text>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" verticalAlign=\"middle\" mr=\"xs\">\n <ChevronRight size={12} />\n </Box>\n {diff.newPath}\n </Text>\n ) : diff.change === \"deleted\" ? (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n ) : (\n <Text as=\"span\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n </Box>\n\n <Box flexShrink={0}>\n <DiffBubble variant=\"ghost\" additions={additions} deletions={deletions} />\n </Box>\n </Grid>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffDrawerProps {\n diffs: Diff[];\n selectedDiffPath?: string | null;\n onLoadDiff?: (path: string) => Promise<void>;\n onSelectDiffPath?: (path: string) => void;\n onExpansionStateChange?: (state: DiffDrawerExpansionState) => void;\n expansionCommand?: DiffExpansionCommand | null;\n diffViewMode?: DiffViewMode;\n}\n\nexport interface DiffExpansionCommand {\n action: \"expand\" | \"collapse\" | \"expand-selected\";\n id: number;\n path?: string;\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst CARD_HEADER_HEIGHT = 36;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 44;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst ITEM_GAP_HEIGHT = 8;\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\n\ninterface EstimateDiffCardHeightInput {\n diff: Diff;\n isCollapsed: boolean;\n hasOptedIntoLargeDiff?: boolean;\n diffViewMode?: DiffViewMode;\n}\n\nconst deferredCardHeight = () => CARD_HEADER_HEIGHT + DEFERRED_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n\n// Mirrors the branches DiffCardContent renders, so the virtualizer's estimate matches the DOM\n// before measureElement gets a chance to refine it.\nexport const estimateDiffCardHeight = (input: EstimateDiffCardHeightInput) => {\n const { diff, isCollapsed, hasOptedIntoLargeDiff = false, diffViewMode = \"unified\" } = input;\n\n if (isCollapsed) return COLLAPSED_CARD_HEIGHT + ITEM_GAP_HEIGHT;\n\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n if (!hasDiffContent) return deferredCardHeight();\n if (isLargeDiffContent(diff) && !hasOptedIntoLargeDiff) return deferredCardHeight();\n\n const { unifiedContentRows, splitContentRows, hunkRows } = buildDiffViewData({\n original: diff.oldContent ?? \"\",\n modified: diff.newContent ?? \"\",\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n const contentRows = diffViewMode === \"split\" ? splitContentRows : unifiedContentRows;\n if (contentRows === 0 && hunkRows === 0) return deferredCardHeight();\n\n const bodyHeight = contentRows * CARD_BODY_LINE_HEIGHT + hunkRows * HUNK_ROW_HEIGHT;\n return CARD_HEADER_HEIGHT + bodyHeight + ITEM_GAP_HEIGHT;\n};\n\nexport const buildInitialCollapsedPaths = (diffs: Diff[]) => {\n if (diffs.length <= INITIAL_EXPANDED_DIFF_COUNT) return new Set<string>();\n\n return new Set(\n diffs\n .filter((diff, index) => {\n const lineCount = (diff.additions ?? 0) + (diff.deletions ?? 0);\n return index >= INITIAL_EXPANDED_DIFF_COUNT || lineCount > INITIAL_COLLAPSED_LINE_THRESHOLD;\n })\n .map((diff) => getDiffPath(diff)),\n );\n};\n\nexport const buildAllCollapsedPaths = (diffs: Diff[]) => new Set(diffs.map((diff) => getDiffPath(diff)));\n\nexport const toggleCollapsedPath = (collapsedPaths: Set<string>, path: string) => {\n const next = new Set(collapsedPaths);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n};\n\nexport const resolveCollapsedPathsForSelectedDiff = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string | null,\n) => {\n if (!selectedDiffPath) return collapsedPaths;\n if (!collapsedPaths.has(selectedDiffPath)) return collapsedPaths;\n if (!diffs.some((diff) => getDiffPath(diff) === selectedDiffPath)) return collapsedPaths;\n\n const next = new Set(collapsedPaths);\n next.delete(selectedDiffPath);\n return next;\n};\n\nexport function DiffDrawer(props: DiffDrawerProps) {\n const {\n diffs,\n selectedDiffPath = null,\n onLoadDiff,\n onSelectDiffPath,\n onExpansionStateChange,\n expansionCommand = null,\n diffViewMode = \"unified\",\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const reportedExpansionStateRef = useRef<DiffDrawerExpansionState | null>(null);\n const [collapsedPaths, setCollapsedPaths] = useState<Set<string>>(() => buildInitialCollapsedPaths(diffs));\n const [largeDiffOptInPaths, setLargeDiffOptInPaths] = useState<Set<string>>(() => new Set());\n\n const virtualizer = useVirtualizer({\n count: diffs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => {\n const diff = diffs[index];\n const path = getDiffPath(diff);\n return estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n },\n getItemKey: (index) => getDiffPath(diffs[index]),\n overscan: 3,\n });\n\n useEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useEffect(() => {\n if (!selectedDiffPath) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedDiffPath);\n if (index < 0) return;\n\n virtualizer.scrollToIndex(index, { align: \"start\", behavior: \"auto\" });\n }, [selectedDiffPath, diffs, virtualizer]);\n\n useEffect(() => {\n if (!expansionCommand) return;\n\n if (expansionCommand.action === \"expand-selected\") {\n setCollapsedPaths((prev) =>\n expansionCommand.path ? resolveCollapsedPathsForSelectedDiff(diffs, prev, expansionCommand.path) : prev,\n );\n return;\n }\n\n setCollapsedPaths(expansionCommand.action === \"collapse\" ? buildAllCollapsedPaths(diffs) : new Set());\n }, [diffs, expansionCommand]);\n\n useEffect(() => {\n const expansionState = {\n allExpanded: collapsedPaths.size === 0,\n allCollapsed: diffs.length > 0 && diffs.every((diff) => collapsedPaths.has(getDiffPath(diff))),\n };\n const reportedExpansionState = reportedExpansionStateRef.current;\n if (\n reportedExpansionState?.allExpanded === expansionState.allExpanded &&\n reportedExpansionState.allCollapsed === expansionState.allCollapsed\n ) {\n return;\n }\n\n reportedExpansionStateRef.current = expansionState;\n onExpansionStateChange?.(expansionState);\n }, [collapsedPaths, diffs, onExpansionStateChange]);\n\n if (diffs.length === 0) {\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <ScrollArea flex=\"1\" minH=\"0\" contentProps={{ p: \"xs\", spaceY: \"xs\" }}>\n <EmptyState title=\"No changes detected\" description=\"Make some changes to see the diff here.\" paddingY=\"sm\" />\n </ScrollArea>\n </Stack>\n );\n }\n\n const toggleExpanded = (path: string) => {\n setCollapsedPaths((prev) => toggleCollapsedPath(prev, path));\n };\n\n const showFullDiff = (path: string) => {\n setLargeDiffOptInPaths((prev) => {\n const next = new Set(prev);\n next.add(path);\n return next;\n });\n };\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Box position=\"relative\" flex=\"1\" minH=\"0\" bg=\"bg\">\n <ScrollArea\n position=\"absolute\"\n inset=\"0\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n contentProps={{ p: \"xs\" }}\n >\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualItems.map((virtualItem) => {\n const diff = diffs[virtualItem.index];\n const path = getDiffPath(diff);\n\n return (\n <Box\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n pb=\"xs\"\n style={{ top: virtualItem.start }}\n >\n <DiffCard\n key={path}\n diff={diff}\n isSelected={selectedDiffPath === path}\n isExpanded={!collapsedPaths.has(path)}\n onToggleExpanded={() => toggleExpanded(path)}\n onSelect={() => onSelectDiffPath?.(path)}\n onLoadDiff={onLoadDiff}\n hasOptedIntoLargeDiff={largeDiffOptInPaths.has(path)}\n onShowFullDiff={() => showFullDiff(path)}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\n </Box>\n </Stack>\n );\n}\n","import { Box } from \"@chakra-ui/react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from \"react\";\n\nexport type ResizableSplitSide = \"left\" | \"right\";\n\nconst RESIZE_SEPARATOR_HOVER_STYLE = { _before: { bg: \"border.emphasized\" } };\nconst RESIZE_HANDLE_WIDTH = \"12px\";\n\ninterface ResizeHandleProps {\n bounds: { minSize: number; maxSize: number };\n contentPanelId: string;\n resizablePanelId: string;\n resizeLabel: string;\n resolvedPanelWidth: number;\n showResizeSeparator: boolean;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizeHandle = (props: ResizeHandleProps) => {\n const {\n bounds,\n contentPanelId,\n resizablePanelId,\n resizeLabel,\n resolvedPanelWidth,\n showResizeSeparator,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n return (\n <Box\n role=\"separator\"\n aria-label={resizeLabel}\n aria-orientation=\"vertical\"\n aria-controls={`${resizablePanelId} ${contentPanelId}`}\n aria-valuemin={0}\n aria-valuemax={Math.round(bounds.maxSize)}\n aria-valuenow={Math.round(resolvedPanelWidth)}\n tabIndex={0}\n position=\"relative\"\n zIndex=\"1\"\n flex={`0 0 ${RESIZE_HANDLE_WIDTH}`}\n w={RESIZE_HANDLE_WIDTH}\n mx=\"-6px\"\n cursor=\"col-resize\"\n touchAction=\"none\"\n outline=\"none\"\n onPointerDown={onResizeStart}\n onKeyDown={onResizeKeyDown}\n _before={{\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n bottom: 0,\n insetInlineStart: \"50%\",\n w: \"1px\",\n bg: showResizeSeparator ? \"border.muted\" : \"transparent\",\n transform: \"translateX(-50%)\",\n }}\n _hover={showResizeSeparator ? RESIZE_SEPARATOR_HOVER_STYLE : undefined}\n _focusVisible={{\n _before: {\n bg: \"colorPalette.focusRing\",\n w: \"2px\",\n },\n }}\n />\n );\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { type ResizableSplitSide, ResizeHandle } from \"./resizable-split-layout.handle\";\n\ninterface ResizableSplitLayoutProps extends Omit<FlexProps, \"children\" | \"onResize\"> {\n resizablePanel: ReactNode;\n contentPanel: ReactNode;\n resizableSide?: ResizableSplitSide;\n defaultSizePx?: number;\n minSizePx?: number;\n maxSizePx?: number;\n contentMinSizePx?: number;\n collapsed?: boolean;\n collapsible?: boolean;\n resizeLabel?: string;\n showResizeSeparator?: boolean;\n onSizeChange?: (width: number) => void;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst FALLBACK_ROOT_WIDTH = 1200;\nconst KEYBOARD_RESIZE_STEP = 24;\nconst MIN_COLLAPSE_THRESHOLD_PX = 72;\nconst MAX_COLLAPSE_THRESHOLD_PX = 160;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveRootWidth = (rootWidth: number) => (rootWidth > 0 ? rootWidth : FALLBACK_ROOT_WIDTH);\n\nconst resolveCollapseThreshold = (minSizePx: number) =>\n clamp(minSizePx / 2, MIN_COLLAPSE_THRESHOLD_PX, MAX_COLLAPSE_THRESHOLD_PX);\n\nconst resolveResizableBoundsPx = (input: {\n rootWidth: number;\n minSizePx: number;\n maxSizePx?: number;\n contentMinSizePx: number;\n}) => {\n const rootWidth = resolveRootWidth(input.rootWidth);\n const maxFromContent = Math.max(0, rootWidth - input.contentMinSizePx);\n const configuredMax = input.maxSizePx ?? maxFromContent;\n const maxSize = Math.max(0, Math.min(configuredMax, maxFromContent));\n const minSize = Math.min(input.minSizePx, maxSize);\n\n return { minSize, maxSize };\n};\n\nconst getElementWidth = (element: HTMLDivElement | null) => element?.getBoundingClientRect().width ?? 0;\n\nconst applyPanelWidthToElement = (panel: HTMLDivElement | null, width: number) => {\n if (!panel) return;\n\n panel.style.width = `${width}px`;\n panel.style.flexBasis = `${width}px`;\n panel.style.flexGrow = \"0\";\n panel.style.flexShrink = \"0\";\n panel.style.display = width > 0 ? \"flex\" : \"none\";\n};\n\nconst clearPanelInlineStyles = (panel: HTMLDivElement | null) => {\n if (!panel) return;\n\n panel.style.width = \"\";\n panel.style.flexBasis = \"\";\n panel.style.flexGrow = \"\";\n panel.style.flexShrink = \"\";\n panel.style.display = \"\";\n};\n\nexport const ResizableSplitLayout = (props: ResizableSplitLayoutProps) => {\n const {\n resizablePanel,\n contentPanel,\n resizableSide = \"left\",\n defaultSizePx = 240,\n minSizePx = 200,\n maxSizePx,\n contentMinSizePx = 0,\n collapsed: controlledCollapsed,\n collapsible = true,\n resizeLabel = \"Resize panel\",\n showResizeSeparator = true,\n onSizeChange,\n onCollapsedChange,\n ...rest\n } = props;\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const resizablePanelRef = useRef<HTMLDivElement>(null);\n const contentPanelRef = useRef<HTMLDivElement>(null);\n const cleanupDragRef = useRef<() => void>(() => undefined);\n const lastWidthRef = useRef(defaultSizePx);\n const [panelWidth, setPanelWidth] = useState(defaultSizePx);\n const [rootWidth, setRootWidth] = useState(0);\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const collapseThresholdPx = resolveCollapseThreshold(minSizePx);\n const resolvedPanelWidth = collapsed ? 0 : clamp(panelWidth, bounds.minSize, bounds.maxSize);\n const contentPanelId = `${id}-content`;\n const resizablePanelId = `${id}-resizable`;\n\n useEffect(() => {\n const element = rootRef.current;\n if (!element) return;\n\n const updateRootWidth = () => {\n setRootWidth(element.getBoundingClientRect().width);\n };\n\n updateRootWidth();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootWidth);\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n useEffect(() => {\n lastWidthRef.current = defaultSizePx;\n setPanelWidth(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelWidth = (width: number) => {\n applyPanelWidthToElement(resizablePanelRef.current, width);\n };\n\n useEffect(() => {\n // React may reuse the same DOM element across renders when this component swaps roles\n // (e.g., a wrapping ResizableSplitLayout disappears, leaving the inner one in its place).\n // Clear any inline styles on the content panel that leaked from a prior render where\n // the same DOM element was the resizable panel; otherwise stale `flex: 0 0 Xpx` pins\n // the content's width.\n clearPanelInlineStyles(contentPanelRef.current);\n applyPanelWidthToElement(resizablePanelRef.current, resolvedPanelWidth);\n }, [resolvedPanelWidth]);\n\n const commitPanelWidth = (width: number) => {\n const rootWidth = getElementWidth(rootRef.current);\n const nextBounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const nextWidth = clamp(width, nextBounds.minSize, nextBounds.maxSize);\n\n lastWidthRef.current = nextWidth;\n setPanelWidth(nextWidth);\n applyPanelWidth(nextWidth);\n onSizeChange?.(nextWidth);\n };\n\n const setCollapsed = (nextCollapsed: boolean) => {\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(nextCollapsed);\n }\n\n onCollapsedChange?.(nextCollapsed);\n };\n\n const handleResizeStart = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0 || (collapsed && !collapsible)) return;\n\n event.preventDefault();\n cleanupDragRef.current();\n\n const resizeHandle = event.currentTarget;\n const rootWidth = getElementWidth(rootRef.current);\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const startX = event.clientX;\n const startWidth = collapsed ? 0 : getElementWidth(resizablePanelRef.current) || lastWidthRef.current;\n const direction = resizableSide === \"left\" ? 1 : -1;\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n let nextWidth = startWidth === 0 ? 0 : clamp(startWidth, bounds.minSize, bounds.maxSize);\n let nextCollapsed = collapsed;\n let animationFrame = 0;\n\n const setDraggingPanelState = (value: string) => {\n if (resizablePanelRef.current) resizablePanelRef.current.style.pointerEvents = value;\n if (contentPanelRef.current) contentPanelRef.current.style.pointerEvents = value;\n };\n\n const schedulePanelWidth = () => {\n if (animationFrame) return;\n\n animationFrame = window.requestAnimationFrame(() => {\n animationFrame = 0;\n applyPanelWidth(nextWidth);\n });\n };\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const rawWidth = startWidth + (moveEvent.clientX - startX) * direction;\n nextCollapsed = collapsible && rawWidth <= collapseThresholdPx;\n nextWidth = nextCollapsed ? 0 : clamp(rawWidth, bounds.minSize, bounds.maxSize);\n if (!nextCollapsed) lastWidthRef.current = nextWidth;\n schedulePanelWidth();\n };\n\n const cleanup = () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", cleanup);\n window.removeEventListener(\"pointercancel\", cleanup);\n window.removeEventListener(\"blur\", cleanup);\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n if (resizeHandle.hasPointerCapture(event.pointerId)) resizeHandle.releasePointerCapture(event.pointerId);\n setDraggingPanelState(\"\");\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n cleanupDragRef.current = () => undefined;\n if (nextCollapsed) {\n applyPanelWidth(0);\n setCollapsed(true);\n } else {\n setCollapsed(false);\n commitPanelWidth(nextWidth);\n }\n };\n\n cleanupDragRef.current = cleanup;\n resizeHandle.setPointerCapture(event.pointerId);\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n setDraggingPanelState(\"none\");\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", cleanup, { once: true });\n window.addEventListener(\"pointercancel\", cleanup, { once: true });\n window.addEventListener(\"blur\", cleanup, { once: true });\n };\n\n const handleResizeKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const direction = resizableSide === \"left\" ? 1 : -1;\n const width = lastWidthRef.current;\n\n if (collapsed && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\" || event.key === \"End\")) {\n event.preventDefault();\n setCollapsed(false);\n commitPanelWidth(width);\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n commitPanelWidth(width - KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n commitPanelWidth(width + KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitPanelWidth(bounds.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitPanelWidth(bounds.maxSize);\n }\n };\n\n const resizablePanelNode = (\n <Flex\n id={resizablePanelId}\n ref={resizablePanelRef}\n display={collapsed ? \"none\" : \"flex\"}\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex={`0 0 ${resolvedPanelWidth}px`}\n w={`${resolvedPanelWidth}px`}\n aria-hidden={collapsed ? true : undefined}\n >\n {resizablePanel}\n </Flex>\n );\n const contentPanelNode = (\n <Flex\n id={contentPanelId}\n ref={contentPanelRef}\n display=\"flex\"\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex=\"1\"\n >\n {contentPanel}\n </Flex>\n );\n const resizeTrigger = collapsed ? null : (\n <ResizeHandle\n bounds={bounds}\n contentPanelId={contentPanelId}\n resizablePanelId={resizablePanelId}\n resizeLabel={resizeLabel}\n resolvedPanelWidth={resolvedPanelWidth}\n showResizeSeparator={showResizeSeparator}\n onResizeKeyDown={handleResizeKeyDown}\n onResizeStart={handleResizeStart}\n />\n );\n\n return (\n <Flex ref={rootRef} direction=\"row\" h=\"full\" w=\"full\" overflow=\"hidden\" {...rest}>\n {resizableSide === \"left\" ? (\n <>\n {resizablePanelNode}\n {resizeTrigger}\n {contentPanelNode}\n </>\n ) : (\n <>\n {contentPanelNode}\n {resizeTrigger}\n {resizablePanelNode}\n </>\n )}\n </Flex>\n );\n};\n","import type { ChangedFilesViewMode, ChangedFileTreeNode } from \"./types\";\n\nconst normalizeChangedFilePath = (path: string) =>\n path\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join(\"/\");\n\nconst sortNodes = (nodes: ChangedFileTreeNode[]) => {\n nodes.sort((left, right) => {\n if (left.type !== right.type) return left.type === \"folder\" ? -1 : 1;\n return left.name.localeCompare(right.name);\n });\n\n nodes.forEach((node) => {\n if (node.children) sortNodes(node.children);\n });\n\n return nodes;\n};\n\nconst dedupePaths = (paths: string[]) => Array.from(new Set(paths.map(normalizeChangedFilePath).filter(Boolean)));\n\nconst buildFlatTree = (paths: string[]) =>\n dedupePaths(paths)\n .map((path) => ({ id: `file:${path}`, name: path, type: \"file\" }) satisfies ChangedFileTreeNode)\n .sort((left, right) => left.name.localeCompare(right.name));\n\nexport const buildChangedFilesTree = (paths: string[], mode: ChangedFilesViewMode): ChangedFileTreeNode[] => {\n if (mode === \"flat\") return buildFlatTree(paths);\n\n const treeById = new Map<string, ChangedFileTreeNode>();\n const rootNodes: ChangedFileTreeNode[] = [];\n\n dedupePaths(paths).forEach((path) => {\n const segments = path.split(\"/\");\n let parentPath = \"\";\n let parentNode: ChangedFileTreeNode | null = null;\n\n segments.forEach((segment, index) => {\n const currentPath = parentPath ? `${parentPath}/${segment}` : segment;\n const isFile = index === segments.length - 1;\n const nodeId = `${isFile ? \"file\" : \"folder\"}:${currentPath}`;\n const existingNode = treeById.get(nodeId);\n\n if (existingNode) {\n parentNode = existingNode;\n parentPath = currentPath;\n return;\n }\n\n const nextNode: ChangedFileTreeNode = {\n id: nodeId,\n name: segment,\n type: isFile ? \"file\" : \"folder\",\n ...(isFile ? {} : { children: [] }),\n };\n\n treeById.set(nodeId, nextNode);\n\n if (!parentNode) rootNodes.push(nextNode);\n else parentNode.children?.push(nextNode);\n\n parentNode = nextNode;\n parentPath = currentPath;\n });\n });\n\n return sortNodes(rootNodes);\n};\n\nexport const collectExpandedFolderIds = (nodes: ChangedFileTreeNode[]) => {\n const folderIds: string[] = [];\n\n const visit = (items: ChangedFileTreeNode[]) => {\n items.forEach((item) => {\n if (item.type !== \"folder\") return;\n folderIds.push(item.id);\n visit(item.children ?? []);\n });\n };\n\n visit(nodes);\n return folderIds;\n};\n\nconst collectNestedFileOrder = (nodes: ChangedFileTreeNode[]) => {\n const orderedPaths: string[] = [];\n\n const visit = (treeNodes: ChangedFileTreeNode[]) => {\n treeNodes.forEach((node) => {\n if (node.type === \"file\") {\n orderedPaths.push(node.id.replace(/^file:/, \"\"));\n return;\n }\n\n visit(node.children ?? []);\n });\n };\n\n visit(nodes);\n return orderedPaths;\n};\n\nexport const sortPathsByViewMode = (paths: string[], mode: ChangedFilesViewMode) => {\n if (mode === \"flat\") return [...paths].sort((left, right) => left.localeCompare(right));\n return collectNestedFileOrder(buildChangedFilesTree(paths, \"nested\"));\n};\n","import { create } from \"zustand\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerState {\n isTreePanelOpen: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n searchQuery: string;\n selectedPath: string | null;\n expandedFolderIds: Set<string>;\n setTreePanelOpen: (open: boolean) => void;\n toggleTreePanel: () => void;\n setViewMode: (viewMode: ChangedFilesViewMode) => void;\n setDiffViewMode: (diffViewMode: DiffViewMode) => void;\n setSearchQuery: (searchQuery: string) => void;\n setSelectedPath: (selectedPath: string | null) => void;\n setExpandedFolderIds: (folderIds: string[]) => void;\n toggleFolder: (folderId: string) => void;\n expandAll: (folderIds: string[]) => void;\n collapseAll: () => void;\n}\n\nexport const useDiffViewerStore = create<DiffViewerState>((set) => ({\n isTreePanelOpen: true,\n viewMode: \"nested\",\n diffViewMode: \"unified\",\n searchQuery: \"\",\n selectedPath: null,\n expandedFolderIds: new Set(),\n setTreePanelOpen: (isTreePanelOpen) => set({ isTreePanelOpen }),\n toggleTreePanel: () => set((state) => ({ isTreePanelOpen: !state.isTreePanelOpen })),\n setViewMode: (viewMode) => set({ viewMode }),\n setDiffViewMode: (diffViewMode) => set({ diffViewMode }),\n setSearchQuery: (searchQuery) => set({ searchQuery }),\n setSelectedPath: (selectedPath) => set({ selectedPath }),\n setExpandedFolderIds: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n toggleFolder: (folderId) =>\n set((state) => {\n const expandedFolderIds = new Set(state.expandedFolderIds);\n if (expandedFolderIds.has(folderId)) expandedFolderIds.delete(folderId);\n else expandedFolderIds.add(folderId);\n return { expandedFolderIds };\n }),\n expandAll: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n collapseAll: () => set({ expandedFolderIds: new Set() }),\n}));\n","import { Menu, Portal } from \"@chakra-ui/react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\n\ntype MenuRootProps = ComponentProps<typeof Menu.Root>;\n\nexport interface ResourceContextAction {\n key: string;\n label: string;\n onClick: () => void;\n isDisabled?: boolean;\n icon?: ReactNode;\n endContent?: ReactNode;\n}\n\ninterface ResourceContextMenuProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n contentMinWidth?: string;\n contentBackground?: string;\n positioning?: MenuRootProps[\"positioning\"];\n}\n\nexport const ResourceContextMenu = (props: ResourceContextMenuProps) => {\n const {\n actions,\n children,\n contentMinWidth = \"220px\",\n contentBackground = \"bg\",\n positioning = { placement: \"bottom-start\" },\n } = props;\n\n if (actions.length === 0) {\n return <>{children}</>;\n }\n\n return (\n <Menu.Root positioning={positioning}>\n <Menu.ContextTrigger asChild>{children}</Menu.ContextTrigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW={contentMinWidth} bg={contentBackground}>\n {actions.map((action) => (\n <Menu.Item key={action.key} value={action.key} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n label={action.label}\n icon={action.icon}\n endContent={action.endContent}\n disabled={action.isDisabled}\n onActivate={action.onClick}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Box, Icon, Input, InputGroup, Menu, Portal } from \"@chakra-ui/react\";\nimport { ChevronDown, Search } from \"lucide-react\";\nimport { type ElementType, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Header } from \"./header\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport { ScrollArea } from \"./scroll-area\";\n\ntype MenuRootProps = React.ComponentProps<typeof Menu.Root>;\ntype MenuContentProps = React.ComponentProps<typeof Menu.Content>;\n\nexport interface SearchableMenuItem {\n id: string;\n label: string;\n searchText?: string;\n secondaryLabel?: string;\n tooltipLabel?: ReactNode;\n icon?: ElementType;\n variant?: \"default\" | \"compact\";\n isDisabled?: boolean;\n isSelected?: boolean;\n onSelect?: () => void;\n}\n\nexport interface SearchableMenuParentList<T extends SearchableMenuItem> {\n items: T[];\n selectedLabel: string;\n selectedIcon?: ElementType;\n ariaLabel?: string;\n disabled?: boolean;\n emptyState?: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n searchPlaceholder?: string;\n showSearch?: boolean;\n contentTestId?: string;\n onSelect?: (item: T) => void;\n}\n\ninterface ListConfig<T extends SearchableMenuItem> {\n items: T[];\n filterItems: (items: T[], query: string) => T[];\n showSearch: boolean;\n searchPlaceholder: string;\n emptyState: ReactNode;\n contentTestId?: string;\n closeOnSelect: boolean;\n listId: string;\n}\n\ninterface SearchableMenuProps<T extends SearchableMenuItem> {\n trigger: ReactNode;\n items: T[];\n searchPlaceholder: string;\n emptyState: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n listId?: string;\n header?: ReactNode;\n width?: MenuContentProps[\"width\"];\n maxListHeight?: string;\n showSearch?: boolean;\n closeOnSelect?: MenuRootProps[\"closeOnSelect\"];\n lazyMount?: MenuRootProps[\"lazyMount\"];\n open?: MenuRootProps[\"open\"];\n positioning?: MenuRootProps[\"positioning\"];\n onOpenChange?: MenuRootProps[\"onOpenChange\"];\n onFocusOutside?: MenuRootProps[\"onFocusOutside\"];\n contentTestId?: string;\n portalled?: boolean;\n parentList?: SearchableMenuParentList<T>;\n}\n\nexport const filterSearchableMenuItems = <T extends SearchableMenuItem>(items: T[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return items;\n }\n\n return items.filter((item) => {\n const content = [item.label, item.searchText].filter(Boolean).join(\" \").toLowerCase();\n return content.includes(normalizedQuery);\n });\n};\n\nexport const shouldResetSearchableMenuQuery = (currentListId?: string, nextListId?: string) => {\n if (!currentListId || !nextListId) {\n return false;\n }\n\n return currentListId !== nextListId;\n};\n\nexport const resolveActiveListConfig = <T extends SearchableMenuItem>(\n isShowingParent: boolean,\n parentList: SearchableMenuParentList<T> | undefined,\n childConfig: ListConfig<T>,\n): ListConfig<T> => {\n if (!isShowingParent || !parentList) {\n return childConfig;\n }\n\n return {\n items: parentList.items,\n filterItems: parentList.filterItems ?? childConfig.filterItems,\n showSearch: parentList.showSearch ?? childConfig.showSearch,\n searchPlaceholder: parentList.searchPlaceholder ?? childConfig.searchPlaceholder,\n emptyState: parentList.emptyState ?? childConfig.emptyState,\n contentTestId: parentList.contentTestId ?? childConfig.contentTestId,\n closeOnSelect: false,\n listId: \"parent\",\n };\n};\n\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nexport const SearchableMenu = <T extends SearchableMenuItem>(props: SearchableMenuProps<T>) => {\n const {\n trigger,\n items,\n searchPlaceholder,\n emptyState,\n filterItems = filterSearchableMenuItems,\n listId,\n header,\n width = \"260px\",\n maxListHeight = \"18rem\",\n showSearch = true,\n closeOnSelect = true,\n lazyMount = false,\n open,\n positioning,\n onOpenChange,\n onFocusOutside,\n contentTestId,\n portalled = true,\n parentList,\n } = props;\n const hasParentList = Boolean(parentList);\n const [internalOpen, setInternalOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeList, setActiveList] = useState<\"child\" | \"parent\">(\"child\");\n const inputRef = useRef<HTMLInputElement>(null);\n const isOpen = open ?? internalOpen;\n const isShowingParent = hasParentList && activeList === \"parent\";\n\n const childConfig: ListConfig<T> = {\n items,\n filterItems,\n showSearch,\n searchPlaceholder,\n emptyState,\n contentTestId,\n closeOnSelect,\n listId: hasParentList ? \"child\" : (listId ?? \"\"),\n };\n\n const config = resolveActiveListConfig(isShowingParent, parentList, childConfig);\n const filteredItems = config.filterItems(config.items, query);\n const previousListIdRef = useRef(config.listId);\n\n useEffect(() => {\n if (!isOpen) {\n previousListIdRef.current = config.listId;\n return;\n }\n\n if (shouldResetSearchableMenuQuery(previousListIdRef.current, config.listId)) {\n setQuery(\"\");\n }\n\n previousListIdRef.current = config.listId;\n }, [isOpen, config.listId]);\n\n useEffect(() => {\n if (!isOpen || !config.showSearch) {\n return;\n }\n\n const timeout = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(timeout);\n }, [isOpen, config.showSearch]);\n\n const handleOpenChange: NonNullable<MenuRootProps[\"onOpenChange\"]> = (details) => {\n if (open === undefined) {\n setInternalOpen(details.open);\n }\n\n setQuery(\"\");\n\n if (details.open && hasParentList) {\n setActiveList(\"child\");\n }\n\n onOpenChange?.(details);\n };\n\n const handleMenuItemSelect = (details: { value: string }) => {\n if (!isShowingParent || !parentList) return;\n\n const item = parentList.items.find((i) => i.id === details.value);\n if (!item) return;\n\n parentList.onSelect?.(item);\n setActiveList(\"child\");\n };\n\n const renderIcon = (icon: ElementType | undefined) => (icon ? <Icon as={icon} boxSize=\"14px\" /> : undefined);\n\n const buildRowItem = (item: T): ListRowItem => ({\n id: item.id,\n label: item.label,\n description: item.secondaryLabel,\n icon: renderIcon(item.icon),\n disabled: item.isDisabled,\n tooltip: item.tooltipLabel,\n });\n\n const parentListHeader = parentList ? (\n <Header\n as=\"div\"\n role=\"button\"\n aria-label={parentList.ariaLabel}\n aria-disabled={parentList.disabled || undefined}\n tabIndex={parentList.disabled ? -1 : 0}\n variant=\"narrow\"\n px=\"0\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n flexShrink={0}\n onPointerDownCapture={(event) => event.stopPropagation()}\n onClickCapture={(event) => {\n event.stopPropagation();\n if (parentList.disabled) return;\n setActiveList((current) => (current === \"child\" ? \"parent\" : \"child\"));\n }}\n >\n <ListRow\n variant=\"compact\"\n id=\"__parent-toggle\"\n label={parentList.selectedLabel}\n icon={renderIcon(parentList.selectedIcon)}\n disabled={parentList.disabled}\n endContent={parentList.disabled ? undefined : <Icon as={ChevronDown} boxSize=\"14px\" />}\n />\n </Header>\n ) : null;\n\n const resolvedHeader = parentList ? parentListHeader : header;\n const shouldShowSeparator = Boolean(resolvedHeader) && !config.showSearch;\n\n const searchInput = config.showSearch ? (\n <Header variant=\"input\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" flexShrink={0}>\n <InputGroup startElement={<Search size={14} />} width=\"full\">\n <Input\n ref={inputRef}\n borderWidth=\"0\"\n borderRadius=\"0\"\n height=\"full\"\n value={query}\n placeholder={config.searchPlaceholder}\n aria-label={config.searchPlaceholder}\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputBorderProps}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => event.stopPropagation()}\n />\n </InputGroup>\n </Header>\n ) : null;\n\n return (\n <Menu.Root\n lazyMount={lazyMount}\n closeOnSelect={config.closeOnSelect}\n open={open}\n positioning={positioning}\n onOpenChange={handleOpenChange}\n onFocusOutside={onFocusOutside}\n onSelect={hasParentList ? handleMenuItemSelect : undefined}\n >\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n <Portal disabled={!portalled}>\n <Menu.Positioner>\n <Menu.Content w={width} bg=\"bg\" gap=\"0\" p=\"0\" zIndex=\"popover\">\n {resolvedHeader}\n {searchInput}\n {shouldShowSeparator ? <Menu.Separator margin=\"0\" /> : null}\n <ScrollArea\n maxH={maxListHeight}\n data-testid={config.contentTestId}\n viewportProps={{ overscrollBehavior: \"contain\" }}\n p=\"0\"\n gap=\"0\"\n >\n {filteredItems.length > 0\n ? filteredItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.isDisabled} onClick={item.onSelect} asChild>\n <Box\n bg=\"transparent\"\n h=\"auto\"\n p=\"0\"\n _hover={{ bg: \"transparent\" }}\n _focus={{ bg: \"transparent\" }}\n _active={{ bg: \"transparent\" }}\n >\n <ListRow\n asChild\n {...buildRowItem(item)}\n variant={item.variant ?? \"compact\"}\n isSelected={item.isSelected}\n />\n </Box>\n </Menu.Item>\n ))\n : config.emptyState}\n </ScrollArea>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { IconButton, Menu } from \"@chakra-ui/react\";\nimport { SearchableMenu } from \"../searchable-menu\";\nimport { ListRow } from \"./list-row\";\nimport type { ListRowAction } from \"./list-row.types\";\n\ninterface SearchableActionMenuProps {\n action: ListRowAction;\n}\n\nexport const SearchableActionMenu = (props: SearchableActionMenuProps) => {\n const { action } = props;\n const items = (action.menuItems ?? []).map((item) => ({\n id: item.id,\n label: item.label,\n searchText: [item.label, item.description].filter(Boolean).join(\" \"),\n tooltipLabel: item.description,\n variant: \"compact\" as const,\n onSelect: () => item.onAction?.(),\n }));\n\n return (\n <SearchableMenu\n trigger={\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n }\n items={items}\n searchPlaceholder={action.searchPlaceholder ?? \"Search...\"}\n emptyState={\n <Menu.Item value=\"empty\" asChild>\n <ListRow asChild variant=\"compact\" label={action.emptyMenuLabel ?? \"No results found\"} disabled />\n </Menu.Item>\n }\n onFocusOutside={(event) => event.preventDefault()}\n />\n );\n};\n","import { Box, HStack, IconButton, Menu } from \"@chakra-ui/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowAction } from \"./list-row.types\";\nimport { SearchableActionMenu } from \"./searchable-action-menu\";\n\ninterface RowActionsProps {\n actions: ListRowAction[];\n context: { sectionId?: string; nodeId?: string };\n}\n\nconst keyedTooltip = (action: ListRowAction, child: ReactElement) => {\n if (action.tooltip) {\n return (\n <Tooltip key={action.id} content={action.tooltip} openDelay={300}>\n {child}\n </Tooltip>\n );\n }\n return <Fragment key={action.id}>{child}</Fragment>;\n};\n\nexport const RowActions = (props: RowActionsProps) => {\n const { actions, context } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n\n if (action.menuItems && action.menuItems.length > 0) {\n return keyedTooltip(\n action,\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Tooltip key={item.id} content={item.description} disabled={!item.description} openDelay={300}>\n <Menu.Item value={item.id} disabled={item.disabled} onClick={() => item.onAction?.()}>\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\">\n <HStack gap=\"2\" minW=\"0\">\n {item.icon ? <Box>{item.icon as never}</Box> : null}\n <Box minW=\"0\">{item.label}</Box>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n </Tooltip>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>,\n );\n }\n\n return keyedTooltip(\n action,\n <IconButton\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.(context);\n }}\n >\n {action.icon}\n </IconButton>,\n );\n })}\n </HStack>\n );\n};\n","import { Box, HStack, Icon, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport type { ReactElement } from \"react\";\nimport type { ListRowActionMenuItem, ListRowMenuPlacement } from \"./list-row.types\";\n\ninterface ListRowMenuProps {\n items: ListRowActionMenuItem[];\n open: boolean;\n placement?: ListRowMenuPlacement;\n children: ReactElement;\n onOpenChange: (open: boolean) => void;\n onSelect: (item: ListRowActionMenuItem) => void;\n}\n\nconst ListRowMenuItemIcon = (props: { item: ListRowActionMenuItem }) => {\n const { item } = props;\n if (!item.icon) return null;\n\n return (\n <Box color=\"fg.muted\" flexShrink={0} display=\"inline-flex\">\n {typeof item.icon === \"function\" ? <Icon as={item.icon} boxSize=\"14px\" /> : item.icon}\n </Box>\n );\n};\n\nexport const ListRowMenu = (props: ListRowMenuProps) => {\n const { children, items, onOpenChange, onSelect, open, placement = \"right-start\" } = props;\n\n return (\n <Menu.Root\n open={open}\n positioning={{ placement, offset: { mainAxis: 4 } }}\n onOpenChange={(details) => onOpenChange(details.open)}\n >\n <Menu.Trigger asChild>{children}</Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"200px\" bg=\"bg\">\n {items.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.disabled} onClick={() => onSelect(item)}>\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\">\n <HStack gap=\"2\" minW=\"0\">\n <ListRowMenuItemIcon item={item} />\n <Text textStyle=\"label/S/regular\" truncate>\n {item.label}\n </Text>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Box, chakra, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { forwardRef, type ReactElement, type MouseEvent as ReactMouseEvent, useState } from \"react\";\nimport { ResourceContextMenu } from \"../resource-context-menu\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowItem, ListRowProps, RowContentProps } from \"./list-row.types\";\nimport { RowActions } from \"./list-row-actions\";\nimport { ListRowMenu } from \"./list-row-menu\";\n\nconst RowContent = (props: RowContentProps) => {\n const { item, isExpanded, showChevron, isDisabled, variant, tone } = props;\n const isDenseVariant = variant === \"compact\" || variant === \"tree\";\n const labelTextStyle = isDenseVariant ? \"label/S/regular\" : \"label/M/regular\";\n const descriptionTextStyle = isDenseVariant ? \"label/XS\" : \"label/S/regular\";\n const descriptionMarginLeft = isDenseVariant ? \"0\" : \"2px\";\n\n const labelColor = (() => {\n if (isDisabled) return \"fg.muted\";\n if (tone === \"danger\") return \"red.500\";\n return \"fg\";\n })();\n const iconColor = item.iconColor ?? (tone === \"danger\" ? \"red.500\" : \"fg.muted\");\n const descriptionColor = tone === \"danger\" ? \"red.400\" : \"fg.menu-item.secondary\";\n\n return (\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" overflow=\"hidden\" alignItems=\"center\">\n {showChevron ? (\n <Box color=\"fg.muted\" flexShrink={0} display=\"flex\" alignItems=\"center\">\n <ChevronRight\n size={12}\n style={{ transform: isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"120ms\" }}\n />\n </Box>\n ) : null}\n <Stack gap=\"2xs\" minW=\"0\" flex=\"1\">\n <HStack gap=\"2\" minW=\"0\" alignItems=\"center\">\n {item.icon ? (\n <Box\n color={iconColor}\n flexShrink={0}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n boxSize=\"14px\"\n fontSize=\"14px\"\n lineHeight=\"1\"\n css={{ \"& > svg\": { width: \"14px\", height: \"14px\" } }}\n >\n {item.icon}\n </Box>\n ) : null}\n {item.indicator ? (\n <Tooltip content={item.indicator.tooltip} disabled={!item.indicator.tooltip} openDelay={300}>\n <Box color={item.indicator.color ?? \"fg.muted\"} flexShrink={0}>\n {item.indicator.icon}\n </Box>\n </Tooltip>\n ) : null}\n {typeof item.label === \"string\" ? (\n <Text textStyle={labelTextStyle} color={labelColor} truncate>\n {item.label}\n </Text>\n ) : (\n <Box minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {item.label}\n </Box>\n )}\n </HStack>\n {item.description ? (\n typeof item.description === \"string\" ? (\n <Text ml={descriptionMarginLeft} textStyle={descriptionTextStyle} color={descriptionColor} truncate>\n {item.description}\n </Text>\n ) : (\n <Box ml={descriptionMarginLeft} minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {item.description}\n </Box>\n )\n ) : null}\n </Stack>\n </HStack>\n );\n};\n\nconst computePaddingLeft = (depth: number) => {\n if (depth <= 0) return undefined;\n return `calc(var(--chakra-spacing-1) + ${depth} * 12px)`;\n};\n\nconst ListRowContent = (props: {\n item: ListRowItem;\n isExpanded: boolean;\n showChevron: boolean;\n isDisabled: boolean;\n tone: ListRowProps[\"tone\"];\n variant: ListRowProps[\"variant\"];\n}) => {\n const { item, isDisabled, isExpanded, showChevron, tone = \"default\", variant = \"default\" } = props;\n\n return (\n <>\n <RowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n />\n {item.endContent ? (\n <Box flexShrink={0} color=\"fg.muted\" display=\"flex\" alignItems=\"center\">\n {item.endContent}\n </Box>\n ) : null}\n {item.actions && item.actions.length > 0 ? (\n <RowActions actions={item.actions} context={{ nodeId: item.id }} />\n ) : null}\n </>\n );\n};\n\nconst resolveListRowSizing = (variant: ListRowProps[\"variant\"], hasDescription: boolean) => {\n if (variant === \"compact\" && !hasDescription) return { rowHeight: \"1.75rem\", minHeight: undefined };\n\n return {\n rowHeight: \"auto\",\n minHeight: variant === \"default\" ? \"2.25rem\" : \"1.75rem\",\n };\n};\n\nexport const ListRow = forwardRef<HTMLElement, ListRowProps>((props, ref) => {\n const {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n depth = 0,\n isSelected = false,\n isExpanded = false,\n showExpandToggle = false,\n variant = \"default\",\n tone = \"default\",\n asChild = false,\n className,\n onToggleExpand,\n onPointerMove,\n draggable,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n onClick,\n ...rootProps\n } = props;\n const [menuOpen, setMenuOpen] = useState(false);\n\n const item: ListRowItem = {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n };\n\n const dragProps = { draggable, onDragStart, onDragOver, onDragEnd, onDrop };\n\n const hasChildren = (item.children?.length ?? 0) > 0 || item.isContainer === true;\n const hasMenuItems = (item.menuItems?.length ?? 0) > 0;\n const showChevron = showExpandToggle && hasChildren;\n const isDisabled = item.disabled === true;\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasMenuItems) return;\n if (showChevron) {\n onToggleExpand?.();\n return;\n }\n if (onActivate) {\n onActivate();\n return;\n }\n item.onActivate?.();\n };\n\n const handleClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n handleActivate();\n };\n\n const handleMenuClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n setMenuOpen((current) => !current);\n };\n\n const paddingLeft = computePaddingLeft(depth);\n const verticalPadding = variant === \"default\" ? \"xs\" : \"2xs\";\n const hasDescription = item.description !== undefined;\n const activationProps = hasMenuItems ? { onClick: handleMenuClick } : { onClick: handleClick };\n const { rowHeight, minHeight } = resolveListRowSizing(variant, hasDescription);\n\n const rowProps = {\n ...rootProps,\n role: hasMenuItems ? (\"button\" as const) : (\"option\" as const),\n \"aria-selected\": isSelected,\n className: className ? `group ${className}` : \"group\",\n width: \"full\",\n minWidth: \"0\",\n maxWidth: \"full\",\n height: rowHeight,\n minHeight,\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"space-between\" as const,\n gap: \"xs\" as const,\n px: \"sm\",\n py: verticalPadding,\n pl: paddingLeft,\n borderRadius: \"0\" as const,\n bg: isSelected ? \"bg.menu-item.selected\" : \"transparent\",\n _hover:\n tone === \"danger\" ? { boxShadow: \"inset 0 0 0 1px var(--chakra-colors-red-500)\" } : { bg: \"bg.menu-item.hover\" },\n cursor: isDisabled ? (\"not-allowed\" as const) : (\"pointer\" as const),\n overflow: \"hidden\" as const,\n textAlign: \"left\" as const,\n color: \"inherit\",\n textDecoration: \"none\",\n };\n\n const content = (\n <ListRowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n />\n );\n\n const wrapWithContextMenu = (children: ReactElement) => {\n if (!item.contextMenuItems || item.contextMenuItems.length === 0) return children;\n\n const contextActions = item.contextMenuItems.map((entry) => ({\n key: entry.id,\n label: entry.label,\n icon: typeof entry.icon === \"function\" ? <Icon as={entry.icon} boxSize=\"16px\" /> : entry.icon,\n endContent: entry.endContent,\n isDisabled: entry.disabled,\n onClick: () => entry.onAction?.(),\n }));\n\n return (\n <ResourceContextMenu actions={contextActions} contentMinWidth=\"180px\">\n {children}\n </ResourceContextMenu>\n );\n };\n\n const wrapWithMenu = (children: ReactElement) => {\n if (!item.menuItems || item.menuItems.length === 0) return children;\n\n return (\n <ListRowMenu\n items={item.menuItems}\n open={menuOpen}\n placement={item.menuPlacement}\n onOpenChange={setMenuOpen}\n onSelect={(menuItem) => {\n setMenuOpen(false);\n menuItem.onAction?.();\n }}\n >\n {children}\n </ListRowMenu>\n );\n };\n\n const wrapWithTooltip = (children: ReactElement) => {\n if (!item.tooltip) return children;\n return <Tooltip content={item.tooltip}>{children}</Tooltip>;\n };\n\n const wrap = (children: ReactElement) =>\n hasMenuItems ? wrapWithMenu(children) : wrapWithContextMenu(wrapWithTooltip(children));\n\n if (asChild) {\n return wrap(\n <chakra.div ref={ref} {...rowProps} {...dragProps} {...activationProps} onPointerMove={onPointerMove}>\n {content}\n </chakra.div>,\n );\n }\n if (item.href && !showChevron && !isDisabled && !hasMenuItems) {\n return wrap(\n <chakra.a\n ref={ref}\n href={item.href}\n {...(rowProps as object)}\n {...dragProps}\n onClick={handleClick}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.a>,\n );\n }\n\n return wrap(\n <chakra.button\n ref={ref}\n type=\"button\"\n disabled={isDisabled}\n {...(rowProps as object)}\n {...dragProps}\n {...activationProps}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.button>,\n );\n});\n","import { Box, HStack, IconButton, Menu, Stack, type StackProps, Text } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { RefObject } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport type {\n TreeListAction,\n TreeListLinkComponent,\n TreeListNavigateEvent,\n TreeListNode,\n TreeListSection,\n} from \"./tree-list.types\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface TreeListProps {\n sections: TreeListSection[];\n expandedSectionIds?: string[];\n expandedNodeIds?: string[];\n activeNodeId?: string | string[] | null;\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n /**\n * When set, the tree's rows are virtualized via @tanstack/react-virtual.\n * Requires `scrollRef` to point at the ancestor scroll viewport.\n */\n virtualize?: boolean;\n scrollRef?: RefObject<HTMLDivElement | null>;\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface TreeListNodeRowProps {\n sectionId: string;\n node: TreeListNode;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n renderChildren?: boolean;\n}\n\nconst isInList = (id: string, values: string[]) => values.includes(id);\n\nconst isActiveNode = (id: string, activeNodeId?: string | string[] | null) =>\n Array.isArray(activeNodeId) ? activeNodeId.includes(id) : activeNodeId === id;\n\nconst isNavigableNode = (node: TreeListNode) => node.isNavigable || node.navigationIntent !== undefined;\n\nconst getNodeChildren = (node: TreeListNode): TreeListNode[] => (node.children as TreeListNode[] | undefined) ?? [];\n\nconst hasExpandableChildren = (node: TreeListNode) => getNodeChildren(node).length > 0 || node.isContainer === true;\n\nconst TreeListNodeRow = (props: TreeListNodeRowProps) => {\n const {\n sectionId,\n node,\n level,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent: LinkComponent,\n onNavigate,\n onToggleNode,\n renderChildren = true,\n } = props;\n\n const children = getNodeChildren(node);\n const hasChildren = hasExpandableChildren(node);\n const expanded = hasChildren && isInList(node.id, expandedNodeIds);\n const isActive = isActiveNode(node.id, activeNodeId);\n const isDisabled = node.disabled === true;\n const isNavigable = isNavigableNode(node);\n const canLink = Boolean(LinkComponent && node.href && isNavigable && !hasChildren && !isDisabled);\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasChildren) {\n onToggleNode?.(node.id);\n return;\n }\n if (isNavigable && onNavigate) {\n onNavigate({ sectionId, nodeId: node.id, node, intent: node.navigationIntent });\n return;\n }\n node.onActivate?.();\n };\n\n const rowItem: TreeListNode = {\n ...node,\n actions: node.actions?.map((action) => ({\n ...action,\n onAction: action.onAction\n ? (context) => action.onAction?.({ sectionId, nodeId: node.id, ...context })\n : undefined,\n })),\n };\n\n const row =\n canLink && LinkComponent && node.href ? (\n <LinkComponent to={node.href}>\n <ListRow\n {...rowItem}\n depth={level}\n variant={rowVariant}\n isSelected={isActive}\n isExpanded={expanded}\n showExpandToggle={hasChildren}\n onActivate={handleActivate}\n onToggleExpand={() => onToggleNode?.(node.id)}\n asChild\n />\n </LinkComponent>\n ) : (\n <ListRow\n {...rowItem}\n depth={level}\n variant={rowVariant}\n isSelected={isActive}\n isExpanded={expanded}\n showExpandToggle={hasChildren}\n onActivate={handleActivate}\n onToggleExpand={() => onToggleNode?.(node.id)}\n />\n );\n\n return (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {row}\n {renderChildren && expanded && children.length > 0\n ? children.map((childNode) => (\n <TreeListNodeRow\n key={childNode.id}\n sectionId={sectionId}\n node={childNode}\n level={level + 1}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={LinkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ))\n : null}\n </Stack>\n );\n};\n\ninterface TreeListSectionActionsProps {\n sectionId: string;\n actions: TreeListAction[];\n}\n\nconst TreeListSectionActions = (props: TreeListSectionActionsProps) => {\n const { sectionId, actions } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n if (action.menuItems && action.menuItems.length > 0) {\n return (\n <Menu.Root key={action.id}>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.disabled} onClick={() => item.onAction?.()}>\n {item.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n }\n return (\n <IconButton\n key={action.id}\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.({ sectionId });\n }}\n >\n {action.icon}\n </IconButton>\n );\n })}\n </HStack>\n );\n};\n\ninterface TreeListSectionHeaderProps {\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n onToggle: () => void;\n}\n\nconst TreeListSectionHeader = (props: TreeListSectionHeaderProps) => {\n const { section, collapsible, expanded, onToggle } = props;\n\n return (\n <HStack\n className=\"group\"\n justify=\"space-between\"\n align=\"center\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n px=\"sm\"\n py=\"2xs\"\n height=\"7\"\n cursor={collapsible ? \"pointer\" : \"default\"}\n _hover={collapsible ? { bg: \"bg.hover\" } : undefined}\n onClick={collapsible ? onToggle : undefined}\n >\n <HStack gap=\"1\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/XS\" textTransform=\"uppercase\" color=\"fg.muted\" letterSpacing=\"0.08em\" truncate>\n {section.label}\n </Text>\n {collapsible ? (\n <Box color=\"fg.muted\" flexShrink={0}>\n <ChevronRight\n size={14}\n style={{ transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"120ms\" }}\n />\n </Box>\n ) : null}\n </HStack>\n <TreeListSectionActions sectionId={section.id} actions={section.actions ?? []} />\n </HStack>\n );\n};\n\nexport type VirtualRow =\n | {\n kind: \"section-header\";\n key: string;\n sectionId: string;\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n }\n | { kind: \"node\"; key: string; sectionId: string; node: TreeListNode; level: number }\n | { kind: \"section-empty\"; key: string; sectionId: string; emptyState: TreeListSection[\"emptyState\"] };\n\nconst appendVisibleNodeRows = (input: {\n rows: VirtualRow[];\n sectionId: string;\n nodes: TreeListNode[];\n expandedNodeIds: string[];\n level: number;\n}) => {\n const { rows, sectionId, nodes, expandedNodeIds, level } = input;\n\n for (const node of nodes) {\n rows.push({ kind: \"node\", key: `${sectionId}:${node.id}`, sectionId, node, level });\n\n const children = getNodeChildren(node);\n if (children.length === 0 || !isInList(node.id, expandedNodeIds)) continue;\n\n appendVisibleNodeRows({ rows, sectionId, nodes: children, expandedNodeIds, level: level + 1 });\n }\n};\n\nexport const buildVirtualRows = (\n sections: TreeListSection[],\n expandedSectionIds: string[],\n expandedNodeIds: string[],\n): VirtualRow[] => {\n const rows: VirtualRow[] = [];\n for (const section of sections) {\n const collapsible = section.collapsible !== false && section.label !== undefined;\n const expanded = collapsible ? isInList(section.id, expandedSectionIds) : true;\n if (section.label) {\n rows.push({\n kind: \"section-header\",\n key: `header:${section.id}`,\n sectionId: section.id,\n section,\n collapsible,\n expanded,\n });\n }\n if (!expanded) continue;\n if (section.nodes.length === 0) {\n if (section.emptyState) {\n rows.push({\n kind: \"section-empty\",\n key: `empty:${section.id}`,\n sectionId: section.id,\n emptyState: section.emptyState,\n });\n }\n continue;\n }\n appendVisibleNodeRows({ rows, sectionId: section.id, nodes: section.nodes, expandedNodeIds, level: 0 });\n }\n return rows;\n};\n\ninterface VirtualTreeListProps extends TreeListProps {\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nconst VirtualTreeList = (props: VirtualTreeListProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n scrollRef,\n } = props;\n\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => VIRTUAL_ROW_ESTIMATE,\n overscan: VIRTUAL_ROW_OVERSCAN,\n getItemKey: (index) => rows[index]?.key ?? index,\n });\n\n return (\n <Box\n role=\"listbox\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n style={{ height: virtualizer.getTotalSize() }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = rows[virtualItem.index];\n if (!row) return null;\n\n const content =\n row.kind === \"section-header\" ? (\n <TreeListSectionHeader\n section={row.section}\n collapsible={row.collapsible}\n expanded={row.expanded}\n onToggle={() => onToggleSection?.(row.sectionId)}\n />\n ) : row.kind === \"section-empty\" ? (\n (row.emptyState ?? null)\n ) : (\n <TreeListNodeRow\n sectionId={row.sectionId}\n node={row.node}\n level={row.level}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n renderChildren={false}\n />\n );\n\n return (\n <Box\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n data-tree-list-row={row.kind}\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n w=\"full\"\n style={{ transform: `translateY(${virtualItem.start}px)` }}\n >\n {content}\n </Box>\n );\n })}\n </Box>\n );\n};\n\nexport const TreeList = (props: TreeListProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n virtualize,\n scrollRef,\n } = props;\n\n if (virtualize && scrollRef) {\n return <VirtualTreeList {...props} scrollRef={scrollRef} />;\n }\n\n return (\n <Stack role=\"listbox\" gap={sectionGap} w=\"full\" minW=\"0\" maxW=\"full\" overflowX=\"hidden\">\n {sections.map((section) => {\n const collapsible = section.collapsible !== false && section.label !== undefined;\n const sectionExpanded = collapsible ? isInList(section.id, expandedSectionIds) : true;\n\n return (\n <Stack key={section.id} gap=\"0\" w=\"full\" minW=\"0\" maxW=\"full\" data-testid={`tree-list-section-${section.id}`}>\n {section.label ? (\n <TreeListSectionHeader\n section={section}\n collapsible={collapsible}\n expanded={sectionExpanded}\n onToggle={() => onToggleSection?.(section.id)}\n />\n ) : null}\n\n {sectionExpanded ? (\n section.nodes.length > 0 ? (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {section.nodes.map((node) => (\n <TreeListNodeRow\n key={node.id}\n sectionId={section.id}\n node={node}\n level={0}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ))}\n </Stack>\n ) : (\n (section.emptyState ?? null)\n )\n ) : null}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FileText, Search } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport type { TreeListNode } from \"../tree-list/tree-list.types\";\nimport { buildChangedFilesTree } from \"./build-changed-files-tree\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\n title: string;\n paths: string[];\n selectedPath: string | null;\n viewMode: ChangedFilesViewMode;\n searchQuery: string;\n expandedFolderIds: Set<string>;\n onSelectPath: (path: string) => void;\n onSearchQueryChange: (value: string) => void;\n onToggleFolder: (id: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}\n\nconst changeLabels: Record<string, string> = {\n added: \"A\",\n copied: \"C\",\n deleted: \"D\",\n modified: \"U\",\n permissionChange: \"M\",\n renamed: \"R\",\n};\n\nconst changeColors: Record<string, string> = {\n added: \"green\",\n copied: \"purple\",\n deleted: \"red\",\n modified: \"blue\",\n permissionChange: \"yellow\",\n renamed: \"orange\",\n};\n\nconst getFilePathParts = (filePath: string) => {\n const lastSlashIndex = filePath.lastIndexOf(\"/\");\n if (lastSlashIndex < 0) return { fileName: filePath, dirPath: \"\" };\n return { fileName: filePath.slice(lastSlashIndex + 1), dirPath: filePath.slice(0, lastSlashIndex) };\n};\n\nconst renderFileLabel = (node: ChangedFileTreeNode, viewMode: ChangedFilesViewMode, filePath: string) => {\n const { fileName, dirPath } = getFilePathParts(filePath);\n if (viewMode !== \"flat\" || !dirPath) return node.name;\n\n return (\n <Text textStyle=\"label/S/regular\" truncate>\n <Text as=\"span\" color=\"fg.default\">\n {fileName}\n </Text>{\" \"}\n <Text as=\"span\" color=\"fg.muted\">\n {dirPath}\n </Text>\n </Text>\n );\n};\n\nconst toTreeListNodes = (input: {\n nodes: ChangedFileTreeNode[];\n viewMode: ChangedFilesViewMode;\n onSelectPath: (path: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}): TreeListNode[] => {\n const { nodes, viewMode, onSelectPath, resolveFileIcon, changeByPath } = input;\n\n return nodes.map((node) => {\n if (node.type === \"folder\") {\n return {\n id: node.id,\n label: node.name,\n isContainer: true,\n children: toTreeListNodes({\n nodes: node.children ?? [],\n viewMode,\n onSelectPath,\n resolveFileIcon,\n changeByPath,\n }),\n };\n }\n\n const filePath = node.id.replace(/^file:/, \"\");\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"14px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n\n return {\n id: node.id,\n label: renderFileLabel(node, viewMode, filePath),\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? (\n <Badge size=\"sm\" variant=\"subtle\" colorPalette={changeColors[change] ?? \"gray\"} flexShrink={0}>\n {changeLabels[change] ?? change}\n </Badge>\n ) : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\n title,\n paths,\n selectedPath,\n viewMode,\n searchQuery,\n expandedFolderIds,\n onSelectPath,\n onSearchQueryChange,\n onToggleFolder,\n resolveFileIcon,\n changeByPath,\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const fileTree = buildChangedFilesTree(paths, viewMode);\n const treeNodes = toTreeListNodes({ nodes: fileTree, viewMode, onSelectPath, resolveFileIcon, changeByPath });\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" gap=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Header variant=\"main\" justifyContent=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\">\n <HStack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"foreground.secondary\" truncate>\n {title}\n </Text>\n <Badge size=\"sm\" variant=\"subtle\" flexShrink={0}>\n {paths.length}\n </Badge>\n </HStack>\n </Header>\n <Stack gap=\"xs\" borderBottomWidth=\"1px\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n border=\"0\"\n borderRadius=\"0\"\n placeholder=\"Filter files\"\n value={searchQuery}\n _hover={{ borderColor: \"transparent\" }}\n _focus={{ borderColor: \"transparent\", boxShadow: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Stack>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n bg=\"bg\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowX: \"hidden\" } }}\n >\n {paths.length > 0 ? (\n <TreeList\n sections={[{ id: \"files\", nodes: treeNodes }]}\n expandedNodeIds={[...expandedFolderIds]}\n activeNodeId={selectedPath ? `file:${selectedPath}` : null}\n rowVariant=\"tree\"\n onToggleNode={onToggleFolder}\n virtualize\n scrollRef={scrollRef}\n />\n ) : (\n <Box px=\"xs\" py=\"xs\">\n <EmptyState title=\"No matching files\" size=\"sm\" textAlign=\"left\" alignItems=\"flex-start\" />\n </Box>\n )}\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, Flex, HStack, IconButton, Menu, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport {\n Check,\n ChevronsDownUp,\n ChevronsUpDown,\n List,\n ListTree,\n PanelLeftClose,\n PanelLeftOpen,\n Rows2,\n Settings2,\n SquareSplitHorizontal,\n} from \"lucide-react\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ResizableSplitLayout } from \"../resizable-split-layout\";\nimport { buildChangedFilesTree, collectExpandedFolderIds, sortPathsByViewMode } from \"./build-changed-files-tree\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffDrawer, type DiffDrawerExpansionState, type DiffExpansionCommand } from \"./diff-drawer\";\nimport { useDiffViewerStore } from \"./diff-viewer.store\";\nimport { FileListPanel } from \"./file-list-panel\";\nimport type { ChangedFilesViewMode, FileIconInfo } from \"./types\";\n\nexport interface DiffViewerProps {\n diffs: Diff[];\n changedFilePaths?: string[];\n defaultSelectedPath?: string | null;\n loading?: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst buildChangeByPath = (diffs: Diff[]) => new Map(diffs.map((diff) => [getDiffPath(diff), diff.change]));\nconst sumDiffStats = (diffs: Diff[]) =>\n diffs.reduce(\n (total, diff) => ({\n additions: total.additions + (diff.additions ?? 0),\n deletions: total.deletions + (diff.deletions ?? 0),\n }),\n { additions: 0, deletions: 0 },\n );\n\nconst buildFilteredDiffs = (input: {\n diffs: Diff[];\n normalizedSearchQuery: string;\n viewMode: ChangedFilesViewMode;\n}) => {\n const { diffs, normalizedSearchQuery, viewMode } = input;\n const matchingDiffs = normalizedSearchQuery\n ? diffs.filter((diff) => getDiffPath(diff).toLowerCase().includes(normalizedSearchQuery))\n : diffs;\n const orderedPaths = sortPathsByViewMode(matchingDiffs.map(getDiffPath), viewMode);\n const orderByPath = new Map(orderedPaths.map((path, index) => [path, index]));\n\n return [...matchingDiffs].sort((left, right) => {\n const leftOrder = orderByPath.get(getDiffPath(left)) ?? Number.MAX_SAFE_INTEGER;\n const rightOrder = orderByPath.get(getDiffPath(right)) ?? Number.MAX_SAFE_INTEGER;\n return leftOrder - rightOrder;\n });\n};\n\nconst resolveSelectedPath = (preferredPaths: string[], fallbackPaths: string[]) =>\n preferredPaths[0] ?? fallbackPaths[0] ?? null;\n\nconst MenuItemContent = (props: { checked?: boolean; icon: ReactNode; label: string }) => {\n const { checked, icon, label } = props;\n\n return (\n <HStack gap=\"2xs\" w=\"full\">\n <Box flexShrink={0}>{icon}</Box>\n <Text flex=\"1\">{label}</Text>\n {checked !== undefined ? (\n <Box w=\"14px\" flexShrink={0}>\n {checked ? <Check size={14} /> : null}\n </Box>\n ) : null}\n </HStack>\n );\n};\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Skeleton height=\"41px\" borderRadius=\"0\" />\n <Stack gap=\"xs\" px=\"sm\" py=\"sm\">\n <Skeleton height=\"22px\" borderRadius=\"sm\" />\n <Skeleton height=\"110px\" borderRadius=\"sm\" />\n <Skeleton height=\"110px\" borderRadius=\"sm\" />\n </Stack>\n </Stack>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => {\n const { diffs, changedFilePaths, defaultSelectedPath = null, loading = false, onLoadDiff, resolveFileIcon } = props;\n const [diffExpansionCommand, setDiffExpansionCommand] = useState<DiffExpansionCommand | null>(null);\n const [diffExpansionState, setDiffExpansionState] = useState<DiffDrawerExpansionState>({\n allExpanded: false,\n allCollapsed: false,\n });\n const {\n isTreePanelOpen,\n viewMode,\n diffViewMode,\n searchQuery,\n selectedPath,\n expandedFolderIds,\n setTreePanelOpen,\n setViewMode,\n setDiffViewMode,\n setSearchQuery,\n setSelectedPath,\n setExpandedFolderIds,\n toggleFolder,\n expandAll,\n collapseAll,\n } = useDiffViewerStore();\n\n const diffPaths = diffs.map(getDiffPath);\n const filePaths = changedFilePaths ?? diffPaths;\n const normalizedSearchQuery = searchQuery.trim().toLowerCase();\n const filteredFilePaths = normalizedSearchQuery\n ? filePaths.filter((path) => path.toLowerCase().includes(normalizedSearchQuery))\n : filePaths;\n const filteredDiffs = buildFilteredDiffs({ diffs, normalizedSearchQuery, viewMode });\n const changeByPath = buildChangeByPath(diffs);\n const filteredDiffPaths = filteredDiffs.map(getDiffPath);\n const fileTree = buildChangedFilesTree(filteredFilePaths, viewMode);\n const folderIds = viewMode === \"nested\" ? collectExpandedFolderIds(fileTree) : [];\n const filteredFilePathKey = filteredFilePaths.join(\"\\0\");\n const filteredDiffPathKey = filteredDiffPaths.join(\"\\0\");\n const resolvedSelectedPath =\n selectedPath ?? defaultSelectedPath ?? resolveSelectedPath(filteredDiffPaths, filteredFilePaths);\n const hasChangedFiles = filePaths.length > 0;\n const hasDiffs = filteredDiffs.length > 0;\n const totalDiff = sumDiffStats(filteredDiffs);\n const hasExpandableItems = folderIds.length > 0 || filteredDiffs.length > 0;\n const allFilesExpanded = folderIds.every((folderId) => expandedFolderIds.has(folderId));\n const allFilesCollapsed = folderIds.every((folderId) => !expandedFolderIds.has(folderId));\n const allDiffsExpanded = filteredDiffs.length === 0 || diffExpansionState.allExpanded;\n const allDiffsCollapsed = filteredDiffs.length === 0 || diffExpansionState.allCollapsed;\n const isExpandAllDisabled = !hasExpandableItems || (allFilesExpanded && allDiffsExpanded);\n const isCollapseAllDisabled = !hasExpandableItems || (allFilesCollapsed && allDiffsCollapsed);\n\n useEffect(() => {\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n const tree = buildChangedFilesTree(filePaths, viewMode);\n setExpandedFolderIds(viewMode === \"nested\" ? collectExpandedFolderIds(tree) : []);\n }, [filteredFilePathKey, setExpandedFolderIds, viewMode]);\n\n useEffect(() => {\n const diffPaths = filteredDiffPathKey ? filteredDiffPathKey.split(\"\\0\") : [];\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n if (resolvedSelectedPath && diffPaths.includes(resolvedSelectedPath)) return;\n setSelectedPath(resolveSelectedPath(diffPaths, filePaths));\n }, [filteredDiffPathKey, filteredFilePathKey, resolvedSelectedPath, setSelectedPath]);\n\n const expandAllFilesAndDiffs = () => {\n expandAll(folderIds);\n setDiffExpansionCommand((current) => ({ action: \"expand\", id: (current?.id ?? 0) + 1 }));\n };\n\n const collapseAllFilesAndDiffs = () => {\n collapseAll();\n setDiffExpansionCommand((current) => ({ action: \"collapse\", id: (current?.id ?? 0) + 1 }));\n };\n\n const selectChangedFilePath = (path: string) => {\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", id: (current?.id ?? 0) + 1, path }));\n };\n\n const diffPanel = (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" flex=\"1\" bg=\"bg\" gap=\"0\">\n <Header variant=\"main\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\" justifyContent=\"space-between\">\n <HStack gap=\"xs\">\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Diff view options\" variant=\"ghost\" size=\"sm\">\n <Settings2 size={14} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"190px\" bg=\"bg\">\n {hasChangedFiles ? (\n <>\n <Menu.Item value=\"toggle-file-tree\" onClick={() => setTreePanelOpen(!isTreePanelOpen)}>\n <MenuItemContent\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n />\n </Menu.Item>\n <Menu.Separator />\n <Menu.Item value=\"nested\" onClick={() => setViewMode(\"nested\")}>\n <MenuItemContent checked={viewMode === \"nested\"} icon={<ListTree size={14} />} label=\"Nested\" />\n </Menu.Item>\n <Menu.Item value=\"flat\" onClick={() => setViewMode(\"flat\")}>\n <MenuItemContent checked={viewMode === \"flat\"} icon={<List size={14} />} label=\"Flat\" />\n </Menu.Item>\n <Menu.Separator />\n </>\n ) : null}\n <Menu.Item value=\"unified\" onClick={() => setDiffViewMode(\"unified\")}>\n <MenuItemContent checked={diffViewMode === \"unified\"} icon={<Rows2 size={14} />} label=\"Unified\" />\n </Menu.Item>\n <Menu.Item value=\"split\" onClick={() => setDiffViewMode(\"split\")}>\n <MenuItemContent\n checked={diffViewMode === \"split\"}\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n />\n </Menu.Item>\n <Menu.Separator />\n <Menu.Item value=\"expand-all\" disabled={isExpandAllDisabled} onClick={expandAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsUpDown size={14} />} label=\"Expand all\" />\n </Menu.Item>\n <Menu.Item value=\"collapse-all\" disabled={isCollapseAllDisabled} onClick={collapseAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsDownUp size={14} />} label=\"Collapse all\" />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </HStack>\n <DiffBubble variant=\"ghost\" additions={totalDiff.additions} deletions={totalDiff.deletions} />\n </Header>\n {loading ? (\n <DiffViewerLoading />\n ) : hasDiffs ? (\n <Box flex=\"1\" minH=\"0\">\n <DiffDrawer\n diffs={filteredDiffs}\n selectedDiffPath={resolvedSelectedPath}\n onLoadDiff={onLoadDiff}\n onSelectDiffPath={setSelectedPath}\n onExpansionStateChange={setDiffExpansionState}\n expansionCommand={diffExpansionCommand}\n diffViewMode={diffViewMode}\n />\n </Box>\n ) : (\n <Box flex=\"1\" minH=\"0\" px=\"md\" py=\"lg\" display=\"flex\" alignItems=\"center\" justifyContent=\"center\" bg=\"bg\">\n <EmptyState title=\"No diffs yet\" description=\"Changes will appear here once files are modified.\" />\n </Box>\n )}\n </Stack>\n );\n\n return (\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" bg=\"bg\" gap=\"0\" data-testid=\"diff-viewer\">\n {hasChangedFiles ? (\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <FileListPanel\n title=\"Changed files\"\n paths={filteredFilePaths}\n selectedPath={resolvedSelectedPath}\n viewMode={viewMode}\n searchQuery={searchQuery}\n expandedFolderIds={expandedFolderIds}\n onSelectPath={selectChangedFilePath}\n onSearchQueryChange={setSearchQuery}\n onToggleFolder={toggleFolder}\n resolveFileIcon={resolveFileIcon}\n changeByPath={changeByPath}\n />\n }\n contentPanel={diffPanel}\n collapsed={!isTreePanelOpen}\n defaultSizePx={288}\n minSizePx={224}\n contentMinSizePx={320}\n resizeLabel=\"Resize file list panel\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n ) : (\n diffPanel\n )}\n </Flex>\n );\n};\n","import { AbsoluteCenter, Button, Stack, Text } from \"@chakra-ui/react\";\nimport { Component, type ErrorInfo, type ReactNode } from \"react\";\n\nimport { AlertMessage } from \"./alert\";\nimport { ContentPlaceholder } from \"./content-placeholder\";\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode;\n label?: string;\n onReset?: () => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n console.error(\"Dashboard error boundary caught an error\", error, info);\n }\n\n handleReset = () => {\n this.setState({ error: null });\n this.props.onReset?.();\n };\n\n render() {\n const { children, fallback, label } = this.props;\n const { error } = this.state;\n\n if (error) {\n if (fallback) {\n return fallback;\n }\n\n return <ErrorFallback error={error} label={label} onReset={this.handleReset} />;\n }\n\n return children;\n }\n}\n\ninterface ErrorFallbackProps {\n error: Error;\n label?: string;\n onReset?: () => void;\n}\n\nexport const ErrorFallback = (props: ErrorFallbackProps) => {\n const { error, label, onReset } = props;\n\n return (\n <ContentPlaceholder height=\"100%\" width=\"100%\">\n <AbsoluteCenter>\n <AlertMessage\n status=\"error\"\n title={<Text textStyle=\"paragraph/M/medium\">{label ?? \"Something went wrong\"}</Text>}\n >\n <Stack gap=\"sm\">\n <Text textStyle=\"paragraph/S/regular\">\n {error.message || \"An unexpected error occurred while rendering this section.\"}\n </Text>\n {onReset ? (\n <Button size=\"sm\" variant=\"solid\" colorScheme={\"black\"} onClick={onReset}>\n Try again\n </Button>\n ) : null}\n </Stack>\n </AlertMessage>\n </AbsoluteCenter>\n </ContentPlaceholder>\n );\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\n\ninterface HorizontalMenuStackProps extends StackProps {\n children?: StackProps[\"children\"];\n}\n\nexport function HorizontalMenuStack(props: HorizontalMenuStackProps) {\n const { children, h = \"41px\", px = \"xs\", py = \"xs\", borderBottomWidth = \"1px\", ...rest } = props;\n\n return (\n <HStack\n {...rest}\n h={h}\n justify=\"space-between\"\n align=\"center\"\n borderBottomWidth={borderBottomWidth}\n borderColor={\"border.muted\"}\n px={px}\n py={py}\n >\n {children}\n </HStack>\n );\n}\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\n\nexport type SimpleCardProps = BoxProps;\n\nexport const SimpleCard = (props: SimpleCardProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"0\" bg=\"bg\" {...rest}>\n {children}\n </Box>\n );\n};\n\nexport type SimpleCardBodyProps = BoxProps;\n\nexport const SimpleCardBody = (props: SimpleCardBodyProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box p=\"md\" {...rest}>\n {children}\n </Box>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { SimpleCard, SimpleCardBody } from \"./simple-card\";\n\nexport interface IntegrationCardProps {\n icon: ReactNode;\n name: string;\n description: string;\n id: string;\n version?: string;\n category?: string;\n active?: boolean;\n actionLabel?: string;\n}\n\nexport const IntegrationCard = (props: IntegrationCardProps) => {\n const { icon, name, description, id, version, category, active = false, actionLabel } = props;\n\n return (\n <SimpleCard>\n <SimpleCardBody>\n <HStack gap=\"4\" alignItems=\"flex-start\">\n <Icon boxSize=\"1em\" fontSize=\"2xl\" flexShrink=\"0\" color=\"fg.muted\">\n {icon}\n </Icon>\n <Box flex=\"1\" minW=\"0\">\n <Stack gap=\"1\">\n <HStack gap=\"2\" flexWrap=\"wrap\">\n <Text textStyle=\"sm\" fontWeight=\"semibold\">\n {name}\n </Text>\n <Badge size=\"sm\" variant=\"outline\">\n {id}\n </Badge>\n {version && (\n <Badge size=\"sm\" variant=\"outline\">\n v{version}\n </Badge>\n )}\n {category && (\n <Badge size=\"sm\" variant=\"outline\">\n {category}\n </Badge>\n )}\n </HStack>\n <Text color=\"fg.muted\">{description}</Text>\n </Stack>\n </Box>\n <Button\n type=\"button\"\n disabled={active}\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"gray\"\n bg=\"bg\"\n flexShrink=\"0\"\n >\n {active && (\n <Icon color=\"fg.success\">\n <Check />\n </Icon>\n )}\n {actionLabel ?? (active ? \"Active\" : \"Connect\")}\n </Button>\n </HStack>\n </SimpleCardBody>\n </SimpleCard>\n );\n};\n","import { Box, Collapsible, Flex, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ItemSectionProps {\n children: ReactNode;\n title?: string;\n defaultOpen?: boolean;\n action?: ReactNode;\n}\n\n/**\n * A collapsible section wrapper with a title trigger and optional action.\n */\nexport const ItemSection = (props: ItemSectionProps) => {\n const { children, title, defaultOpen = true, action } = props;\n\n return (\n <Collapsible.Root defaultOpen={defaultOpen} width=\"full\">\n <Flex>\n <Collapsible.Trigger\n _hover={{\n background: \"bg.hover\",\n }}\n padding=\"sm\"\n height=\"2rem\"\n display=\"flex\"\n width=\"full\"\n gap=\"2\"\n alignItems=\"center\"\n cursor=\"pointer\"\n justifyContent=\"space-between\"\n >\n {title && (\n <Text fontWeight=\"600\" textStyle=\"label/S/medium\">\n {title}\n </Text>\n )}\n <Collapsible.Indicator transition=\"transform 0.2s\" _open={{ transform: \"rotate(90deg)\" }}>\n <ChevronRight size={16} />\n </Collapsible.Indicator>\n </Collapsible.Trigger>\n {action && (\n <Box marginLeft=\"auto\" onClick={(e) => e.stopPropagation()}>\n {action}\n </Box>\n )}\n </Flex>\n <Collapsible.Content>{children}</Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","export const PANEL_HEADER_HEIGHT = \"2.5rem\";\n","import { createContext, type Dispatch, type SetStateAction, useContext, useEffect } from \"react\";\n\nexport interface PanelSidebarRegistration {\n open: boolean;\n resizable: boolean;\n width: number;\n minWidth: number;\n maxWidth: number;\n onWidthChange: (width: number) => void;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const PanelSidebarRegistrationContext = createContext<Dispatch<\n SetStateAction<PanelSidebarRegistration | null>\n> | null>(null);\n\nexport const usePanelSidebarRegistration = (registration: PanelSidebarRegistration) => {\n const setRegistration = useContext(PanelSidebarRegistrationContext);\n const { maxWidth, minWidth, onOpenChange, onWidthChange, open, resizable, width } = registration;\n\n useEffect(() => {\n if (!setRegistration) return;\n\n setRegistration({ maxWidth, minWidth, onOpenChange, onWidthChange, open, resizable, width });\n\n return () => {\n setRegistration(null);\n };\n }, [maxWidth, minWidth, onOpenChange, onWidthChange, open, resizable, setRegistration, width]);\n\n return setRegistration !== null;\n};\n","import { Toaster as ChakraToaster, createToaster, Portal, Spinner, Stack, Toast } from \"@chakra-ui/react\";\n\nexport const toaster: ReturnType<typeof createToaster> = createToaster({\n placement: \"top\",\n pauseOnPageIdle: true,\n duration: 10000,\n});\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }} alignItems=\"start\">\n {toast.type === \"loading\" ? <Spinner size=\"sm\" color=\"blue.solid\" /> : <Toast.Indicator />}\n <Stack gap=\"1\" flex=\"1\" minWidth=\"0\" maxWidth=\"100%\">\n {toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n {toast.description && (\n <Toast.Description\n maxHeight=\"12rem\"\n overflowY=\"auto\"\n paddingEnd=\"1\"\n whiteSpace=\"pre-wrap\"\n wordBreak=\"break-word\"\n >\n {toast.description}\n </Toast.Description>\n )}\n </Stack>\n {toast.action && <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>}\n <Toast.CloseTrigger />\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n );\n};\n","import { Flex, Stack } from \"@chakra-ui/react\";\nimport { Outlet, useRouterState } from \"@tanstack/react-router\";\nimport { useState } from \"react\";\nimport { ErrorBoundary } from \"@/components/error-boundary\";\nimport { HorizontalMenuStack } from \"@/components/horizontal-menu-stack\";\nimport { PANEL_HEADER_HEIGHT } from \"@/components/panel-header.constants\";\nimport {\n type PanelSidebarRegistration,\n PanelSidebarRegistrationContext,\n} from \"@/components/panel-sidebar-registration-context\";\nimport { ResizableSplitLayout } from \"@/components/resizable-split-layout\";\nimport { ScrollArea } from \"@/components/scroll-area\";\nimport { Toaster } from \"@/components/toaster\";\n\nexport const Layout = () => {\n const { location } = useRouterState();\n return (\n <>\n <Stack flex=\"1\" minH=\"100vh\" gap=\"0\" overflow=\"hidden\">\n <Flex flex=\"1\" height=\"100%\" alignItems=\"stretch\" overflow=\"hidden\">\n <ScrollArea flex=\"1\" bg=\"bg\" contentProps={{ minH: \"100%\" }}>\n <ErrorBoundary key={location.pathname} label=\"Unable to render this page.\">\n <Outlet />\n </ErrorBoundary>\n </ScrollArea>\n </Flex>\n </Stack>\n <Toaster />\n </>\n );\n};\n\ninterface PanelLayoutProps {\n sidebar?: React.ReactNode;\n errorLabel?: string;\n children?: React.ReactNode;\n}\n\nconst noop = () => undefined;\n\nconst DEFAULT_SIDEBAR_REGISTRATION = {\n open: true,\n resizable: true,\n width: 240,\n minWidth: 200,\n maxWidth: 480,\n onWidthChange: noop,\n onOpenChange: noop,\n} satisfies PanelSidebarRegistration;\n\nexport const PanelLayout = (props: PanelLayoutProps) => {\n const { sidebar, errorLabel, children } = props;\n const [sidebarRegistration, setSidebarRegistration] = useState<PanelSidebarRegistration | null>(null);\n const registration = sidebarRegistration ?? DEFAULT_SIDEBAR_REGISTRATION;\n const sidebarPanel = (\n <PanelSidebarRegistrationContext.Provider value={setSidebarRegistration}>\n <Flex minH=\"0\" h=\"100%\" w=\"100%\">\n {sidebar}\n </Flex>\n </PanelSidebarRegistrationContext.Provider>\n );\n const contentPanel = (\n <ErrorBoundary label={errorLabel ?? \"Unable to render the panel.\"}>\n <Flex flex=\"1\" overflow=\"hidden\" minH=\"0\" minW=\"0\">\n {children ?? <Outlet />}\n </Flex>\n </ErrorBoundary>\n );\n\n if (!sidebar) {\n return (\n <Flex height=\"100%\" width=\"100%\" minH=\"0\" minW=\"0\">\n {contentPanel}\n </Flex>\n );\n }\n\n return (\n <Flex height=\"100%\" width=\"100%\" minH=\"0\" minW=\"0\">\n {registration.resizable ? (\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={sidebarPanel}\n contentPanel={contentPanel}\n defaultSizePx={registration.width}\n minSizePx={registration.minWidth}\n maxSizePx={registration.maxWidth}\n contentMinSizePx={320}\n collapsed={!registration.open}\n resizeLabel=\"Resize sidebar\"\n showResizeSeparator={false}\n onSizeChange={registration.onWidthChange}\n onCollapsedChange={(collapsed) => registration.onOpenChange(!collapsed)}\n />\n ) : (\n <>\n {registration.open ? (\n <Flex minH=\"0\" flexShrink={0}>\n {sidebarPanel}\n </Flex>\n ) : null}\n {contentPanel}\n </>\n )}\n </Flex>\n );\n};\n\ninterface PanelSectionLayoutProps {\n actions: React.ReactNode;\n content: React.ReactNode;\n}\n\nexport const PanelSectionLayout = (props: PanelSectionLayoutProps) => {\n const { actions, content } = props;\n return (\n <Stack height=\"100%\" width=\"100%\" gap=\"0\" minH=\"0\">\n <HorizontalMenuStack\n data-testid=\"panel-section-actions\"\n align=\"flex-start\"\n minH={PANEL_HEADER_HEIGHT}\n flexWrap=\"wrap\"\n gap=\"sm\"\n py=\"2xs\"\n >\n {actions}\n </HorizontalMenuStack>\n <ScrollArea flex=\"1\" bg=\"bg\" contentProps={{ minH: \"100%\" }}>\n <ErrorBoundary label=\"Unable to render the panel.\">\n <Flex flex=\"1\" overflow=\"hidden\" minH=\"0\">\n {content}\n </Flex>\n </ErrorBoundary>\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, HStack, Link, Separator, Stack, Text } from \"@chakra-ui/react\";\n\nexport interface OpenSourceNotice {\n name: string;\n version?: string;\n license?: string;\n copyright?: string;\n homepageUrl?: string;\n sourceUrl?: string;\n attribution?: string;\n}\n\nexport interface OpenSourceNoticesScreenProps {\n notices: OpenSourceNotice[];\n title?: string;\n description?: string;\n productName?: string;\n productVersion?: string;\n generatedAt?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n}\n\nconst getNoticeKey = (notice: OpenSourceNotice, index: number) => {\n return `${notice.name}-${notice.version ?? \"unknown\"}-${index}`;\n};\n\nconst getNoticeTitle = (notice: OpenSourceNotice) => {\n if (!notice.version) return notice.name;\n\n return `${notice.name} v${notice.version}`;\n};\n\nexport const OpenSourceNoticesScreen = (props: OpenSourceNoticesScreenProps) => {\n const {\n notices,\n title = \"Open Source and Third-Party Notices\",\n description = \"This product includes software developed by the open source community.\",\n productName,\n productVersion,\n generatedAt,\n emptyTitle = \"No third-party notices available\",\n emptyDescription = \"No third-party packages were included in this build.\",\n } = props;\n\n return (\n <Stack width=\"full\" minHeight=\"100%\" background=\"bg\" color=\"fg\" padding={{ base: \"md\", md: \"xl\" }} gap=\"lg\">\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/L\">{title}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n\n <HStack gap=\"md\" flexWrap=\"wrap\">\n {productName ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Product: {productName}\n </Text>\n ) : null}\n\n {productVersion ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Version: {productVersion}\n </Text>\n ) : null}\n\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Packages: {notices.length}\n </Text>\n\n {generatedAt ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Generated: {generatedAt}\n </Text>\n ) : null}\n </HStack>\n </Stack>\n\n <Separator borderColor=\"border.muted\" />\n\n {notices.length === 0 ? (\n <Stack borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"md\" padding=\"lg\" gap=\"xs\">\n <Text textStyle=\"label/L/medium\">{emptyTitle}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {emptyDescription}\n </Text>\n </Stack>\n ) : (\n <Stack gap=\"md\">\n {notices.map((notice, index) => (\n <Box\n key={getNoticeKey(notice, index)}\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"md\"\n padding=\"md\"\n >\n <Stack gap=\"sm\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/L/medium\">{getNoticeTitle(notice)}</Text>\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n License: {notice.license ?? \"Unknown\"}\n </Text>\n </Stack>\n\n {notice.copyright ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n {notice.copyright}\n </Text>\n ) : null}\n\n {(notice.homepageUrl || notice.sourceUrl) && (\n <Stack gap=\"2xs\">\n {notice.homepageUrl ? (\n <Link\n href={notice.homepageUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Homepage\n </Link>\n ) : null}\n\n {notice.sourceUrl ? (\n <Link\n href={notice.sourceUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Source code\n </Link>\n ) : null}\n </Stack>\n )}\n\n {notice.attribution ? (\n <Box background=\"bg.muted\" borderRadius=\"sm\" padding=\"sm\">\n <Text textStyle=\"label/S/regular\" whiteSpace=\"pre-wrap\">\n {notice.attribution}\n </Text>\n </Box>\n ) : null}\n </Stack>\n </Box>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n","import type { ReactNode } from \"react\";\n\nexport const DEFAULT_PALETTE_ASSET_LIMIT = 48;\n\nexport interface PaletteSearchEntry {\n id: string;\n mode?: string;\n label: ReactNode;\n searchText?: string;\n secondaryLabel?: ReactNode;\n assetType?: string;\n}\n\nexport interface PaletteMode {\n id: string;\n inputPrefix?: string;\n}\n\nexport interface FilterPaletteEntriesOptions {\n query: string;\n mode?: string;\n getEffectiveQuery?: (query: string) => string;\n defaultAssetLimit?: number;\n}\n\nconst getSearchableText = (entry: PaletteSearchEntry) => {\n const label = typeof entry.label === \"string\" ? entry.label : \"\";\n const secondaryLabel = typeof entry.secondaryLabel === \"string\" ? entry.secondaryLabel : \"\";\n\n return `${label} ${entry.searchText ?? \"\"} ${secondaryLabel}`;\n};\n\nconst hasInputPrefix = (query: string, inputPrefix: string) => query.trimStart().startsWith(inputPrefix);\n\nexport const resolvePaletteMode = (query: string, modes: readonly PaletteMode[] = [], fallbackMode?: string) => {\n const prefixedMode = modes.find((mode) => mode.inputPrefix && hasInputPrefix(query, mode.inputPrefix));\n\n return prefixedMode?.id ?? fallbackMode ?? modes.find((mode) => !mode.inputPrefix)?.id ?? modes[0]?.id;\n};\n\nexport const getPaletteEffectiveQuery = (query: string, modes: readonly PaletteMode[] = [], modeId?: string) => {\n const mode = modes.find(\n (candidate) => candidate.id === modeId && candidate.inputPrefix && hasInputPrefix(query, candidate.inputPrefix),\n );\n\n if (!mode?.inputPrefix) return query.trim();\n\n return query.trimStart().slice(mode.inputPrefix.length).trim();\n};\n\nconst limitDefaultAssetEntries = <T extends PaletteSearchEntry>(entries: T[], limit: number) => {\n const counts: Record<string, number> = {};\n\n return entries.filter((entry) => {\n const assetType = entry.assetType;\n if (!assetType) return true;\n\n const count = counts[assetType] ?? 0;\n if (count >= limit) return false;\n\n counts[assetType] = count + 1;\n return true;\n });\n};\n\nexport const filterPaletteEntries = <T extends PaletteSearchEntry>(\n entries: T[],\n options: FilterPaletteEntriesOptions,\n) => {\n const effectiveQuery = (options.getEffectiveQuery?.(options.query) ?? options.query.trim()).toLowerCase();\n\n const filteredEntries = entries.filter((entry) => {\n if (options.mode && entry.mode !== options.mode) return false;\n if (!effectiveQuery) return true;\n\n return getSearchableText(entry).toLowerCase().includes(effectiveQuery);\n });\n\n if (effectiveQuery || options.defaultAssetLimit === undefined) {\n return filteredEntries;\n }\n\n return limitDefaultAssetEntries(filteredEntries, options.defaultAssetLimit);\n};\n","import { Box, HStack, Icon, Menu, Text } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { Check } from \"lucide-react\";\nimport { type RefObject, useEffect } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport type { PaletteEntry } from \"./palette\";\n\ntype PaletteRow<T extends PaletteEntry> =\n | { type: \"group\"; id: string; label: string }\n | { type: \"entry\"; id: string; entry: T; entryIndex: number };\n\nconst GROUP_ROW_HEIGHT = 24;\nconst ENTRY_ROW_HEIGHT = 40;\nconst INITIAL_VIEWPORT_HEIGHT = 384;\n\nconst buildEntryItem = (entry: PaletteEntry): ListRowItem => ({\n id: entry.id,\n label: entry.label,\n description: entry.description ?? entry.secondaryLabel,\n icon: entry.icon,\n endContent:\n entry.endContent ??\n (entry.shortcut || entry.isSelected ? (\n <HStack gap=\"2\">\n {entry.shortcut}\n {entry.isSelected ? <Icon as={Check} boxSize=\"14px\" color=\"fg.muted\" /> : null}\n </HStack>\n ) : undefined),\n onActivate: entry.onActivate,\n});\n\nconst buildRows = <T extends PaletteEntry>(entries: T[]) => {\n const rows: PaletteRow<T>[] = [];\n\n entries.forEach((entry, index) => {\n const previousEntry = entries[index - 1];\n if (entry.group && entry.group !== previousEntry?.group) {\n rows.push({ type: \"group\", id: `group:${entry.group}:${entry.id}`, label: entry.group });\n }\n\n rows.push({ type: \"entry\", id: entry.id, entry, entryIndex: index });\n });\n\n return rows;\n};\n\nconst getActiveRowIndex = <T extends PaletteEntry>(rows: PaletteRow<T>[], activeIndex: number) =>\n rows.findIndex((row) => row.type === \"entry\" && row.entryIndex === activeIndex);\n\ninterface PaletteListProps<T extends PaletteEntry> {\n entries: T[];\n activeIndex: number;\n emptyLabel: string;\n onHover: (index: number) => void;\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nexport const PaletteList = <T extends PaletteEntry>(props: PaletteListProps<T>) => {\n const { entries, activeIndex, emptyLabel, onHover, scrollRef } = props;\n const rows = buildRows(entries);\n const activeRowIndex = getActiveRowIndex(rows, activeIndex);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => (rows[index]?.type === \"group\" ? GROUP_ROW_HEIGHT : ENTRY_ROW_HEIGHT),\n getItemKey: (index) => rows[index]?.id ?? index,\n initialRect: { width: 0, height: INITIAL_VIEWPORT_HEIGHT },\n overscan: 6,\n });\n\n useEffect(() => {\n if (activeRowIndex < 0) return;\n\n virtualizer.scrollToIndex(activeRowIndex, { align: \"auto\", behavior: \"auto\" });\n }, [activeRowIndex, virtualizer]);\n\n if (entries.length === 0) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" px=\"sm\" py=\"md\">\n {emptyLabel}\n </Text>\n );\n }\n\n return (\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualRow.key}\n data-index={virtualRow.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n style={{ top: virtualRow.start }}\n >\n {row.type === \"group\" ? (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\" px=\"sm\" pt=\"xs\" pb=\"2xs\">\n {row.label}\n </Text>\n ) : (\n <Menu.Item value={row.entry.id} asChild onPointerMove={() => onHover(row.entryIndex)}>\n <ListRow\n asChild\n variant=\"compact\"\n {...buildEntryItem(row.entry)}\n isSelected={row.entryIndex === activeIndex}\n />\n </Menu.Item>\n )}\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { CloseButton, Dialog, Input, InputGroup, Menu } from \"@chakra-ui/react\";\nimport type { KeyboardEvent, ReactNode, SetStateAction } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n DEFAULT_PALETTE_ASSET_LIMIT,\n type FilterPaletteEntriesOptions,\n filterPaletteEntries,\n getPaletteEffectiveQuery,\n type PaletteMode,\n type PaletteSearchEntry,\n resolvePaletteMode,\n} from \"./palette-filter\";\nimport { PaletteList } from \"./palette-list\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport type { FilterPaletteEntriesOptions, PaletteMode, PaletteSearchEntry };\nexport { DEFAULT_PALETTE_ASSET_LIMIT, filterPaletteEntries };\n\nexport interface PaletteEntry extends PaletteSearchEntry {\n description?: ReactNode;\n icon?: ReactNode;\n shortcut?: ReactNode;\n endContent?: ReactNode;\n group?: string;\n isSelected?: boolean;\n onActivate: () => void;\n}\n\nexport interface PaletteState<T extends PaletteEntry> {\n query: string;\n mode?: string;\n activeIndex: number;\n entries: T[];\n}\n\nexport interface PaletteEscapeContext<T extends PaletteEntry> extends PaletteState<T> {\n activeEntry: T | null;\n entryCount: number;\n setQuery: (query: string) => void;\n setActiveIndex: (index: SetStateAction<number>) => void;\n runActiveEntry: () => void;\n closePalette: () => void;\n}\n\nexport type PaletteStateValue<T extends PaletteEntry, TValue> = TValue | ((state: PaletteState<T>) => TValue);\n\nexport interface PaletteProps<T extends PaletteEntry = PaletteEntry> {\n open: boolean;\n entries: T[];\n initialQuery?: string;\n initialActiveIndex?: number;\n mode?: string;\n modes?: PaletteMode[];\n resetKey?: string;\n inputIcon?: PaletteStateValue<T, ReactNode>;\n placeholder?: PaletteStateValue<T, string>;\n emptyLabel?: string;\n footerStart?: ReactNode;\n footerEnd?: ReactNode;\n filterEntries?: (entries: T[], query: string, mode?: string) => T[];\n onActiveEntryChange?: (entry: T | null, index: number) => void;\n onClose: () => void;\n onEscape?: (ctx: PaletteEscapeContext<T>) => boolean | undefined;\n}\n\nconst resolveStateValue = <T extends PaletteEntry, TValue>(\n value: PaletteStateValue<T, TValue> | undefined,\n state: PaletteState<T>,\n fallback: TValue,\n) => {\n if (typeof value === \"function\") {\n return (value as (state: PaletteState<T>) => TValue)(state);\n }\n\n return value ?? fallback;\n};\n\nexport const Palette = <T extends PaletteEntry>(props: PaletteProps<T>) => {\n const {\n open,\n entries,\n initialQuery = \"\",\n initialActiveIndex = 0,\n mode,\n modes,\n resetKey = \"default\",\n inputIcon,\n placeholder,\n emptyLabel = \"No results.\",\n footerStart,\n footerEnd,\n filterEntries,\n onActiveEntryChange,\n onClose,\n onEscape,\n } = props;\n const [query, setQueryState] = useState(initialQuery);\n const [activeIndex, setActiveIndex] = useState(initialActiveIndex);\n const inputRef = useRef<HTMLInputElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef({ open: false, resetKey });\n const activeMode = mode ?? resolvePaletteMode(query, modes);\n const filteredEntries = filterEntries\n ? filterEntries(entries, query, activeMode)\n : filterPaletteEntries(entries, {\n query,\n mode: activeMode,\n getEffectiveQuery: (value) => getPaletteEffectiveQuery(value, modes, activeMode),\n });\n const activeEntry = filteredEntries[activeIndex] ?? null;\n const state: PaletteState<T> = { query, mode: activeMode, activeIndex, entries: filteredEntries };\n const resolvedInputIcon = resolveStateValue(inputIcon, state, null);\n const resolvedPlaceholder = resolveStateValue(placeholder, state, \"Search\");\n\n const setQuery = (nextQuery: string) => {\n setQueryState(nextQuery);\n };\n\n const runActiveEntry = () => {\n activeEntry?.onActivate();\n };\n\n const closePalette = () => {\n onClose();\n };\n\n useEffect(() => {\n const previousSetup = setupRef.current;\n setupRef.current = { open, resetKey };\n if (!open) return;\n\n const shouldInitialize = !previousSetup.open || previousSetup.resetKey !== resetKey;\n if (!shouldInitialize) return;\n\n setQueryState(initialQuery);\n setActiveIndex(initialActiveIndex);\n\n const timeout = setTimeout(() => {\n const input = inputRef.current;\n if (!input) return;\n input.focus();\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n return () => clearTimeout(timeout);\n }, [initialActiveIndex, initialQuery, open, resetKey]);\n\n useEffect(() => {\n setActiveIndex((current) => Math.min(current, Math.max(filteredEntries.length - 1, 0)));\n }, [filteredEntries.length]);\n\n useEffect(() => {\n onActiveEntryChange?.(activeEntry, activeIndex);\n }, [activeEntry, activeIndex, onActiveEntryChange]);\n\n const handleEscape = () => {\n const handled = onEscape?.({\n ...state,\n activeEntry,\n entryCount: filteredEntries.length,\n setQuery,\n setActiveIndex,\n runActiveEntry,\n closePalette,\n });\n if (handled) return;\n\n if (query.length > 0) {\n setQuery(\"\");\n setActiveIndex(0);\n return;\n }\n\n closePalette();\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setActiveIndex((current) => Math.min(current + 1, Math.max(filteredEntries.length - 1, 0)));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(current - 1, 0));\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n runActiveEntry();\n return;\n }\n\n if (event.key !== \"Escape\") return;\n\n event.preventDefault();\n event.stopPropagation();\n handleEscape();\n };\n\n const hasFooter = footerStart || footerEnd;\n\n return (\n <Dialog.Root open={open} onOpenChange={(details) => !details.open && closePalette()}>\n <Dialog.Backdrop />\n <Dialog.Positioner alignItems=\"flex-start\" pt=\"10vh\">\n <Dialog.Content maxW=\"44rem\" p=\"0\" overflow=\"hidden\">\n <Dialog.Header px=\"0\" py=\"0\" borderBottomWidth=\"1px\" borderBottomColor=\"border.muted\">\n <InputGroup startElement={resolvedInputIcon}>\n <Input\n ref={inputRef}\n value={query}\n placeholder={resolvedPlaceholder}\n aria-label={resolvedPlaceholder}\n autoComplete=\"off\"\n borderWidth=\"0\"\n borderRadius=\"0\"\n h=\"3rem\"\n _focus={{ boxShadow: \"none\" }}\n _focusVisible={{ boxShadow: \"none\" }}\n onChange={(event) => {\n setQuery(event.target.value);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n />\n </InputGroup>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" mr=\"2\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body p=\"0\">\n <ScrollArea\n maxH=\"24rem\"\n showHorizontalScrollbar={false}\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n >\n <Menu.Root open closeOnSelect={false}>\n <Menu.Content\n borderRadius={0}\n position=\"static\"\n minW=\"full\"\n bg=\"transparent\"\n boxShadow=\"none\"\n borderWidth=\"0\"\n >\n <PaletteList\n entries={filteredEntries}\n activeIndex={activeIndex}\n emptyLabel={emptyLabel}\n onHover={setActiveIndex}\n scrollRef={scrollRef}\n />\n </Menu.Content>\n </Menu.Root>\n </ScrollArea>\n </Dialog.Body>\n {hasFooter ? (\n <Dialog.Footer\n justifyContent=\"space-between\"\n px=\"sm\"\n py=\"xs\"\n borderTopWidth=\"1px\"\n borderTopColor=\"border.muted\"\n >\n {footerStart}\n {footerEnd}\n </Dialog.Footer>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { Kbd } from \"@chakra-ui/react\";\nimport { Fragment } from \"react\";\n\nexport type PaletteShortcutBinding = string | string[];\n\nconst splitShortcutStep = (step: string) => {\n return step\n .split(\"+\")\n .map((part) => part.trim())\n .filter(Boolean);\n};\n\nconst getShortcutDisplayParts = (binding: PaletteShortcutBinding) => {\n const steps = Array.isArray(binding) ? binding.map(splitShortcutStep) : [splitShortcutStep(binding)];\n\n return steps.map((step) => step.map((label) => ({ label })));\n};\n\nexport const PaletteShortcut = (props: { binding: PaletteShortcutBinding }) => {\n const { binding } = props;\n const steps = getShortcutDisplayParts(binding);\n\n return (\n <>\n {steps.map((step, stepIndex) => (\n <Fragment key={`${step.map((part) => part.label).join(\"+\")}-${stepIndex}`}>\n {step.map((part, partIndex) => (\n <Fragment key={`${part.label}-${partIndex}`}>\n <Kbd fontSize=\"xs\" borderRadius=\"0\" display=\"inline-flex\" alignItems=\"center\" aria-label={part.label}>\n {part.label}\n </Kbd>\n {partIndex < step.length - 1 ? \" + \" : null}\n </Fragment>\n ))}\n {stepIndex < steps.length - 1 ? \" then \" : null}\n </Fragment>\n ))}\n </>\n );\n};\n","import { HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { CircleHelp } from \"lucide-react\";\nimport { Tooltip } from \"./tooltip\";\n\ninterface ParamEditorLabelProps {\n name: string;\n description?: string;\n}\n\nexport const ParamEditorLabel = (props: ParamEditorLabelProps) => {\n const { name, description } = props;\n\n return (\n <HStack gap=\"1\" alignItems=\"center\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\" truncate>\n {name}\n </Text>\n {description ? (\n <Tooltip content={description} showArrow>\n <Icon as={CircleHelp} boxSize=\"12px\" color=\"fg.muted\" opacity={0.6} cursor=\"help\" flexShrink={0} />\n </Tooltip>\n ) : null}\n </HStack>\n );\n};\n","import { Box, ColorPicker, type ColorPickerValueChangeDetails, Flex, parseColor } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\n\ninterface ColorInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const ColorInput = (props: ColorInputProps) => {\n const { id, defaultValue, name, onChange, description, readOnly, hideLabel = false, fullWidth = false } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextColor: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextColor), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newColor: string) => {\n setValue(newColor);\n scheduleChange(newColor);\n };\n\n const rootProps = {\n value: parseColor(value),\n onValueChange: (details: ColorPickerValueChangeDetails) => handleChange(details.value.toString(\"hex\")),\n disabled: readOnly,\n };\n\n const picker = (\n <ColorPicker.Root {...rootProps} size=\"sm\" maxW={fullWidth ? \"100%\" : \"8.75rem\"}>\n <ColorPicker.HiddenInput />\n <ColorPicker.Label srOnly>{name}</ColorPicker.Label>\n <ColorPicker.Control>\n <ColorPicker.Input readOnly={readOnly} />\n <ColorPicker.Trigger />\n </ColorPicker.Control>\n <ColorPicker.Positioner>\n <ColorPicker.Content>\n <ColorPicker.Area />\n <ColorPicker.Sliders />\n <ColorPicker.SwatchGroup>\n <ColorPicker.SwatchTrigger value={value}>\n <ColorPicker.Swatch value={value} />\n </ColorPicker.SwatchTrigger>\n </ColorPicker.SwatchGroup>\n </ColorPicker.Content>\n </ColorPicker.Positioner>\n </ColorPicker.Root>\n );\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {picker}\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {picker}\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\n\ninterface DateInputProps {\n id: string;\n defaultValue: string;\n name: string;\n min?: string;\n max?: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const DateInput = (props: DateInputProps) => {\n const {\n id,\n defaultValue,\n name,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"8.75rem\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n )}\n </Box>\n );\n};\n","import { NumberInput as ChakraNumberInput } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface NumberInputProps extends ChakraNumberInput.RootProps {}\n\nexport const NumberInputRoot = React.forwardRef<HTMLDivElement, NumberInputProps>(function NumberInput(props, ref) {\n const { children, ...rest } = props;\n return (\n <ChakraNumberInput.Root ref={ref} variant=\"outline\" {...rest}>\n {children}\n <ChakraNumberInput.Control>\n <ChakraNumberInput.IncrementTrigger />\n <ChakraNumberInput.DecrementTrigger />\n </ChakraNumberInput.Control>\n </ChakraNumberInput.Root>\n );\n});\n\nexport const NumberInputField = ChakraNumberInput.Input;\nexport const NumberInputScrubber = ChakraNumberInput.Scrubber;\nexport const NumberInputLabel = ChakraNumberInput.Label;\n","import { Slider as ChakraSlider } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SliderProps extends ChakraSlider.RootProps {}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(function Slider(props, ref) {\n const { children, ...rest } = props;\n\n return (\n <ChakraSlider.Root ref={ref} variant=\"solid\" {...rest}>\n <ChakraSlider.Control>\n <ChakraSlider.Track borderRadius=\"0\">\n <ChakraSlider.Range />\n </ChakraSlider.Track>\n <ChakraSlider.Thumbs />\n </ChakraSlider.Control>\n {children}\n </ChakraSlider.Root>\n );\n});\n","import { Box, Flex, type NumberInputValueChangeDetails, type SliderValueChangeDetails } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { NumberInputField, NumberInputRoot } from \"./number-input\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { Slider } from \"./slider\";\n\ninterface NumberInputProps {\n id: string;\n defaultValue: number;\n name: string;\n step?: number;\n min?: number;\n max?: number;\n onChange: (id: string, value: number) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n hideSlider?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const NumberInput = (props: NumberInputProps) => {\n const {\n id,\n defaultValue,\n name,\n step = 1,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n hideSlider = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const isRange = min !== undefined && max !== undefined;\n const showSlider = isRange && !hideSlider;\n const useFullWidthLayout = fullWidth && !showSlider;\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const scheduleChange = (nextValue: number) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n return (\n <Box>\n {useFullWidthLayout ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <NumberInputRoot\n disabled={readOnly}\n width=\"100%\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <NumberInputRoot\n disabled={readOnly}\n width=\"5rem\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Flex>\n )}\n {showSlider && (\n <Slider\n size=\"sm\"\n disabled={readOnly}\n value={[value]}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: SliderValueChangeDetails) => {\n setValue(details.value[0]);\n }}\n onValueChangeEnd={(details: SliderValueChangeDetails) => {\n onChange(id, details.value[0]);\n }}\n />\n )}\n </Box>\n );\n};\n","import { Box, Button, Flex, Icon, Menu } from \"@chakra-ui/react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\n\ninterface Option {\n id: string;\n name: string;\n icon?: string;\n}\n\ninterface SelectionInputProps {\n id: string;\n defaultValue: string | string[];\n name: string;\n options: Option[];\n onChange: (id: string, value: string | string[]) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n multiSelect?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n placeholder?: string;\n fullWidth?: boolean;\n}\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const {\n id,\n defaultValue,\n name,\n options,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n multiSelect = false,\n placeholder,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string | string[]) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const isSelected = (optionId: string) => {\n if (multiSelect) {\n return Array.isArray(value) && value.includes(optionId);\n }\n return value === optionId;\n };\n\n const getDisplayText = () => {\n if (multiSelect) {\n const selectedValues = Array.isArray(value) ? value : [];\n if (selectedValues.length === 0) {\n return placeholder || `Select`;\n }\n\n const selectedOptions = selectedValues\n .map((id) => options.find((o) => o.id === id))\n .filter(Boolean)\n .map((opt) => opt!.name);\n\n if (selectedOptions.length <= 3) {\n return selectedOptions.join(\", \");\n }\n const displayItems = selectedOptions.slice(0, 3).join(\", \");\n const remaining = selectedOptions.length - 3;\n return `${displayItems} +${remaining}`;\n }\n const selectedOption = options.find((o) => o.id === value);\n return selectedOption?.name || \"Select\";\n };\n\n const handleSelect = (newValue: string) => {\n if (multiSelect) {\n const currentValues = Array.isArray(value) ? value : [];\n let updatedValues: string[];\n\n if (currentValues.includes(newValue)) {\n updatedValues = currentValues.filter((v) => v !== newValue);\n } else {\n updatedValues = [...currentValues, newValue];\n }\n\n setValue(updatedValues);\n scheduleChange(updatedValues);\n } else {\n setValue(newValue);\n scheduleChange(newValue);\n }\n };\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button\n size=\"sm\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"border\"\n disabled={readOnly}\n width=\"100%\"\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\" w=\"full\">\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n </Flex>\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button size=\"sm\" borderWidth=\"1px\" borderStyle=\"solid\" borderColor=\"border\" disabled={readOnly}>\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input, Textarea } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\n\ninterface TextInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n singleLine?: boolean;\n hideLabel?: boolean;\n fullWidth?: boolean;\n}\n\nexport const TextInput = (props: TextInputProps) => {\n const {\n id,\n defaultValue,\n name,\n onChange,\n description,\n readOnly,\n singleLine = true,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n return (\n <Box>\n {singleLine && !fullWidth ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n flex=\"1\"\n maxW=\"12.5rem\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n ) : (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {singleLine ? (\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n ) : (\n <Textarea\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n rows={3}\n resize=\"vertical\"\n />\n )}\n </Box>\n )}\n </Box>\n );\n};\n","import { Box, Button, Collapsible, Flex, Stack, Text, useDisclosure } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronLeft } from \"lucide-react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ColorInput } from \"./param-editor-color-input\";\nimport { DateInput } from \"./param-editor-date-input\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { NumberInput } from \"./param-editor-number-input\";\nimport { SelectionInput } from \"./param-editor-selection-input\";\nimport { TextInput } from \"./param-editor-text-input\";\n\ninterface InputGroupComponentProps {\n group: InputGroup;\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const InputGroupComponent = (props: InputGroupComponentProps) => {\n const { group, defaultValues, onChange, readOnly, fullWidth = false } = props;\n const { open, onToggle } = useDisclosure({\n defaultOpen: !group.defaultCollapsed,\n });\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={onChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <Box minW=\"0\" textStyle=\"label/S/regular\">\n {param.value}\n </Box>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <Box minW=\"0\" textStyle=\"label/S/regular\">\n {param.value}\n </Box>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Box>\n {group.collapsible ? (\n <Button variant=\"ghost\" size=\"xs\" onClick={onToggle} pl={0} _hover={{ bg: \"transparent\" }}>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n {open ? <ChevronDown size={14} /> : <ChevronLeft size={14} />}\n </Flex>\n </Button>\n ) : (\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n )}\n\n {group.description && (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" mb=\"sm\">\n {group.description}\n </Text>\n )}\n\n <Collapsible.Root open={group.collapsible ? open : true}>\n <Collapsible.Content>\n <Stack gap=\"md\">{group.params.map(renderParam)}</Stack>\n </Collapsible.Content>\n </Collapsible.Root>\n </Box>\n );\n};\n","import { Box, Flex, Separator, Stack } from \"@chakra-ui/react\";\nimport { Fragment } from \"react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ColorInput } from \"./param-editor-color-input\";\nimport { DateInput } from \"./param-editor-date-input\";\nimport { InputGroupComponent } from \"./param-editor-input-group\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { NumberInput } from \"./param-editor-number-input\";\nimport { SelectionInput } from \"./param-editor-selection-input\";\nimport { TextInput } from \"./param-editor-text-input\";\n\nexport interface ParamEditorProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues?: ParamValueMap;\n onChange?: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const ParamEditor = (props: ParamEditorProps) => {\n const { params = [], groups = [], defaultValues = {}, onChange, readOnly, fullWidth = false } = props;\n const handleChange = onChange ?? (() => undefined);\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={handleChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <Box minW=\"0\" textStyle=\"label/S/regular\">\n {param.value}\n </Box>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <Box minW=\"0\" textStyle=\"label/S/regular\">\n {param.value}\n </Box>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap=\"md\">\n {params.map(renderParam)}\n\n {params.length > 0 && groups.length > 0 && <Separator borderColor=\"border.muted\" />}\n\n {groups.map((group, index) => (\n <Fragment key={group.id}>\n <InputGroupComponent\n group={group}\n defaultValues={defaultValues}\n onChange={handleChange}\n readOnly={readOnly}\n fullWidth={fullWidth}\n />\n {index < groups.length - 1 && <Separator borderColor=\"border.muted\" />}\n </Fragment>\n ))}\n </Stack>\n );\n};\n","import { Badge, Button, Dialog, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUp, FileText, Folder, FolderOpen, Home, Search } from \"lucide-react\";\nimport { type KeyboardEvent, useEffect, useState } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport interface RepoPickerDialogEntry {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n}\n\ninterface RepoPickerDialogProps {\n open: boolean;\n title?: string;\n description?: string;\n currentPath?: string;\n entries: RepoPickerDialogEntry[];\n selectedPath?: string | null;\n selectedPaths?: string[];\n isLoading?: boolean;\n error?: string;\n isSelectDisabled?: boolean;\n onClose: () => void;\n onSelect: () => void;\n onSelectHomeDirectory: () => void;\n onSelectParentDirectory: () => void;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n}\n\nexport type { RepoPickerDialogProps };\n\nconst getEntryIcon = (entry: RepoPickerDialogEntry) => {\n if (!entry.isDirectory) return FileText;\n if (entry.isGitRepo) return FolderOpen;\n return Folder;\n};\n\nconst filterEntries = (entries: RepoPickerDialogEntry[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return entries;\n }\n\n return entries.filter((entry) => `${entry.name} ${entry.path}`.toLowerCase().includes(normalizedQuery));\n};\n\ntype RepoPickerListEntryProps = {\n entry: RepoPickerDialogEntry;\n selectedPath: string | null;\n selectedPathSet: Set<string>;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n};\n\nconst RepoPickerListEntry = (props: RepoPickerListEntryProps) => {\n const { entry, selectedPath, selectedPathSet, onEntryClick } = props;\n const isAlreadySelected = entry.isGitRepo && selectedPathSet.has(entry.path);\n const isDisabled = !entry.isDirectory || isAlreadySelected;\n\n const handleClick = () => {\n if (isAlreadySelected) {\n return;\n }\n\n onEntryClick(entry);\n };\n\n return (\n <ListRow\n variant=\"compact\"\n isSelected={selectedPath === entry.path}\n id={entry.path}\n label={entry.name}\n icon={<Icon as={getEntryIcon(entry)} boxSize=\"16px\" />}\n endContent={\n entry.isGitRepo ? (\n <Badge\n textStyle=\"label/XS/medium\"\n px=\"xs\"\n py=\"2px\"\n colorPalette=\"green\"\n variant=\"subtle\"\n pointerEvents=\"none\"\n >\n Git repo\n </Badge>\n ) : undefined\n }\n disabled={isDisabled}\n onActivate={handleClick}\n />\n );\n};\n\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nconst searchInputFocusVisibleProps = {\n boxShadow: \"none\",\n outline: \"2px solid\",\n outlineColor: \"blue.border\",\n outlineOffset: \"-2px\",\n} as const;\n\nconst focusInlinePickerOption = (event: KeyboardEvent<HTMLDivElement>) => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) {\n return;\n }\n\n const options = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]:not(:disabled)'),\n );\n\n if (options.length === 0) {\n return;\n }\n\n const currentIndex = options.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex = (() => {\n if (event.key === \"Home\") return 0;\n if (event.key === \"End\") return options.length - 1;\n if (event.key === \"ArrowUp\") return currentIndex <= 0 ? options.length - 1 : currentIndex - 1;\n return currentIndex < 0 || currentIndex === options.length - 1 ? 0 : currentIndex + 1;\n })();\n\n event.preventDefault();\n options[nextIndex]?.focus();\n};\n\nexport const RepoPickerDialog = (props: RepoPickerDialogProps) => {\n const {\n open,\n title = \"Select folder\",\n description,\n currentPath = \"\",\n entries,\n selectedPath = null,\n selectedPaths = [],\n isLoading = false,\n error = \"\",\n isSelectDisabled = false,\n onClose,\n onSelect,\n onSelectHomeDirectory,\n onSelectParentDirectory,\n onEntryClick,\n } = props;\n\n const [query, setQuery] = useState(\"\");\n const selectedPathSet = new Set(selectedPaths);\n const filteredEntries = filterEntries(entries, query);\n const searchScope = currentPath || \"Home\";\n\n useEffect(() => {\n if (!open || !searchScope) return;\n setQuery(\"\");\n }, [open, searchScope]);\n\n return (\n <Dialog.Root\n lazyMount\n unmountOnExit\n closeOnInteractOutside={false}\n open={open}\n onOpenChange={(details) => !details.open && onClose()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n <Stack direction=\"row\" gap=\"sm\" align=\"center\">\n <Button aria-label=\"Go to home directory\" variant=\"outline\" size=\"sm\" onClick={onSelectHomeDirectory}>\n <Home size={16} />\n </Button>\n <Button\n aria-label=\"Go to parent directory\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onSelectParentDirectory}\n disabled={!currentPath || currentPath === \"/\"}\n >\n <ChevronUp size={16} />\n </Button>\n <Text\n data-testid=\"folder-picker-path\"\n textStyle=\"paragraph/S/regular\"\n color=\"fg.muted\"\n flex=\"1\"\n lineClamp={1}\n >\n {searchScope}\n </Text>\n </Stack>\n\n <Stack gap=\"0\" borderWidth=\"1px\" borderRadius=\"md\" borderColor=\"border.muted\" overflow=\"hidden\">\n <InputGroup\n startElement={<Search size={14} />}\n width=\"full\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n >\n <Input\n borderWidth=\"0\"\n borderRadius=\"0\"\n value={query}\n placeholder=\"Search repositories\"\n aria-label=\"Search repositories\"\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputFocusVisibleProps}\n onChange={(event) => setQuery(event.target.value)}\n />\n </InputGroup>\n {isLoading ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Loading...\n </Text>\n ) : error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"red.500\" p=\"sm\">\n {error}\n </Text>\n ) : filteredEntries.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n No entries found.\n </Text>\n ) : (\n <ScrollArea maxHeight=\"320px\" contentProps={{ padding: \"sm\" }}>\n <Stack gap=\"xs\" role=\"listbox\" aria-label=\"Repository folders\" onKeyDown={focusInlinePickerOption}>\n {filteredEntries.map((entry) => (\n <RepoPickerListEntry\n key={entry.path}\n entry={entry}\n selectedPath={selectedPath}\n selectedPathSet={selectedPathSet}\n onEntryClick={onEntryClick}\n />\n ))}\n </Stack>\n </ScrollArea>\n )}\n </Stack>\n </Stack>\n </Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"sm\">\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={onSelect} disabled={isSelectDisabled}>\n Select repository\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { Icon } from \"@chakra-ui/react\";\nimport { CircleAlert, CircleCheck, CircleDashed, CirclePause, CircleStop, ClockAlert } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\n\nexport type SessionCompletionStatus =\n | \"in_progress\"\n | \"awaiting_input\"\n | \"queued\"\n | \"completed\"\n | \"failed\"\n | \"cancelled\"\n | \"disconnected\";\n\nexport const resolveSessionIndicatorIcon = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return CircleCheck;\n if (status === \"failed\") return CircleAlert;\n if (status === \"cancelled\") return CircleStop;\n if (status === \"disconnected\") return CirclePause;\n if (status === \"queued\") return ClockAlert;\n return CircleDashed;\n};\n\nexport const resolveSessionIndicatorColor = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return \"fg.success\";\n if (status === \"failed\") return \"fg.error\";\n if (status === \"cancelled\") return \"fg.warning\";\n if (status === \"disconnected\") return \"fg.warning\";\n if (status === \"queued\") return \"fg.info\";\n return \"fg.muted\";\n};\n\ninterface SessionIndicatorProps {\n status?: SessionCompletionStatus;\n boxSize?: ComponentProps<typeof Icon>[\"boxSize\"];\n ariaLabel?: string;\n cursor?: ComponentProps<typeof Icon>[\"cursor\"];\n onClick?: ComponentProps<typeof Icon>[\"onClick\"];\n}\n\nexport const SessionIndicator = (props: SessionIndicatorProps) => {\n const { status, boxSize = \"14px\", ariaLabel = \"Session status\", cursor, onClick } = props;\n\n return (\n <Icon\n as={resolveSessionIndicatorIcon(status)}\n boxSize={boxSize}\n color={resolveSessionIndicatorColor(status)}\n aria-label={ariaLabel}\n cursor={cursor}\n onClick={onClick}\n />\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\n\ninterface SidebarSnapshot {\n open: boolean;\n expandedSections: string[];\n expandedNodes: string[];\n width: number | null;\n}\n\ninterface SidebarState extends SidebarSnapshot {\n openSidebar: () => void;\n closeSidebar: () => void;\n toggleSidebar: () => void;\n toggleSection: (sectionId: string) => void;\n toggleNode: (nodeId: string) => void;\n setSectionExpanded: (sectionId: string, expanded: boolean) => void;\n setNodeExpanded: (nodeId: string, expanded: boolean) => void;\n setWidth: (width: number) => void;\n reset: () => void;\n}\n\ninterface CreateSidebarStoreOptions {\n storageKey: string;\n initialState?: Partial<SidebarSnapshot>;\n}\n\nconst DEFAULT_SNAPSHOT = {\n open: true,\n expandedSections: [],\n expandedNodes: [],\n width: null,\n} satisfies SidebarSnapshot;\n\nconst SIDEBAR_STORE_NAMESPACE = \"pstdio/ui/sidebar\";\n\nconst toStorageName = (storageKey: string) => `${SIDEBAR_STORE_NAMESPACE}/${storageKey}`;\n\nconst createNoopStorage = () => ({\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n});\n\nconst toggleId = (values: string[], id: string) =>\n values.includes(id) ? values.filter((value) => value !== id) : [...values, id];\n\nconst setExpanded = (values: string[], id: string, expanded: boolean) => {\n if (expanded) {\n return values.includes(id) ? values : [...values, id];\n }\n\n return values.filter((value) => value !== id);\n};\n\nconst getPersistedSnapshot = (state: SidebarState) => ({\n open: state.open,\n expandedSections: state.expandedSections,\n expandedNodes: state.expandedNodes,\n width: state.width,\n});\n\nexport const createSidebarStore = (options: CreateSidebarStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = { ...DEFAULT_SNAPSHOT, ...initialState };\n\n return createStore<SidebarState>()(\n persist(\n (set) => ({\n ...snapshot,\n openSidebar: () => set((state) => ({ ...state, open: true })),\n closeSidebar: () => set((state) => ({ ...state, open: false })),\n toggleSidebar: () => set((state) => ({ ...state, open: !state.open })),\n toggleSection: (sectionId) =>\n set((state) => ({\n ...state,\n expandedSections: toggleId(state.expandedSections, sectionId),\n })),\n toggleNode: (nodeId) =>\n set((state) => ({\n ...state,\n expandedNodes: toggleId(state.expandedNodes, nodeId),\n })),\n setSectionExpanded: (sectionId, expanded) =>\n set((state) => ({\n ...state,\n expandedSections: setExpanded(state.expandedSections, sectionId, expanded),\n })),\n setNodeExpanded: (nodeId, expanded) =>\n set((state) => ({\n ...state,\n expandedNodes: setExpanded(state.expandedNodes, nodeId, expanded),\n })),\n setWidth: (width) => set((state) => ({ ...state, width })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(storageKey),\n storage: createJSONStorage(() => {\n if (typeof globalThis.localStorage === \"undefined\") {\n return createNoopStorage();\n }\n\n return globalThis.localStorage;\n }),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n};\n\nconst sidebarStoreRegistry = new Map<string, ReturnType<typeof createSidebarStore>>();\n\nexport const getSidebarStore = (storageKey: string, initialState?: Partial<SidebarSnapshot>) => {\n const existingStore = sidebarStoreRegistry.get(storageKey);\n\n if (existingStore) {\n return existingStore;\n }\n\n const store = createSidebarStore({ storageKey, initialState });\n sidebarStoreRegistry.set(storageKey, store);\n\n return store;\n};\n\nexport const useSidebarStore = <T>(\n storageKey: string,\n selector: (state: SidebarState) => T,\n initialState?: Partial<SidebarSnapshot>,\n) => {\n const store = getSidebarStore(storageKey, initialState);\n return useStore(store, selector);\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface SidebarFooterProps {\n children?: ReactNode;\n}\n\nexport const SidebarFooter = (props: SidebarFooterProps) => {\n const { children } = props;\n\n if (!children) {\n return null;\n }\n\n return (\n <Box bg=\"bg\" position=\"sticky\" bottom=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n","import { HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { PANEL_HEADER_HEIGHT } from \"../panel-header.constants\";\n\ninterface SidebarHeaderProps {\n children?: ReactNode;\n}\n\nexport const SidebarHeader = (props: SidebarHeaderProps) => {\n const { children } = props;\n\n return (\n <HStack\n data-testid=\"sidebar-header\"\n justify=\"space-between\"\n align=\"center\"\n minH={PANEL_HEADER_HEIGHT}\n bg=\"bg\"\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n gap=\"0\"\n >\n <HStack minW=\"0\" flex=\"1\">\n {children}\n </HStack>\n </HStack>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef } from \"react\";\nimport { usePanelSidebarRegistration } from \"../panel-sidebar-registration-context\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport { useSidebarStore } from \"./sidebar.store\";\nimport type { SidebarProps } from \"./sidebar.types\";\nimport { SidebarFooter } from \"./sidebar-footer\";\nimport { SidebarHeader } from \"./sidebar-header\";\n\nconst DEFAULT_WIDTH = 240;\nconst DEFAULT_MIN_WIDTH = 200;\nconst DEFAULT_MAX_WIDTH = 480;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveInitialWidth = (width?: string | number, defaultWidth = DEFAULT_WIDTH) => {\n if (typeof width === \"number\") return width;\n if (typeof width === \"string\") {\n const parsed = parseInt(width, 10);\n if (!Number.isNaN(parsed)) return parsed;\n }\n return defaultWidth;\n};\n\nexport const Sidebar = (props: SidebarProps) => {\n const {\n storageKey,\n sections,\n activeNodeId,\n header,\n footer,\n width,\n closable = true,\n emptyLabel = \"No items available.\",\n defaultExpandedSections,\n linkComponent,\n onNavigate,\n onOpenChange,\n resizable = true,\n defaultWidth,\n minWidth = DEFAULT_MIN_WIDTH,\n maxWidth = DEFAULT_MAX_WIDTH,\n virtualize = false,\n } = props;\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n\n const initialWidth = resolveInitialWidth(width, defaultWidth);\n const initialState = {\n ...(defaultExpandedSections ? { expandedSections: defaultExpandedSections } : {}),\n width: initialWidth,\n };\n\n const open = useSidebarStore(storageKey, (state) => state.open, initialState);\n const persistedWidth = useSidebarStore(storageKey, (state) => state.width, initialState);\n const expandedSections = useSidebarStore(storageKey, (state) => state.expandedSections, initialState);\n const expandedNodes = useSidebarStore(storageKey, (state) => state.expandedNodes, initialState);\n const openSidebar = useSidebarStore(storageKey, (state) => state.openSidebar, initialState);\n const closeSidebar = useSidebarStore(storageKey, (state) => state.closeSidebar, initialState);\n const toggleSection = useSidebarStore(storageKey, (state) => state.toggleSection, initialState);\n const toggleNode = useSidebarStore(storageKey, (state) => state.toggleNode, initialState);\n const setStoreWidth = useSidebarStore(storageKey, (state) => state.setWidth, initialState);\n\n useEffect(() => {\n onOpenChange?.(open);\n }, [onOpenChange, open]);\n\n const effectiveWidth = clamp(persistedWidth ?? initialWidth, minWidth, maxWidth);\n const setOpen = (nextOpen: boolean) => {\n if (nextOpen) openSidebar();\n else closeSidebar();\n };\n const managedByPanelLayout = usePanelSidebarRegistration({\n open,\n resizable,\n width: effectiveWidth,\n minWidth,\n maxWidth,\n onWidthChange: setStoreWidth,\n onOpenChange: setOpen,\n });\n\n if (!open && closable) {\n return null;\n }\n\n const widthCss = resizable ? `${effectiveWidth}px` : (width ?? `${initialWidth}px`);\n\n return (\n <Flex\n as=\"aside\"\n data-testid=\"sidebar\"\n direction=\"column\"\n position=\"relative\"\n h=\"100%\"\n w={managedByPanelLayout ? \"full\" : widthCss}\n minW={managedByPanelLayout ? \"0\" : widthCss}\n maxW={managedByPanelLayout ? \"none\" : widthCss}\n flexShrink={0}\n borderRightWidth=\"1px\"\n borderRightColor=\"border.muted\"\n bg=\"bg\"\n >\n <SidebarHeader>{header}</SidebarHeader>\n\n <ScrollArea\n flex=\"1\"\n mt=\"lg\"\n viewportRef={viewportRef}\n viewportProps={{ display: \"block\", style: { overflowX: \"hidden\" } }}\n contentProps={{ style: { minWidth: \"100%\", width: \"100%\" } }}\n >\n <Box w=\"full\" minW=\"0\">\n {sections.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"3\">\n {emptyLabel}\n </Text>\n ) : (\n <TreeList\n sections={sections}\n expandedSectionIds={expandedSections}\n expandedNodeIds={expandedNodes}\n activeNodeId={activeNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n virtualize={virtualize}\n scrollRef={viewportRef}\n />\n )}\n </Box>\n </ScrollArea>\n\n <SidebarFooter>{footer}</SidebarFooter>\n </Flex>\n );\n};\n","import { Avatar, Button, HStack, Icon, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, FolderIcon } from \"lucide-react\";\nimport { ListRow } from \"../list-row/list-row\";\n\ninterface SidebarProjectMenuProps {\n name: string;\n projectsLabel: string;\n onSelectProjects: () => void;\n}\n\nexport const SidebarProjectMenu = (props: SidebarProjectMenuProps) => {\n const { name, projectsLabel, onSelectProjects } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button borderRadius=\"0\" variant=\"ghost\" size=\"sm\" width=\"full\" justifyContent=\"flex-start\">\n <HStack gap=\"0\" minW=\"0\" flex=\"1\">\n <Avatar.Root size=\"2xs\">\n <Avatar.Fallback name={name} />\n </Avatar.Root>\n <Text textStyle=\"label/S/medium\" truncate>\n {name}\n </Text>\n </HStack>\n <ChevronDown size={14} />\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"240px\" bg=\"bg\">\n <Menu.Item value=\"projects\" asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id=\"projects\"\n label={projectsLabel}\n icon={<Icon as={FolderIcon} boxSize=\"16px\" />}\n onActivate={onSelectProjects}\n />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Switch as ChakraSwitch } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SwitchProps extends ChakraSwitch.RootProps {\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n rootRef?: React.RefObject<HTMLLabelElement | null>;\n trackLabel?: { on: React.ReactNode; off: React.ReactNode };\n thumbLabel?: { on: React.ReactNode; off: React.ReactNode };\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(props, ref) {\n const { inputProps, children, rootRef, trackLabel, thumbLabel, disabled = false, ...rest } = props;\n const interactiveCursor = disabled ? \"not-allowed\" : \"pointer\";\n\n return (\n <ChakraSwitch.Root ref={rootRef} disabled={disabled} cursor={interactiveCursor} {...rest}>\n <ChakraSwitch.HiddenInput ref={ref} {...inputProps} />\n <ChakraSwitch.Control borderRadius=\"md\" cursor={interactiveCursor}>\n <ChakraSwitch.Thumb borderRadius=\"full\">\n {thumbLabel && (\n <ChakraSwitch.ThumbIndicator fallback={thumbLabel?.off}>{thumbLabel?.on}</ChakraSwitch.ThumbIndicator>\n )}\n </ChakraSwitch.Thumb>\n {trackLabel && <ChakraSwitch.Indicator fallback={trackLabel.off}>{trackLabel.on}</ChakraSwitch.Indicator>}\n </ChakraSwitch.Control>\n {children != null && <ChakraSwitch.Label cursor={interactiveCursor}>{children}</ChakraSwitch.Label>}\n </ChakraSwitch.Root>\n );\n});\n","export type ViewMode = \"board\" | \"list\";\n\nexport type GroupingField = \"status\" | \"assignee\" | \"none\" | `tag:${string}`;\n\nexport type OrderingField = \"manual\" | \"updated\" | \"title\" | \"ticketId\" | `tag:${string}`;\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport type DisplayProperty = \"id\" | \"status\" | \"assignee\" | \"updated\" | `tag:${string}`;\n\nexport type FilterCategory = \"status\" | \"assignee\" | `tag:${string}`;\n\nexport interface WorkspaceOrdering {\n field: OrderingField;\n direction: SortDirection;\n}\n\nexport interface WorkspaceSettings {\n viewMode: ViewMode;\n columnGrouping: GroupingField;\n rowGrouping: GroupingField;\n ordering: WorkspaceOrdering;\n displayProperties: DisplayProperty[];\n}\n\nexport type FilterState = Partial<Record<FilterCategory, string[]>>;\n\nexport interface WorkspaceOption<TValue extends string> {\n value: TValue;\n label: string;\n}\n\nexport interface WorkspaceFilterOption {\n value: string;\n label: string;\n}\n\nexport interface WorkspaceFilterCategory {\n id: FilterCategory;\n label: string;\n options: WorkspaceFilterOption[];\n}\n\nexport interface WorkspaceTagOption {\n value: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\nexport interface WorkspaceTagDefinition {\n name: string;\n label: string;\n options: WorkspaceTagOption[];\n}\n\nexport interface WorkspaceTag {\n name: string;\n value: string;\n}\n\nexport interface WorkspaceTicket {\n id: string;\n ticketId: string;\n title: string;\n status?: string | null;\n statusColor?: string;\n assignee?: string | null;\n tags?: WorkspaceTag[];\n updatedAt?: string | null;\n parentPath?: string[];\n isSubIssue?: boolean;\n}\n\nexport const DEFAULT_WORKSPACE_SETTINGS: WorkspaceSettings = {\n viewMode: \"board\",\n columnGrouping: \"status\",\n rowGrouping: \"none\",\n ordering: {\n field: \"manual\",\n direction: \"asc\",\n },\n displayProperties: [],\n};\n\nexport const DEFAULT_GROUPING_OPTIONS: WorkspaceOption<GroupingField>[] = [\n { value: \"status\", label: \"Status\" },\n { value: \"assignee\", label: \"Assignee\" },\n { value: \"none\", label: \"No grouping\" },\n];\n\nexport const DEFAULT_ORDERING_OPTIONS: WorkspaceOption<OrderingField>[] = [\n { value: \"manual\", label: \"Manual\" },\n { value: \"updated\", label: \"Updated\" },\n { value: \"title\", label: \"Title\" },\n { value: \"ticketId\", label: \"ID\" },\n];\n\nexport const DEFAULT_DISPLAY_PROPERTY_OPTIONS: WorkspaceOption<DisplayProperty>[] = [\n { value: \"id\", label: \"ID\" },\n { value: \"status\", label: \"Status\" },\n { value: \"updated\", label: \"Updated\" },\n];\n\nexport const isTagKey = (key: string): key is `tag:${string}` => key.startsWith(\"tag:\");\n\nexport const toTagName = (key: `tag:${string}`) => key.slice(4);\n","import type { TicketCardBadge, TicketCardTagBadge } from \"./ticket-card\";\nimport type {\n DisplayProperty,\n FilterCategory,\n FilterState,\n GroupingField,\n OrderingField,\n WorkspaceFilterCategory,\n WorkspaceOption,\n WorkspaceTagDefinition,\n WorkspaceTicket,\n} from \"./types\";\nimport { isTagKey, toTagName } from \"./types\";\n\nexport const toTitleCase = (value: string) =>\n value\n .replaceAll(\"_\", \" \")\n .split(\" \")\n .filter((chunk) => chunk.length > 0)\n .map((chunk) => chunk[0]!.toUpperCase() + chunk.slice(1))\n .join(\" \");\n\nconst collectCategoryOptions = (tickets: WorkspaceTicket[], category: FilterCategory) => {\n const values = new Set<string>();\n\n for (const ticket of tickets) {\n if (category === \"status\") {\n if (ticket.status) values.add(ticket.status);\n } else if (category === \"assignee\") {\n if (ticket.assignee) values.add(ticket.assignee);\n } else if (isTagKey(category)) {\n const tagName = toTagName(category);\n const tag = ticket.tags?.find((t) => t.name === tagName);\n if (tag) values.add(tag.value);\n }\n }\n\n return [...values]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n};\n\nexport const buildDefaultFilterCategories = (\n tickets: WorkspaceTicket[],\n tagDefinitions: WorkspaceTagDefinition[],\n): WorkspaceFilterCategory[] => {\n const categories: WorkspaceFilterCategory[] = [\n { id: \"status\", label: \"Status\", options: collectCategoryOptions(tickets, \"status\") },\n { id: \"assignee\", label: \"Assignee\", options: collectCategoryOptions(tickets, \"assignee\") },\n ];\n\n for (const def of tagDefinitions) {\n const categoryId = `tag:${def.name}` as FilterCategory;\n categories.push({\n id: categoryId,\n label: def.label,\n options: def.options.map((o) => ({ value: o.value, label: o.label })),\n });\n }\n\n return categories;\n};\n\nexport const toBadges = (ticket: WorkspaceTicket, displayProperties: DisplayProperty[]): TicketCardBadge[] => {\n const badges: TicketCardBadge[] = [];\n const includes = (property: DisplayProperty) => displayProperties.includes(property);\n\n if (includes(\"status\") && ticket.status) {\n badges.push({ label: ticket.status, color: ticket.statusColor ?? \"gray\" });\n }\n\n if (includes(\"assignee\") && ticket.assignee) {\n badges.push({ label: ticket.assignee, color: \"blue\" });\n }\n\n if (includes(\"updated\") && ticket.updatedAt) {\n badges.push({ label: new Date(ticket.updatedAt).toLocaleDateString(), color: \"gray\" });\n }\n\n return badges;\n};\n\nexport const toTagBadges = (\n ticket: WorkspaceTicket,\n displayProperties: DisplayProperty[],\n tagDefinitions: WorkspaceTagDefinition[],\n): TicketCardTagBadge[] => {\n const tagBadges: TicketCardTagBadge[] = [];\n\n for (const def of tagDefinitions) {\n const displayKey = `tag:${def.name}` as DisplayProperty;\n if (!displayProperties.includes(displayKey)) continue;\n\n const tag = ticket.tags?.find((t) => t.name === def.name);\n const optionDef = tag ? def.options.find((o) => o.value === tag.value) : undefined;\n\n tagBadges.push({\n tagName: def.name,\n label: def.label,\n value: tag?.value ?? null,\n color: optionDef?.color ?? \"purple\",\n options: def.options,\n });\n }\n\n return tagBadges;\n};\n\nexport const buildTagOptions = (tagDefinitions: WorkspaceTagDefinition[]) => ({\n grouping: tagDefinitions.map(\n (def) => ({ value: `tag:${def.name}`, label: def.label }) as WorkspaceOption<GroupingField>,\n ),\n ordering: tagDefinitions.map(\n (def) => ({ value: `tag:${def.name}`, label: def.label }) as WorkspaceOption<OrderingField>,\n ),\n display: tagDefinitions.map(\n (def) => ({ value: `tag:${def.name}`, label: def.label }) as WorkspaceOption<DisplayProperty>,\n ),\n});\n\nexport const orderGroupingOptions = <TValue extends string>(options: WorkspaceOption<TValue>[]) => {\n const noGrouping = options.find((option) => option.value === \"none\");\n if (!noGrouping) {\n return options;\n }\n\n return [noGrouping, ...options.filter((option) => option.value !== \"none\")];\n};\n\nexport const resolveSubGroupingOptions = (options: WorkspaceOption<GroupingField>[], columnGrouping: GroupingField) => {\n if (columnGrouping === \"none\") {\n return options.filter((option) => option.value === \"none\");\n }\n\n return options.filter((option) => option.value === \"none\" || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: GroupingField, placement?: { columnKey?: string }) => {\n if (columnGrouping === \"none\") {\n return \"all\";\n }\n\n return placement?.columnKey;\n};\n\nexport const resolveKnownColumnKeys = (\n columnGrouping: GroupingField,\n knownColumnKeys: string[] | undefined,\n categories: WorkspaceFilterCategory[],\n filters?: FilterState,\n) => {\n if (columnGrouping === \"none\") {\n return undefined;\n }\n\n const activeValues = filters?.[columnGrouping];\n if (activeValues && activeValues.length > 0) {\n return activeValues;\n }\n\n if (columnGrouping === \"status\") {\n if (knownColumnKeys) {\n return knownColumnKeys;\n }\n }\n\n return categories.find((category) => category.id === columnGrouping)?.options.map((option) => option.value);\n};\n\nexport const omitFilterCategory = (filters: FilterState, category: FilterCategory): FilterState => {\n const next = { ...filters } as Record<string, string[] | undefined>;\n delete next[category];\n return next as FilterState;\n};\n","import {\n Button,\n HStack,\n Icon,\n IconButton,\n Menu,\n Popover,\n Portal,\n SegmentGroup,\n Separator,\n Stack,\n Text,\n} from \"@chakra-ui/react\";\nimport { ArrowDownUp, ChevronDown, KanbanSquare, List, Settings2 } from \"lucide-react\";\nimport { Fragment } from \"react\";\n\nimport type { DisplayProperty, GroupingField, OrderingField, WorkspaceOption, WorkspaceSettings } from \"./types\";\nimport { orderGroupingOptions, resolveSubGroupingOptions } from \"./workspace-helpers\";\n\ninterface DisplayMenuProps {\n settings: WorkspaceSettings;\n groupingOptions: WorkspaceOption<GroupingField>[];\n orderingOptions: WorkspaceOption<OrderingField>[];\n displayPropertyOptions: WorkspaceOption<DisplayProperty>[];\n onViewModeChange: (value: WorkspaceSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: GroupingField) => void;\n onRowGroupingChange: (value: GroupingField) => void;\n onOrderingFieldChange: (value: OrderingField) => void;\n onSortDirectionToggle: () => void;\n onDisplayPropertyToggle: (property: DisplayProperty) => void;\n}\n\nconst SectionLabel = (props: { children: string }) => (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n {props.children}\n </Text>\n);\n\nconst Dropdown = <T extends string>(props: {\n label: string;\n value: T;\n options: WorkspaceOption<T>[];\n onSelect: (value: T) => void;\n}) => {\n const orderedOptions = orderGroupingOptions(props.options);\n const selectedLabel = orderedOptions.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoGrouping = orderedOptions[0]?.value === \"none\";\n\n return (\n <Stack gap=\"2xs\">\n <SectionLabel>{props.label}</SectionLabel>\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"sm\" variant=\"outline\" width=\"full\" justifyContent=\"space-between\">\n {selectedLabel}\n <Icon as={ChevronDown} color=\"fg.muted\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"260px\" bg=\"bg\">\n {orderedOptions.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoGrouping && index === 1 ? <Menu.Separator /> : null}\n <Menu.Item value={option.value} onClick={() => props.onSelect(option.value)}>\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Stack>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n orderingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onOrderingFieldChange,\n onSortDirectionToggle,\n onDisplayPropertyToggle,\n } = props;\n\n return (\n <Popover.Root positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}>\n <Popover.Trigger asChild>\n <IconButton aria-label=\"Display settings\" variant=\"ghost\" size=\"sm\">\n <Icon as={Settings2} boxSize=\"14px\" />\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content width=\"320px\" p=\"sm\" bg=\"bg\">\n <Stack gap=\"sm\">\n <SectionLabel>View</SectionLabel>\n <SegmentGroup.Root\n size=\"sm\"\n value={settings.viewMode}\n onValueChange={(event) => {\n if (!event.value) return;\n onViewModeChange(event.value as WorkspaceSettings[\"viewMode\"]);\n }}\n >\n <SegmentGroup.Indicator />\n <SegmentGroup.Item value=\"list\">\n <SegmentGroup.ItemText>\n <HStack as=\"span\" gap=\"2xs\">\n <List size={14} />\n <span>List</span>\n </HStack>\n </SegmentGroup.ItemText>\n <SegmentGroup.ItemHiddenInput />\n </SegmentGroup.Item>\n <SegmentGroup.Item value=\"board\">\n <SegmentGroup.ItemText>\n <HStack as=\"span\" gap=\"2xs\">\n <KanbanSquare size={14} />\n <span>Board</span>\n </HStack>\n </SegmentGroup.ItemText>\n <SegmentGroup.ItemHiddenInput />\n </SegmentGroup.Item>\n </SegmentGroup.Root>\n\n <Separator />\n\n <Dropdown\n label=\"Grouping\"\n value={settings.columnGrouping}\n options={groupingOptions}\n onSelect={(value) => {\n onColumnGroupingChange(value);\n if (value === \"none\" || value === settings.rowGrouping) {\n onRowGroupingChange(\"none\");\n }\n }}\n />\n\n <Dropdown\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\n <Stack gap=\"2xs\">\n <SectionLabel>Ordering</SectionLabel>\n <HStack gap=\"2xs\">\n <Dropdown\n label=\"Sort by\"\n value={settings.ordering.field}\n options={orderingOptions}\n onSelect={onOrderingFieldChange}\n />\n <IconButton\n mt=\"lg\"\n aria-label=\"Toggle sort direction\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onSortDirectionToggle}\n data-direction={settings.ordering.direction}\n >\n <Icon\n as={ArrowDownUp}\n transform={settings.ordering.direction === \"asc\" ? \"rotate(0deg)\" : \"rotate(180deg)\"}\n />\n </IconButton>\n </HStack>\n </Stack>\n\n <Separator />\n <Stack gap=\"2xs\">\n <SectionLabel>Display properties</SectionLabel>\n <HStack flexWrap=\"wrap\" gap=\"2xs\">\n {displayPropertyOptions.map((option) => {\n const isActive = settings.displayProperties.includes(option.value);\n\n return (\n <Button\n key={option.value}\n size=\"2xs\"\n variant={isActive ? \"solid\" : \"outline\"}\n onClick={() => onDisplayPropertyToggle(option.value)}\n >\n {option.label}\n </Button>\n );\n })}\n </HStack>\n </Stack>\n </Stack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, IconButton, Popover, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Filter } from \"lucide-react\";\nimport { useState } from \"react\";\n\nimport { Checkbox } from \"@/components/checkbox\";\n\nimport type { FilterState, WorkspaceFilterCategory } from \"./types\";\n\ninterface FilterMenuProps {\n categories: WorkspaceFilterCategory[];\n filters: FilterState;\n countsByCategory: Record<string, Record<string, number>>;\n onToggleFilterValue: (category: WorkspaceFilterCategory[\"id\"], value: string) => void;\n onClearFilter: (category: WorkspaceFilterCategory[\"id\"]) => void;\n onClearAll: () => void;\n}\n\nconst getActiveFilterCount = (filters: FilterState) =>\n Object.values(filters).reduce((sum, values) => sum + (values?.length ?? 0), 0);\n\nexport const FilterMenu = (props: FilterMenuProps) => {\n const { categories, filters, countsByCategory, onToggleFilterValue, onClearFilter, onClearAll } = props;\n const [activeCategoryId, setActiveCategoryId] = useState<WorkspaceFilterCategory[\"id\"]>(\n categories[0]?.id ?? \"status\",\n );\n\n const activeCategory = categories.find((category) => category.id === activeCategoryId) ?? categories[0];\n\n const activeFilterCount = getActiveFilterCount(filters);\n\n return (\n <Popover.Root positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}>\n <Popover.Trigger asChild>\n <IconButton aria-label=\"Filter tickets\" variant={activeFilterCount > 0 ? \"outline\" : \"ghost\"} size=\"sm\">\n <HStack gap=\"2xs\">\n <Icon as={Filter} boxSize=\"14px\" />\n {activeFilterCount > 0 ? <Badge variant=\"solid\">{activeFilterCount}</Badge> : null}\n </HStack>\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content width=\"560px\" p=\"0\" bg=\"bg\" overflow=\"hidden\">\n <HStack align=\"stretch\" gap=\"0\" minH=\"320px\">\n <Stack width=\"220px\" borderRightWidth=\"1px\" borderColor=\"border.muted\" p=\"sm\" gap=\"2xs\">\n <HStack justifyContent=\"space-between\">\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n Filters\n </Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={onClearAll}>\n Clear all\n </Button>\n </HStack>\n {categories.map((category) => {\n const selectedValues = filters[category.id] ?? [];\n return (\n <Button\n key={category.id}\n variant={activeCategoryId === category.id ? \"subtle\" : \"ghost\"}\n size=\"sm\"\n justifyContent=\"space-between\"\n onClick={() => setActiveCategoryId(category.id)}\n >\n <Text>{category.label}</Text>\n {selectedValues.length > 0 ? <Badge variant=\"subtle\">{selectedValues.length}</Badge> : null}\n </Button>\n );\n })}\n </Stack>\n\n <Stack flex=\"1\" p=\"sm\" gap=\"sm\">\n {activeCategory ? (\n <>\n <HStack justifyContent=\"space-between\">\n <Text textStyle=\"label/S/medium\">{activeCategory.label}</Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={() => onClearFilter(activeCategory.id)}>\n Clear\n </Button>\n </HStack>\n <Stack gap=\"2xs\">\n {activeCategory.options.map((option) => {\n const checked = (filters[activeCategory.id] ?? []).includes(option.value);\n const count = countsByCategory[activeCategory.id]?.[option.value] ?? 0;\n\n return (\n <Box key={option.value} px=\"xs\" py=\"2xs\" borderRadius=\"sm\" _hover={{ bg: \"bg.hover\" }}>\n <Checkbox\n checked={checked}\n onCheckedChange={() => onToggleFilterValue(activeCategory.id, option.value)}\n >\n <HStack gap=\"2xs\" justifyContent=\"space-between\" width=\"full\">\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {count}\n </Text>\n </HStack>\n </Checkbox>\n </Box>\n );\n })}\n </Stack>\n </>\n ) : null}\n </Stack>\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Box, HStack, Icon, Spinner, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, GitBranchIcon, GitCommitIcon } from \"lucide-react\";\nimport type { MouseEvent } from \"react\";\nimport { DiffBubble } from \"@/components/diff-viewer/diff-bubble\";\nimport { type SessionCompletionStatus, SessionIndicator } from \"@/components/session-indicator\";\nimport { Tooltip } from \"@/components/tooltip\";\n\ninterface WorkspaceAttemptStatus {\n name: string;\n color: string;\n description?: string | null;\n}\n\nconst ATTEMPT_STATUS_COLOR_ALIASES: Record<string, string> = {\n amber: \"yellow\",\n};\n\nconst CHAKRA_COLOR_PALETTES = new Set([\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n]);\n\nexport interface WorkspaceBadgeProps {\n workspaceType: \"worktree\" | \"current_branch\";\n initializing?: boolean;\n shorthand?: string;\n attemptStatus?: WorkspaceAttemptStatus;\n sessionStatus?: SessionCompletionStatus;\n showLeadingSessionIndicator?: boolean;\n diffAdditions?: number;\n diffDeletions?: number;\n hasMultipleWorkspaces?: boolean;\n onClick?: () => void;\n onDropdownClick?: () => void;\n onSessionIndicatorClick?: () => void;\n}\n\nconst resolveWorkspaceIcon = (workspaceType: WorkspaceBadgeProps[\"workspaceType\"]) => {\n if (workspaceType === \"current_branch\") {\n return GitCommitIcon;\n }\n\n return GitBranchIcon;\n};\n\nconst resolveAttemptStatusColor = (color: string) => {\n if (color.startsWith(\"#\") || color.startsWith(\"rgb\") || color.startsWith(\"hsl\") || color.startsWith(\"var(\")) {\n return color;\n }\n\n const resolvedColor = ATTEMPT_STATUS_COLOR_ALIASES[color] ?? color;\n if (CHAKRA_COLOR_PALETTES.has(resolvedColor)) {\n return `var(--chakra-colors-${resolvedColor}-500)`;\n }\n\n return resolvedColor;\n};\n\nconst buildAttemptStatusTooltip = (attemptStatus: WorkspaceAttemptStatus | undefined) => {\n if (!attemptStatus) return null;\n\n if (attemptStatus.description) {\n return `${attemptStatus.name}: ${attemptStatus.description}`;\n }\n\n return attemptStatus.name;\n};\n\nconst handleIconClick = (event: MouseEvent<SVGSVGElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst handleBadgeClick = (event: MouseEvent<HTMLSpanElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst LeadingSessionIndicator = (props: {\n sessionStatus?: SessionCompletionStatus;\n onSessionIndicatorClick?: () => void;\n}) => {\n const { sessionStatus, onSessionIndicatorClick } = props;\n\n if (!sessionStatus) {\n return null;\n }\n\n const sessionTooltip = onSessionIndicatorClick ? \"Open latest session\" : \"Latest session status\";\n\n return (\n <Tooltip content={sessionTooltip}>\n <SessionIndicator\n status={sessionStatus}\n boxSize=\"12px\"\n ariaLabel={sessionTooltip}\n cursor=\"pointer\"\n onClick={onSessionIndicatorClick ? (event) => handleIconClick(event, onSessionIndicatorClick) : undefined}\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceTypeIndicator = (props: {\n workspaceType: WorkspaceBadgeProps[\"workspaceType\"];\n initializing: boolean;\n shorthand?: string;\n}) => {\n const { workspaceType, initializing, shorthand } = props;\n const WorkspaceTypeIcon = resolveWorkspaceIcon(workspaceType);\n\n return (\n <HStack as=\"span\" gap=\"0\" alignItems=\"center\" color=\"fg.muted\" flexShrink={0}>\n <Icon\n as={WorkspaceTypeIcon}\n boxSize=\"12px\"\n aria-label={workspaceType === \"worktree\" ? \"Worktree\" : \"Current branch\"}\n />\n {initializing ? <Spinner size=\"xs\" color=\"fg.muted\" /> : null}\n {shorthand ? (\n <Text as=\"span\" textStyle=\"label/XS/regular\" color=\"fg.muted\" flexShrink={0}>\n {shorthand}\n </Text>\n ) : null}\n </HStack>\n );\n};\n\nconst WorkspaceAttemptStatusIndicator = (props: { attemptStatus?: WorkspaceAttemptStatus }) => {\n const { attemptStatus } = props;\n\n if (!attemptStatus) {\n return null;\n }\n\n return (\n <Tooltip content={buildAttemptStatusTooltip(attemptStatus)}>\n <Box\n as=\"span\"\n boxSize=\"8px\"\n borderRadius=\"full\"\n backgroundColor={resolveAttemptStatusColor(attemptStatus.color)}\n flexShrink={0}\n aria-label={`Attempt status ${attemptStatus.name}`}\n data-testid=\"workspace-attempt-status\"\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceDiffTotals = (props: { diffAdditions?: number; diffDeletions?: number }) => {\n const { diffAdditions, diffDeletions } = props;\n\n if (typeof diffAdditions !== \"number\" || typeof diffDeletions !== \"number\") {\n return null;\n }\n\n return (\n <DiffBubble additions={diffAdditions} deletions={diffDeletions} variant=\"ghost\" size=\"small\" fileName={undefined} />\n );\n};\n\nconst WorkspaceDropdownTrigger = (props: { hasMultipleWorkspaces: boolean; onDropdownClick?: () => void }) => {\n const { hasMultipleWorkspaces, onDropdownClick } = props;\n\n if (!hasMultipleWorkspaces) {\n return null;\n }\n\n return (\n <Icon\n as={ChevronDown}\n boxSize=\"12px\"\n color=\"fg.muted\"\n cursor={onDropdownClick ? \"pointer\" : \"default\"}\n aria-label=\"Workspace selector\"\n onClick={onDropdownClick ? (event) => handleIconClick(event, onDropdownClick) : undefined}\n />\n );\n};\n\nexport const WorkspaceBadge = (props: WorkspaceBadgeProps) => {\n const {\n workspaceType,\n initializing = false,\n shorthand,\n attemptStatus,\n sessionStatus,\n showLeadingSessionIndicator = true,\n diffAdditions,\n diffDeletions,\n hasMultipleWorkspaces = false,\n onClick,\n onDropdownClick,\n onSessionIndicatorClick,\n } = props;\n\n return (\n <HStack\n as=\"span\"\n display=\"inline-flex\"\n gap=\"2xs\"\n alignItems=\"center\"\n minW=\"0\"\n px=\"2px\"\n py=\"1px\"\n borderRadius=\"xs\"\n cursor=\"pointer\"\n transition=\"background-color 0.2s ease-in-out\"\n _hover={{ backgroundColor: \"bg.hover\" }}\n onClick={onClick ? (event) => handleBadgeClick(event, onClick) : undefined}\n data-testid=\"workspace-badge\"\n >\n {showLeadingSessionIndicator ? (\n <LeadingSessionIndicator sessionStatus={sessionStatus} onSessionIndicatorClick={onSessionIndicatorClick} />\n ) : null}\n <WorkspaceTypeIndicator workspaceType={workspaceType} initializing={initializing} shorthand={shorthand} />\n <WorkspaceAttemptStatusIndicator attemptStatus={attemptStatus} />\n <WorkspaceDiffTotals diffAdditions={diffAdditions} diffDeletions={diffDeletions} />\n <WorkspaceDropdownTrigger hasMultipleWorkspaces={hasMultipleWorkspaces} onDropdownClick={onDropdownClick} />\n </HStack>\n );\n};\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n AlertTriangle,\n BookOpen,\n Bug,\n CheckCircle,\n Circle,\n Clock,\n Eye,\n Flag,\n Flame,\n Gauge,\n Lightbulb,\n Shield,\n Sparkles,\n Star,\n Wrench,\n} from \"lucide-react\";\n\nconst TAG_OPTION_ICON_MAP: Record<string, LucideIcon> = {\n circle: Circle,\n bug: Bug,\n sparkles: Sparkles,\n \"book-open\": BookOpen,\n wrench: Wrench,\n gauge: Gauge,\n \"alert-triangle\": AlertTriangle,\n star: Star,\n flag: Flag,\n flame: Flame,\n lightbulb: Lightbulb,\n shield: Shield,\n eye: Eye,\n clock: Clock,\n \"check-circle\": CheckCircle,\n};\n\nexport const getTagOptionIcon = (icon: string | null | undefined) => {\n if (!icon) {\n return null;\n }\n\n return TAG_OPTION_ICON_MAP[icon] ?? null;\n};\n","import { Badge, HStack, Icon, Menu, Text } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\n\nimport { getTagOptionIcon } from \"./tag-option-icon\";\nimport type { WorkspaceTagOption } from \"./types\";\n\ninterface TagBadgeProps {\n value: string | null;\n label?: string;\n color?: string;\n options: WorkspaceTagOption[];\n onValueChange?: (newValue: string) => void;\n}\n\nexport const TagBadge = (props: TagBadgeProps) => {\n const { value, label, color = \"purple\", options, onValueChange } = props;\n const selectedOption = value ? options.find((option) => option.value === value) : undefined;\n const selectedIcon = getTagOptionIcon(selectedOption?.icon);\n\n const displayLabel = value ? (selectedOption?.label ?? value) : (label ?? \"—\");\n\n if (!onValueChange || options.length === 0) {\n return (\n <Badge variant=\"subtle\" colorPalette={color} textStyle=\"label/XS/medium\">\n <HStack as=\"span\" gap=\"1\" alignItems=\"center\">\n {selectedIcon ? <Icon as={selectedIcon} boxSize=\"12px\" /> : null}\n <Text as=\"span\">{displayLabel}</Text>\n </HStack>\n </Badge>\n );\n }\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Badge\n variant=\"subtle\"\n colorPalette={color}\n textStyle=\"label/XS/medium\"\n cursor=\"pointer\"\n _hover={{ opacity: 0.8 }}\n onClick={(event) => event.stopPropagation()}\n >\n <HStack as=\"span\" gap=\"1\" alignItems=\"center\">\n {selectedIcon ? <Icon as={selectedIcon} boxSize=\"12px\" /> : null}\n <Text as=\"span\">{displayLabel}</Text>\n </HStack>\n </Badge>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\" onClick={(event) => event.stopPropagation()}>\n {options.map((option) => {\n const optionIcon = getTagOptionIcon(option.icon);\n\n return (\n <Menu.Item key={option.value} value={option.value} onClick={() => onValueChange(option.value)}>\n {optionIcon ? <Icon as={optionIcon} boxSize=\"14px\" color=\"fg.muted\" /> : null}\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n {option.label}\n </Text>\n {option.value === value && <Icon as={Check} boxSize=\"14px\" color=\"fg.muted\" />}\n </Menu.Item>\n );\n })}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n","import { Badge, HStack, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler } from \"react\";\nimport type { WorkspaceBadgeProps } from \"@/components/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/workspace-badge\";\nimport { TagBadge } from \"./tag-badge\";\nimport type { WorkspaceTagOption } from \"./types\";\n\nexport interface TicketCardBadge {\n label: string;\n color?: string;\n}\n\nexport interface TicketCardTagBadge {\n tagName: string;\n label: string;\n value: string | null;\n color?: string;\n options: WorkspaceTagOption[];\n}\n\ninterface TicketCardProps {\n ticketId: string;\n parentPath?: string[];\n title: string;\n badges?: TicketCardBadge[];\n tagBadges?: TicketCardTagBadge[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n onTagChange?: (tagName: string, newValue: string) => void;\n}\n\nexport const TicketCard = (props: TicketCardProps) => {\n const {\n ticketId,\n parentPath = [],\n title,\n badges = [],\n tagBadges = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onDragStart,\n onDragEnd,\n onClick,\n onTagChange,\n } = props;\n\n const hasBadges = badges.length > 0 || tagBadges.length > 0;\n\n return (\n <Stack\n gap=\"xs\"\n padding=\"sm\"\n borderRadius=\"sm\"\n borderWidth=\"1px\"\n width=\"100%\"\n background=\"bg\"\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: \"border.blue\",\n boxShadow: \"mid\",\n }}\n cursor={draggable ? \"grab\" : onClick ? \"pointer\" : \"default\"}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"ticket-card\"\n >\n <HStack gap=\"2xs\" flexWrap=\"wrap\" alignItems=\"center\">\n <HStack gap=\"2xs\" flexShrink={0}>\n <Text textStyle=\"label/S/regular\" flexShrink={0}>\n {parentPath.length > 0 && (\n <Text as=\"span\" color=\"subtle\">\n {parentPath.join(\" / \")} /{\" \"}\n </Text>\n )}\n {ticketId}\n </Text>\n {workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}\n </HStack>\n </HStack>\n\n <HStack align=\"start\" gap=\"2xs\" flexWrap=\"wrap\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" flex=\"1\" minW=\"0\" overflowWrap=\"anywhere\">\n {title}\n </Text>\n </HStack>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <Badge key={badge.label} variant=\"subtle\" colorPalette={badge.color ?? \"gray\"} textStyle=\"label/XS/medium\">\n {badge.label}\n </Badge>\n ))}\n {tagBadges.map((tag) => (\n <TagBadge\n key={tag.tagName}\n value={tag.value}\n label={tag.label}\n color={tag.value ? tag.color : \"gray\"}\n options={tag.options}\n onValueChange={onTagChange ? (newValue) => onTagChange(tag.tagName, newValue) : undefined}\n />\n ))}\n </Wrap>\n )}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, IconButton, Menu, Spacer, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight, MoreHorizontal, Plus } from \"lucide-react\";\nimport { type ComponentProps, type ComponentType, type DragEvent, useState } from \"react\";\n\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport type { ResourceContextAction } from \"@/components/resource-context-menu\";\nimport { ResourceContextMenu } from \"@/components/resource-context-menu\";\nimport { ScrollArea } from \"@/components/scroll-area\";\nimport { Tooltip } from \"@/components/tooltip\";\n\nimport { TicketCard } from \"./ticket-card\";\n\ntype TicketCardProps = ComponentProps<typeof TicketCard>;\n\nexport interface TicketBoardItem {\n id: string;\n cardProps: Omit<TicketCardProps, \"draggable\" | \"onDragStart\" | \"onDragEnd\" | \"isSelected\">;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface TicketBoardColumnAction {\n id: string;\n label: string;\n icon: ComponentType<{ size?: number | string }>;\n}\n\nexport interface TicketBoardGroup {\n key: string;\n label: string;\n items: TicketBoardItem[];\n}\n\nexport interface TicketBoardColumn {\n id: string;\n label: string;\n color?: string;\n items: TicketBoardItem[];\n groups?: TicketBoardGroup[];\n canDragIn: boolean;\n canDragOut: boolean;\n canCreate: boolean;\n actions: TicketBoardColumnAction[];\n}\n\ninterface TicketBoardProps {\n columns: TicketBoardColumn[];\n selectedItemId?: string | null;\n onMoveItem?: (itemId: string, targetColumnId: string, context?: { beforeItemId?: string }) => void;\n onMoveToGroup?: (itemId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => void;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const TicketBoard = (props: TicketBoardProps) => {\n const { columns, selectedItemId = null, onMoveItem, onMoveToGroup, onCreateStart, onColumnAction } = props;\n\n const [activeColumn, setActiveColumn] = useState<string | null>(null);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const handleDragStart = (itemId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.dataTransfer.setData(\"text/plain\", itemId);\n event.dataTransfer.effectAllowed = \"move\";\n };\n\n const handleDragEnd = () => {\n setActiveColumn(null);\n setActiveGroup(null);\n };\n\n const handleDragOver = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(columnId);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveColumn(null);\n };\n\n const handleDrop = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setActiveColumn(null);\n\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n\n onMoveItem?.(itemId, columnId);\n };\n\n return (\n <ScrollArea\n height=\"100%\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ display: \"flex\", alignItems: \"stretch\", gap: \"0\", pb: \"2xs\", minH: \"100%\" }}\n >\n {columns.map((column) => (\n <Stack\n key={column.id}\n data-testid={`board-column-${column.id}`}\n gap=\"xs\"\n _notFirst={{ borderLeft: \"1px solid\", borderColor: \"border.muted\" }}\n background={activeColumn === column.id ? \"bg.subtle\" : \"bg\"}\n transition=\"background 150ms ease\"\n height=\"100%\"\n minH=\"240px\"\n overflow=\"hidden\"\n minW=\"260px\"\n flex=\"1 0 260px\"\n onDragOver={column.canDragIn ? handleDragOver(column.id) : undefined}\n onDragLeave={column.canDragIn ? handleDragLeave : undefined}\n onDrop={column.canDragIn ? handleDrop(column.id) : undefined}\n >\n <ColumnHeader column={column} onCreateStart={onCreateStart} onColumnAction={onColumnAction} />\n\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n verticalScrollbarProps={{ margin: \"0\" }}\n contentProps={{\n spaceY: \"sm\",\n ps: \"xs\",\n pe: \"xs\",\n }}\n >\n {column.groups && column.groups.length > 0\n ? column.groups.map((group) => {\n const groupId = `${column.id}::${group.key}`;\n return (\n <GroupSection\n key={group.key}\n columnId={column.id}\n group={group}\n selectedItemId={selectedItemId}\n canDragIn={column.canDragIn}\n canDragOut={column.canDragOut}\n isDropTarget={activeGroup === groupId}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onGroupDragOver={(event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveGroup(groupId);\n setActiveColumn(null);\n }}\n onGroupDragLeave={(event) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveGroup(null);\n }}\n onGroupDrop={(event, beforeItemId) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveGroup(null);\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n onMoveItem?.(itemId, column.id, { beforeItemId });\n onMoveToGroup?.(itemId, group.key, { beforeItemId });\n }}\n />\n );\n })\n : column.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(column.id);\n }\n : undefined\n }\n onDrop={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onMoveItem?.(itemId, column.id, { beforeItemId: item.id });\n }\n : undefined\n }\n >\n <TicketCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={column.canDragOut}\n onDragStart={column.canDragOut ? handleDragStart(item.id) : undefined}\n onDragEnd={column.canDragOut ? handleDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </ScrollArea>\n </Stack>\n ))}\n </ScrollArea>\n );\n};\n\ninterface ColumnHeaderProps {\n column: TicketBoardColumn;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\ninterface GroupSectionProps {\n columnId: string;\n group: TicketBoardGroup;\n selectedItemId: string | null;\n canDragIn: boolean;\n canDragOut: boolean;\n isDropTarget: boolean;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n onGroupDragOver: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDragLeave: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDrop: (event: DragEvent<HTMLDivElement>, beforeItemId?: string) => void;\n}\n\nconst GroupSection = (props: GroupSectionProps) => {\n const {\n columnId,\n group,\n selectedItemId,\n canDragIn,\n canDragOut,\n isDropTarget,\n onDragStart,\n onDragEnd,\n onGroupDragOver,\n onGroupDragLeave,\n onGroupDrop,\n } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <Stack\n data-column-id={columnId}\n data-group-key={group.key}\n gap=\"0\"\n borderRadius=\"sm\"\n background={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n transition=\"background 150ms ease\"\n onDragOver={canDragIn ? onGroupDragOver : undefined}\n onDragLeave={canDragIn ? onGroupDragLeave : undefined}\n onDrop={canDragIn ? onGroupDrop : undefined}\n >\n <HStack\n px=\"xs\"\n py=\"2xs\"\n gap=\"2xs\"\n cursor=\"pointer\"\n _hover={{ bg: \"bg.hover\" }}\n borderRadius=\"sm\"\n onClick={() => setExpanded((v) => !v)}\n >\n <Box display=\"flex\" alignItems=\"center\" flexShrink={0}>\n <Icon\n as={ChevronRight}\n boxSize=\"14px\"\n color=\"fg.muted\"\n transform={expanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 0.15s ease\"\n />\n </Box>\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\">\n {group.label}\n </Text>\n <Badge variant=\"subtle\" colorPalette=\"gray\" size=\"sm\">\n {group.items.length}\n </Badge>\n </HStack>\n {expanded && (\n <Stack gap=\"sm\" pt=\"xs\">\n {group.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onGroupDrop(event, item.id);\n }\n : undefined\n }\n >\n <TicketCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={canDragOut}\n onDragStart={canDragOut ? onDragStart(item.id) : undefined}\n onDragEnd={canDragOut ? onDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n\nconst ColumnHeader = (props: ColumnHeaderProps) => {\n const { column, onCreateStart, onColumnAction } = props;\n\n return (\n <HStack padding=\"xs\" gap=\"xs\" alignItems=\"center\">\n <Text textStyle=\"label/L/medium\">{column.label}</Text>\n\n <Badge variant=\"subtle\" colorPalette={column.color ?? \"gray\"}>\n {column.items.length}\n </Badge>\n\n <Spacer />\n\n {column.canCreate && onCreateStart && (\n <Tooltip content=\"Create new ticket\">\n <IconButton size=\"2xs\" variant=\"outline\" onClick={() => onCreateStart(column.id)} aria-label=\"Create ticket\">\n <Icon as={Plus} boxSize=\"12px\" />\n </IconButton>\n </Tooltip>\n )}\n\n {column.actions.length > 0 && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={`Column actions for ${column.label}`}>\n <Icon as={MoreHorizontal} boxSize=\"12px\" />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"180px\" bg=\"bg\">\n {column.actions.map((action) => (\n <Menu.Item key={action.id} value={action.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n label={action.label}\n icon={<Icon as={action.icon} boxSize=\"16px\" />}\n onActivate={() => onColumnAction?.(column.id, action.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n )}\n </HStack>\n );\n};\n","import { Badge, Box, HStack, Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport {\n type ColumnDef,\n type ExpandedState,\n getCoreRowModel,\n getExpandedRowModel,\n type Row,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { type ComponentType, type ReactNode, useState } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowItem } from \"../list-row/list-row.types\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport { TagBadge } from \"./tag-badge\";\nimport type { TicketCardBadge, TicketCardTagBadge } from \"./ticket-card\";\n\nexport interface TicketListItem {\n id: string;\n ticketId: string;\n title: string;\n countBadge?: number;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n badges?: TicketCardBadge[];\n tagBadges?: TicketCardTagBadge[];\n date?: string;\n assigneeIcon?: ReactNode;\n children?: TicketListItem[];\n onClick?: () => void;\n onTagChange?: (tagName: string, newValue: string) => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropTicket?: (ticketId: string) => void;\n}\n\ninterface TicketListProps {\n items: TicketListItem[];\n selectedItemId?: string | null;\n onItemClick?: (item: TicketListItem) => void;\n}\n\nconst INDENT_STEP_PX = 12;\n\nexport const getTicketListIndentation = (depth: number) => {\n if (depth <= 0) return undefined;\n return `${depth * INDENT_STEP_PX}px`;\n};\n\nconst columns: ColumnDef<TicketListItem, unknown>[] = [{ id: \"ticket\" }];\n\nconst renderLabel = (item: TicketListItem) => {\n const hasTicketId = item.ticketId.trim().length > 0;\n return (\n <HStack gap=\"xs\" minW=\"0\" flex=\"1\">\n {hasTicketId ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" flexShrink={0} minW=\"70px\">\n {item.ticketId}\n </Text>\n ) : null}\n <Text textStyle=\"label/S/regular\" flex=\"1\" truncate>\n {item.title}\n </Text>\n </HStack>\n );\n};\n\nconst renderEndContent = (item: TicketListItem) => {\n const hasBadges = (item.badges?.length ?? 0) > 0 || (item.tagBadges?.length ?? 0) > 0;\n const hasCount = typeof item.countBadge === \"number\";\n const hasAssignee = Boolean(item.assigneeIcon);\n const hasDate = Boolean(item.date);\n\n if (!hasBadges && !hasCount && !hasAssignee && !hasDate) return null;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n {hasCount ? (\n <Badge variant=\"subtle\" colorPalette=\"gray\" size=\"sm\" flexShrink={0}>\n {item.countBadge}\n </Badge>\n ) : null}\n {hasBadges ? (\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <Badge key={badge.label} variant=\"subtle\" colorPalette={badge.color ?? \"gray\"} textStyle=\"label/XS/medium\">\n {badge.label}\n </Badge>\n ))}\n {item.tagBadges?.map((tag) => (\n <TagBadge\n key={tag.tagName}\n value={tag.value}\n label={tag.label}\n color={tag.value ? tag.color : \"gray\"}\n options={tag.options}\n onValueChange={item.onTagChange ? (newValue) => item.onTagChange!(tag.tagName, newValue) : undefined}\n />\n ))}\n </Wrap>\n ) : null}\n {hasAssignee ? <Box flexShrink={0}>{item.assigneeIcon}</Box> : null}\n {hasDate ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" flexShrink={0}>\n {item.date}\n </Text>\n ) : null}\n </HStack>\n );\n};\n\nconst buildListRowItem = (item: TicketListItem, hasChildren: boolean): ListRowItem => ({\n id: item.id,\n label: renderLabel(item),\n icon: item.statusIcon ? <Icon as={item.statusIcon} boxSize=\"16px\" /> : undefined,\n iconColor: item.statusColor ?? \"fg.muted\",\n endContent: renderEndContent(item),\n isContainer: hasChildren,\n contextMenuItems: item.contextMenuActions?.map((action) => ({\n id: action.key,\n label: action.label,\n icon: action.icon ?? undefined,\n disabled: action.isDisabled,\n onAction: action.onClick,\n })),\n});\n\nexport const TicketList = (props: TicketListProps) => {\n const { items, selectedItemId = null, onItemClick } = props;\n const [expanded, setExpanded] = useState<ExpandedState>(true);\n\n const table = useReactTable({\n data: items,\n columns,\n state: { expanded },\n onExpandedChange: setExpanded,\n getSubRows: (row) => row.children,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getRowId: (row) => row.id,\n });\n\n return (\n <Box>\n {table.getRowModel().rows.map((row) => (\n <TicketListRow key={row.id} row={row} selectedItemId={selectedItemId} onItemClick={onItemClick} />\n ))}\n </Box>\n );\n};\n\ninterface TicketListRowProps {\n row: Row<TicketListItem>;\n selectedItemId: string | null;\n onItemClick?: (item: TicketListItem) => void;\n}\n\nconst TicketListRow = (props: TicketListRowProps) => {\n const { row, selectedItemId, onItemClick } = props;\n const item = row.original;\n const canExpand = row.getCanExpand();\n const isSelected = item.id === selectedItemId;\n const rowItem = buildListRowItem(item, canExpand);\n\n const handleActivate = () => {\n if (canExpand) {\n row.toggleExpanded();\n return;\n }\n item.onClick?.();\n onItemClick?.(item);\n };\n\n return (\n <Box\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n draggable={item.draggable}\n onDragStart={(event) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n }}\n onDragOver={(event) => {\n if (!item.onDropTicket) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }}\n onDrop={(event) => {\n if (!item.onDropTicket) return;\n event.preventDefault();\n event.stopPropagation();\n const ticketId = event.dataTransfer.getData(\"text/plain\");\n if (!ticketId || ticketId === item.id) return;\n item.onDropTicket(ticketId);\n }}\n >\n <ListRow\n {...rowItem}\n variant=\"tree\"\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={row.getIsExpanded()}\n showExpandToggle={canExpand}\n onActivate={handleActivate}\n onToggleExpand={() => row.toggleExpanded()}\n />\n </Box>\n );\n};\n","import {\n type FilterCategory,\n type FilterState,\n type GroupingField,\n isTagKey,\n toTagName,\n type WorkspaceOrdering,\n type WorkspaceTagDefinition,\n type WorkspaceTicket,\n} from \"./types\";\n\ninterface GroupingOptions {\n columnGrouping: GroupingField;\n rowGrouping: GroupingField;\n knownColumnKeys?: string[];\n}\n\ninterface TicketRowGroup {\n key: string;\n label: string;\n tickets: WorkspaceTicket[];\n}\n\ninterface TicketColumnGroup {\n key: string;\n label: string;\n tickets: WorkspaceTicket[];\n rows: TicketRowGroup[];\n}\n\nconst FALLBACK_LABELS: Record<string, string> = {\n status: \"No status\",\n assignee: \"Unassigned\",\n};\n\nconst normalize = (value: string | null | undefined, fallback: string) => {\n if (!value || value.trim() === \"\") {\n return fallback;\n }\n\n return value;\n};\n\nconst getTagValue = (ticket: WorkspaceTicket, tagName: string) =>\n ticket.tags?.find((tag) => tag.name === tagName)?.value ?? null;\n\nconst getGroupingValue = (ticket: WorkspaceTicket, grouping: GroupingField) => {\n if (grouping === \"none\") {\n return \"All\";\n }\n\n if (grouping === \"status\") {\n return normalize(ticket.status, FALLBACK_LABELS.status!);\n }\n\n if (grouping === \"assignee\") {\n return normalize(ticket.assignee, FALLBACK_LABELS.assignee!);\n }\n\n if (isTagKey(grouping)) {\n const tagName = toTagName(grouping);\n const fallback = FALLBACK_LABELS[grouping] ?? `No ${tagName}`;\n return normalize(getTagValue(ticket, tagName), fallback);\n }\n\n return \"All\";\n};\n\nconst compareGroupKey = (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true });\n\nconst orderByDirection = (value: number, direction: WorkspaceOrdering[\"direction\"]) =>\n direction === \"asc\" ? value : value * -1;\n\nexport const orderTickets = (\n tickets: WorkspaceTicket[],\n ordering: WorkspaceOrdering,\n tagDefinitions: WorkspaceTagDefinition[] = [],\n) => {\n if (ordering.field === \"manual\") {\n return tickets;\n }\n\n return [...tickets].sort((a, b) => {\n if (ordering.field === \"updated\") {\n const left = new Date(a.updatedAt ?? 0).getTime();\n const right = new Date(b.updatedAt ?? 0).getTime();\n return orderByDirection(left - right, ordering.direction);\n }\n\n if (ordering.field === \"title\") {\n return orderByDirection(a.title.localeCompare(b.title), ordering.direction);\n }\n\n if (isTagKey(ordering.field)) {\n const tagName = toTagName(ordering.field);\n const def = tagDefinitions.find((d) => d.name === tagName);\n const leftVal = getTagValue(a, tagName);\n const rightVal = getTagValue(b, tagName);\n\n if (def) {\n const toOptionIndex = (value: string | null) => {\n if (value === null) {\n return def.options.length;\n }\n\n const index = def.options.findIndex((o) => o.value === value);\n return index === -1 ? def.options.length + 1 : index;\n };\n\n const leftIndex = toOptionIndex(leftVal);\n const rightIndex = toOptionIndex(rightVal);\n return orderByDirection(leftIndex - rightIndex, ordering.direction);\n }\n\n return orderByDirection(\n (leftVal ?? \"\").localeCompare(rightVal ?? \"\", undefined, { numeric: true }),\n ordering.direction,\n );\n }\n\n return orderByDirection(a.ticketId.localeCompare(b.ticketId, undefined, { numeric: true }), ordering.direction);\n });\n};\n\nexport const groupTickets = (tickets: WorkspaceTicket[], options: GroupingOptions): TicketColumnGroup[] => {\n const { columnGrouping, rowGrouping, knownColumnKeys } = options;\n const groupedByColumn = new Map<string, WorkspaceTicket[]>();\n\n // Seed with known keys so empty columns are preserved\n if (knownColumnKeys) {\n for (const key of knownColumnKeys) {\n groupedByColumn.set(key, []);\n }\n }\n\n for (const ticket of tickets) {\n const key = getGroupingValue(ticket, columnGrouping);\n groupedByColumn.set(key, [...(groupedByColumn.get(key) ?? []), ticket]);\n }\n\n const columnEntries = [...groupedByColumn.entries()].sort(([left], [right]) => compareGroupKey(left, right));\n\n return columnEntries.map(([columnKey, columnTickets]) => {\n if (rowGrouping === \"none\") {\n return {\n key: columnKey,\n label: columnKey,\n tickets: columnTickets,\n rows: [],\n };\n }\n\n const groupedByRow = new Map<string, WorkspaceTicket[]>();\n\n for (const ticket of columnTickets) {\n const rowKey = getGroupingValue(ticket, rowGrouping);\n groupedByRow.set(rowKey, [...(groupedByRow.get(rowKey) ?? []), ticket]);\n }\n\n const rows = [...groupedByRow.entries()]\n .sort(([left], [right]) => compareGroupKey(left, right))\n .map(([rowKey, rowTickets]) => ({\n key: rowKey,\n label: rowKey,\n tickets: rowTickets,\n }));\n\n return {\n key: columnKey,\n label: columnKey,\n tickets: columnTickets,\n rows,\n };\n });\n};\n\nconst getTicketFilterValues = (ticket: WorkspaceTicket, category: FilterCategory): string[] => {\n if (category === \"status\") {\n return [normalize(ticket.status, FALLBACK_LABELS.status!)];\n }\n\n if (category === \"assignee\") {\n return [normalize(ticket.assignee, FALLBACK_LABELS.assignee!)];\n }\n\n if (isTagKey(category)) {\n const tagName = toTagName(category);\n const value = getTagValue(ticket, tagName);\n return value ? [value] : [];\n }\n\n return [];\n};\n\nexport const filterTickets = (tickets: WorkspaceTicket[], filters: FilterState) => {\n const activeFilters = Object.entries(filters).filter(([, values]) => values && values.length > 0);\n\n if (activeFilters.length === 0) {\n return tickets;\n }\n\n return tickets.filter((ticket) =>\n activeFilters.every(([category, values]) => {\n const ticketValues = getTicketFilterValues(ticket, category as FilterCategory);\n return ticketValues.some((value) => values?.includes(value));\n }),\n );\n};\n\nexport const countFilterValues = (tickets: WorkspaceTicket[], category: FilterCategory) => {\n const counts: Record<string, number> = {};\n\n for (const ticket of tickets) {\n for (const value of getTicketFilterValues(ticket, category)) {\n counts[value] = (counts[value] ?? 0) + 1;\n }\n }\n\n return counts;\n};\n\nexport type { TicketColumnGroup, TicketRowGroup };\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\n\nimport {\n DEFAULT_WORKSPACE_SETTINGS,\n type DisplayProperty,\n type FilterCategory,\n type FilterState,\n type WorkspaceSettings,\n} from \"./types\";\nimport { omitFilterCategory } from \"./workspace-helpers\";\n\ninterface WorkspaceSnapshot {\n settings: WorkspaceSettings;\n filters: FilterState;\n}\n\ninterface WorkspaceState extends WorkspaceSnapshot {\n setViewMode: (viewMode: WorkspaceSettings[\"viewMode\"]) => void;\n setColumnGrouping: (columnGrouping: WorkspaceSettings[\"columnGrouping\"]) => void;\n setRowGrouping: (rowGrouping: WorkspaceSettings[\"rowGrouping\"]) => void;\n setOrdering: (ordering: WorkspaceSettings[\"ordering\"]) => void;\n setOrderingField: (field: WorkspaceSettings[\"ordering\"][\"field\"]) => void;\n toggleSortDirection: () => void;\n toggleDisplayProperty: (property: WorkspaceSettings[\"displayProperties\"][number]) => void;\n setFilter: (category: FilterCategory, values: string[]) => void;\n toggleFilterValue: (category: FilterCategory, value: string) => void;\n clearFilter: (category: FilterCategory) => void;\n clearAllFilters: () => void;\n reset: () => void;\n}\n\ninterface CreateTicketsWorkspaceStoreOptions {\n storageKey: string;\n initialState?: Partial<WorkspaceSnapshot>;\n}\n\nconst WORKSPACE_STORE_NAMESPACE = \"pstdio/ui/tickets-workspace\";\n\nconst toStorageName = (storageKey: string) => `${WORKSPACE_STORE_NAMESPACE}/${storageKey}`;\n\nconst DEFAULT_SNAPSHOT: WorkspaceSnapshot = {\n settings: DEFAULT_WORKSPACE_SETTINGS,\n filters: {},\n};\n\nconst createNoopStorage = () => ({\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n});\n\nconst toggleValue = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\nexport const createTicketsWorkspaceStore = (options: CreateTicketsWorkspaceStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = {\n settings: { ...DEFAULT_SNAPSHOT.settings, ...(initialState?.settings ?? {}) },\n filters: initialState?.filters ?? DEFAULT_SNAPSHOT.filters,\n };\n\n return createStore<WorkspaceState>()(\n persist(\n (set) => ({\n ...snapshot,\n setViewMode: (viewMode) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, viewMode },\n })),\n setColumnGrouping: (columnGrouping) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, columnGrouping },\n })),\n setRowGrouping: (rowGrouping) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, rowGrouping },\n })),\n setOrdering: (ordering) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, ordering },\n })),\n setOrderingField: (field) =>\n set((state) => ({\n ...state,\n settings: {\n ...state.settings,\n ordering: {\n ...state.settings.ordering,\n field,\n },\n },\n })),\n toggleSortDirection: () =>\n set((state) => ({\n ...state,\n settings: {\n ...state.settings,\n ordering: {\n ...state.settings.ordering,\n direction: state.settings.ordering.direction === \"asc\" ? \"desc\" : \"asc\",\n },\n },\n })),\n toggleDisplayProperty: (property) =>\n set((state) => {\n const displayProperties = state.settings.displayProperties.includes(property)\n ? state.settings.displayProperties.filter((value) => value !== property)\n : [...state.settings.displayProperties, property];\n\n return {\n ...state,\n settings: {\n ...state.settings,\n displayProperties,\n },\n };\n }),\n setFilter: (category, values) =>\n set((state) => ({\n ...state,\n filters: {\n ...state.filters,\n [category]: values,\n },\n })),\n toggleFilterValue: (category, value) =>\n set((state) => {\n const currentValues = state.filters[category] ?? [];\n const nextValues = toggleValue(currentValues, value);\n const nextFilters =\n nextValues.length === 0\n ? omitFilterCategory(state.filters, category)\n : { ...state.filters, [category]: nextValues };\n\n return { ...state, filters: nextFilters };\n }),\n clearFilter: (category) =>\n set((state) => {\n return {\n ...state,\n filters: omitFilterCategory(state.filters, category),\n };\n }),\n clearAllFilters: () => set((state) => ({ ...state, filters: {} })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(storageKey),\n version: 1,\n migrate: (persisted, version) => {\n if (version === 0) {\n const state = persisted as WorkspaceSnapshot;\n // Remove legacy \"labels\" filter category\n const filters = { ...state.filters };\n delete (filters as Record<string, unknown>).labels;\n\n // Remove legacy \"labels\" display property\n const displayProperties = state.settings.displayProperties.filter(\n (p) => p !== (\"labels\" as DisplayProperty),\n );\n\n return {\n ...state,\n settings: { ...state.settings, displayProperties },\n filters,\n };\n }\n return persisted as WorkspaceSnapshot;\n },\n storage: createJSONStorage(() => {\n if (typeof globalThis.localStorage === \"undefined\") {\n return createNoopStorage();\n }\n\n return globalThis.localStorage;\n }),\n partialize: (state) => ({\n settings: state.settings,\n filters: state.filters,\n }),\n },\n ),\n );\n};\n\nconst workspaceStoreRegistry = new Map<string, ReturnType<typeof createTicketsWorkspaceStore>>();\n\nexport const getTicketsWorkspaceStore = (storageKey: string) => {\n const existingStore = workspaceStoreRegistry.get(storageKey);\n if (existingStore) {\n return existingStore;\n }\n\n const store = createTicketsWorkspaceStore({ storageKey });\n workspaceStoreRegistry.set(storageKey, store);\n\n return store;\n};\n\nexport const useTicketsWorkspaceStore = <T>(storageKey: string, selector: (state: WorkspaceState) => T) => {\n const store = getTicketsWorkspaceStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { WorkspaceState };\n","import { Box, HStack, Stack } from \"@chakra-ui/react\";\n\nimport { EmptyState } from \"@/components/empty-state\";\n\nimport { DisplayMenu } from \"./display-menu\";\nimport { FilterMenu } from \"./filter-menu\";\nimport {\n TicketBoard,\n type TicketBoardColumn,\n type TicketBoardColumnAction,\n type TicketBoardGroup,\n} from \"./ticket-board\";\nimport {\n countFilterValues,\n filterTickets,\n groupTickets,\n orderTickets,\n type TicketColumnGroup,\n} from \"./ticket-grouping\";\nimport { TicketList, type TicketListItem } from \"./ticket-list\";\nimport {\n DEFAULT_DISPLAY_PROPERTY_OPTIONS,\n DEFAULT_GROUPING_OPTIONS,\n DEFAULT_ORDERING_OPTIONS,\n type DisplayProperty,\n type GroupingField,\n type OrderingField,\n type WorkspaceFilterCategory,\n type WorkspaceOption,\n type WorkspaceSettings,\n type WorkspaceTagDefinition,\n type WorkspaceTicket,\n} from \"./types\";\nimport { useTicketsWorkspaceStore } from \"./use-workspace-store\";\nimport {\n buildDefaultFilterCategories,\n buildTagOptions,\n resolveKnownColumnKeys,\n resolveListDropTargetColumnKey,\n toBadges,\n toTagBadges,\n toTitleCase,\n} from \"./workspace-helpers\";\n\ninterface BoardColumnConfig {\n color?: string;\n canDragIn?: boolean;\n canDragOut?: boolean;\n canCreate?: boolean;\n actions?: TicketBoardColumnAction[];\n}\n\ninterface TicketsWorkspaceProps<TTicket extends WorkspaceTicket = WorkspaceTicket> {\n tickets: TTicket[];\n storageKey: string;\n tagDefinitions?: WorkspaceTagDefinition[];\n selectedTicketId?: string | null;\n groupingOptions?: WorkspaceOption<GroupingField>[];\n orderingOptions?: WorkspaceOption<OrderingField>[];\n displayPropertyOptions?: WorkspaceOption<DisplayProperty>[];\n filterCategories?: WorkspaceFilterCategory[];\n knownColumnKeys?: string[];\n emptyTitle?: string;\n emptyDescription?: string;\n hideToolbar?: boolean;\n onTicketClick?: (ticket: TTicket) => void;\n onTagChange?: (ticketId: string, tagName: string, newValue: string) => void;\n onMoveTicket?: (\n ticketId: string,\n targetColumnId: string,\n context?: { columnGrouping: GroupingField; beforeTicketId?: string },\n ) => void;\n onMoveToGroup?: (\n ticketId: string,\n targetGroupKey: string,\n context?: { rowGrouping: GroupingField; beforeTicketId?: string },\n ) => void;\n onCreateTicket?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n}\n\ninterface BuildListItemsInput<TTicket extends WorkspaceTicket> {\n settings: WorkspaceSettings;\n visibleTickets: TTicket[];\n grouped: TicketColumnGroup[];\n tagDefinitions: WorkspaceTagDefinition[];\n onTicketClick?: (ticket: TTicket) => void;\n onTagChange?: (ticketId: string, tagName: string, newValue: string) => void;\n onMoveTicket?: (\n ticketId: string,\n targetColumnId: string,\n context?: { columnGrouping: GroupingField; beforeTicketId?: string },\n ) => void;\n onMoveToGroup?: (\n ticketId: string,\n targetGroupKey: string,\n context?: { rowGrouping: GroupingField; beforeTicketId?: string },\n ) => void;\n}\n\nconst buildListItems = <TTicket extends WorkspaceTicket>(input: BuildListItemsInput<TTicket>): TicketListItem[] => {\n const { settings, visibleTickets, grouped, tagDefinitions, onTicketClick, onTagChange, onMoveTicket, onMoveToGroup } =\n input;\n\n const toListItem = (ticket: TTicket, placement?: { columnKey?: string; rowKey?: string }): TicketListItem => ({\n id: ticket.id,\n ticketId: settings.displayProperties.includes(\"id\") ? ticket.ticketId : \"\",\n title: ticket.title,\n badges: toBadges(ticket, settings.displayProperties),\n tagBadges: toTagBadges(ticket, settings.displayProperties, tagDefinitions),\n onClick: () => onTicketClick?.(ticket),\n onTagChange: onTagChange ? (tagName, newValue) => onTagChange(ticket.id, tagName, newValue) : undefined,\n draggable: Boolean(onMoveTicket),\n onDropTicket:\n settings.ordering.field === \"manual\" && onMoveTicket\n ? (draggedTicketId) => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (!targetColumnKey) {\n return;\n }\n\n onMoveTicket(draggedTicketId, targetColumnKey, {\n columnGrouping: settings.columnGrouping,\n beforeTicketId: ticket.id,\n });\n\n const rowKey = placement?.rowKey;\n if (settings.rowGrouping !== \"none\" && onMoveToGroup && rowKey) {\n onMoveToGroup(draggedTicketId, rowKey, {\n rowGrouping: settings.rowGrouping,\n beforeTicketId: ticket.id,\n });\n }\n }\n : undefined,\n });\n\n const toGroupListItem = (\n group: { key: string; label: string; tickets: WorkspaceTicket[] },\n parent?: { columnKey: string },\n ): TicketListItem => ({\n id: parent ? `group::${parent.columnKey}::${group.key}` : `group::${group.key}`,\n ticketId: \"\",\n title: toTitleCase(group.label),\n countBadge: group.tickets.length,\n onDropTicket:\n onMoveTicket && settings.columnGrouping !== \"none\"\n ? (draggedTicketId) => {\n const columnKey = parent?.columnKey ?? group.key;\n onMoveTicket(draggedTicketId, columnKey, {\n columnGrouping: settings.columnGrouping,\n });\n\n if (settings.rowGrouping !== \"none\" && onMoveToGroup && parent) {\n onMoveToGroup(draggedTicketId, group.key, {\n rowGrouping: settings.rowGrouping,\n });\n }\n }\n : undefined,\n children: orderTickets(group.tickets, settings.ordering, tagDefinitions).map((ticket) =>\n toListItem(ticket as TTicket, {\n columnKey: parent?.columnKey ?? group.key,\n rowKey: parent ? group.key : undefined,\n }),\n ),\n });\n\n if (settings.columnGrouping === \"none\") {\n return orderTickets(visibleTickets, settings.ordering, tagDefinitions).map((ticket) =>\n toListItem(ticket as TTicket),\n );\n }\n\n return grouped.map((group) => {\n if (group.rows.length > 0) {\n return {\n id: `group::${group.key}`,\n ticketId: \"\",\n title: toTitleCase(group.label),\n countBadge: group.tickets.length,\n onDropTicket: onMoveTicket\n ? (draggedTicketId: string) => {\n onMoveTicket(draggedTicketId, group.key, {\n columnGrouping: settings.columnGrouping,\n });\n }\n : undefined,\n children: group.rows.map((row) => toGroupListItem(row, { columnKey: group.key })),\n } satisfies TicketListItem;\n }\n\n return toGroupListItem(group);\n });\n};\n\nexport const TicketsWorkspace = <TTicket extends WorkspaceTicket>(props: TicketsWorkspaceProps<TTicket>) => {\n const {\n tickets,\n storageKey,\n tagDefinitions = [],\n selectedTicketId = null,\n groupingOptions: groupingOptionsProp,\n orderingOptions: orderingOptionsProp,\n displayPropertyOptions: displayPropertyOptionsProp,\n filterCategories,\n knownColumnKeys: knownColumnKeysProp,\n emptyTitle = \"No tickets found\",\n emptyDescription = \"Try changing filters or display settings.\",\n onTicketClick,\n onTagChange,\n onMoveTicket,\n onMoveToGroup,\n onCreateTicket,\n onColumnAction,\n getBoardColumnConfig,\n hideToolbar = false,\n } = props;\n\n const tagOptions = buildTagOptions(tagDefinitions);\n\n const groupingOptions = groupingOptionsProp ?? [...DEFAULT_GROUPING_OPTIONS, ...tagOptions.grouping];\n const orderingOptions = orderingOptionsProp ?? [...DEFAULT_ORDERING_OPTIONS, ...tagOptions.ordering];\n const displayPropertyOptions = displayPropertyOptionsProp ?? [\n ...DEFAULT_DISPLAY_PROPERTY_OPTIONS,\n ...tagOptions.display,\n ];\n\n const settings = useTicketsWorkspaceStore(storageKey, (state) => state.settings);\n const filters = useTicketsWorkspaceStore(storageKey, (state) => state.filters);\n const setViewMode = useTicketsWorkspaceStore(storageKey, (state) => state.setViewMode);\n const setColumnGrouping = useTicketsWorkspaceStore(storageKey, (state) => state.setColumnGrouping);\n const setRowGrouping = useTicketsWorkspaceStore(storageKey, (state) => state.setRowGrouping);\n const setOrderingField = useTicketsWorkspaceStore(storageKey, (state) => state.setOrderingField);\n const toggleSortDirection = useTicketsWorkspaceStore(storageKey, (state) => state.toggleSortDirection);\n const toggleDisplayProperty = useTicketsWorkspaceStore(storageKey, (state) => state.toggleDisplayProperty);\n const toggleFilterValue = useTicketsWorkspaceStore(storageKey, (state) => state.toggleFilterValue);\n const clearFilter = useTicketsWorkspaceStore(storageKey, (state) => state.clearFilter);\n const clearAllFilters = useTicketsWorkspaceStore(storageKey, (state) => state.clearAllFilters);\n\n const visibleTickets = filterTickets(tickets, filters) as TTicket[];\n\n const categoryOptions = filterCategories ?? buildDefaultFilterCategories(tickets, tagDefinitions);\n\n const countsByCategory = Object.fromEntries(\n categoryOptions.map((category) => [category.id, countFilterValues(tickets, category.id)]),\n );\n\n const knownColumnKeys = resolveKnownColumnKeys(\n settings.columnGrouping,\n knownColumnKeysProp,\n categoryOptions,\n filters,\n );\n\n const grouped = groupTickets(visibleTickets, {\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys,\n });\n\n const listItems = buildListItems({\n settings,\n visibleTickets,\n grouped,\n tagDefinitions,\n onTicketClick,\n onTagChange,\n onMoveTicket,\n onMoveToGroup,\n });\n\n const toBoardItems = (tickets: WorkspaceTicket[]) =>\n tickets.map((ticket) => ({\n id: ticket.id,\n cardProps: {\n ticketId: settings.displayProperties.includes(\"id\") ? ticket.ticketId : \"\",\n parentPath: ticket.parentPath,\n title: ticket.title,\n badges: toBadges(ticket, settings.displayProperties),\n tagBadges: toTagBadges(ticket, settings.displayProperties, tagDefinitions),\n onClick: () => onTicketClick?.(ticket as TTicket),\n onTagChange: onTagChange\n ? (tagName: string, newValue: string) => onTagChange(ticket.id, tagName, newValue)\n : undefined,\n },\n }));\n\n const boardColumns: TicketBoardColumn[] = grouped.map((column) => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n const orderedTickets = orderTickets(column.tickets, settings.ordering, tagDefinitions);\n\n const groups: TicketBoardGroup[] | undefined =\n column.rows.length > 0\n ? column.rows.map((row) => ({\n key: row.key,\n label: toTitleCase(row.label),\n items: toBoardItems(orderTickets(row.tickets, settings.ordering, tagDefinitions)),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color,\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(orderedTickets),\n groups,\n } satisfies TicketBoardColumn;\n });\n\n return (\n <Stack gap=\"sm\" height=\"100%\" minH=\"0\">\n {hideToolbar ? null : (\n <HStack justifyContent=\"flex-end\" gap=\"2xs\">\n <FilterMenu\n categories={categoryOptions}\n filters={filters}\n countsByCategory={countsByCategory}\n onToggleFilterValue={toggleFilterValue}\n onClearFilter={clearFilter}\n onClearAll={clearAllFilters}\n />\n <DisplayMenu\n settings={settings}\n groupingOptions={groupingOptions}\n orderingOptions={orderingOptions}\n displayPropertyOptions={displayPropertyOptions}\n onViewModeChange={setViewMode}\n onColumnGroupingChange={setColumnGrouping}\n onRowGroupingChange={setRowGrouping}\n onOrderingFieldChange={setOrderingField}\n onSortDirectionToggle={toggleSortDirection}\n onDisplayPropertyToggle={toggleDisplayProperty}\n />\n </HStack>\n )}\n\n {settings.viewMode === \"board\" ? (\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <TicketBoard\n columns={boardColumns}\n selectedItemId={selectedTicketId}\n onMoveItem={(ticketId, targetColumnId, context) =>\n onMoveTicket?.(ticketId, targetColumnId, {\n columnGrouping: settings.columnGrouping,\n beforeTicketId: context?.beforeItemId,\n })\n }\n onMoveToGroup={(ticketId, targetGroupKey, context) =>\n onMoveToGroup?.(ticketId, targetGroupKey, {\n rowGrouping: settings.rowGrouping,\n beforeTicketId: context?.beforeItemId,\n })\n }\n onCreateStart={onCreateTicket}\n onColumnAction={onColumnAction}\n />\n ) : (\n <EmptyState\n title={emptyTitle}\n description={emptyDescription}\n height=\"100%\"\n borderWidth=\"1px\"\n borderRadius=\"md\"\n />\n )}\n </Box>\n ) : listItems.length > 0 ? (\n <TicketList items={listItems} selectedItemId={selectedTicketId} />\n ) : (\n <EmptyState title={emptyTitle} description={emptyDescription} borderWidth=\"1px\" borderRadius=\"md\" />\n )}\n </Stack>\n );\n};\n\nexport type { TicketsWorkspaceProps };\n"],"names":["ActivityAvatar","props","$","_c","actor","icon","color","t0","background","t1","undefined","t2","Box","avatarSrc","t3","avatarAlt","name","t4","Avatar","t5","t6","t7","TimestampSeparator","Symbol","for","jsx","ActivityCommentHeader","timestamp","actions","Text","jsxs","Fragment","HStack","ActivityReply","children","rootProps","Stack","ActivityComment","composer","replies","hasReplies","Children","count","ActivityComposer","value","defaultValue","placeholder","variant","minRows","attachLabel","submitLabel","onAttach","onChange","onSubmit","internalValue","setInternalValue","useState","currentValue","isInline","canSubmit","trim","length","handleChange","nextValue","handleSubmit","event","preventDefault","chakra","borderColor","boxShadow","Textarea","outline","currentTarget","Spacer","Tooltip","IconButton","Icon","Paperclip","ArrowUp","EventSeparator","ActivityEvent","iconColor","iconBackground","Timeline","t8","ActivityRoot","ActivityHeader","title","ActivityFeed","ActivityTimeline","Activity","Root","Header","Feed","Event","Comment","Reply","Composer","DEFAULT_RESIZABLE_MIN_WIDTH","AttachedPanel","header","minWidth","rest","width","resizable","resolvedMinWidth","resolvedWidth","Flex","linkProps","alignItems","display","gap","minW","maxW","overflow","textOverflow","whiteSpace","_active","_focus","_focusVisible","Breadcrumb","React","forwardRef","ref","LinkComponent","items","separator","separatorGap","linkComponent","item","index","last","isInteractive","Boolean","url","onClick","itemContent","ChakraBreadcrumb","map","BubbleButton","containerProps","tooltip","isOpen","button","headerVariantStyles","main","h","px","narrow","input","BubblePanel","menu","onClose","closeLabel","onPopOut","popOutLabel","height","testId","ariaLabel","SquareArrowOutUpRight","Minus","t9","t10","t11","t12","Portal","defaultThemePreferences","id","mode","isThemePreference","themePreferences","some","theme","getThemePreferenceMode","find","preference","getThemePreferenceClassName","getThemePreferenceClassNames","THEME_TOKEN_PATHS_ATTRIBUTE","getThemePreferenceCssVariableName","tokenPath","replaceAll","removeThemeTokens","el","tokens","Object","keys","style","removeProperty","removeTrackedThemeTokens","tokenPaths","getAttribute","split","filter","setAttribute","applyThemeTokens","entries","setProperty","join","applyThemePreference","document","root","documentElement","body","option","previousTheme","previousPreference","classList","remove","add","colorScheme","STORAGE_KEY","ThemePreferenceContext","createContext","getDefaultThemePreference","getInitialThemePreference","window","stored","localStorage","getItem","prefersDark","matchMedia","matches","ThemePreferenceProvider","initialPreference","themePreference","setThemePreference","setItem","useEffect","prev","nextMode","toggleThemePreference","useThemePreference","context","useContext","Error","customTheme","base","inherit","rules","colors","isMonacoTheme","EDITOR_THEME_NAME","useEditorTheme","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","useRef","monaco","current","editor","defineTheme","setTheme","monaco_0","CodeEditor","defaultCode","code","showLineNumbers","isEditable","language","disableScroll","applyEditorTheme","enabled","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","tabSize","minimap","fontSize","readOnly","lineNumbers","options","languages","typescript","typescriptDefaults","setCompilerOptions","JsxEmit","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","Editor","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","DiffEditor","contentPlaceholderBackgroundImage","ContentPlaceholder","backgroundClip","backgroundImage","Label","DeleteConfirmationModal","isDeleting","setIsDeleting","headline","buttonText","notificationText","onDelete","open","handleDelete","Dialog","CloseButton","Button","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","Set","getDiffLineCount","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","path","fileName","pop","has","endsWith","createDiffCardBodyModel","diff","filePath","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","kind","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","DiffCardBody","model","LargeDiffPlaceholder","EmptyState","DeferredDiffLoad","actionLabel","isLoadingDiff","onAction","LoadingDiffContent","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isExpanded","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","requestedPath","resolveRequestedDiffPath","useDiffContentLoader","isSelected","setLoadingDiff","setRequestedPath","setLoadError","loadDiff","DiffCard","onToggleExpanded","onSelect","DiffCardHeader","t13","bg","stopPropagation","ChevronDown","ChevronRight","change","DiffBubble","Grid","getDiffPath","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","ITEM_GAP_HEIGHT","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","buildInitialCollapsedPaths","diffs","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","collapsedPaths","next","delete","resolveCollapsedPathsForSelectedDiff","selectedDiffPath","DiffDrawer","onSelectDiffPath","onExpansionStateChange","expansionCommand","scrollRef","reportedExpansionStateRef","setCollapsedPaths","largeDiffOptInPaths","setLargeDiffOptInPaths","virtualizer","useVirtualizer","getScrollElement","estimateSize","getItemKey","overscan","findIndex","scrollToIndex","align","behavior","action","expansionState","allExpanded","size","allCollapsed","every","reportedExpansionState","ScrollArea","p","spaceY","toggleExpanded","showFullDiff","virtualItems","getVirtualItems","overflowAnchor","getTotalSize","virtualItem","measureElement","top","start","key","RESIZE_SEPARATOR_HOVER_STYLE","_before","RESIZE_HANDLE_WIDTH","ResizeHandle","bounds","contentPanelId","resizablePanelId","resizeLabel","resolvedPanelWidth","showResizeSeparator","onResizeKeyDown","onResizeStart","maxSize","Math","round","content","position","bottom","insetInlineStart","w","transform","FALLBACK_ROOT_WIDTH","KEYBOARD_RESIZE_STEP","MIN_COLLAPSE_THRESHOLD_PX","MAX_COLLAPSE_THRESHOLD_PX","clamp","min","max","resolveRootWidth","rootWidth","resolveCollapseThreshold","minSizePx","resolveResizableBoundsPx","maxFromContent","contentMinSizePx","configuredMax","maxSizePx","minSize","getElementWidth","element","getBoundingClientRect","applyPanelWidthToElement","panel","flexBasis","flexGrow","flexShrink","clearPanelInlineStyles","ResizableSplitLayout","contentPanel","controlledCollapsed","onCollapsedChange","onSizeChange","resizablePanel","resizableSide","defaultSizePx","collapsed","collapsible","useId","rootRef","resizablePanelRef","contentPanelRef","cleanupDragRef","_temp","lastWidthRef","panelWidth","setPanelWidth","setRootWidth","internalCollapsed","setInternalCollapsed","collapseThresholdPx","updateRootWidth","ResizeObserver","observer","observe","disconnect","t14","applyPanelWidth","t15","t16","t17","width_0","rootWidth_0","nextBounds","nextWidth","commitPanelWidth","t18","nextCollapsed","setCollapsed","t19","resizeHandle","rootWidth_1","bounds_0","startX","clientX","startWidth","direction","previousCursor","cursor","previousUserSelect","userSelect","nextWidth_0","nextCollapsed_0","animationFrame","setDraggingPanelState","pointerEvents","schedulePanelWidth","requestAnimationFrame","handlePointerMove","moveEvent","rawWidth","cleanup","removeEventListener","hasPointerCapture","pointerId","releasePointerCapture","cancelAnimationFrame","_temp2","setPointerCapture","addEventListener","once","handleResizeStart","t20","event_0","direction_0","width_1","handleResizeKeyDown","t21","t22","t23","t24","t25","resizablePanelNode","t26","contentPanelNode","t27","resizeTrigger","t28","t29","normalizeChangedFilePath","segment","sortNodes","nodes","sort","left","right","type","localeCompare","forEach","node","dedupePaths","paths","Array","from","buildFlatTree","buildChangedFilesTree","treeById","Map","rootNodes","segments","parentPath","parentNode","currentPath","isFile","nodeId","existingNode","get","nextNode","set","push","collectExpandedFolderIds","folderIds","visit","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","viewMode","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","state","setViewMode","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","ResourceContextMenu","contentMinWidth","contentBackground","positioning","placement","Menu","ListRow","label","endContent","isDisabled","filterSearchableMenuItems","query","normalizedQuery","toLowerCase","searchText","includes","shouldResetSearchableMenuQuery","currentListId","nextListId","resolveActiveListConfig","isShowingParent","parentList","childConfig","filterItems","showSearch","searchPlaceholder","emptyState","contentTestId","closeOnSelect","listId","searchInputBorderProps","SearchableMenu","trigger","maxListHeight","lazyMount","onOpenChange","onFocusOutside","portalled","hasParentList","internalOpen","setInternalOpen","setQuery","activeList","setActiveList","inputRef","config","filteredItems","previousListIdRef","timeout","setTimeout","focus","clearTimeout","details","handleOpenChange","details_0","i","handleMenuItemSelect","renderIcon","item_0","description","secondaryLabel","disabled","tooltipLabel","buildRowItem","_temp3","selectedLabel","selectedIcon","resolvedHeader","shouldShowSeparator","searchInput","InputGroup","Search","Input","event_1","target","_temp4","T0","T1","overscrollBehavior","item_1","Content","Positioner","t30","t31","event_2","SearchableActionMenu","menuItems","emptyMenuLabel","keyedTooltip","child","RowActions","opacity","ListRowMenuItemIcon","ListRowMenu","mainAxis","offset","RowContent","showChevron","tone","isDenseVariant","labelTextStyle","descriptionTextStyle","descriptionMarginLeft","bb0","labelColor","descriptionColor","transition","indicator","computePaddingLeft","depth","ListRowContent","resolveListRowSizing","hasDescription","rowHeight","minHeight","className","contextMenuItems","draggable","href","isContainer","isNavigable","menuPlacement","navigationIntent","onActivate","onDragEnd","onDragOver","onDragStart","onDrop","onPointerMove","onToggleExpand","showExpandToggle","asChild","menuOpen","setMenuOpen","dragProps","hasChildren","hasMenuItems","handleActivate","defaultPrevented","handleClick","handleMenuClick","paddingLeft","verticalPadding","activationProps","role","maxWidth","justifyContent","py","pl","borderRadius","_hover","textAlign","textDecoration","rowProps","children_0","contextActions","wrapWithContextMenu","children_1","menuItem","wrapWithMenu","children_2","wrapWithTooltip","children_3","wrap","entry","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","isInList","values","isActiveNode","activeNodeId","isArray","isNavigableNode","getNodeChildren","hasExpandableChildren","TreeListNodeRow","sectionId","level","expandedNodeIds","rowVariant","nodeGap","onNavigate","onToggleNode","renderChildren","expanded","isActive","canLink","intent","rowItem","row","childNode","TreeListSectionActions","TreeListSectionHeader","section","onToggle","appendVisibleNodeRows","rows","buildVirtualRows","sections","expandedSectionIds","VirtualTreeList","onToggleSection","TreeList","sectionGap","virtualize","sectionExpanded","changeLabels","added","copied","deleted","permissionChange","renamed","changeColors","getFilePathParts","lastSlashIndex","lastIndexOf","dirPath","slice","renderFileLabel","toTreeListNodes","onSelectPath","resolveFileIcon","changeByPath","fileIcon","FileText","Badge","FileListPanel","onSearchQueryChange","onToggleFolder","fileTree","overflowX","buildChangeByPath","sumDiffStats","reduce","total","buildFilteredDiffs","normalizedSearchQuery","matchingDiffs","orderByPath","leftOrder","Number","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","MenuItemContent","checked","Check","DiffViewerLoading","Skeleton","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","filteredDiffPathKey","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasChangedFiles","hasDiffs","hasExpandableItems","resolvedSelectedPath","totalDiff","diffPaths","filePaths","filteredDiffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","isExpandAllDisabled","isCollapseAllDisabled","filePaths_0","tree","diffPaths_0","filePaths_1","expandAllFilesAndDiffs","collapseAllFilesAndDiffs","path_0","current_1","selectChangedFilePath","Settings2","PanelLeftClose","PanelLeftOpen","ListTree","List","Rows2","SquareSplitHorizontal","ChevronsUpDown","ChevronsDownUp","t32","diffPanel","t33","current_0","ErrorBoundary","Component","error","getDerivedStateFromError","componentDidCatch","info","console","handleReset","setState","onReset","render","fallback","ErrorFallback","message","AbsoluteCenter","AlertMessage","HorizontalMenuStack","borderBottomWidth","SimpleCard","SimpleCardBody","IntegrationCard","version","category","active","ItemSection","defaultOpen","Collapsible","e","PANEL_HEADER_HEIGHT","PanelSidebarRegistrationContext","usePanelSidebarRegistration","registration","setRegistration","onWidthChange","toaster","createToaster","pauseOnPageIdle","duration","Toaster","ChakraToaster","mdDown","toast","Toast","md","Spinner","noop","DEFAULT_SIDEBAR_REGISTRATION","PanelLayout","sidebar","errorLabel","sidebarRegistration","setSidebarRegistration","sidebarPanel","Outlet","PanelSectionLayout","minH","getNoticeKey","notice","getNoticeTitle","OpenSourceNoticesScreen","notices","productName","productVersion","generatedAt","emptyTitle","emptyDescription","Separator","license","copyright","homepageUrl","sourceUrl","Link","attribution","DEFAULT_PALETTE_ASSET_LIMIT","getSearchableText","hasInputPrefix","inputPrefix","trimStart","startsWith","resolvePaletteMode","modes","fallbackMode","getPaletteEffectiveQuery","modeId","candidate","limitDefaultAssetEntries","limit","counts","assetType","filterPaletteEntries","effectiveQuery","getEffectiveQuery","filteredEntries","defaultAssetLimit","GROUP_ROW_HEIGHT","ENTRY_ROW_HEIGHT","INITIAL_VIEWPORT_HEIGHT","buildEntryItem","shortcut","buildRows","previousEntry","group","entryIndex","getActiveRowIndex","activeIndex","PaletteList","emptyLabel","onHover","activeRowIndex","initialRect","virtualRow","resolveStateValue","Palette","initialQuery","initialActiveIndex","resetKey","inputIcon","footerStart","footerEnd","filterEntries","onActiveEntryChange","onEscape","setQueryState","setActiveIndex","setupRef","activeEntry","resolvedInputIcon","activeMode","resolvedPlaceholder","nextQuery","runActiveEntry","closePalette","previousSetup","setSelectionRange","entryCount","handleEscape","handleKeyDown","hasFooter","splitShortcutStep","step","part","getShortcutDisplayParts","binding","PaletteShortcut","steps","stepIndex","part_0","partIndex","Kbd","ParamEditorLabel","CircleHelp","ColorInput","hideLabel","fullWidth","setValue","timeoutRef","nextColor","scheduleChange","newColor","parseColor","toString","onValueChange","ColorPicker","picker","DateInput","newValue","e_1","e_0","blur","e_2","NumberInputRoot","ChakraNumberInput","NumberInputField","Scrubber","Slider","ChakraSlider","NumberInput","hideSlider","showSlider","useFullWidthLayout","isNaN","valueAsNumber","next_0","details_1","details_2","SelectionInput","multiSelect","optionId","selectedValues","selectedOptions","id_0","o","displayItems","remaining","o_0","getDisplayText","handleSelect","currentValues","updatedValues","v","opt_0","opt","opt_1","TextInput","singleLine","e_3","resolveDefaultValue","defaultValues","paramId","InputGroupComponent","defaultCollapsed","useDisclosure","param","renderNumberParam","param_0","renderTextParam","param_1","renderSelectionParam","param_2","renderDateParam","param_3","renderColorParam","param_4","renderPropertyParam","param_5","renderParam","ChevronLeft","params","ParamEditor","groups","getEntryIcon","isDirectory","isGitRepo","FolderOpen","Folder","RepoPickerListEntry","selectedPathSet","onEntryClick","isAlreadySelected","searchInputFocusVisibleProps","outlineColor","outlineOffset","focusInlinePickerOption","querySelectorAll","currentIndex","indexOf","activeElement","nextIndex","RepoPickerDialog","selectedPaths","isLoading","isSelectDisabled","onSelectHomeDirectory","onSelectParentDirectory","searchScope","Home","ChevronUp","t34","t35","t36","t37","t38","t39","padding","t40","t41","t42","Body","t43","t44","t45","t46","t47","t48","resolveSessionIndicatorIcon","status","CircleCheck","CircleAlert","CircleStop","CirclePause","ClockAlert","CircleDashed","resolveSessionIndicatorColor","SessionIndicator","boxSize","DEFAULT_SNAPSHOT","expandedSections","expandedNodes","SIDEBAR_STORE_NAMESPACE","toStorageName","storageKey","createNoopStorage","removeItem","toggleId","setExpanded","getPersistedSnapshot","createSidebarStore","initialState","snapshot","createStore","persist","openSidebar","closeSidebar","toggleSidebar","toggleSection","toggleNode","setSectionExpanded","setNodeExpanded","setWidth","reset","storage","createJSONStorage","globalThis","partialize","sidebarStoreRegistry","getSidebarStore","existingStore","store","useSidebarStore","selector","useStore","SidebarFooter","SidebarHeader","DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","resolveInitialWidth","defaultWidth","parsed","parseInt","Sidebar","footer","closable","defaultExpandedSections","viewportRef","initialWidth","persistedWidth","_temp5","_temp6","_temp7","_temp8","setStoreWidth","_temp9","effectiveWidth","nextOpen","setOpen","managedByPanelLayout","widthCss","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","SidebarProjectMenu","projectsLabel","onSelectProjects","FolderIcon","Switch","inputProps","thumbLabel","trackLabel","interactiveCursor","ChakraSwitch","off","on","DEFAULT_WORKSPACE_SETTINGS","columnGrouping","rowGrouping","ordering","field","displayProperties","DEFAULT_GROUPING_OPTIONS","DEFAULT_ORDERING_OPTIONS","DEFAULT_DISPLAY_PROPERTY_OPTIONS","isTagKey","toTagName","toTitleCase","chunk","toUpperCase","collectCategoryOptions","tickets","ticket","assignee","tagName","tag","tags","t","a","b","numeric","buildDefaultFilterCategories","tagDefinitions","categories","def","categoryId","toBadges","badges","property","statusColor","updatedAt","Date","toLocaleDateString","toTagBadges","tagBadges","displayKey","optionDef","buildTagOptions","grouping","orderGroupingOptions","noGrouping","resolveSubGroupingOptions","resolveListDropTargetColumnKey","columnKey","resolveKnownColumnKeys","knownColumnKeys","filters","activeValues","omitFilterCategory","SectionLabel","Dropdown","T2","T3","orderedOptions","hasNoGrouping","option_0","DisplayMenu","settings","groupingOptions","orderingOptions","displayPropertyOptions","onViewModeChange","onColumnGroupingChange","onRowGroupingChange","onOrderingFieldChange","onSortDirectionToggle","onDisplayPropertyToggle","SegmentGroup","KanbanSquare","ArrowDownUp","Popover","getActiveFilterCount","sum","FilterMenu","countsByCategory","onToggleFilterValue","onClearFilter","onClearAll","activeCategoryId","setActiveCategoryId","activeCategory","activeFilterCount","Filter","category_0","Checkbox","ATTEMPT_STATUS_COLOR_ALIASES","amber","CHAKRA_COLOR_PALETTES","resolveWorkspaceIcon","workspaceType","GitCommitIcon","GitBranchIcon","resolveAttemptStatusColor","resolvedColor","buildAttemptStatusTooltip","attemptStatus","handleIconClick","handleBadgeClick","LeadingSessionIndicator","sessionStatus","onSessionIndicatorClick","sessionTooltip","WorkspaceTypeIndicator","initializing","shorthand","WorkspaceTypeIcon","WorkspaceAttemptStatusIndicator","WorkspaceDiffTotals","diffAdditions","diffDeletions","WorkspaceDropdownTrigger","hasMultipleWorkspaces","onDropdownClick","WorkspaceBadge","showLeadingSessionIndicator","backgroundColor","TAG_OPTION_ICON_MAP","circle","Circle","bug","Bug","sparkles","Sparkles","BookOpen","wrench","Wrench","gauge","Gauge","AlertTriangle","star","Star","flag","Flag","flame","Flame","lightbulb","Lightbulb","shield","Shield","eye","Eye","clock","Clock","CheckCircle","getTagOptionIcon","TagBadge","selectedOption","displayLabel","optionIcon","TicketCard","ticketId","workspaceBadge","onTagChange","hasBadges","Wrap","badge","TicketBoard","columns","selectedItemId","onMoveItem","onMoveToGroup","onCreateStart","onColumnAction","activeColumn","setActiveColumn","activeGroup","setActiveGroup","handleDragStart","handleDragEnd","columnId","dataTransfer","dropEffect","handleDragOver","contains","relatedTarget","handleDragLeave","columnId_0","itemId_0","getData","itemId","handleDrop","pb","column","borderLeft","canDragIn","ColumnHeader","margin","ps","pe","groupId","GroupSection","canDragOut","event_3","event_4","event_5","beforeItemId","itemId_1","contextMenuActions","event_6","event_7","itemId_2","cardProps","isDropTarget","onGroupDragOver","onGroupDragLeave","onGroupDrop","canCreate","Plus","MoreHorizontal","setData","effectAllowed","renderLabel","hasTicketId","renderEndContent","hasCount","countBadge","hasAssignee","assigneeIcon","hasDate","date","buildListRowItem","statusIcon","TicketList","onItemClick","table","useReactTable","data","onExpandedChange","getSubRows","getCoreRowModel","getExpandedRowModel","getRowId","getRowModel","TicketListRow","canExpand","getCanExpand","onDropTicket","getIsExpanded","FALLBACK_LABELS","normalize","getTagValue","getGroupingValue","compareGroupKey","orderByDirection","orderTickets","getTime","d","leftVal","rightVal","toOptionIndex","leftIndex","rightIndex","groupTickets","groupedByColumn","columnTickets","groupedByRow","rowKey","rowTickets","getTicketFilterValues","filterTickets","activeFilters","countFilterValues","WORKSPACE_STORE_NAMESPACE","toggleValue","createTicketsWorkspaceStore","setColumnGrouping","setRowGrouping","setOrdering","setOrderingField","toggleSortDirection","toggleDisplayProperty","setFilter","toggleFilterValue","nextValues","nextFilters","clearFilter","clearAllFilters","migrate","persisted","labels","workspaceStoreRegistry","getTicketsWorkspaceStore","useTicketsWorkspaceStore","buildListItems","visibleTickets","grouped","onTicketClick","onMoveTicket","toListItem","draggedTicketId","targetColumnKey","beforeTicketId","toGroupListItem","parent","TicketsWorkspace","selectedTicketId","groupingOptionsProp","orderingOptionsProp","displayPropertyOptionsProp","filterCategories","knownColumnKeysProp","onCreateTicket","getBoardColumnConfig","hideToolbar","tagOptions","_temp0","_temp1","categoryOptions","fromEntries","listItems","toBoardItems","tickets_0","boardColumns","columnConfig","orderedTickets","targetColumnId","ticketId_0","targetGroupKey","context_0","state_8","state_9"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/activity/activity-avatar.tsx","../src/components/activity/activity-comment.tsx","../src/components/activity/activity-composer.tsx","../src/components/activity/activity-event.tsx","../src/components/activity/activity-root.tsx","../src/components/activity/activity-timeline.tsx","../src/components/activity/index.ts","../src/components/attached-panel.tsx","../src/components/header.tsx","../src/components/searchable-menu.tsx","../src/components/list-row/searchable-action-menu.tsx","../src/components/list-row/list-row-actions.tsx","../src/components/list-row/list-row-menu.tsx","../src/components/list-row/list-row.tsx","../src/components/resource-context-menu.tsx","../src/components/breadcrumb.tsx","../src/components/bubble-button.tsx","../src/components/bubble-panel.tsx","../src/utils/apply-theme-preference.ts","../src/utils/theme-preference.tsx","../src/components/code-editor.tsx","../src/components/content-placeholder.tsx","../src/components/session-indicator.tsx","../src/components/workspace-badge.tsx","../src/components/data-renderer/tag-option-icon.ts","../src/components/data-renderer/tag-badge.tsx","../src/components/data-renderer/data-renderer-card.tsx","../src/components/data-renderer/data-renderer-board.tsx","../src/components/data-renderer/types.ts","../src/components/data-renderer/data-renderer-grouping.ts","../src/components/data-renderer/data-renderer-helpers.ts","../src/components/data-renderer/data-renderer-list.tsx","../src/components/data-renderer/display-menu.tsx","../src/components/data-renderer/filter-menu.tsx","../src/components/data-renderer/use-data-renderer-store.ts","../src/components/data-renderer/data-renderer.tsx","../src/components/delete-confirmation-modal.tsx","../src/components/diff-viewer/diff-size.ts","../src/components/diff-viewer/diff-card-body.tsx","../src/components/diff-viewer/diff-card-load-state.tsx","../src/components/diff-viewer/diff-card-content.tsx","../src/components/diff-viewer/diff-card.tsx","../src/components/diff-viewer/diff-drawer.tsx","../src/components/resizable-split-layout.handle.tsx","../src/components/resizable-split-layout.tsx","../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer.store.ts","../src/components/tree-list/tree-list.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx","../src/components/error-boundary.tsx","../src/components/horizontal-menu-stack.tsx","../src/components/simple-card.tsx","../src/components/integration-card.tsx","../src/components/item-section.tsx","../src/components/panel-header.constants.ts","../src/components/panel-sidebar-registration-context.ts","../src/components/toaster.tsx","../src/components/layout.tsx","../src/components/open-source-notices-screen.tsx","../src/components/palette-filter.ts","../src/components/palette-list.tsx","../src/components/palette.tsx","../src/components/palette-shortcut.tsx","../src/components/param-editor-label.tsx","../src/components/param-editor-color-input.tsx","../src/components/param-editor-date-input.tsx","../src/components/number-input.tsx","../src/components/slider.tsx","../src/components/param-editor-number-input.tsx","../src/components/param-editor-selection-input.tsx","../src/components/param-editor-text-input.tsx","../src/components/param-editor-input-group.tsx","../src/components/param-editor.tsx","../src/components/repo-picker-dialog.tsx","../src/components/sidebar/sidebar.store.ts","../src/components/sidebar/sidebar-footer.tsx","../src/components/sidebar/sidebar-header.tsx","../src/components/sidebar/sidebar.tsx","../src/components/sidebar/sidebar-project-menu.tsx","../src/components/switch.tsx"],"sourcesContent":["import { Avatar, Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\n\nexport interface ActivityAvatarProps {\n actor?: ActivityActor;\n icon?: ReactNode;\n color?: string;\n background?: string;\n}\n\nexport const ActivityAvatar = (props: ActivityAvatarProps) => {\n const { actor, icon, color = \"fg.muted\", background = \"bg.muted\" } = props;\n\n if (icon) {\n return (\n <Box\n boxSize=\"18px\"\n borderRadius=\"full\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n color={color}\n background={background}\n >\n {icon}\n </Box>\n );\n }\n\n return (\n <Avatar.Root size=\"2xs\" flexShrink={0}>\n <Avatar.Image src={actor?.avatarSrc} alt={actor?.avatarAlt ?? actor?.name} />\n <Avatar.Fallback name={actor?.name} background={background} color={color} />\n </Avatar.Root>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { Children, type ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\ninterface ActivityCommentHeaderProps {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityCommentProps extends Omit<HTMLChakraProps<\"article\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n replies?: ReactNode;\n composer?: ReactNode;\n children: ReactNode;\n}\n\nexport interface ActivityReplyProps extends Omit<HTMLChakraProps<\"div\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n children: ReactNode;\n}\n\nconst TimestampSeparator = () => (\n <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />\n);\n\nconst ActivityCommentHeader = (props: ActivityCommentHeaderProps) => {\n const { actor, timestamp, actions } = props;\n\n return (\n <HStack gap=\"xs\" alignItems=\"center\" minW=\"0\">\n <ActivityAvatar actor={actor} />\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n {actor.name}\n </Text>\n {timestamp ? (\n <>\n <TimestampSeparator />\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n <Box marginLeft=\"auto\" flexShrink={0}>\n {actions}\n </Box>\n </HStack>\n );\n};\n\nexport const ActivityReply = (props: ActivityReplyProps) => {\n const { actor, timestamp, actions, children, ...rootProps } = props;\n\n return (\n <Box paddingX=\"md\" paddingY=\"sm\" {...rootProps}>\n <Stack gap=\"xs\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Box paddingLeft=\"32px\">\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\">\n {children}\n </Text>\n </Box>\n </Stack>\n </Box>\n );\n};\n\nexport const ActivityComment = (props: ActivityCommentProps) => {\n const { actor, timestamp, actions, replies, composer, children, ...rootProps } = props;\n const hasReplies = Children.count(replies) > 0;\n\n return (\n <Box\n as=\"article\"\n width=\"full\"\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"sm\"\n background=\"bg\"\n overflow=\"hidden\"\n {...rootProps}\n >\n <Stack gap=\"sm\" padding=\"md\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\" whiteSpace=\"pre-wrap\">\n {children}\n </Text>\n </Stack>\n {hasReplies ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {replies}\n </Box>\n ) : null}\n {composer ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {composer}\n </Box>\n ) : null}\n </Box>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, chakra, HStack, Icon, IconButton, Spacer, Textarea } from \"@chakra-ui/react\";\nimport { ArrowUp, Paperclip } from \"lucide-react\";\nimport type { FormEvent, ReactNode } from \"react\";\nimport { useState } from \"react\";\n\nimport { Tooltip } from \"../tooltip\";\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityComposerProps extends Omit<HTMLChakraProps<\"form\">, \"onChange\" | \"onSubmit\"> {\n actor?: ActivityActor;\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n variant?: \"standalone\" | \"inline\";\n minRows?: number;\n attachLabel?: string;\n submitLabel?: string;\n actions?: ReactNode;\n onAttach?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n}\n\nexport const ActivityComposer = (props: ActivityComposerProps) => {\n const {\n actor,\n value,\n defaultValue = \"\",\n placeholder = \"Leave a comment...\",\n variant = \"standalone\",\n minRows = variant === \"standalone\" ? 3 : 1,\n attachLabel = \"Attach file\",\n submitLabel = \"Submit comment\",\n actions,\n onAttach,\n onChange,\n onSubmit,\n ...rootProps\n } = props;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value ?? internalValue;\n const isInline = variant === \"inline\";\n const canSubmit = currentValue.trim().length > 0;\n\n const handleChange = (nextValue: string) => {\n if (value === undefined) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n };\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!canSubmit) return;\n\n onSubmit?.(currentValue.trim());\n\n if (value === undefined) {\n setInternalValue(\"\");\n }\n };\n\n return (\n <chakra.form\n width=\"full\"\n background=\"bg\"\n borderWidth={isInline ? \"0\" : \"1px\"}\n borderColor=\"border.muted\"\n borderRadius={isInline ? \"0\" : \"sm\"}\n transition=\"border-color 0.12s ease, box-shadow 0.12s ease\"\n _focusWithin={isInline ? undefined : { borderColor: \"blue.border\", boxShadow: \"mid\" }}\n onSubmit={handleSubmit}\n {...rootProps}\n >\n <HStack alignItems=\"flex-start\" gap=\"xs\" padding={isInline ? \"sm\" : \"md\"}>\n {actor ? <ActivityAvatar actor={actor} /> : null}\n <Box flex=\"1\" minW=\"0\">\n <Textarea\n value={currentValue}\n rows={minRows}\n resize=\"none\"\n border=\"0\"\n padding=\"0\"\n minH={isInline ? \"1.5rem\" : \"4rem\"}\n background=\"transparent\"\n color=\"fg\"\n textStyle=\"label/S/regular\"\n placeholder={placeholder}\n _placeholder={{ color: \"fg.subtle\" }}\n _focus={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n onChange={(event) => handleChange(event.currentTarget.value)}\n />\n <HStack gap=\"2xs\" marginTop={isInline ? \"0\" : \"sm\"}>\n {actions}\n <Spacer />\n <Tooltip content={attachLabel}>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={attachLabel} type=\"button\" onClick={onAttach}>\n <Icon as={Paperclip} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n <Tooltip content={submitLabel}>\n <IconButton size=\"2xs\" variant=\"subtle\" aria-label={submitLabel} type=\"submit\" disabled={!canSubmit}>\n <Icon as={ArrowUp} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </HStack>\n </Box>\n </HStack>\n </chakra.form>\n );\n};\n","import type { TimelineItemProps } from \"@chakra-ui/react\";\nimport { Box, Text, Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityEventProps extends Omit<TimelineItemProps, \"title\"> {\n actor?: ActivityActor;\n icon?: ReactNode;\n iconColor?: string;\n iconBackground?: string;\n timestamp?: ReactNode;\n children: ReactNode;\n}\n\nconst EventSeparator = () => <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />;\n\nexport const ActivityEvent = (props: ActivityEventProps) => {\n const {\n actor,\n icon,\n iconColor = \"fg.muted\",\n iconBackground = \"transparent\",\n timestamp,\n children,\n ...rootProps\n } = props;\n\n return (\n <Timeline.Item gap=\"xs\" minH=\"24px\" paddingX=\"md\" {...rootProps}>\n <Timeline.Connector>\n <Timeline.Separator borderColor=\"border.muted\" />\n <Timeline.Indicator outline=\"none\" shadow=\"none\" border=\"none\" background=\"transparent\">\n <ActivityAvatar actor={actor} icon={icon} color={iconColor} background={iconBackground} />\n </Timeline.Indicator>\n </Timeline.Connector>\n <Timeline.Content gap=\"0\" paddingBottom=\"xs\" minW=\"0\">\n <Timeline.Title\n marginTop=\"0\"\n gap=\"xs\"\n minW=\"0\"\n fontWeight=\"normal\"\n textStyle=\"label/S/regular\"\n color=\"fg.muted\"\n >\n {actor ? (\n <Text as=\"span\" color=\"fg\" fontWeight=\"500\" flexShrink={0}>\n {actor.name}\n </Text>\n ) : null}\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" gap=\"2xs\" minW=\"0\" flexWrap=\"wrap\">\n {children}\n </Box>\n {timestamp ? (\n <>\n <EventSeparator />\n <Text as=\"span\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n </Timeline.Title>\n </Timeline.Content>\n </Timeline.Item>\n );\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityRootProps extends StackProps {\n children: ReactNode;\n}\n\nexport interface ActivityHeaderProps extends Omit<StackProps, \"title\"> {\n title?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityFeedProps extends StackProps {\n children: ReactNode;\n}\n\nexport const ActivityRoot = (props: ActivityRootProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack width=\"full\" gap=\"md\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n\nexport const ActivityHeader = (props: ActivityHeaderProps) => {\n const { title = \"Activity\", actions, ...rootProps } = props;\n\n return (\n <HStack alignItems=\"center\" justifyContent=\"space-between\" gap=\"md\" {...rootProps}>\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {title}\n </Text>\n {actions ? <HStack gap=\"xs\">{actions}</HStack> : null}\n </HStack>\n );\n};\n\nexport const ActivityFeed = (props: ActivityFeedProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack gap=\"md\" width=\"full\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n","import type { TimelineRootProps } from \"@chakra-ui/react\";\nimport { Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityTimelineProps extends TimelineRootProps {\n children: ReactNode;\n}\n\nexport const ActivityTimeline = (props: ActivityTimelineProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Timeline.Root size=\"sm\" variant=\"plain\" width=\"full\" css={{ \"--timeline-indicator-size\": \"18px\" }} {...rootProps}>\n {children}\n </Timeline.Root>\n );\n};\n","import { ActivityAvatar } from \"./activity-avatar\";\nimport { ActivityComment, ActivityReply } from \"./activity-comment\";\nimport { ActivityComposer } from \"./activity-composer\";\nimport { ActivityEvent } from \"./activity-event\";\nimport { ActivityFeed, ActivityHeader, ActivityRoot } from \"./activity-root\";\nimport { ActivityTimeline } from \"./activity-timeline\";\n\nexport type { ActivityActor } from \"./activity.types\";\nexport type { ActivityAvatarProps } from \"./activity-avatar\";\nexport type { ActivityCommentProps, ActivityReplyProps } from \"./activity-comment\";\nexport type { ActivityComposerProps } from \"./activity-composer\";\nexport type { ActivityEventProps } from \"./activity-event\";\nexport type { ActivityFeedProps, ActivityHeaderProps, ActivityRootProps } from \"./activity-root\";\nexport type { ActivityTimelineProps } from \"./activity-timeline\";\n\nexport {\n ActivityAvatar,\n ActivityComment,\n ActivityComposer,\n ActivityEvent,\n ActivityFeed,\n ActivityHeader,\n ActivityReply,\n ActivityRoot,\n ActivityTimeline,\n};\n\nexport const Activity = {\n Root: ActivityRoot,\n Header: ActivityHeader,\n Feed: ActivityFeed,\n Timeline: ActivityTimeline,\n Event: ActivityEvent,\n Comment: ActivityComment,\n Reply: ActivityReply,\n Composer: ActivityComposer,\n Avatar: ActivityAvatar,\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nconst DEFAULT_RESIZABLE_MIN_WIDTH = \"20rem\";\n\ninterface AttachedPanelProps extends Omit<FlexProps, \"children\"> {\n children?: ReactNode;\n header?: ReactNode;\n resizable?: boolean;\n}\n\nexport const AttachedPanel = (props: AttachedPanelProps) => {\n const { children, header, width = \"28rem\", minWidth, resizable = false, ...rest } = props;\n const resolvedMinWidth = minWidth ?? (resizable ? DEFAULT_RESIZABLE_MIN_WIDTH : width);\n const resolvedWidth = resizable ? \"full\" : width;\n\n return (\n <Flex\n direction=\"column\"\n position=\"relative\"\n flexShrink={0}\n w={resolvedWidth}\n minW={resolvedMinWidth}\n h=\"100%\"\n borderLeftWidth=\"1px\"\n bg=\"bg\"\n overflow=\"hidden\"\n {...rest}\n >\n {header}\n <Flex flex=\"1\" minH={0} direction=\"column\">\n {children}\n </Flex>\n </Flex>\n );\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport type HeaderVariant = \"main\" | \"narrow\" | \"input\";\n\ninterface HeaderVariantStyles {\n h: string;\n px: string;\n}\n\nconst headerVariantStyles: Record<HeaderVariant, HeaderVariantStyles> = {\n main: {\n h: \"2.5rem\",\n px: \"xs\",\n },\n narrow: {\n h: \"2rem\",\n px: \"xs\",\n },\n input: {\n h: \"3rem\",\n px: \"0\",\n },\n};\n\nexport interface HeaderProps extends Omit<StackProps, \"variant\"> {\n variant?: HeaderVariant;\n}\n\nexport const Header = React.forwardRef<HTMLDivElement, HeaderProps>(function Header(props, ref) {\n const { variant = \"main\", children, ...rest } = props;\n\n return (\n <HStack ref={ref} as=\"header\" alignItems=\"center\" borderWidth=\"0\" {...headerVariantStyles[variant]} {...rest}>\n {children}\n </HStack>\n );\n});\n","import { Box, Icon, Input, InputGroup, Menu, Portal } from \"@chakra-ui/react\";\nimport { ChevronDown, Search } from \"lucide-react\";\nimport { type ElementType, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Header } from \"./header\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport { ScrollArea } from \"./scroll-area\";\n\ntype MenuRootProps = React.ComponentProps<typeof Menu.Root>;\ntype MenuContentProps = React.ComponentProps<typeof Menu.Content>;\n\nexport interface SearchableMenuItem {\n id: string;\n label: string;\n searchText?: string;\n secondaryLabel?: string;\n tooltipLabel?: ReactNode;\n icon?: ElementType;\n variant?: \"default\" | \"compact\";\n isDisabled?: boolean;\n isSelected?: boolean;\n onSelect?: () => void;\n}\n\nexport interface SearchableMenuParentList<T extends SearchableMenuItem> {\n items: T[];\n selectedLabel: string;\n selectedIcon?: ElementType;\n ariaLabel?: string;\n disabled?: boolean;\n emptyState?: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n searchPlaceholder?: string;\n showSearch?: boolean;\n contentTestId?: string;\n onSelect?: (item: T) => void;\n}\n\ninterface ListConfig<T extends SearchableMenuItem> {\n items: T[];\n filterItems: (items: T[], query: string) => T[];\n showSearch: boolean;\n searchPlaceholder: string;\n emptyState: ReactNode;\n contentTestId?: string;\n closeOnSelect: boolean;\n listId: string;\n}\n\ninterface SearchableMenuProps<T extends SearchableMenuItem> {\n trigger: ReactNode;\n items: T[];\n searchPlaceholder: string;\n emptyState: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n listId?: string;\n header?: ReactNode;\n width?: MenuContentProps[\"width\"];\n maxListHeight?: string;\n showSearch?: boolean;\n closeOnSelect?: MenuRootProps[\"closeOnSelect\"];\n lazyMount?: MenuRootProps[\"lazyMount\"];\n open?: MenuRootProps[\"open\"];\n positioning?: MenuRootProps[\"positioning\"];\n onOpenChange?: MenuRootProps[\"onOpenChange\"];\n onFocusOutside?: MenuRootProps[\"onFocusOutside\"];\n contentTestId?: string;\n portalled?: boolean;\n parentList?: SearchableMenuParentList<T>;\n}\n\nexport const filterSearchableMenuItems = <T extends SearchableMenuItem>(items: T[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return items;\n }\n\n return items.filter((item) => {\n const content = [item.label, item.searchText].filter(Boolean).join(\" \").toLowerCase();\n return content.includes(normalizedQuery);\n });\n};\n\nexport const shouldResetSearchableMenuQuery = (currentListId?: string, nextListId?: string) => {\n if (!currentListId || !nextListId) {\n return false;\n }\n\n return currentListId !== nextListId;\n};\n\nexport const resolveActiveListConfig = <T extends SearchableMenuItem>(\n isShowingParent: boolean,\n parentList: SearchableMenuParentList<T> | undefined,\n childConfig: ListConfig<T>,\n): ListConfig<T> => {\n if (!isShowingParent || !parentList) {\n return childConfig;\n }\n\n return {\n items: parentList.items,\n filterItems: parentList.filterItems ?? childConfig.filterItems,\n showSearch: parentList.showSearch ?? childConfig.showSearch,\n searchPlaceholder: parentList.searchPlaceholder ?? childConfig.searchPlaceholder,\n emptyState: parentList.emptyState ?? childConfig.emptyState,\n contentTestId: parentList.contentTestId ?? childConfig.contentTestId,\n closeOnSelect: false,\n listId: \"parent\",\n };\n};\n\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nexport const SearchableMenu = <T extends SearchableMenuItem>(props: SearchableMenuProps<T>) => {\n const {\n trigger,\n items,\n searchPlaceholder,\n emptyState,\n filterItems = filterSearchableMenuItems,\n listId,\n header,\n width = \"260px\",\n maxListHeight = \"18rem\",\n showSearch = true,\n closeOnSelect = true,\n lazyMount = false,\n open,\n positioning,\n onOpenChange,\n onFocusOutside,\n contentTestId,\n portalled = true,\n parentList,\n } = props;\n const hasParentList = Boolean(parentList);\n const [internalOpen, setInternalOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeList, setActiveList] = useState<\"child\" | \"parent\">(\"child\");\n const inputRef = useRef<HTMLInputElement>(null);\n const isOpen = open ?? internalOpen;\n const isShowingParent = hasParentList && activeList === \"parent\";\n\n const childConfig: ListConfig<T> = {\n items,\n filterItems,\n showSearch,\n searchPlaceholder,\n emptyState,\n contentTestId,\n closeOnSelect,\n listId: hasParentList ? \"child\" : (listId ?? \"\"),\n };\n\n const config = resolveActiveListConfig(isShowingParent, parentList, childConfig);\n const filteredItems = config.filterItems(config.items, query);\n const previousListIdRef = useRef(config.listId);\n\n useEffect(() => {\n if (!isOpen) {\n previousListIdRef.current = config.listId;\n return;\n }\n\n if (shouldResetSearchableMenuQuery(previousListIdRef.current, config.listId)) {\n setQuery(\"\");\n }\n\n previousListIdRef.current = config.listId;\n }, [isOpen, config.listId]);\n\n useEffect(() => {\n if (!isOpen || !config.showSearch) {\n return;\n }\n\n const timeout = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(timeout);\n }, [isOpen, config.showSearch]);\n\n const handleOpenChange: NonNullable<MenuRootProps[\"onOpenChange\"]> = (details) => {\n if (open === undefined) {\n setInternalOpen(details.open);\n }\n\n setQuery(\"\");\n\n if (details.open && hasParentList) {\n setActiveList(\"child\");\n }\n\n onOpenChange?.(details);\n };\n\n const handleMenuItemSelect = (details: { value: string }) => {\n if (!isShowingParent || !parentList) return;\n\n const item = parentList.items.find((i) => i.id === details.value);\n if (!item) return;\n\n parentList.onSelect?.(item);\n setActiveList(\"child\");\n };\n\n const renderIcon = (icon: ElementType | undefined) => (icon ? <Icon as={icon} boxSize=\"14px\" /> : undefined);\n\n const buildRowItem = (item: T): ListRowItem => ({\n id: item.id,\n label: item.label,\n description: item.secondaryLabel,\n icon: renderIcon(item.icon),\n disabled: item.isDisabled,\n tooltip: item.tooltipLabel,\n });\n\n const parentListHeader = parentList ? (\n <Header\n as=\"div\"\n role=\"button\"\n aria-label={parentList.ariaLabel}\n aria-disabled={parentList.disabled || undefined}\n tabIndex={parentList.disabled ? -1 : 0}\n variant=\"narrow\"\n px=\"0\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n flexShrink={0}\n onPointerDownCapture={(event) => event.stopPropagation()}\n onClickCapture={(event) => {\n event.stopPropagation();\n if (parentList.disabled) return;\n setActiveList((current) => (current === \"child\" ? \"parent\" : \"child\"));\n }}\n >\n <ListRow\n variant=\"compact\"\n id=\"__parent-toggle\"\n label={parentList.selectedLabel}\n icon={renderIcon(parentList.selectedIcon)}\n disabled={parentList.disabled}\n endContent={parentList.disabled ? undefined : <Icon as={ChevronDown} boxSize=\"14px\" />}\n />\n </Header>\n ) : null;\n\n const resolvedHeader = parentList ? parentListHeader : header;\n const shouldShowSeparator = Boolean(resolvedHeader) && !config.showSearch;\n\n const searchInput = config.showSearch ? (\n <Header variant=\"input\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" flexShrink={0}>\n <InputGroup startElement={<Search size={14} />} width=\"full\">\n <Input\n ref={inputRef}\n borderWidth=\"0\"\n borderRadius=\"0\"\n height=\"full\"\n value={query}\n placeholder={config.searchPlaceholder}\n aria-label={config.searchPlaceholder}\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputBorderProps}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => event.stopPropagation()}\n />\n </InputGroup>\n </Header>\n ) : null;\n\n return (\n <Menu.Root\n lazyMount={lazyMount}\n closeOnSelect={config.closeOnSelect}\n open={open}\n positioning={positioning}\n onOpenChange={handleOpenChange}\n onFocusOutside={onFocusOutside}\n onSelect={hasParentList ? handleMenuItemSelect : undefined}\n >\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n <Portal disabled={!portalled}>\n <Menu.Positioner>\n <Menu.Content w={width} bg=\"bg\" gap=\"0\" p=\"0\" zIndex=\"popover\">\n {resolvedHeader}\n {searchInput}\n {shouldShowSeparator ? <Menu.Separator margin=\"0\" /> : null}\n <ScrollArea\n maxH={maxListHeight}\n data-testid={config.contentTestId}\n viewportProps={{ overscrollBehavior: \"contain\" }}\n p=\"0\"\n gap=\"0\"\n >\n {filteredItems.length > 0\n ? filteredItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.isDisabled} onClick={item.onSelect} asChild>\n <Box\n bg=\"transparent\"\n h=\"auto\"\n p=\"0\"\n _hover={{ bg: \"transparent\" }}\n _focus={{ bg: \"transparent\" }}\n _active={{ bg: \"transparent\" }}\n >\n <ListRow\n asChild\n {...buildRowItem(item)}\n variant={item.variant ?? \"compact\"}\n isSelected={item.isSelected}\n />\n </Box>\n </Menu.Item>\n ))\n : config.emptyState}\n </ScrollArea>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { IconButton, Menu } from \"@chakra-ui/react\";\nimport { SearchableMenu } from \"../searchable-menu\";\nimport { ListRow } from \"./list-row\";\nimport type { ListRowAction } from \"./list-row.types\";\n\ninterface SearchableActionMenuProps {\n action: ListRowAction;\n}\n\nexport const SearchableActionMenu = (props: SearchableActionMenuProps) => {\n const { action } = props;\n const items = (action.menuItems ?? []).map((item) => ({\n id: item.id,\n label: item.label,\n searchText: [item.label, item.description].filter(Boolean).join(\" \"),\n tooltipLabel: item.description,\n variant: \"compact\" as const,\n onSelect: () => item.onAction?.(),\n }));\n\n return (\n <SearchableMenu\n trigger={\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n }\n items={items}\n searchPlaceholder={action.searchPlaceholder ?? \"Search...\"}\n emptyState={\n <Menu.Item value=\"empty\" asChild>\n <ListRow asChild variant=\"compact\" label={action.emptyMenuLabel ?? \"No results found\"} disabled />\n </Menu.Item>\n }\n onFocusOutside={(event) => event.preventDefault()}\n />\n );\n};\n","import { Box, HStack, IconButton, Menu } from \"@chakra-ui/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowAction } from \"./list-row.types\";\nimport { SearchableActionMenu } from \"./searchable-action-menu\";\n\ninterface RowActionsProps {\n actions: ListRowAction[];\n context: { sectionId?: string; nodeId?: string };\n}\n\nconst keyedTooltip = (action: ListRowAction, child: ReactElement) => {\n if (action.tooltip) {\n return (\n <Tooltip key={action.id} content={action.tooltip} openDelay={300}>\n {child}\n </Tooltip>\n );\n }\n return <Fragment key={action.id}>{child}</Fragment>;\n};\n\nexport const RowActions = (props: RowActionsProps) => {\n const { actions, context } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n\n if (action.menuItems && action.menuItems.length > 0) {\n return keyedTooltip(\n action,\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Tooltip key={item.id} content={item.description} disabled={!item.description} openDelay={300}>\n <Menu.Item value={item.id} disabled={item.disabled} onClick={() => item.onAction?.()}>\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\">\n <HStack gap=\"2\" minW=\"0\">\n {item.icon ? <Box>{item.icon as never}</Box> : null}\n <Box minW=\"0\">{item.label}</Box>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n </Tooltip>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>,\n );\n }\n\n return keyedTooltip(\n action,\n <IconButton\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.(context);\n }}\n >\n {action.icon}\n </IconButton>,\n );\n })}\n </HStack>\n );\n};\n","import { Box, HStack, Icon, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport type { ReactElement } from \"react\";\nimport type { ListRowActionMenuItem, ListRowMenuPlacement } from \"./list-row.types\";\n\ninterface ListRowMenuProps {\n items: ListRowActionMenuItem[];\n open: boolean;\n placement?: ListRowMenuPlacement;\n children: ReactElement;\n onOpenChange: (open: boolean) => void;\n onSelect: (item: ListRowActionMenuItem) => void;\n}\n\nconst ListRowMenuItemIcon = (props: { item: ListRowActionMenuItem }) => {\n const { item } = props;\n if (!item.icon) return null;\n\n return (\n <Box color=\"fg.muted\" flexShrink={0} display=\"inline-flex\">\n {typeof item.icon === \"function\" ? <Icon as={item.icon} boxSize=\"14px\" /> : item.icon}\n </Box>\n );\n};\n\nexport const ListRowMenu = (props: ListRowMenuProps) => {\n const { children, items, onOpenChange, onSelect, open, placement = \"right-start\" } = props;\n\n return (\n <Menu.Root\n open={open}\n positioning={{ placement, offset: { mainAxis: 4 } }}\n onOpenChange={(details) => onOpenChange(details.open)}\n >\n <Menu.Trigger asChild>{children}</Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"200px\" bg=\"bg\">\n {items.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.disabled} onClick={() => onSelect(item)}>\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\">\n <HStack gap=\"2\" minW=\"0\">\n <ListRowMenuItemIcon item={item} />\n <Text textStyle=\"label/S/regular\" truncate>\n {item.label}\n </Text>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Box, chakra, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { forwardRef, type ReactElement, type MouseEvent as ReactMouseEvent, useState } from \"react\";\nimport { ResourceContextMenu } from \"../resource-context-menu\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowItem, ListRowProps, RowContentProps } from \"./list-row.types\";\nimport { RowActions } from \"./list-row-actions\";\nimport { ListRowMenu } from \"./list-row-menu\";\n\nconst RowContent = (props: RowContentProps) => {\n const { item, isExpanded, showChevron, isDisabled, variant, tone } = props;\n const isDenseVariant = variant === \"compact\" || variant === \"tree\";\n const labelTextStyle = isDenseVariant ? \"label/S/regular\" : \"label/M/regular\";\n const descriptionTextStyle = isDenseVariant ? \"label/XS\" : \"label/S/regular\";\n const descriptionMarginLeft = isDenseVariant ? \"0\" : \"2px\";\n\n const labelColor = (() => {\n if (isDisabled) return \"fg.muted\";\n if (tone === \"danger\") return \"red.500\";\n return \"fg\";\n })();\n const iconColor = item.iconColor ?? (tone === \"danger\" ? \"red.500\" : \"fg.muted\");\n const descriptionColor = tone === \"danger\" ? \"red.400\" : \"fg.menu-item.secondary\";\n\n return (\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" overflow=\"hidden\" alignItems=\"center\">\n {showChevron ? (\n <Box color=\"fg.muted\" flexShrink={0} display=\"flex\" alignItems=\"center\">\n <ChevronRight\n size={12}\n style={{ transform: isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"120ms\" }}\n />\n </Box>\n ) : null}\n <Stack gap=\"2xs\" minW=\"0\" flex=\"1\">\n <HStack gap=\"2\" minW=\"0\" alignItems=\"center\">\n {item.icon ? (\n <Box\n color={iconColor}\n flexShrink={0}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n boxSize=\"14px\"\n fontSize=\"14px\"\n lineHeight=\"1\"\n css={{ \"& > svg\": { width: \"14px\", height: \"14px\" } }}\n >\n {item.icon}\n </Box>\n ) : null}\n {item.indicator ? (\n <Tooltip content={item.indicator.tooltip} disabled={!item.indicator.tooltip} openDelay={300}>\n <Box color={item.indicator.color ?? \"fg.muted\"} flexShrink={0}>\n {item.indicator.icon}\n </Box>\n </Tooltip>\n ) : null}\n {typeof item.label === \"string\" ? (\n <Text textStyle={labelTextStyle} color={labelColor} truncate>\n {item.label}\n </Text>\n ) : (\n <Box minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {item.label}\n </Box>\n )}\n </HStack>\n {item.description ? (\n typeof item.description === \"string\" ? (\n <Text ml={descriptionMarginLeft} textStyle={descriptionTextStyle} color={descriptionColor} truncate>\n {item.description}\n </Text>\n ) : (\n <Box ml={descriptionMarginLeft} minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {item.description}\n </Box>\n )\n ) : null}\n </Stack>\n </HStack>\n );\n};\n\nconst computePaddingLeft = (depth: number) => {\n if (depth <= 0) return undefined;\n return `calc(var(--chakra-spacing-1) + ${depth} * 12px)`;\n};\n\nconst ListRowContent = (props: {\n item: ListRowItem;\n isExpanded: boolean;\n showChevron: boolean;\n isDisabled: boolean;\n tone: ListRowProps[\"tone\"];\n variant: ListRowProps[\"variant\"];\n}) => {\n const { item, isDisabled, isExpanded, showChevron, tone = \"default\", variant = \"default\" } = props;\n\n return (\n <>\n <RowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n />\n {item.endContent ? (\n <Box flexShrink={0} color=\"fg.muted\" display=\"flex\" alignItems=\"center\">\n {item.endContent}\n </Box>\n ) : null}\n {item.actions && item.actions.length > 0 ? (\n <RowActions actions={item.actions} context={{ nodeId: item.id }} />\n ) : null}\n </>\n );\n};\n\nconst resolveListRowSizing = (variant: ListRowProps[\"variant\"], hasDescription: boolean) => {\n if (variant === \"compact\" && !hasDescription) return { rowHeight: \"1.75rem\", minHeight: undefined };\n\n return {\n rowHeight: \"auto\",\n minHeight: variant === \"default\" ? \"2.25rem\" : \"1.75rem\",\n };\n};\n\nexport const ListRow = forwardRef<HTMLElement, ListRowProps>((props, ref) => {\n const {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n depth = 0,\n isSelected = false,\n isExpanded = false,\n showExpandToggle = false,\n variant = \"default\",\n tone = \"default\",\n asChild = false,\n className,\n onToggleExpand,\n onPointerMove,\n draggable,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n onClick,\n ...rootProps\n } = props;\n const [menuOpen, setMenuOpen] = useState(false);\n\n const item: ListRowItem = {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n };\n\n const dragProps = { draggable, onDragStart, onDragOver, onDragEnd, onDrop };\n\n const hasChildren = (item.children?.length ?? 0) > 0 || item.isContainer === true;\n const hasMenuItems = (item.menuItems?.length ?? 0) > 0;\n const showChevron = showExpandToggle && hasChildren;\n const isDisabled = item.disabled === true;\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasMenuItems) return;\n if (showChevron) {\n onToggleExpand?.();\n return;\n }\n if (onActivate) {\n onActivate();\n return;\n }\n item.onActivate?.();\n };\n\n const handleClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n handleActivate();\n };\n\n const handleMenuClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n setMenuOpen((current) => !current);\n };\n\n const paddingLeft = computePaddingLeft(depth);\n const verticalPadding = variant === \"default\" ? \"xs\" : \"2xs\";\n const hasDescription = item.description !== undefined;\n const activationProps = hasMenuItems ? { onClick: handleMenuClick } : { onClick: handleClick };\n const { rowHeight, minHeight } = resolveListRowSizing(variant, hasDescription);\n\n const rowProps = {\n ...rootProps,\n role: hasMenuItems ? (\"button\" as const) : (\"option\" as const),\n \"aria-selected\": isSelected,\n className: className ? `group ${className}` : \"group\",\n width: \"full\",\n minWidth: \"0\",\n maxWidth: \"full\",\n height: rowHeight,\n minHeight,\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"space-between\" as const,\n gap: \"xs\" as const,\n px: \"sm\",\n py: verticalPadding,\n pl: paddingLeft,\n borderRadius: \"0\" as const,\n bg: isSelected ? \"bg.menu-item.selected\" : \"transparent\",\n _hover:\n tone === \"danger\" ? { boxShadow: \"inset 0 0 0 1px var(--chakra-colors-red-500)\" } : { bg: \"bg.menu-item.hover\" },\n cursor: isDisabled ? (\"not-allowed\" as const) : (\"pointer\" as const),\n overflow: \"hidden\" as const,\n textAlign: \"left\" as const,\n color: \"inherit\",\n textDecoration: \"none\",\n };\n\n const content = (\n <ListRowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n />\n );\n\n const wrapWithContextMenu = (children: ReactElement) => {\n if (!item.contextMenuItems || item.contextMenuItems.length === 0) return children;\n\n const contextActions = item.contextMenuItems.map((entry) => ({\n key: entry.id,\n label: entry.label,\n icon: typeof entry.icon === \"function\" ? <Icon as={entry.icon} boxSize=\"16px\" /> : entry.icon,\n endContent: entry.endContent,\n isDisabled: entry.disabled,\n onClick: () => entry.onAction?.(),\n }));\n\n return (\n <ResourceContextMenu actions={contextActions} contentMinWidth=\"180px\">\n {children}\n </ResourceContextMenu>\n );\n };\n\n const wrapWithMenu = (children: ReactElement) => {\n if (!item.menuItems || item.menuItems.length === 0) return children;\n\n return (\n <ListRowMenu\n items={item.menuItems}\n open={menuOpen}\n placement={item.menuPlacement}\n onOpenChange={setMenuOpen}\n onSelect={(menuItem) => {\n setMenuOpen(false);\n menuItem.onAction?.();\n }}\n >\n {children}\n </ListRowMenu>\n );\n };\n\n const wrapWithTooltip = (children: ReactElement) => {\n if (!item.tooltip) return children;\n return <Tooltip content={item.tooltip}>{children}</Tooltip>;\n };\n\n const wrap = (children: ReactElement) =>\n hasMenuItems ? wrapWithMenu(children) : wrapWithContextMenu(wrapWithTooltip(children));\n\n if (asChild) {\n return wrap(\n <chakra.div ref={ref} {...rowProps} {...dragProps} {...activationProps} onPointerMove={onPointerMove}>\n {content}\n </chakra.div>,\n );\n }\n if (item.href && !showChevron && !isDisabled && !hasMenuItems) {\n return wrap(\n <chakra.a\n ref={ref}\n href={item.href}\n {...(rowProps as object)}\n {...dragProps}\n onClick={handleClick}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.a>,\n );\n }\n\n return wrap(\n <chakra.button\n ref={ref}\n type=\"button\"\n disabled={isDisabled}\n {...(rowProps as object)}\n {...dragProps}\n {...activationProps}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.button>,\n );\n});\n","import { Menu, Portal } from \"@chakra-ui/react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\n\ntype MenuRootProps = ComponentProps<typeof Menu.Root>;\n\nexport interface ResourceContextAction {\n key: string;\n label: string;\n onClick: () => Promise<void> | void;\n isDisabled?: boolean;\n icon?: ReactNode;\n endContent?: ReactNode;\n}\n\ninterface ResourceContextMenuProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n contentMinWidth?: string;\n contentBackground?: string;\n positioning?: MenuRootProps[\"positioning\"];\n}\n\nexport const ResourceContextMenu = (props: ResourceContextMenuProps) => {\n const {\n actions,\n children,\n contentMinWidth = \"220px\",\n contentBackground = \"bg\",\n positioning = { placement: \"bottom-start\" },\n } = props;\n\n if (actions.length === 0) {\n return <>{children}</>;\n }\n\n return (\n <Menu.Root positioning={positioning}>\n <Menu.ContextTrigger asChild>{children}</Menu.ContextTrigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW={contentMinWidth} bg={contentBackground}>\n {actions.map((action) => (\n <Menu.Item key={action.key} value={action.key} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n label={action.label}\n icon={action.icon}\n endContent={action.endContent}\n disabled={action.isDisabled}\n onActivate={action.onClick}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Breadcrumb as ChakraBreadcrumb, type SystemStyleObject } from \"@chakra-ui/react\";\nimport * as React from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"./resource-context-menu\";\n\nexport interface BreadcrumbItem {\n title: React.ReactNode;\n url?: string;\n onClick?: () => void;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface BreadcrumbLinkProps {\n to: string;\n children: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends ChakraBreadcrumb.RootProps {\n separator?: React.ReactNode;\n separatorGap?: SystemStyleObject[\"gap\"];\n items: BreadcrumbItem[];\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\nconst linkProps = {\n alignItems: \"center\",\n display: \"inline-flex\",\n gap: \"2xs\",\n minW: \"0\",\n maxW: \"100%\",\n overflow: \"hidden\",\n outline: \"none\",\n boxShadow: \"none\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n _active: { outline: \"none\", boxShadow: \"none\" },\n _focus: { outline: \"none\", boxShadow: \"none\" },\n _focusVisible: { outline: \"none\", boxShadow: \"none\" },\n} as const;\n\nexport const Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(function BreadcrumbRoot(props, ref) {\n const { separator, separatorGap, items, linkComponent: LinkComponent, ...rest } = props;\n\n return (\n <ChakraBreadcrumb.Root ref={ref} {...rest}>\n <ChakraBreadcrumb.List gap={separatorGap} flexWrap=\"nowrap\" minW=\"0\" maxW=\"100%\" overflow=\"hidden\">\n {items.map((item, index) => {\n const last = index === items.length - 1;\n const isInteractive = Boolean(item.url || item.onClick);\n let itemContent: React.ReactNode;\n\n if (last && !isInteractive) {\n itemContent = <ChakraBreadcrumb.CurrentLink {...linkProps}>{item.title}</ChakraBreadcrumb.CurrentLink>;\n } else if (item.url) {\n itemContent = LinkComponent ? (\n <ChakraBreadcrumb.Link asChild {...linkProps}>\n <LinkComponent to={item.url}>{item.title}</LinkComponent>\n </ChakraBreadcrumb.Link>\n ) : (\n <ChakraBreadcrumb.Link href={item.url} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n } else if (item.onClick) {\n itemContent = (\n <ChakraBreadcrumb.Link as=\"button\" type=\"button\" onClick={item.onClick} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n } else {\n itemContent = <ChakraBreadcrumb.Link {...linkProps}>{item.title}</ChakraBreadcrumb.Link>;\n }\n\n if (item.contextMenuActions && item.contextMenuActions.length > 0) {\n itemContent = (\n <ResourceContextMenu actions={item.contextMenuActions} positioning={{ placement: \"bottom-start\" }}>\n {itemContent}\n </ResourceContextMenu>\n );\n }\n\n return (\n <ChakraBreadcrumb.Item key={index} minW=\"0\" flexShrink={last ? 1 : 0} overflow=\"hidden\">\n {itemContent}\n {last ? null : (\n <ChakraBreadcrumb.Separator as=\"span\" aria-hidden flexShrink={0}>\n {separator}\n </ChakraBreadcrumb.Separator>\n )}\n </ChakraBreadcrumb.Item>\n );\n })}\n </ChakraBreadcrumb.List>\n </ChakraBreadcrumb.Root>\n );\n});\n","import { chakra, type HTMLChakraProps, IconButton, type IconButtonProps } from \"@chakra-ui/react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Tooltip } from \"./tooltip\";\n\ntype BubbleButtonStyleProps = \"boxShadow\" | \"transition\" | \"_hover\" | \"_active\" | \"borderColor\" | \"borderWidth\";\n\nexport interface BubbleButtonProps extends Omit<IconButtonProps, BubbleButtonStyleProps> {\n containerProps?: HTMLChakraProps<\"div\">;\n isOpen?: boolean;\n tooltip?: ReactNode;\n}\n\nexport const BubbleButton = forwardRef<HTMLButtonElement, BubbleButtonProps>(function BubbleButton(props, ref) {\n const { children, containerProps, isOpen = false, tooltip, ...rest } = props;\n const button = (\n <IconButton\n ref={ref}\n rounded=\"full\"\n size=\"lg\"\n borderWidth=\"1px\"\n boxShadow={isOpen ? \"none\" : \"mid\"}\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: \"border.accent\",\n boxShadow: \"mid\",\n }}\n _active={{ boxShadow: isOpen ? \"none\" : \"mid\" }}\n {...rest}\n >\n {children}\n </IconButton>\n );\n\n return (\n <chakra.div position=\"fixed\" bottom=\"6\" right=\"6\" zIndex=\"docked\" {...containerProps}>\n {tooltip ? <Tooltip content={tooltip}>{button}</Tooltip> : button}\n </chakra.div>\n );\n});\n","import { Box, chakra, Flex, HStack, type HTMLChakraProps, IconButton, Portal, Spacer } from \"@chakra-ui/react\";\nimport { Minus, SquareArrowOutUpRight } from \"lucide-react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Header } from \"./header\";\nimport { Tooltip } from \"./tooltip\";\n\nexport interface BubblePanelProps {\n isOpen?: boolean;\n title?: string;\n menu?: ReactNode;\n onClose?: () => void;\n closeLabel?: string;\n onPopOut?: (() => void) | null;\n popOutLabel?: string;\n width?: string;\n height?: string;\n containerProps?: HTMLChakraProps<\"section\">;\n testId?: string;\n \"aria-label\"?: string;\n children?: ReactNode;\n}\n\nexport const BubblePanel = forwardRef<HTMLDivElement, BubblePanelProps>(function BubblePanel(props, ref) {\n const {\n isOpen = false,\n title,\n menu,\n onClose,\n closeLabel,\n onPopOut,\n popOutLabel,\n width = \"28rem\",\n height = \"38rem\",\n containerProps,\n testId,\n \"aria-label\": ariaLabel,\n children,\n } = props;\n\n if (!isOpen) return null;\n\n return (\n <Portal>\n <chakra.section\n ref={ref}\n role=\"dialog\"\n data-testid={testId}\n aria-label={ariaLabel ?? title}\n position=\"fixed\"\n bottom=\"3\"\n right=\"3\"\n w={width}\n maxW=\"calc(100vw - 2rem)\"\n h={height}\n maxH=\"calc(100vh - 2rem)\"\n borderRadius=\"3xl\"\n boxShadow=\"2xl\"\n bg=\"bg\"\n zIndex=\"dropdown\"\n {...containerProps}\n >\n <Flex direction=\"column\" h=\"full\">\n <Header variant=\"main\" gap=\"sm\" flexShrink={0}>\n <HStack gap=\"1\" minW=\"0\">\n {menu}\n </HStack>\n <Spacer />\n <HStack gap=\"1\">\n {onPopOut ? (\n <Tooltip content={popOutLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={popOutLabel} onClick={onPopOut}>\n <SquareArrowOutUpRight size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n {onClose ? (\n <Tooltip content={closeLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={closeLabel} onClick={onClose}>\n <Minus size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </HStack>\n </Header>\n <Box flex=\"1\" minH={0} display=\"flex\" flexDirection=\"column\" gap=\"sm\">\n {children}\n </Box>\n </Flex>\n </chakra.section>\n </Portal>\n );\n});\n","export type ThemePreference = string;\nexport type ThemePreferenceMode = \"light\" | \"dark\";\nexport type ThemePreferenceTokens = Record<string, string>;\n\nexport interface ThemePreferenceOption {\n id: ThemePreference;\n title?: string;\n mode: ThemePreferenceMode;\n tokens?: ThemePreferenceTokens;\n monacoTheme?: unknown;\n}\n\nexport const defaultThemePreferences = [\n { id: \"pstdio-light\", mode: \"light\" },\n { id: \"pstdio-dark\", mode: \"dark\" },\n] satisfies ThemePreferenceOption[];\n\nexport const isThemePreference = (\n value: string | null,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n): value is ThemePreference => typeof value === \"string\" && themePreferences.some((theme) => theme.id === value);\n\nexport const getThemePreferenceMode = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => themePreferences.find((preference) => preference.id === theme)?.mode ?? \"light\";\n\nexport const getThemePreferenceClassName = (theme: ThemePreference) => `theme-${theme}`;\n\nexport const getThemePreferenceClassNames = (\n theme: ThemePreference,\n mode: ThemePreferenceMode = getThemePreferenceMode(theme),\n) => [mode, getThemePreferenceClassName(theme)];\n\nconst THEME_TOKEN_PATHS_ATTRIBUTE = \"data-pstdio-theme-token-paths\";\n\nconst getThemePreferenceCssVariableName = (tokenPath: string) => `--chakra-${tokenPath.replaceAll(\".\", \"-\")}`;\n\nconst removeThemeTokens = (el: HTMLElement, theme?: ThemePreferenceOption) => {\n if (!theme?.tokens) return;\n\n for (const tokenPath of Object.keys(theme.tokens)) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n};\n\nconst removeTrackedThemeTokens = (el: HTMLElement) => {\n const tokenPaths = el.getAttribute(THEME_TOKEN_PATHS_ATTRIBUTE)?.split(\"\\n\").filter(Boolean) ?? [];\n\n for (const tokenPath of tokenPaths) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n};\n\nconst applyThemeTokens = (el: HTMLElement, theme: ThemePreferenceOption) => {\n if (!theme.tokens) {\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n return;\n }\n\n for (const [tokenPath, value] of Object.entries(theme.tokens)) {\n el.style.setProperty(getThemePreferenceCssVariableName(tokenPath), value);\n }\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, Object.keys(theme.tokens).join(\"\\n\"));\n};\n\nexport const applyThemePreference = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof document === \"undefined\") return;\n\n const root = document.documentElement;\n const body = document.body;\n const preference = themePreferences.find((option) => option.id === theme) ?? { id: theme, mode: \"light\" };\n const mode = getThemePreferenceMode(theme, themePreferences);\n\n for (const el of [root, body]) {\n if (!el) continue;\n const previousTheme = el.getAttribute(\"data-theme\");\n const previousPreference = themePreferences.find((option) => option.id === previousTheme);\n\n el.classList.remove(\"light\", \"dark\");\n if (previousTheme) {\n el.classList.remove(getThemePreferenceClassName(previousTheme));\n }\n removeTrackedThemeTokens(el);\n removeThemeTokens(el, previousPreference);\n applyThemeTokens(el, preference);\n el.classList.add(...getThemePreferenceClassNames(theme, mode));\n el.setAttribute(\"data-theme\", theme);\n el.setAttribute(\"data-color-mode\", mode);\n el.style.colorScheme = mode;\n }\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from \"react\";\n\nimport {\n applyThemePreference,\n defaultThemePreferences,\n getThemePreferenceMode,\n isThemePreference,\n type ThemePreference,\n type ThemePreferenceMode,\n type ThemePreferenceOption,\n} from \"./apply-theme-preference\";\n\nconst STORAGE_KEY = \"theme-preference\";\n\nconst ThemePreferenceContext = createContext<ThemePreferenceContextValue | null>(null);\n\ninterface ThemePreferenceContextValue {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (preference: ThemePreference) => void;\n toggleThemePreference: () => void;\n}\n\ninterface ThemePreferenceProviderProps {\n children: ReactNode;\n initialPreference?: ThemePreference;\n themePreferences?: readonly ThemePreferenceOption[];\n}\n\nconst getDefaultThemePreference = (themePreferences: readonly ThemePreferenceOption[], mode: ThemePreferenceMode) =>\n themePreferences.find((preference) => preference.mode === mode)?.id ??\n themePreferences[0]?.id ??\n defaultThemePreferences[0].id;\n\nexport const getInitialThemePreference = (\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof window === \"undefined\") return getDefaultThemePreference(themePreferences, \"light\");\n\n const stored = window.localStorage.getItem(STORAGE_KEY);\n if (isThemePreference(stored, themePreferences)) return stored;\n\n const prefersDark =\n typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n return getDefaultThemePreference(themePreferences, prefersDark ? \"dark\" : \"light\");\n};\n\nexport const ThemePreferenceProvider = (props: ThemePreferenceProviderProps) => {\n const { children, themePreferences = defaultThemePreferences } = props;\n const initialPreference = props.initialPreference ?? getInitialThemePreference(themePreferences);\n const [themePreference, setThemePreference] = useState<ThemePreference>(initialPreference);\n\n useEffect(() => {\n if (!isThemePreference(themePreference, themePreferences)) {\n setThemePreference(\n getDefaultThemePreference(themePreferences, getThemePreferenceMode(themePreference, themePreferences)),\n );\n return;\n }\n\n applyThemePreference(themePreference, themePreferences);\n if (typeof window !== \"undefined\") {\n window.localStorage.setItem(STORAGE_KEY, themePreference);\n }\n }, [themePreference, themePreferences]);\n\n const toggleThemePreference = () => {\n setThemePreference((prev) => {\n const nextMode = getThemePreferenceMode(prev, themePreferences) === \"dark\" ? \"light\" : \"dark\";\n\n return getDefaultThemePreference(themePreferences, nextMode);\n });\n };\n\n return (\n <ThemePreferenceContext value={{ themePreference, themePreferences, setThemePreference, toggleThemePreference }}>\n {children}\n </ThemePreferenceContext>\n );\n};\n\nexport const useThemePreference = () => {\n const context = useContext(ThemePreferenceContext);\n\n if (!context) {\n throw new Error(\"useThemePreference must be used within a ThemePreferenceProvider\");\n }\n\n return context;\n};\n","import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../theme\";\nimport { useThemePreference } from \"../utils/theme-preference\";\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n} satisfies MonacoThemeData;\n\nconst isMonacoTheme = (value: unknown): value is MonacoThemeData =>\n typeof value === \"object\" && value !== null && \"base\" in value && \"colors\" in value;\n\ntype MonacoApi = {\n editor: {\n defineTheme: (name: string, data: MonacoThemeData) => void;\n setTheme: (name: string) => void;\n };\n};\n\nconst EDITOR_THEME_NAME = \"ps-theme\";\n\nconst useEditorTheme = () => {\n const { themePreference, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference);\n return isMonacoTheme(preference?.monacoTheme) ? preference.monacoTheme : customTheme;\n};\n\nconst useApplyEditorTheme = (editorTheme: MonacoThemeData) => {\n const monacoRef = useRef<MonacoApi | null>(null);\n\n useEffect(() => {\n const monaco = monacoRef.current;\n if (!monaco) return;\n\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n }, [editorTheme]);\n\n return (monaco: MonacoApi) => {\n monacoRef.current = monaco;\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n };\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={EDITOR_THEME_NAME}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={async (editor, monaco) => {\n applyEditorTheme(monaco);\n\n // Add JSX support\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n\n // Format on cmd+s\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n\n // Run format on the initial value\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={EDITOR_THEME_NAME}\n options={options}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(_, monaco) => {\n applyEditorTheme(monaco);\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n }}\n />\n );\n};\n","import { Box, type BoxProps, Text, type TextProps } from \"@chakra-ui/react\";\n\nexport interface ContentPlaceholderProps extends BoxProps {}\n\nexport const contentPlaceholderBackgroundImage = `url(\"data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%239C92AC' fill-opacity='0.2' fillRule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E\")`;\n\nexport const ContentPlaceholder = (props: ContentPlaceholderProps) => (\n <Box\n {...props}\n css={{\n backgroundClip: \"padding-box\",\n backgroundImage: contentPlaceholderBackgroundImage,\n display: \"flex\",\n width: \"100%\",\n }}\n />\n);\n\nexport const Label = (props: TextProps) => (\n <Box p=\"2\">\n <Text color=\"fg.muted\" fontWeight=\"medium\" textStyle=\"sm\" whiteSpace=\"nowrap\" {...props} />\n </Box>\n);\n","import { Icon } from \"@chakra-ui/react\";\nimport { CircleAlert, CircleCheck, CircleDashed, CirclePause, CircleStop, ClockAlert } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\n\nexport type SessionCompletionStatus =\n | \"in_progress\"\n | \"awaiting_input\"\n | \"queued\"\n | \"completed\"\n | \"failed\"\n | \"cancelled\"\n | \"disconnected\";\n\nexport const resolveSessionIndicatorIcon = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return CircleCheck;\n if (status === \"failed\") return CircleAlert;\n if (status === \"cancelled\") return CircleStop;\n if (status === \"disconnected\") return CirclePause;\n if (status === \"queued\") return ClockAlert;\n return CircleDashed;\n};\n\nexport const resolveSessionIndicatorColor = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return \"fg.success\";\n if (status === \"failed\") return \"fg.error\";\n if (status === \"cancelled\") return \"fg.warning\";\n if (status === \"disconnected\") return \"fg.warning\";\n if (status === \"queued\") return \"fg.info\";\n return \"fg.muted\";\n};\n\ninterface SessionIndicatorProps {\n status?: SessionCompletionStatus;\n boxSize?: ComponentProps<typeof Icon>[\"boxSize\"];\n ariaLabel?: string;\n cursor?: ComponentProps<typeof Icon>[\"cursor\"];\n onClick?: ComponentProps<typeof Icon>[\"onClick\"];\n}\n\nexport const SessionIndicator = (props: SessionIndicatorProps) => {\n const { status, boxSize = \"14px\", ariaLabel = \"Session status\", cursor, onClick } = props;\n\n return (\n <Icon\n as={resolveSessionIndicatorIcon(status)}\n boxSize={boxSize}\n color={resolveSessionIndicatorColor(status)}\n aria-label={ariaLabel}\n cursor={cursor}\n onClick={onClick}\n />\n );\n};\n","import { Box, HStack, Icon, Spinner, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, GitBranchIcon, GitCommitIcon } from \"lucide-react\";\nimport type { MouseEvent } from \"react\";\nimport { DiffBubble } from \"@/components/diff-viewer/diff-bubble\";\nimport { type SessionCompletionStatus, SessionIndicator } from \"@/components/session-indicator\";\nimport { Tooltip } from \"@/components/tooltip\";\n\ninterface WorkspaceAttemptStatus {\n name: string;\n color: string;\n description?: string | null;\n}\n\nconst ATTEMPT_STATUS_COLOR_ALIASES: Record<string, string> = {\n amber: \"yellow\",\n};\n\nconst CHAKRA_COLOR_PALETTES = new Set([\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n]);\n\nexport interface WorkspaceBadgeProps {\n workspaceType: \"worktree\" | \"current_branch\";\n initializing?: boolean;\n shorthand?: string;\n attemptStatus?: WorkspaceAttemptStatus;\n sessionStatus?: SessionCompletionStatus;\n showLeadingSessionIndicator?: boolean;\n diffAdditions?: number;\n diffDeletions?: number;\n hasMultipleWorkspaces?: boolean;\n onClick?: () => void;\n onDropdownClick?: () => void;\n onSessionIndicatorClick?: () => void;\n}\n\nconst resolveWorkspaceIcon = (workspaceType: WorkspaceBadgeProps[\"workspaceType\"]) => {\n if (workspaceType === \"current_branch\") {\n return GitCommitIcon;\n }\n\n return GitBranchIcon;\n};\n\nconst resolveAttemptStatusColor = (color: string) => {\n if (color.startsWith(\"#\") || color.startsWith(\"rgb\") || color.startsWith(\"hsl\") || color.startsWith(\"var(\")) {\n return color;\n }\n\n const resolvedColor = ATTEMPT_STATUS_COLOR_ALIASES[color] ?? color;\n if (CHAKRA_COLOR_PALETTES.has(resolvedColor)) {\n return `var(--chakra-colors-${resolvedColor}-500)`;\n }\n\n return resolvedColor;\n};\n\nconst buildAttemptStatusTooltip = (attemptStatus: WorkspaceAttemptStatus | undefined) => {\n if (!attemptStatus) return null;\n\n if (attemptStatus.description) {\n return `${attemptStatus.name}: ${attemptStatus.description}`;\n }\n\n return attemptStatus.name;\n};\n\nconst handleIconClick = (event: MouseEvent<SVGSVGElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst handleBadgeClick = (event: MouseEvent<HTMLSpanElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst LeadingSessionIndicator = (props: {\n sessionStatus?: SessionCompletionStatus;\n onSessionIndicatorClick?: () => void;\n}) => {\n const { sessionStatus, onSessionIndicatorClick } = props;\n\n if (!sessionStatus) {\n return null;\n }\n\n const sessionTooltip = onSessionIndicatorClick ? \"Open latest session\" : \"Latest session status\";\n\n return (\n <Tooltip content={sessionTooltip}>\n <SessionIndicator\n status={sessionStatus}\n boxSize=\"12px\"\n ariaLabel={sessionTooltip}\n cursor=\"pointer\"\n onClick={onSessionIndicatorClick ? (event) => handleIconClick(event, onSessionIndicatorClick) : undefined}\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceTypeIndicator = (props: {\n workspaceType: WorkspaceBadgeProps[\"workspaceType\"];\n initializing: boolean;\n shorthand?: string;\n}) => {\n const { workspaceType, initializing, shorthand } = props;\n const WorkspaceTypeIcon = resolveWorkspaceIcon(workspaceType);\n\n return (\n <HStack as=\"span\" gap=\"0\" alignItems=\"center\" color=\"fg.muted\" flexShrink={0}>\n <Icon\n as={WorkspaceTypeIcon}\n boxSize=\"12px\"\n aria-label={workspaceType === \"worktree\" ? \"Worktree\" : \"Current branch\"}\n />\n {initializing ? <Spinner size=\"xs\" color=\"fg.muted\" /> : null}\n {shorthand ? (\n <Text as=\"span\" textStyle=\"label/XS/regular\" color=\"fg.muted\" flexShrink={0}>\n {shorthand}\n </Text>\n ) : null}\n </HStack>\n );\n};\n\nconst WorkspaceAttemptStatusIndicator = (props: { attemptStatus?: WorkspaceAttemptStatus }) => {\n const { attemptStatus } = props;\n\n if (!attemptStatus) {\n return null;\n }\n\n return (\n <Tooltip content={buildAttemptStatusTooltip(attemptStatus)}>\n <Box\n as=\"span\"\n boxSize=\"8px\"\n borderRadius=\"full\"\n backgroundColor={resolveAttemptStatusColor(attemptStatus.color)}\n flexShrink={0}\n aria-label={`Attempt status ${attemptStatus.name}`}\n data-testid=\"workspace-attempt-status\"\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceDiffTotals = (props: { diffAdditions?: number; diffDeletions?: number }) => {\n const { diffAdditions, diffDeletions } = props;\n\n if (typeof diffAdditions !== \"number\" || typeof diffDeletions !== \"number\") {\n return null;\n }\n\n return (\n <DiffBubble additions={diffAdditions} deletions={diffDeletions} variant=\"ghost\" size=\"small\" fileName={undefined} />\n );\n};\n\nconst WorkspaceDropdownTrigger = (props: { hasMultipleWorkspaces: boolean; onDropdownClick?: () => void }) => {\n const { hasMultipleWorkspaces, onDropdownClick } = props;\n\n if (!hasMultipleWorkspaces) {\n return null;\n }\n\n return (\n <Icon\n as={ChevronDown}\n boxSize=\"12px\"\n color=\"fg.muted\"\n cursor={onDropdownClick ? \"pointer\" : \"default\"}\n aria-label=\"Workspace selector\"\n onClick={onDropdownClick ? (event) => handleIconClick(event, onDropdownClick) : undefined}\n />\n );\n};\n\nexport const WorkspaceBadge = (props: WorkspaceBadgeProps) => {\n const {\n workspaceType,\n initializing = false,\n shorthand,\n attemptStatus,\n sessionStatus,\n showLeadingSessionIndicator = true,\n diffAdditions,\n diffDeletions,\n hasMultipleWorkspaces = false,\n onClick,\n onDropdownClick,\n onSessionIndicatorClick,\n } = props;\n\n return (\n <HStack\n as=\"span\"\n display=\"inline-flex\"\n gap=\"2xs\"\n alignItems=\"center\"\n minW=\"0\"\n px=\"2px\"\n py=\"1px\"\n borderRadius=\"xs\"\n cursor=\"pointer\"\n transition=\"background-color 0.2s ease-in-out\"\n _hover={{ backgroundColor: \"bg.hover\" }}\n onClick={onClick ? (event) => handleBadgeClick(event, onClick) : undefined}\n data-testid=\"workspace-badge\"\n >\n {showLeadingSessionIndicator ? (\n <LeadingSessionIndicator sessionStatus={sessionStatus} onSessionIndicatorClick={onSessionIndicatorClick} />\n ) : null}\n <WorkspaceTypeIndicator workspaceType={workspaceType} initializing={initializing} shorthand={shorthand} />\n <WorkspaceAttemptStatusIndicator attemptStatus={attemptStatus} />\n <WorkspaceDiffTotals diffAdditions={diffAdditions} diffDeletions={diffDeletions} />\n <WorkspaceDropdownTrigger hasMultipleWorkspaces={hasMultipleWorkspaces} onDropdownClick={onDropdownClick} />\n </HStack>\n );\n};\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n AlertTriangle,\n BookOpen,\n Bug,\n CheckCircle,\n Circle,\n Clock,\n Eye,\n Flag,\n Flame,\n Gauge,\n Lightbulb,\n Shield,\n Sparkles,\n Star,\n Wrench,\n} from \"lucide-react\";\n\nconst TAG_OPTION_ICON_MAP: Record<string, LucideIcon> = {\n circle: Circle,\n bug: Bug,\n sparkles: Sparkles,\n \"book-open\": BookOpen,\n wrench: Wrench,\n gauge: Gauge,\n \"alert-triangle\": AlertTriangle,\n star: Star,\n flag: Flag,\n flame: Flame,\n lightbulb: Lightbulb,\n shield: Shield,\n eye: Eye,\n clock: Clock,\n \"check-circle\": CheckCircle,\n};\n\nexport const getTagOptionIcon = (icon: string | null | undefined) => {\n if (!icon) {\n return null;\n }\n\n return TAG_OPTION_ICON_MAP[icon] ?? null;\n};\n","import { Badge, HStack, Icon, Menu, Text } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\n\nimport { getTagOptionIcon } from \"./tag-option-icon\";\nimport type { DataRendererTagOption } from \"./types\";\n\ninterface TagBadgeProps {\n value: string | null;\n label?: string;\n color?: string;\n options: DataRendererTagOption[];\n onValueChange?: (newValue: string) => void;\n}\n\nexport const TagBadge = (props: TagBadgeProps) => {\n const { value, label, color = \"purple\", options, onValueChange } = props;\n const selectedOption = value ? options.find((option) => option.value === value) : undefined;\n const selectedIcon = getTagOptionIcon(selectedOption?.icon);\n\n const displayLabel = value ? (selectedOption?.label ?? value) : (label ?? \"—\");\n\n if (!onValueChange || options.length === 0) {\n return (\n <Badge variant=\"subtle\" colorPalette={color} textStyle=\"label/XS/medium\">\n <HStack as=\"span\" gap=\"1\" alignItems=\"center\">\n {selectedIcon ? <Icon as={selectedIcon} boxSize=\"12px\" /> : null}\n <Text as=\"span\">{displayLabel}</Text>\n </HStack>\n </Badge>\n );\n }\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Badge\n variant=\"subtle\"\n colorPalette={color}\n textStyle=\"label/XS/medium\"\n cursor=\"pointer\"\n _hover={{ opacity: 0.8 }}\n onClick={(event) => event.stopPropagation()}\n >\n <HStack as=\"span\" gap=\"1\" alignItems=\"center\">\n {selectedIcon ? <Icon as={selectedIcon} boxSize=\"12px\" /> : null}\n <Text as=\"span\">{displayLabel}</Text>\n </HStack>\n </Badge>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\" onClick={(event) => event.stopPropagation()}>\n {options.map((option) => {\n const optionIcon = getTagOptionIcon(option.icon);\n\n return (\n <Menu.Item key={option.value} value={option.value} onClick={() => onValueChange(option.value)}>\n {optionIcon ? <Icon as={optionIcon} boxSize=\"14px\" color=\"fg.muted\" /> : null}\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n {option.label}\n </Text>\n {option.value === value && <Icon as={Check} boxSize=\"14px\" color=\"fg.muted\" />}\n </Menu.Item>\n );\n })}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n","import { Badge, HStack, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler } from \"react\";\nimport type { WorkspaceBadgeProps } from \"@/components/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/workspace-badge\";\nimport { TagBadge } from \"./tag-badge\";\nimport type { DataRendererTagOption } from \"./types\";\n\nexport interface DataRendererCardBadge {\n label: string;\n color?: string;\n}\n\nexport interface DataRendererCardTagBadge {\n tagName: string;\n label: string;\n value: string | null;\n color?: string;\n options: DataRendererTagOption[];\n}\n\ninterface DataRendererCardProps {\n ticketId: string;\n parentPath?: string[];\n title: string;\n badges?: DataRendererCardBadge[];\n tagBadges?: DataRendererCardTagBadge[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n onTagChange?: (tagName: string, newValue: string) => void;\n}\n\nexport const DataRendererCard = (props: DataRendererCardProps) => {\n const {\n ticketId,\n parentPath = [],\n title,\n badges = [],\n tagBadges = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onDragStart,\n onDragEnd,\n onClick,\n onTagChange,\n } = props;\n\n const hasBadges = badges.length > 0 || tagBadges.length > 0;\n\n return (\n <Stack\n gap=\"xs\"\n padding=\"sm\"\n borderRadius=\"sm\"\n borderWidth=\"1px\"\n width=\"100%\"\n background=\"bg\"\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: \"border.blue\",\n boxShadow: \"mid\",\n }}\n cursor={draggable ? \"grab\" : onClick ? \"pointer\" : \"default\"}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"ticket-card\"\n >\n <HStack gap=\"2xs\" flexWrap=\"wrap\" alignItems=\"center\">\n <HStack gap=\"2xs\" flexShrink={0}>\n <Text textStyle=\"label/S/regular\" flexShrink={0}>\n {parentPath.length > 0 && (\n <Text as=\"span\" color=\"subtle\">\n {parentPath.join(\" / \")} /{\" \"}\n </Text>\n )}\n {ticketId}\n </Text>\n {workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}\n </HStack>\n </HStack>\n\n <HStack align=\"start\" gap=\"2xs\" flexWrap=\"wrap\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" flex=\"1\" minW=\"0\" overflowWrap=\"anywhere\">\n {title}\n </Text>\n </HStack>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <Badge key={badge.label} variant=\"subtle\" colorPalette={badge.color ?? \"gray\"} textStyle=\"label/XS/medium\">\n {badge.label}\n </Badge>\n ))}\n {tagBadges.map((tag) => (\n <TagBadge\n key={tag.tagName}\n value={tag.value}\n label={tag.label}\n color={tag.value ? tag.color : \"gray\"}\n options={tag.options}\n onValueChange={onTagChange ? (newValue) => onTagChange(tag.tagName, newValue) : undefined}\n />\n ))}\n </Wrap>\n )}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, IconButton, Menu, Spacer, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight, MoreHorizontal, Plus } from \"lucide-react\";\nimport { type ComponentProps, type ComponentType, type DragEvent, useState } from \"react\";\n\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport type { ResourceContextAction } from \"@/components/resource-context-menu\";\nimport { ResourceContextMenu } from \"@/components/resource-context-menu\";\nimport { ScrollArea } from \"@/components/scroll-area\";\nimport { Tooltip } from \"@/components/tooltip\";\n\nimport { DataRendererCard } from \"./data-renderer-card\";\n\ntype DataRendererCardProps = ComponentProps<typeof DataRendererCard>;\n\nexport interface DataRendererBoardItem {\n id: string;\n cardProps: Omit<DataRendererCardProps, \"draggable\" | \"onDragStart\" | \"onDragEnd\" | \"isSelected\">;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface DataRendererBoardColumnAction {\n id: string;\n label: string;\n icon: ComponentType<{ size?: number | string }>;\n}\n\nexport interface DataRendererBoardGroup {\n key: string;\n label: string;\n items: DataRendererBoardItem[];\n}\n\nexport interface DataRendererBoardColumn {\n id: string;\n label: string;\n color?: string;\n items: DataRendererBoardItem[];\n groups?: DataRendererBoardGroup[];\n canDragIn: boolean;\n canDragOut: boolean;\n canCreate: boolean;\n actions: DataRendererBoardColumnAction[];\n}\n\ninterface DataRendererBoardProps {\n columns: DataRendererBoardColumn[];\n selectedItemId?: string | null;\n onMoveItem?: (itemId: string, targetColumnId: string, context?: { beforeItemId?: string }) => void;\n onMoveToGroup?: (itemId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => void;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const DataRendererBoard = (props: DataRendererBoardProps) => {\n const { columns, selectedItemId = null, onMoveItem, onMoveToGroup, onCreateStart, onColumnAction } = props;\n\n const [activeColumn, setActiveColumn] = useState<string | null>(null);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const handleDragStart = (itemId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.dataTransfer.setData(\"text/plain\", itemId);\n event.dataTransfer.effectAllowed = \"move\";\n };\n\n const handleDragEnd = () => {\n setActiveColumn(null);\n setActiveGroup(null);\n };\n\n const handleDragOver = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(columnId);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveColumn(null);\n };\n\n const handleDrop = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setActiveColumn(null);\n\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n\n onMoveItem?.(itemId, columnId);\n };\n\n return (\n <ScrollArea\n height=\"100%\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ display: \"flex\", alignItems: \"stretch\", gap: \"0\", pb: \"2xs\", minH: \"100%\" }}\n >\n {columns.map((column) => (\n <Stack\n key={column.id}\n data-testid={`board-column-${column.id}`}\n gap=\"xs\"\n _notFirst={{ borderLeft: \"1px solid\", borderColor: \"border.muted\" }}\n background={activeColumn === column.id ? \"bg.subtle\" : \"bg\"}\n transition=\"background 150ms ease\"\n height=\"100%\"\n minH=\"240px\"\n overflow=\"hidden\"\n minW=\"260px\"\n flex=\"1 0 260px\"\n onDragOver={column.canDragIn ? handleDragOver(column.id) : undefined}\n onDragLeave={column.canDragIn ? handleDragLeave : undefined}\n onDrop={column.canDragIn ? handleDrop(column.id) : undefined}\n >\n <ColumnHeader column={column} onCreateStart={onCreateStart} onColumnAction={onColumnAction} />\n\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n verticalScrollbarProps={{ margin: \"0\" }}\n contentProps={{\n spaceY: \"sm\",\n ps: \"xs\",\n pe: \"xs\",\n }}\n >\n {column.groups && column.groups.length > 0\n ? column.groups.map((group) => {\n const groupId = `${column.id}::${group.key}`;\n return (\n <GroupSection\n key={group.key}\n columnId={column.id}\n group={group}\n selectedItemId={selectedItemId}\n canDragIn={column.canDragIn}\n canDragOut={column.canDragOut}\n isDropTarget={activeGroup === groupId}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onGroupDragOver={(event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveGroup(groupId);\n setActiveColumn(null);\n }}\n onGroupDragLeave={(event) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveGroup(null);\n }}\n onGroupDrop={(event, beforeItemId) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveGroup(null);\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n onMoveItem?.(itemId, column.id, { beforeItemId });\n onMoveToGroup?.(itemId, group.key, { beforeItemId });\n }}\n />\n );\n })\n : column.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(column.id);\n }\n : undefined\n }\n onDrop={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onMoveItem?.(itemId, column.id, { beforeItemId: item.id });\n }\n : undefined\n }\n >\n <DataRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={column.canDragOut}\n onDragStart={column.canDragOut ? handleDragStart(item.id) : undefined}\n onDragEnd={column.canDragOut ? handleDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </ScrollArea>\n </Stack>\n ))}\n </ScrollArea>\n );\n};\n\ninterface ColumnHeaderProps {\n column: DataRendererBoardColumn;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\ninterface GroupSectionProps {\n columnId: string;\n group: DataRendererBoardGroup;\n selectedItemId: string | null;\n canDragIn: boolean;\n canDragOut: boolean;\n isDropTarget: boolean;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n onGroupDragOver: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDragLeave: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDrop: (event: DragEvent<HTMLDivElement>, beforeItemId?: string) => void;\n}\n\nconst GroupSection = (props: GroupSectionProps) => {\n const {\n columnId,\n group,\n selectedItemId,\n canDragIn,\n canDragOut,\n isDropTarget,\n onDragStart,\n onDragEnd,\n onGroupDragOver,\n onGroupDragLeave,\n onGroupDrop,\n } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <Stack\n data-column-id={columnId}\n data-group-key={group.key}\n gap=\"0\"\n borderRadius=\"sm\"\n background={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n transition=\"background 150ms ease\"\n onDragOver={canDragIn ? onGroupDragOver : undefined}\n onDragLeave={canDragIn ? onGroupDragLeave : undefined}\n onDrop={canDragIn ? onGroupDrop : undefined}\n >\n <HStack\n px=\"xs\"\n py=\"2xs\"\n gap=\"2xs\"\n cursor=\"pointer\"\n _hover={{ bg: \"bg.hover\" }}\n borderRadius=\"sm\"\n onClick={() => setExpanded((v) => !v)}\n >\n <Box display=\"flex\" alignItems=\"center\" flexShrink={0}>\n <Icon\n as={ChevronRight}\n boxSize=\"14px\"\n color=\"fg.muted\"\n transform={expanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 0.15s ease\"\n />\n </Box>\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\">\n {group.label}\n </Text>\n <Badge variant=\"subtle\" colorPalette=\"gray\" size=\"sm\">\n {group.items.length}\n </Badge>\n </HStack>\n {expanded && (\n <Stack gap=\"sm\" pt=\"xs\">\n {group.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onGroupDrop(event, item.id);\n }\n : undefined\n }\n >\n <DataRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={canDragOut}\n onDragStart={canDragOut ? onDragStart(item.id) : undefined}\n onDragEnd={canDragOut ? onDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n\nconst ColumnHeader = (props: ColumnHeaderProps) => {\n const { column, onCreateStart, onColumnAction } = props;\n\n return (\n <HStack padding=\"xs\" gap=\"xs\" alignItems=\"center\">\n <Text textStyle=\"label/L/medium\">{column.label}</Text>\n\n <Badge variant=\"subtle\" colorPalette={column.color ?? \"gray\"}>\n {column.items.length}\n </Badge>\n\n <Spacer />\n\n {column.canCreate && onCreateStart && (\n <Tooltip content=\"Create new ticket\">\n <IconButton size=\"2xs\" variant=\"outline\" onClick={() => onCreateStart(column.id)} aria-label=\"Create ticket\">\n <Icon as={Plus} boxSize=\"12px\" />\n </IconButton>\n </Tooltip>\n )}\n\n {column.actions.length > 0 && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={`Column actions for ${column.label}`}>\n <Icon as={MoreHorizontal} boxSize=\"12px\" />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"180px\" bg=\"bg\">\n {column.actions.map((action) => (\n <Menu.Item key={action.id} value={action.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n label={action.label}\n icon={<Icon as={action.icon} boxSize=\"16px\" />}\n onActivate={() => onColumnAction?.(column.id, action.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n )}\n </HStack>\n );\n};\n","export type ViewMode = \"board\" | \"list\";\n\nexport type GroupingField = \"status\" | \"assignee\" | \"none\" | `tag:${string}`;\n\nexport type OrderingField = \"manual\" | \"updated\" | \"title\" | \"ticketId\" | `tag:${string}`;\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport type DisplayProperty = \"id\" | \"status\" | \"assignee\" | \"updated\" | `tag:${string}`;\n\nexport type FilterCategory = \"status\" | \"assignee\" | `tag:${string}`;\n\nexport interface DataRendererOrdering {\n field: OrderingField;\n direction: SortDirection;\n}\n\nexport interface DataRendererSettings {\n viewMode: ViewMode;\n columnGrouping: GroupingField;\n rowGrouping: GroupingField;\n ordering: DataRendererOrdering;\n displayProperties: DisplayProperty[];\n}\n\nexport type DataRendererFilterState = Partial<Record<FilterCategory, string[]>>;\n\nexport interface DataRendererOption<TValue extends string> {\n value: TValue;\n label: string;\n}\n\nexport interface DataRendererFilterOption {\n value: string;\n label: string;\n}\n\nexport interface DataRendererFilterCategory {\n id: FilterCategory;\n label: string;\n options: DataRendererFilterOption[];\n}\n\nexport interface DataRendererTagOption {\n value: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\nexport interface DataRendererTagDefinition {\n name: string;\n label: string;\n options: DataRendererTagOption[];\n}\n\nexport interface DataRendererTag {\n name: string;\n value: string;\n}\n\nexport interface DataRendererRow {\n id: string;\n ticketId: string;\n title: string;\n status?: string | null;\n statusColor?: string;\n assignee?: string | null;\n tags?: DataRendererTag[];\n updatedAt?: string | null;\n parentPath?: string[];\n isSubIssue?: boolean;\n}\n\nexport const DEFAULT_DATA_RENDERER_SETTINGS: DataRendererSettings = {\n viewMode: \"board\",\n columnGrouping: \"status\",\n rowGrouping: \"none\",\n ordering: {\n field: \"manual\",\n direction: \"asc\",\n },\n displayProperties: [],\n};\n\nexport const DEFAULT_GROUPING_OPTIONS: DataRendererOption<GroupingField>[] = [\n { value: \"status\", label: \"Status\" },\n { value: \"assignee\", label: \"Assignee\" },\n { value: \"none\", label: \"No grouping\" },\n];\n\nexport const DEFAULT_ORDERING_OPTIONS: DataRendererOption<OrderingField>[] = [\n { value: \"manual\", label: \"Manual\" },\n { value: \"updated\", label: \"Updated\" },\n { value: \"title\", label: \"Title\" },\n { value: \"ticketId\", label: \"ID\" },\n];\n\nexport const DEFAULT_DISPLAY_PROPERTY_OPTIONS: DataRendererOption<DisplayProperty>[] = [\n { value: \"id\", label: \"ID\" },\n { value: \"status\", label: \"Status\" },\n { value: \"updated\", label: \"Updated\" },\n];\n\nexport const isTagKey = (key: string): key is `tag:${string}` => key.startsWith(\"tag:\");\n\nexport const toTagName = (key: `tag:${string}`) => key.slice(4);\n","import {\n type DataRendererFilterState,\n type DataRendererOrdering,\n type DataRendererRow,\n type DataRendererTagDefinition,\n type FilterCategory,\n type GroupingField,\n isTagKey,\n toTagName,\n} from \"./types\";\n\ninterface GroupingOptions {\n columnGrouping: GroupingField;\n rowGrouping: GroupingField;\n knownColumnKeys?: string[];\n}\n\ninterface DataRendererRowGroup {\n key: string;\n label: string;\n tickets: DataRendererRow[];\n}\n\ninterface DataRendererColumnGroup {\n key: string;\n label: string;\n tickets: DataRendererRow[];\n rows: DataRendererRowGroup[];\n}\n\nconst FALLBACK_LABELS: Record<string, string> = {\n status: \"No status\",\n assignee: \"Unassigned\",\n};\n\nconst normalize = (value: string | null | undefined, fallback: string) => {\n if (!value || value.trim() === \"\") {\n return fallback;\n }\n\n return value;\n};\n\nconst getTagValue = (ticket: DataRendererRow, tagName: string) =>\n ticket.tags?.find((tag) => tag.name === tagName)?.value ?? null;\n\nconst getGroupingValue = (ticket: DataRendererRow, grouping: GroupingField) => {\n if (grouping === \"none\") {\n return \"All\";\n }\n\n if (grouping === \"status\") {\n return normalize(ticket.status, FALLBACK_LABELS.status!);\n }\n\n if (grouping === \"assignee\") {\n return normalize(ticket.assignee, FALLBACK_LABELS.assignee!);\n }\n\n if (isTagKey(grouping)) {\n const tagName = toTagName(grouping);\n const fallback = FALLBACK_LABELS[grouping] ?? `No ${tagName}`;\n return normalize(getTagValue(ticket, tagName), fallback);\n }\n\n return \"All\";\n};\n\nconst compareGroupKey = (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true });\n\nconst orderByDirection = (value: number, direction: DataRendererOrdering[\"direction\"]) =>\n direction === \"asc\" ? value : value * -1;\n\nexport const orderRows = (\n tickets: DataRendererRow[],\n ordering: DataRendererOrdering,\n tagDefinitions: DataRendererTagDefinition[] = [],\n) => {\n if (ordering.field === \"manual\") {\n return tickets;\n }\n\n return [...tickets].sort((a, b) => {\n if (ordering.field === \"updated\") {\n const left = new Date(a.updatedAt ?? 0).getTime();\n const right = new Date(b.updatedAt ?? 0).getTime();\n return orderByDirection(left - right, ordering.direction);\n }\n\n if (ordering.field === \"title\") {\n return orderByDirection(a.title.localeCompare(b.title), ordering.direction);\n }\n\n if (isTagKey(ordering.field)) {\n const tagName = toTagName(ordering.field);\n const def = tagDefinitions.find((d) => d.name === tagName);\n const leftVal = getTagValue(a, tagName);\n const rightVal = getTagValue(b, tagName);\n\n if (def) {\n const toOptionIndex = (value: string | null) => {\n if (value === null) {\n return def.options.length;\n }\n\n const index = def.options.findIndex((o) => o.value === value);\n return index === -1 ? def.options.length + 1 : index;\n };\n\n const leftIndex = toOptionIndex(leftVal);\n const rightIndex = toOptionIndex(rightVal);\n return orderByDirection(leftIndex - rightIndex, ordering.direction);\n }\n\n return orderByDirection(\n (leftVal ?? \"\").localeCompare(rightVal ?? \"\", undefined, { numeric: true }),\n ordering.direction,\n );\n }\n\n return orderByDirection(a.ticketId.localeCompare(b.ticketId, undefined, { numeric: true }), ordering.direction);\n });\n};\n\nexport const groupRows = (tickets: DataRendererRow[], options: GroupingOptions): DataRendererColumnGroup[] => {\n const { columnGrouping, rowGrouping, knownColumnKeys } = options;\n const groupedByColumn = new Map<string, DataRendererRow[]>();\n\n // Seed with known keys so empty columns are preserved\n if (knownColumnKeys) {\n for (const key of knownColumnKeys) {\n groupedByColumn.set(key, []);\n }\n }\n\n for (const ticket of tickets) {\n const key = getGroupingValue(ticket, columnGrouping);\n groupedByColumn.set(key, [...(groupedByColumn.get(key) ?? []), ticket]);\n }\n\n const columnEntries = [...groupedByColumn.entries()].sort(([left], [right]) => compareGroupKey(left, right));\n\n return columnEntries.map(([columnKey, columnTickets]) => {\n if (rowGrouping === \"none\") {\n return {\n key: columnKey,\n label: columnKey,\n tickets: columnTickets,\n rows: [],\n };\n }\n\n const groupedByRow = new Map<string, DataRendererRow[]>();\n\n for (const ticket of columnTickets) {\n const rowKey = getGroupingValue(ticket, rowGrouping);\n groupedByRow.set(rowKey, [...(groupedByRow.get(rowKey) ?? []), ticket]);\n }\n\n const rows = [...groupedByRow.entries()]\n .sort(([left], [right]) => compareGroupKey(left, right))\n .map(([rowKey, rowTickets]) => ({\n key: rowKey,\n label: rowKey,\n tickets: rowTickets,\n }));\n\n return {\n key: columnKey,\n label: columnKey,\n tickets: columnTickets,\n rows,\n };\n });\n};\n\nconst getTicketFilterValues = (ticket: DataRendererRow, category: FilterCategory): string[] => {\n if (category === \"status\") {\n return [normalize(ticket.status, FALLBACK_LABELS.status!)];\n }\n\n if (category === \"assignee\") {\n return [normalize(ticket.assignee, FALLBACK_LABELS.assignee!)];\n }\n\n if (isTagKey(category)) {\n const tagName = toTagName(category);\n const value = getTagValue(ticket, tagName);\n return value ? [value] : [];\n }\n\n return [];\n};\n\nexport const filterRows = (tickets: DataRendererRow[], filters: DataRendererFilterState) => {\n const activeFilters = Object.entries(filters).filter(([, values]) => values && values.length > 0);\n\n if (activeFilters.length === 0) {\n return tickets;\n }\n\n return tickets.filter((ticket) =>\n activeFilters.every(([category, values]) => {\n const ticketValues = getTicketFilterValues(ticket, category as FilterCategory);\n return ticketValues.some((value) => values?.includes(value));\n }),\n );\n};\n\nexport const countFilterValues = (tickets: DataRendererRow[], category: FilterCategory) => {\n const counts: Record<string, number> = {};\n\n for (const ticket of tickets) {\n for (const value of getTicketFilterValues(ticket, category)) {\n counts[value] = (counts[value] ?? 0) + 1;\n }\n }\n\n return counts;\n};\n\nexport type { DataRendererColumnGroup, DataRendererRowGroup };\n","import type { DataRendererCardBadge, DataRendererCardTagBadge } from \"./data-renderer-card\";\nimport type {\n DataRendererFilterCategory,\n DataRendererFilterState,\n DataRendererOption,\n DataRendererRow,\n DataRendererTagDefinition,\n DisplayProperty,\n FilterCategory,\n GroupingField,\n OrderingField,\n} from \"./types\";\nimport { isTagKey, toTagName } from \"./types\";\n\nexport const toTitleCase = (value: string) =>\n value\n .replaceAll(\"_\", \" \")\n .split(\" \")\n .filter((chunk) => chunk.length > 0)\n .map((chunk) => chunk[0]!.toUpperCase() + chunk.slice(1))\n .join(\" \");\n\nconst collectCategoryOptions = (tickets: DataRendererRow[], category: FilterCategory) => {\n const values = new Set<string>();\n\n for (const ticket of tickets) {\n if (category === \"status\") {\n if (ticket.status) values.add(ticket.status);\n } else if (category === \"assignee\") {\n if (ticket.assignee) values.add(ticket.assignee);\n } else if (isTagKey(category)) {\n const tagName = toTagName(category);\n const tag = ticket.tags?.find((t) => t.name === tagName);\n if (tag) values.add(tag.value);\n }\n }\n\n return [...values]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n};\n\nexport const buildDefaultFilterCategories = (\n tickets: DataRendererRow[],\n tagDefinitions: DataRendererTagDefinition[],\n): DataRendererFilterCategory[] => {\n const categories: DataRendererFilterCategory[] = [\n { id: \"status\", label: \"Status\", options: collectCategoryOptions(tickets, \"status\") },\n { id: \"assignee\", label: \"Assignee\", options: collectCategoryOptions(tickets, \"assignee\") },\n ];\n\n for (const def of tagDefinitions) {\n const categoryId = `tag:${def.name}` as FilterCategory;\n categories.push({\n id: categoryId,\n label: def.label,\n options: def.options.map((o) => ({ value: o.value, label: o.label })),\n });\n }\n\n return categories;\n};\n\nexport const toBadges = (ticket: DataRendererRow, displayProperties: DisplayProperty[]): DataRendererCardBadge[] => {\n const badges: DataRendererCardBadge[] = [];\n const includes = (property: DisplayProperty) => displayProperties.includes(property);\n\n if (includes(\"status\") && ticket.status) {\n badges.push({ label: ticket.status, color: ticket.statusColor ?? \"gray\" });\n }\n\n if (includes(\"assignee\") && ticket.assignee) {\n badges.push({ label: ticket.assignee, color: \"blue\" });\n }\n\n if (includes(\"updated\") && ticket.updatedAt) {\n badges.push({ label: new Date(ticket.updatedAt).toLocaleDateString(), color: \"gray\" });\n }\n\n return badges;\n};\n\nexport const toTagBadges = (\n ticket: DataRendererRow,\n displayProperties: DisplayProperty[],\n tagDefinitions: DataRendererTagDefinition[],\n): DataRendererCardTagBadge[] => {\n const tagBadges: DataRendererCardTagBadge[] = [];\n\n for (const def of tagDefinitions) {\n const displayKey = `tag:${def.name}` as DisplayProperty;\n if (!displayProperties.includes(displayKey)) continue;\n\n const tag = ticket.tags?.find((t) => t.name === def.name);\n const optionDef = tag ? def.options.find((o) => o.value === tag.value) : undefined;\n\n tagBadges.push({\n tagName: def.name,\n label: def.label,\n value: tag?.value ?? null,\n color: optionDef?.color ?? \"purple\",\n options: def.options,\n });\n }\n\n return tagBadges;\n};\n\nexport const buildTagOptions = (tagDefinitions: DataRendererTagDefinition[]) => ({\n grouping: tagDefinitions.map(\n (def) => ({ value: `tag:${def.name}`, label: def.label }) as DataRendererOption<GroupingField>,\n ),\n ordering: tagDefinitions.map(\n (def) => ({ value: `tag:${def.name}`, label: def.label }) as DataRendererOption<OrderingField>,\n ),\n display: tagDefinitions.map(\n (def) => ({ value: `tag:${def.name}`, label: def.label }) as DataRendererOption<DisplayProperty>,\n ),\n});\n\nexport const orderGroupingOptions = <TValue extends string>(options: DataRendererOption<TValue>[]) => {\n const noGrouping = options.find((option) => option.value === \"none\");\n if (!noGrouping) {\n return options;\n }\n\n return [noGrouping, ...options.filter((option) => option.value !== \"none\")];\n};\n\nexport const resolveSubGroupingOptions = (\n options: DataRendererOption<GroupingField>[],\n columnGrouping: GroupingField,\n) => {\n if (columnGrouping === \"none\") {\n return options.filter((option) => option.value === \"none\");\n }\n\n return options.filter((option) => option.value === \"none\" || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: GroupingField, placement?: { columnKey?: string }) => {\n if (columnGrouping === \"none\") {\n return \"all\";\n }\n\n return placement?.columnKey;\n};\n\nexport const resolveKnownColumnKeys = (\n columnGrouping: GroupingField,\n knownColumnKeys: string[] | undefined,\n categories: DataRendererFilterCategory[],\n filters?: DataRendererFilterState,\n) => {\n if (columnGrouping === \"none\") {\n return undefined;\n }\n\n const activeValues = filters?.[columnGrouping];\n if (activeValues && activeValues.length > 0) {\n return activeValues;\n }\n\n if (columnGrouping === \"status\") {\n if (knownColumnKeys) {\n return knownColumnKeys;\n }\n }\n\n return categories.find((category) => category.id === columnGrouping)?.options.map((option) => option.value);\n};\n\nexport const omitFilterCategory = (\n filters: DataRendererFilterState,\n category: FilterCategory,\n): DataRendererFilterState => {\n const next = { ...filters } as Record<string, string[] | undefined>;\n delete next[category];\n return next as DataRendererFilterState;\n};\n","import { Badge, Box, HStack, Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport {\n type ColumnDef,\n type ExpandedState,\n getCoreRowModel,\n getExpandedRowModel,\n type Row,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { type ComponentType, type ReactNode, useState } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowItem } from \"../list-row/list-row.types\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { DataRendererCardBadge, DataRendererCardTagBadge } from \"./data-renderer-card\";\nimport { TagBadge } from \"./tag-badge\";\n\nexport interface DataRendererListItem {\n id: string;\n ticketId: string;\n title: string;\n countBadge?: number;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n badges?: DataRendererCardBadge[];\n tagBadges?: DataRendererCardTagBadge[];\n date?: string;\n assigneeIcon?: ReactNode;\n children?: DataRendererListItem[];\n onClick?: () => void;\n onTagChange?: (tagName: string, newValue: string) => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropTicket?: (ticketId: string) => void;\n}\n\ninterface DataRendererListProps {\n items: DataRendererListItem[];\n selectedItemId?: string | null;\n onItemClick?: (item: DataRendererListItem) => void;\n}\n\nconst INDENT_STEP_PX = 12;\n\nexport const getDataRendererListIndentation = (depth: number) => {\n if (depth <= 0) return undefined;\n return `${depth * INDENT_STEP_PX}px`;\n};\n\nconst columns: ColumnDef<DataRendererListItem, unknown>[] = [{ id: \"ticket\" }];\n\nconst renderLabel = (item: DataRendererListItem) => {\n const hasTicketId = item.ticketId.trim().length > 0;\n return (\n <HStack gap=\"xs\" minW=\"0\" flex=\"1\">\n {hasTicketId ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" flexShrink={0} minW=\"70px\">\n {item.ticketId}\n </Text>\n ) : null}\n <Text textStyle=\"label/S/regular\" flex=\"1\" truncate>\n {item.title}\n </Text>\n </HStack>\n );\n};\n\nconst renderEndContent = (item: DataRendererListItem) => {\n const hasBadges = (item.badges?.length ?? 0) > 0 || (item.tagBadges?.length ?? 0) > 0;\n const hasCount = typeof item.countBadge === \"number\";\n const hasAssignee = Boolean(item.assigneeIcon);\n const hasDate = Boolean(item.date);\n\n if (!hasBadges && !hasCount && !hasAssignee && !hasDate) return null;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n {hasCount ? (\n <Badge variant=\"subtle\" colorPalette=\"gray\" size=\"sm\" flexShrink={0}>\n {item.countBadge}\n </Badge>\n ) : null}\n {hasBadges ? (\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <Badge key={badge.label} variant=\"subtle\" colorPalette={badge.color ?? \"gray\"} textStyle=\"label/XS/medium\">\n {badge.label}\n </Badge>\n ))}\n {item.tagBadges?.map((tag) => (\n <TagBadge\n key={tag.tagName}\n value={tag.value}\n label={tag.label}\n color={tag.value ? tag.color : \"gray\"}\n options={tag.options}\n onValueChange={item.onTagChange ? (newValue) => item.onTagChange!(tag.tagName, newValue) : undefined}\n />\n ))}\n </Wrap>\n ) : null}\n {hasAssignee ? <Box flexShrink={0}>{item.assigneeIcon}</Box> : null}\n {hasDate ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" flexShrink={0}>\n {item.date}\n </Text>\n ) : null}\n </HStack>\n );\n};\n\nconst buildListRowItem = (item: DataRendererListItem, hasChildren: boolean): ListRowItem => ({\n id: item.id,\n label: renderLabel(item),\n icon: item.statusIcon ? <Icon as={item.statusIcon} boxSize=\"16px\" /> : undefined,\n iconColor: item.statusColor ?? \"fg.muted\",\n endContent: renderEndContent(item),\n isContainer: hasChildren,\n contextMenuItems: item.contextMenuActions?.map((action) => ({\n id: action.key,\n label: action.label,\n icon: action.icon ?? undefined,\n disabled: action.isDisabled,\n onAction: action.onClick,\n })),\n});\n\nexport const DataRendererList = (props: DataRendererListProps) => {\n const { items, selectedItemId = null, onItemClick } = props;\n const [expanded, setExpanded] = useState<ExpandedState>(true);\n\n const table = useReactTable({\n data: items,\n columns,\n state: { expanded },\n onExpandedChange: setExpanded,\n getSubRows: (row) => row.children,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getRowId: (row) => row.id,\n });\n\n return (\n <Box>\n {table.getRowModel().rows.map((row) => (\n <TicketListRow key={row.id} row={row} selectedItemId={selectedItemId} onItemClick={onItemClick} />\n ))}\n </Box>\n );\n};\n\ninterface TicketListRowProps {\n row: Row<DataRendererListItem>;\n selectedItemId: string | null;\n onItemClick?: (item: DataRendererListItem) => void;\n}\n\nconst TicketListRow = (props: TicketListRowProps) => {\n const { row, selectedItemId, onItemClick } = props;\n const item = row.original;\n const canExpand = row.getCanExpand();\n const isSelected = item.id === selectedItemId;\n const rowItem = buildListRowItem(item, canExpand);\n\n const handleActivate = () => {\n if (canExpand) {\n row.toggleExpanded();\n return;\n }\n item.onClick?.();\n onItemClick?.(item);\n };\n\n return (\n <Box\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n draggable={item.draggable}\n onDragStart={(event) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n }}\n onDragOver={(event) => {\n if (!item.onDropTicket) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }}\n onDrop={(event) => {\n if (!item.onDropTicket) return;\n event.preventDefault();\n event.stopPropagation();\n const ticketId = event.dataTransfer.getData(\"text/plain\");\n if (!ticketId || ticketId === item.id) return;\n item.onDropTicket(ticketId);\n }}\n >\n <ListRow\n {...rowItem}\n variant=\"tree\"\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={row.getIsExpanded()}\n showExpandToggle={canExpand}\n onActivate={handleActivate}\n onToggleExpand={() => row.toggleExpanded()}\n />\n </Box>\n );\n};\n","import { Button, HStack, Icon, IconButton, Menu, Popover, Portal, Separator, Stack, Text } from \"@chakra-ui/react\";\nimport { ArrowDownUp, ChevronDown, KanbanSquare, List, Settings2 } from \"lucide-react\";\nimport { Fragment, useEffect, useRef, useState } from \"react\";\nimport { orderGroupingOptions, resolveSubGroupingOptions } from \"./data-renderer-helpers\";\nimport type { DataRendererOption, DataRendererSettings, DisplayProperty, GroupingField, OrderingField } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: DataRendererSettings;\n groupingOptions: DataRendererOption<GroupingField>[];\n orderingOptions: DataRendererOption<OrderingField>[];\n displayPropertyOptions: DataRendererOption<DisplayProperty>[];\n onViewModeChange: (value: DataRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: GroupingField) => void;\n onRowGroupingChange: (value: GroupingField) => void;\n onOrderingFieldChange: (value: OrderingField) => void;\n onSortDirectionToggle: () => void;\n onDisplayPropertyToggle: (property: DisplayProperty) => void;\n}\n\nconst SectionLabel = (props: { children: string }) => (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n {props.children}\n </Text>\n);\n\nconst viewModeOptions = [\n { value: \"list\", label: \"List\", icon: List },\n { value: \"board\", label: \"Board\", icon: KanbanSquare },\n] as const;\n\nconst Dropdown = <T extends string>(props: {\n label: string;\n value: T;\n options: DataRendererOption<T>[];\n onSelect: (value: T) => void;\n}) => {\n const orderedOptions = orderGroupingOptions(props.options);\n const selectedLabel = orderedOptions.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoGrouping = orderedOptions[0]?.value === \"none\";\n\n return (\n <Stack gap=\"2xs\">\n <SectionLabel>{props.label}</SectionLabel>\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"sm\" variant=\"outline\" width=\"full\" justifyContent=\"space-between\">\n {selectedLabel}\n <Icon as={ChevronDown} color=\"fg.muted\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"260px\" bg=\"bg\">\n {orderedOptions.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoGrouping && index === 1 ? <Menu.Separator /> : null}\n <Menu.Item value={option.value} onClick={() => props.onSelect(option.value)}>\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Stack>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n orderingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onOrderingFieldChange,\n onSortDirectionToggle,\n onDisplayPropertyToggle,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}\n onOpenChange={(event) => setOpen(event.open)}\n >\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Display settings\" variant=\"ghost\" size=\"sm\">\n <Icon as={Settings2} boxSize=\"14px\" />\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"320px\" p=\"sm\" bg=\"bg\">\n <Stack gap=\"sm\">\n <SectionLabel>View</SectionLabel>\n <HStack gap=\"2xs\">\n {viewModeOptions.map((option) => {\n const ViewModeIcon = option.icon;\n const active = settings.viewMode === option.value;\n\n return (\n <Button\n key={option.value}\n flex=\"1\"\n size=\"sm\"\n variant={active ? \"solid\" : \"outline\"}\n aria-pressed={active}\n onClick={() => onViewModeChange(option.value)}\n >\n <ViewModeIcon size={14} />\n {option.label}\n </Button>\n );\n })}\n </HStack>\n\n <Separator />\n\n <Dropdown\n label=\"Grouping\"\n value={settings.columnGrouping}\n options={groupingOptions}\n onSelect={(value) => {\n onColumnGroupingChange(value);\n if (value === \"none\" || value === settings.rowGrouping) {\n onRowGroupingChange(\"none\");\n }\n }}\n />\n\n <Dropdown\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\n <Stack gap=\"2xs\">\n <SectionLabel>Ordering</SectionLabel>\n <HStack gap=\"2xs\">\n <Dropdown\n label=\"Sort by\"\n value={settings.ordering.field}\n options={orderingOptions}\n onSelect={onOrderingFieldChange}\n />\n <IconButton\n mt=\"lg\"\n aria-label=\"Toggle sort direction\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onSortDirectionToggle}\n data-direction={settings.ordering.direction}\n >\n <Icon\n as={ArrowDownUp}\n transform={settings.ordering.direction === \"asc\" ? \"rotate(0deg)\" : \"rotate(180deg)\"}\n />\n </IconButton>\n </HStack>\n </Stack>\n\n <Separator />\n <Stack gap=\"2xs\">\n <SectionLabel>Display properties</SectionLabel>\n <HStack flexWrap=\"wrap\" gap=\"2xs\">\n {displayPropertyOptions.map((option) => {\n const isActive = settings.displayProperties.includes(option.value);\n\n return (\n <Button\n key={option.value}\n size=\"2xs\"\n variant={isActive ? \"solid\" : \"outline\"}\n onClick={() => onDisplayPropertyToggle(option.value)}\n >\n {option.label}\n </Button>\n );\n })}\n </HStack>\n </Stack>\n </Stack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, IconButton, Popover, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Check, Filter } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport type { DataRendererFilterCategory, DataRendererFilterState } from \"./types\";\n\ninterface FilterMenuProps {\n categories: DataRendererFilterCategory[];\n filters: DataRendererFilterState;\n countsByCategory: Record<string, Record<string, number>>;\n onToggleFilterValue: (category: DataRendererFilterCategory[\"id\"], value: string) => void;\n onClearFilter: (category: DataRendererFilterCategory[\"id\"]) => void;\n onClearAll: () => void;\n}\n\nconst getActiveFilterCount = (filters: DataRendererFilterState) =>\n Object.values(filters).reduce((sum, values) => sum + (values?.length ?? 0), 0);\n\nexport const FilterMenu = (props: FilterMenuProps) => {\n const { categories, filters, countsByCategory, onToggleFilterValue, onClearFilter, onClearAll } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [activeCategoryId, setActiveCategoryId] = useState<DataRendererFilterCategory[\"id\"]>(\n categories[0]?.id ?? \"status\",\n );\n\n const activeCategory = categories.find((category) => category.id === activeCategoryId) ?? categories[0];\n\n const activeFilterCount = getActiveFilterCount(filters);\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}\n onOpenChange={(event) => setOpen(event.open)}\n >\n <Popover.Trigger asChild>\n <IconButton\n ref={triggerRef}\n aria-label=\"Filter tickets\"\n variant={activeFilterCount > 0 ? \"outline\" : \"ghost\"}\n size=\"sm\"\n >\n <HStack gap=\"2xs\">\n <Icon as={Filter} boxSize=\"14px\" />\n {activeFilterCount > 0 ? <Badge variant=\"solid\">{activeFilterCount}</Badge> : null}\n </HStack>\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"560px\" p=\"0\" bg=\"bg\" overflow=\"hidden\">\n <HStack align=\"stretch\" gap=\"0\" minH=\"320px\">\n <Stack width=\"220px\" borderRightWidth=\"1px\" borderColor=\"border.muted\" p=\"sm\" gap=\"2xs\">\n <HStack justifyContent=\"space-between\">\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n Filters\n </Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={onClearAll}>\n Clear all\n </Button>\n </HStack>\n {categories.map((category) => {\n const selectedValues = filters[category.id] ?? [];\n return (\n <Button\n key={category.id}\n variant={activeCategoryId === category.id ? \"subtle\" : \"ghost\"}\n size=\"sm\"\n justifyContent=\"space-between\"\n onClick={() => setActiveCategoryId(category.id)}\n >\n <Text>{category.label}</Text>\n {selectedValues.length > 0 ? <Badge variant=\"subtle\">{selectedValues.length}</Badge> : null}\n </Button>\n );\n })}\n </Stack>\n\n <Stack flex=\"1\" p=\"sm\" gap=\"sm\">\n {activeCategory ? (\n <>\n <HStack justifyContent=\"space-between\">\n <Text textStyle=\"label/S/medium\">{activeCategory.label}</Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={() => onClearFilter(activeCategory.id)}>\n Clear\n </Button>\n </HStack>\n <Stack gap=\"2xs\">\n {activeCategory.options.map((option) => {\n const checked = (filters[activeCategory.id] ?? []).includes(option.value);\n const count = countsByCategory[activeCategory.id]?.[option.value] ?? 0;\n\n return (\n <Button\n key={option.value}\n role=\"checkbox\"\n aria-checked={checked}\n variant=\"ghost\"\n size=\"sm\"\n width=\"full\"\n px=\"xs\"\n py=\"2xs\"\n height=\"auto\"\n borderRadius=\"sm\"\n justifyContent=\"flex-start\"\n onClick={() => onToggleFilterValue(activeCategory.id, option.value)}\n >\n <Box\n boxSize=\"4\"\n borderWidth=\"1px\"\n borderRadius=\"xs\"\n borderColor={checked ? \"fg\" : \"border\"}\n bg={checked ? \"fg\" : \"transparent\"}\n color={checked ? \"bg\" : \"transparent\"}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n >\n {checked ? <Icon as={Check} boxSize=\"3\" /> : null}\n </Box>\n <HStack gap=\"2xs\" justifyContent=\"space-between\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {count}\n </Text>\n </HStack>\n </Button>\n );\n })}\n </Stack>\n </>\n ) : null}\n </Stack>\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { omitFilterCategory } from \"./data-renderer-helpers\";\nimport {\n type DataRendererFilterState,\n type DataRendererSettings,\n DEFAULT_DATA_RENDERER_SETTINGS,\n type DisplayProperty,\n type FilterCategory,\n} from \"./types\";\n\ninterface DataRendererSnapshot {\n settings: DataRendererSettings;\n filters: DataRendererFilterState;\n}\n\ninterface DataRendererState extends DataRendererSnapshot {\n setViewMode: (viewMode: DataRendererSettings[\"viewMode\"]) => void;\n setColumnGrouping: (columnGrouping: DataRendererSettings[\"columnGrouping\"]) => void;\n setRowGrouping: (rowGrouping: DataRendererSettings[\"rowGrouping\"]) => void;\n setOrdering: (ordering: DataRendererSettings[\"ordering\"]) => void;\n setOrderingField: (field: DataRendererSettings[\"ordering\"][\"field\"]) => void;\n setDisplayProperties: (displayProperties: DisplayProperty[]) => void;\n toggleSortDirection: () => void;\n toggleDisplayProperty: (property: DataRendererSettings[\"displayProperties\"][number]) => void;\n setFilter: (category: FilterCategory, values: string[]) => void;\n toggleFilterValue: (category: FilterCategory, value: string) => void;\n clearFilter: (category: FilterCategory) => void;\n clearAllFilters: () => void;\n reset: () => void;\n}\n\ninterface CreateDataRendererStoreOptions {\n storageKey: string;\n initialState?: Partial<DataRendererSnapshot>;\n}\n\nconst WORKSPACE_STORE_NAMESPACE = \"pstdio/ui/tickets-workspace\";\n\nconst toStorageName = (storageKey: string) => `${WORKSPACE_STORE_NAMESPACE}/${storageKey}`;\n\nconst DEFAULT_SNAPSHOT: DataRendererSnapshot = {\n settings: DEFAULT_DATA_RENDERER_SETTINGS,\n filters: {},\n};\n\nconst createNoopStorage = () => ({\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n});\n\nconst toggleValue = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\nexport const createDataRendererStore = (options: CreateDataRendererStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = {\n settings: { ...DEFAULT_SNAPSHOT.settings, ...(initialState?.settings ?? {}) },\n filters: initialState?.filters ?? DEFAULT_SNAPSHOT.filters,\n };\n\n return createStore<DataRendererState>()(\n persist(\n (set) => ({\n ...snapshot,\n setViewMode: (viewMode) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, viewMode },\n })),\n setColumnGrouping: (columnGrouping) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, columnGrouping },\n })),\n setRowGrouping: (rowGrouping) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, rowGrouping },\n })),\n setOrdering: (ordering) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, ordering },\n })),\n setOrderingField: (field) =>\n set((state) => ({\n ...state,\n settings: {\n ...state.settings,\n ordering: {\n ...state.settings.ordering,\n field,\n },\n },\n })),\n setDisplayProperties: (displayProperties) =>\n set((state) => ({\n ...state,\n settings: {\n ...state.settings,\n displayProperties,\n },\n })),\n toggleSortDirection: () =>\n set((state) => ({\n ...state,\n settings: {\n ...state.settings,\n ordering: {\n ...state.settings.ordering,\n direction: state.settings.ordering.direction === \"asc\" ? \"desc\" : \"asc\",\n },\n },\n })),\n toggleDisplayProperty: (property) =>\n set((state) => {\n const displayProperties = state.settings.displayProperties.includes(property)\n ? state.settings.displayProperties.filter((value) => value !== property)\n : [...state.settings.displayProperties, property];\n\n return {\n ...state,\n settings: {\n ...state.settings,\n displayProperties,\n },\n };\n }),\n setFilter: (category, values) =>\n set((state) => ({\n ...state,\n filters: {\n ...state.filters,\n [category]: values,\n },\n })),\n toggleFilterValue: (category, value) =>\n set((state) => {\n const currentValues = state.filters[category] ?? [];\n const nextValues = toggleValue(currentValues, value);\n const nextFilters =\n nextValues.length === 0\n ? omitFilterCategory(state.filters, category)\n : { ...state.filters, [category]: nextValues };\n\n return { ...state, filters: nextFilters };\n }),\n clearFilter: (category) =>\n set((state) => {\n return {\n ...state,\n filters: omitFilterCategory(state.filters, category),\n };\n }),\n clearAllFilters: () => set((state) => ({ ...state, filters: {} })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(storageKey),\n version: 1,\n migrate: (persisted, version) => {\n if (version === 0) {\n const state = persisted as DataRendererSnapshot;\n // Remove legacy \"labels\" filter category\n const filters = { ...state.filters };\n delete (filters as Record<string, unknown>).labels;\n\n // Remove legacy \"labels\" display property\n const displayProperties = state.settings.displayProperties.filter(\n (p) => p !== (\"labels\" as DisplayProperty),\n );\n\n return {\n ...state,\n settings: { ...state.settings, displayProperties },\n filters,\n };\n }\n return persisted as DataRendererSnapshot;\n },\n storage: createJSONStorage(() => {\n if (typeof globalThis.localStorage === \"undefined\") {\n return createNoopStorage();\n }\n\n return globalThis.localStorage;\n }),\n partialize: (state) => ({\n settings: state.settings,\n filters: state.filters,\n }),\n },\n ),\n );\n};\n\nconst workspaceStoreRegistry = new Map<string, ReturnType<typeof createDataRendererStore>>();\n\nexport const getDataRendererStore = (storageKey: string) => {\n const existingStore = workspaceStoreRegistry.get(storageKey);\n if (existingStore) {\n return existingStore;\n }\n\n const store = createDataRendererStore({ storageKey });\n workspaceStoreRegistry.set(storageKey, store);\n\n return store;\n};\n\nexport const useDataRendererStore = <T>(storageKey: string, selector: (state: DataRendererState) => T) => {\n const store = getDataRendererStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { DataRendererState };\n","import { Box, HStack, Stack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { EmptyState } from \"@/components/empty-state\";\nimport {\n DataRendererBoard,\n type DataRendererBoardColumn,\n type DataRendererBoardColumnAction,\n type DataRendererBoardGroup,\n} from \"./data-renderer-board\";\nimport {\n countFilterValues,\n type DataRendererColumnGroup,\n filterRows,\n groupRows,\n orderRows,\n} from \"./data-renderer-grouping\";\nimport {\n buildDefaultFilterCategories,\n buildTagOptions,\n resolveKnownColumnKeys,\n resolveListDropTargetColumnKey,\n toBadges,\n toTagBadges,\n toTitleCase,\n} from \"./data-renderer-helpers\";\nimport { DataRendererList, type DataRendererListItem } from \"./data-renderer-list\";\nimport { DisplayMenu } from \"./display-menu\";\nimport { FilterMenu } from \"./filter-menu\";\nimport {\n type DataRendererFilterCategory,\n type DataRendererOption,\n type DataRendererRow,\n type DataRendererSettings,\n type DataRendererTagDefinition,\n DEFAULT_DISPLAY_PROPERTY_OPTIONS,\n DEFAULT_GROUPING_OPTIONS,\n DEFAULT_ORDERING_OPTIONS,\n type DisplayProperty,\n type GroupingField,\n type OrderingField,\n} from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\n\nexport interface BoardColumnConfig {\n color?: string;\n canDragIn?: boolean;\n canDragOut?: boolean;\n canCreate?: boolean;\n actions?: DataRendererBoardColumnAction[];\n}\n\ninterface DataRendererProps<TTicket extends DataRendererRow = DataRendererRow> {\n tickets: TTicket[];\n storageKey: string;\n tagDefinitions?: DataRendererTagDefinition[];\n selectedTicketId?: string | null;\n groupingOptions?: DataRendererOption<GroupingField>[];\n orderingOptions?: DataRendererOption<OrderingField>[];\n displayPropertyOptions?: DataRendererOption<DisplayProperty>[];\n filterCategories?: DataRendererFilterCategory[];\n knownColumnKeys?: string[];\n emptyTitle?: string;\n emptyDescription?: string;\n hideToolbar?: boolean;\n toolbarLeading?: ReactNode;\n onTicketClick?: (ticket: TTicket) => void;\n onTagChange?: (ticketId: string, tagName: string, newValue: string) => void;\n onMoveTicket?: (\n ticketId: string,\n targetColumnId: string,\n context?: { columnGrouping: GroupingField; beforeTicketId?: string },\n ) => void;\n onMoveToGroup?: (\n ticketId: string,\n targetGroupKey: string,\n context?: { rowGrouping: GroupingField; beforeTicketId?: string },\n ) => void;\n onCreateTicket?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n}\n\ninterface BuildListItemsInput<TTicket extends DataRendererRow> {\n settings: DataRendererSettings;\n visibleTickets: TTicket[];\n grouped: DataRendererColumnGroup[];\n tagDefinitions: DataRendererTagDefinition[];\n onTicketClick?: (ticket: TTicket) => void;\n onTagChange?: (ticketId: string, tagName: string, newValue: string) => void;\n onMoveTicket?: (\n ticketId: string,\n targetColumnId: string,\n context?: { columnGrouping: GroupingField; beforeTicketId?: string },\n ) => void;\n onMoveToGroup?: (\n ticketId: string,\n targetGroupKey: string,\n context?: { rowGrouping: GroupingField; beforeTicketId?: string },\n ) => void;\n}\n\nconst buildListItems = <TTicket extends DataRendererRow>(\n input: BuildListItemsInput<TTicket>,\n): DataRendererListItem[] => {\n const { settings, visibleTickets, grouped, tagDefinitions, onTicketClick, onTagChange, onMoveTicket, onMoveToGroup } =\n input;\n\n const toListItem = (ticket: TTicket, placement?: { columnKey?: string; rowKey?: string }): DataRendererListItem => ({\n id: ticket.id,\n ticketId: settings.displayProperties.includes(\"id\") ? ticket.ticketId : \"\",\n title: ticket.title,\n badges: toBadges(ticket, settings.displayProperties),\n tagBadges: toTagBadges(ticket, settings.displayProperties, tagDefinitions),\n onClick: () => onTicketClick?.(ticket),\n onTagChange: onTagChange ? (tagName, newValue) => onTagChange(ticket.id, tagName, newValue) : undefined,\n draggable: Boolean(onMoveTicket),\n onDropTicket:\n settings.ordering.field === \"manual\" && onMoveTicket\n ? (draggedTicketId) => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (!targetColumnKey) {\n return;\n }\n\n onMoveTicket(draggedTicketId, targetColumnKey, {\n columnGrouping: settings.columnGrouping,\n beforeTicketId: ticket.id,\n });\n\n const rowKey = placement?.rowKey;\n if (settings.rowGrouping !== \"none\" && onMoveToGroup && rowKey) {\n onMoveToGroup(draggedTicketId, rowKey, {\n rowGrouping: settings.rowGrouping,\n beforeTicketId: ticket.id,\n });\n }\n }\n : undefined,\n });\n\n const toGroupListItem = (\n group: { key: string; label: string; tickets: DataRendererRow[] },\n parent?: { columnKey: string },\n ): DataRendererListItem => ({\n id: parent ? `group::${parent.columnKey}::${group.key}` : `group::${group.key}`,\n ticketId: \"\",\n title: toTitleCase(group.label),\n countBadge: group.tickets.length,\n onDropTicket:\n onMoveTicket && settings.columnGrouping !== \"none\"\n ? (draggedTicketId) => {\n const columnKey = parent?.columnKey ?? group.key;\n onMoveTicket(draggedTicketId, columnKey, {\n columnGrouping: settings.columnGrouping,\n });\n\n if (settings.rowGrouping !== \"none\" && onMoveToGroup && parent) {\n onMoveToGroup(draggedTicketId, group.key, {\n rowGrouping: settings.rowGrouping,\n });\n }\n }\n : undefined,\n children: orderRows(group.tickets, settings.ordering, tagDefinitions).map((ticket) =>\n toListItem(ticket as TTicket, {\n columnKey: parent?.columnKey ?? group.key,\n rowKey: parent ? group.key : undefined,\n }),\n ),\n });\n\n if (settings.columnGrouping === \"none\") {\n return orderRows(visibleTickets, settings.ordering, tagDefinitions).map((ticket) => toListItem(ticket as TTicket));\n }\n\n return grouped.map((group) => {\n if (group.rows.length > 0) {\n return {\n id: `group::${group.key}`,\n ticketId: \"\",\n title: toTitleCase(group.label),\n countBadge: group.tickets.length,\n onDropTicket: onMoveTicket\n ? (draggedTicketId: string) => {\n onMoveTicket(draggedTicketId, group.key, {\n columnGrouping: settings.columnGrouping,\n });\n }\n : undefined,\n children: group.rows.map((row) => toGroupListItem(row, { columnKey: group.key })),\n } satisfies DataRendererListItem;\n }\n\n return toGroupListItem(group);\n });\n};\n\nexport const DataRenderer = <TTicket extends DataRendererRow>(props: DataRendererProps<TTicket>) => {\n const {\n tickets,\n storageKey,\n tagDefinitions = [],\n selectedTicketId = null,\n groupingOptions: groupingOptionsProp,\n orderingOptions: orderingOptionsProp,\n displayPropertyOptions: displayPropertyOptionsProp,\n filterCategories,\n knownColumnKeys: knownColumnKeysProp,\n emptyTitle = \"No tickets found\",\n emptyDescription = \"Try changing filters or display settings.\",\n onTicketClick,\n onTagChange,\n onMoveTicket,\n onMoveToGroup,\n onCreateTicket,\n onColumnAction,\n getBoardColumnConfig,\n hideToolbar = false,\n toolbarLeading,\n } = props;\n\n const tagOptions = buildTagOptions(tagDefinitions);\n\n const groupingOptions = groupingOptionsProp ?? [...DEFAULT_GROUPING_OPTIONS, ...tagOptions.grouping];\n const orderingOptions = orderingOptionsProp ?? [...DEFAULT_ORDERING_OPTIONS, ...tagOptions.ordering];\n const displayPropertyOptions = displayPropertyOptionsProp ?? [\n ...DEFAULT_DISPLAY_PROPERTY_OPTIONS,\n ...tagOptions.display,\n ];\n\n const settings = useDataRendererStore(storageKey, (state) => state.settings);\n const filters = useDataRendererStore(storageKey, (state) => state.filters);\n const setViewMode = useDataRendererStore(storageKey, (state) => state.setViewMode);\n const setColumnGrouping = useDataRendererStore(storageKey, (state) => state.setColumnGrouping);\n const setRowGrouping = useDataRendererStore(storageKey, (state) => state.setRowGrouping);\n const setOrderingField = useDataRendererStore(storageKey, (state) => state.setOrderingField);\n const toggleSortDirection = useDataRendererStore(storageKey, (state) => state.toggleSortDirection);\n const toggleDisplayProperty = useDataRendererStore(storageKey, (state) => state.toggleDisplayProperty);\n const toggleFilterValue = useDataRendererStore(storageKey, (state) => state.toggleFilterValue);\n const clearFilter = useDataRendererStore(storageKey, (state) => state.clearFilter);\n const clearAllFilters = useDataRendererStore(storageKey, (state) => state.clearAllFilters);\n\n const visibleTickets = filterRows(tickets, filters) as TTicket[];\n\n const categoryOptions = filterCategories ?? buildDefaultFilterCategories(tickets, tagDefinitions);\n\n const countsByCategory = Object.fromEntries(\n categoryOptions.map((category) => [category.id, countFilterValues(tickets, category.id)]),\n );\n\n const knownColumnKeys = resolveKnownColumnKeys(\n settings.columnGrouping,\n knownColumnKeysProp,\n categoryOptions,\n filters,\n );\n\n const grouped = groupRows(visibleTickets, {\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys,\n });\n\n const listItems = buildListItems({\n settings,\n visibleTickets,\n grouped,\n tagDefinitions,\n onTicketClick,\n onTagChange,\n onMoveTicket,\n onMoveToGroup,\n });\n\n const toBoardItems = (tickets: DataRendererRow[]) =>\n tickets.map((ticket) => ({\n id: ticket.id,\n cardProps: {\n ticketId: settings.displayProperties.includes(\"id\") ? ticket.ticketId : \"\",\n parentPath: ticket.parentPath,\n title: ticket.title,\n badges: toBadges(ticket, settings.displayProperties),\n tagBadges: toTagBadges(ticket, settings.displayProperties, tagDefinitions),\n onClick: () => onTicketClick?.(ticket as TTicket),\n onTagChange: onTagChange\n ? (tagName: string, newValue: string) => onTagChange(ticket.id, tagName, newValue)\n : undefined,\n },\n }));\n\n const boardColumns: DataRendererBoardColumn[] = grouped.map((column) => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n const orderedTickets = orderRows(column.tickets, settings.ordering, tagDefinitions);\n\n const groups: DataRendererBoardGroup[] | undefined =\n column.rows.length > 0\n ? column.rows.map((row) => ({\n key: row.key,\n label: toTitleCase(row.label),\n items: toBoardItems(orderRows(row.tickets, settings.ordering, tagDefinitions)),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color,\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(orderedTickets),\n groups,\n } satisfies DataRendererBoardColumn;\n });\n\n return (\n <Stack gap=\"sm\" height=\"100%\" minH=\"0\">\n {hideToolbar ? null : (\n <HStack gap=\"2xs\">\n {toolbarLeading}\n <Box flex=\"1\" />\n <FilterMenu\n categories={categoryOptions}\n filters={filters}\n countsByCategory={countsByCategory}\n onToggleFilterValue={toggleFilterValue}\n onClearFilter={clearFilter}\n onClearAll={clearAllFilters}\n />\n <DisplayMenu\n settings={settings}\n groupingOptions={groupingOptions}\n orderingOptions={orderingOptions}\n displayPropertyOptions={displayPropertyOptions}\n onViewModeChange={setViewMode}\n onColumnGroupingChange={setColumnGrouping}\n onRowGroupingChange={setRowGrouping}\n onOrderingFieldChange={setOrderingField}\n onSortDirectionToggle={toggleSortDirection}\n onDisplayPropertyToggle={toggleDisplayProperty}\n />\n </HStack>\n )}\n\n {settings.viewMode === \"board\" ? (\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <DataRendererBoard\n columns={boardColumns}\n selectedItemId={selectedTicketId}\n onMoveItem={(ticketId, targetColumnId, context) =>\n onMoveTicket?.(ticketId, targetColumnId, {\n columnGrouping: settings.columnGrouping,\n beforeTicketId: context?.beforeItemId,\n })\n }\n onMoveToGroup={(ticketId, targetGroupKey, context) =>\n onMoveToGroup?.(ticketId, targetGroupKey, {\n rowGrouping: settings.rowGrouping,\n beforeTicketId: context?.beforeItemId,\n })\n }\n onCreateStart={onCreateTicket}\n onColumnAction={onColumnAction}\n />\n ) : (\n <EmptyState\n title={emptyTitle}\n description={emptyDescription}\n height=\"100%\"\n borderWidth=\"1px\"\n borderRadius=\"md\"\n />\n )}\n </Box>\n ) : listItems.length > 0 ? (\n <DataRendererList items={listItems} selectedItemId={selectedTicketId} />\n ) : (\n <EmptyState title={emptyTitle} description={emptyDescription} borderWidth=\"1px\" borderRadius=\"md\" />\n )}\n </Stack>\n );\n};\n\nexport type { DataRendererProps };\n","import { Button, CloseButton, Dialog, Stack, Text } from \"@chakra-ui/react\";\nimport { useState } from \"react\";\n\ninterface DeleteConfirmationModalProps {\n open: boolean;\n onClose: () => void;\n onDelete: () => void | Promise<void>;\n headline?: string;\n notificationText?: string;\n buttonText?: string;\n}\n\nexport type { DeleteConfirmationModalProps };\n\nexport const DeleteConfirmationModal = (props: DeleteConfirmationModalProps) => {\n const [isDeleting, setIsDeleting] = useState(false);\n const { headline, buttonText, notificationText, onDelete, open, onClose } = props;\n\n const handleDelete = async () => {\n setIsDeleting(true);\n\n try {\n await onDelete();\n onClose();\n } catch {\n // Errors surface through parent state.\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onClose}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Text textStyle=\"heading/M\">{headline}</Text>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>{notificationText}</Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"1\">\n <Button onClick={onClose}>Close</Button>\n <Button loading={isDeleting} variant=\"solid\" colorPalette=\"red\" onClick={handleDelete}>\n {buttonText}\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","export const LARGE_DIFF_LINE_THRESHOLD = 1000;\n\nconst generatedDiffFileNames = new Set([\"bun.lock\", \"bun.lockb\", \"package-lock.json\", \"pnpm-lock.yaml\", \"yarn.lock\"]);\n\nexport const getDiffLineCount = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return (input.additions ?? 0) + (input.deletions ?? 0);\n};\n\nexport const isLargeDiffContent = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return getDiffLineCount(input) > LARGE_DIFF_LINE_THRESHOLD;\n};\n\nexport const isGeneratedDiffPath = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n\n return generatedDiffFileNames.has(fileName) || fileName.endsWith(\".min.js\") || fileName.endsWith(\".generated.ts\");\n};\n","import { Box, Button } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffEditor } from \"./diff-editor\";\nimport { getDiffLineCount } from \"./diff-size\";\nimport { type BuiltDiffViewData, buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardBodyProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isLargeDiff: boolean;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardBodyModelInput extends DiffCardBodyProps {\n buildViewData?: typeof buildDiffViewData;\n}\n\nexport const createDiffCardBodyModel = (input: DiffCardBodyModelInput) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n buildViewData,\n } = input;\n\n if (isLargeDiff && !hasOptedIntoLargeDiff) {\n return {\n kind: \"placeholder\" as const,\n filePath,\n renderedLineCount: getDiffLineCount(diff),\n onShowFullDiff,\n };\n }\n\n const diffViewData = (buildViewData ?? buildDiffViewData)({\n original: oldContent,\n modified: newContent,\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n return {\n kind: \"editor\" as const,\n diffViewData,\n sideBySide: diffViewMode === \"split\",\n };\n};\n\nexport const DiffCardBody = (props: DiffCardBodyProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n const model = createDiffCardBodyModel({\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode,\n });\n\n return (\n <Box bg=\"bg\" borderBottomRadius=\"xs\" overflow=\"hidden\">\n {model.kind === \"editor\" ? (\n <DiffEditor\n original={oldContent}\n modified={newContent}\n oldPath={diff.oldPath}\n newPath={diff.newPath}\n sideBySide={model.sideBySide}\n data={model.diffViewData}\n />\n ) : (\n <LargeDiffPlaceholder\n filePath={model.filePath}\n renderedLineCount={model.renderedLineCount}\n onShowFullDiff={model.onShowFullDiff}\n />\n )}\n </Box>\n );\n};\n\ninterface LargeDiffPlaceholderProps {\n filePath: string;\n renderedLineCount: number;\n onShowFullDiff?: () => void;\n}\n\nconst LargeDiffPlaceholder = (props: LargeDiffPlaceholderProps) => {\n const { filePath, onShowFullDiff } = props;\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title=\"Large diffs are hidden by default\" paddingY=\"sm\">\n {onShowFullDiff ? (\n <Button size=\"xs\" variant=\"outline\" aria-label={`Render full diff for ${filePath}`} onClick={onShowFullDiff}>\n Show full diff\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Text } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\n\ninterface DeferredDiffLoadProps {\n title: string;\n actionLabel?: string;\n isLoadingDiff: boolean;\n onAction?: () => void;\n}\n\nexport const DeferredDiffLoad = (props: DeferredDiffLoadProps) => {\n const { title, actionLabel, isLoadingDiff, onAction } = props;\n\n return (\n <Box bg=\"bg\" p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\">\n <EmptyState title={title} paddingY=\"sm\">\n {actionLabel ? (\n <Button size=\"xs\" variant=\"outline\" loading={isLoadingDiff} onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nexport const LoadingDiffContent = () => (\n <Box bg=\"bg\" p=\"sm\" borderTop=\"1px solid\" borderColor=\"border.muted\">\n <Text textStyle=\"sm\" color=\"fg.muted\">\n Loading diff...\n </Text>\n </Box>\n);\n","import type { Diff } from \"./diff-card\";\nimport { DiffCardBody } from \"./diff-card-body\";\nimport { DeferredDiffLoad, LoadingDiffContent } from \"./diff-card-load-state\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardContentProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isExpanded: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n hasDiffContent: boolean;\n canLoadDiff: boolean;\n shouldAutoLoadDiff: boolean;\n loadError: boolean;\n isLoadingDiff: boolean;\n onLoadDiff: () => Promise<void>;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DeferredDiffLoadStateInput {\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n loadError: boolean;\n canLoadDiff: boolean;\n onLoadDiff: () => Promise<void>;\n onShowFullDiff?: () => void;\n}\n\nconst buildDeferredDiffLoadState = (input: DeferredDiffLoadStateInput) => {\n const { isLargeDiff, isGeneratedDiff, loadError, canLoadDiff, onLoadDiff, onShowFullDiff } = input;\n let title = \"Diff content is not loaded yet.\";\n let actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n let onAction: (() => void) | undefined = canLoadDiff ? () => void onLoadDiff() : undefined;\n\n if (isLargeDiff) {\n title = \"Large diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Show full diff\" : undefined;\n onAction = () => {\n onShowFullDiff?.();\n void onLoadDiff();\n };\n }\n\n if (isGeneratedDiff) {\n title = \"Generated diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n if (loadError) {\n title = \"Diff failed to load. Try again.\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n return { title, actionLabel, onAction };\n};\n\nexport const DiffCardContent = (props: DiffCardContentProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isExpanded,\n isLargeDiff,\n isGeneratedDiff,\n hasDiffContent,\n canLoadDiff,\n shouldAutoLoadDiff,\n loadError,\n isLoadingDiff,\n onLoadDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n if (!isExpanded) return null;\n\n if (!hasDiffContent && !shouldAutoLoadDiff) {\n const { title, actionLabel, onAction } = buildDeferredDiffLoadState({\n isLargeDiff,\n isGeneratedDiff,\n loadError,\n canLoadDiff,\n onLoadDiff,\n onShowFullDiff,\n });\n\n return (\n <DeferredDiffLoad title={title} actionLabel={actionLabel} isLoadingDiff={isLoadingDiff} onAction={onAction} />\n );\n }\n\n if (shouldAutoLoadDiff) {\n return <LoadingDiffContent />;\n }\n\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={isLargeDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n};\n","import { Box, Grid, IconButton, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport { DiffCardContent } from \"./diff-card-content\";\nimport { isGeneratedDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport type { DiffViewMode } from \"./types\";\n\nexport interface Diff {\n change: \"added\" | \"deleted\" | \"modified\" | \"renamed\" | \"copied\" | \"permissionChange\";\n oldPath?: string;\n newPath?: string;\n oldContent?: string;\n newContent?: string;\n additions?: number;\n deletions?: number;\n}\n\ninterface DiffCardProps {\n diff: Diff;\n isSelected?: boolean;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n onSelect?: () => void;\n onLoadDiff?: (path: string) => Promise<void>;\n hasOptedIntoLargeDiff?: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardHeaderProps {\n diff: Diff;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n}\n\nexport const shouldAutoLoadDiffContent = (input: {\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const { isExpanded, hasDiffContent, isLargeDiff, isGeneratedDiff, requestedPath, filePath } = input;\n\n return isExpanded && !hasDiffContent && !isLargeDiff && !isGeneratedDiff && requestedPath !== filePath;\n};\n\nexport const resolveRequestedDiffPath = (input: {\n requestedPath: string | null;\n filePath: string;\n hasDiffContent: boolean;\n}) => {\n const { requestedPath, filePath, hasDiffContent } = input;\n\n if (requestedPath === filePath && hasDiffContent) {\n return null;\n }\n\n return requestedPath;\n};\n\nconst useDiffContentLoader = (input: {\n filePath: string;\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, onLoadDiff } = input;\n const [isLoadingDiff, setLoadingDiff] = useState(false);\n const [requestedPath, setRequestedPath] = useState<string | null>(null);\n const [loadError, setLoadError] = useState(false);\n\n const loadDiff = async () => {\n if (!onLoadDiff || isLoadingDiff) return;\n\n setRequestedPath(filePath);\n setLoadError(false);\n setLoadingDiff(true);\n try {\n await onLoadDiff(filePath);\n } catch {\n setRequestedPath(null);\n setLoadError(true);\n } finally {\n setLoadingDiff(false);\n }\n };\n\n const shouldAutoLoadDiff = shouldAutoLoadDiffContent({\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n requestedPath,\n filePath,\n });\n\n useEffect(() => {\n setRequestedPath((current) => resolveRequestedDiffPath({ requestedPath: current, filePath, hasDiffContent }));\n }, [filePath, hasDiffContent]);\n\n useEffect(() => {\n if (!onLoadDiff || !shouldAutoLoadDiff || loadError) {\n return;\n }\n\n void loadDiff();\n });\n\n return {\n isLoadingDiff,\n loadError,\n shouldAutoLoadDiff: Boolean(onLoadDiff) && shouldAutoLoadDiff && !loadError,\n loadDiff,\n };\n};\n\nexport const DiffCard = (props: DiffCardProps) => {\n const {\n diff,\n isSelected = false,\n isExpanded = true,\n onToggleExpanded,\n onSelect,\n onLoadDiff,\n hasOptedIntoLargeDiff = false,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const oldContent = diff.oldContent || \"\";\n const newContent = diff.newContent || \"\";\n const isLargeDiff = isLargeDiffContent(diff);\n const isGeneratedDiff = isGeneratedDiffPath(filePath);\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const { isLoadingDiff, loadError, shouldAutoLoadDiff, loadDiff } = useDiffContentLoader({\n filePath,\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff: isLargeDiff && !hasOptedIntoLargeDiff,\n isGeneratedDiff,\n onLoadDiff,\n });\n\n return (\n <Box\n data-testid=\"diff-card\"\n border=\"1px solid\"\n borderColor={isSelected ? \"border.accent\" : \"border.muted\"}\n borderRadius=\"xs\"\n overflow=\"visible\"\n bg=\"bg\"\n width=\"100%\"\n maxW=\"100%\"\n transition=\"border-color 0.14s ease\"\n _hover={{ borderColor: \"border.accent\" }}\n onClick={onSelect}\n >\n <DiffCardHeader diff={diff} isExpanded={isExpanded} onToggleExpanded={onToggleExpanded} />\n\n <DiffCardContent\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isExpanded={isExpanded}\n isLargeDiff={isLargeDiff}\n isGeneratedDiff={isGeneratedDiff}\n hasDiffContent={hasDiffContent}\n canLoadDiff={Boolean(onLoadDiff)}\n shouldAutoLoadDiff={shouldAutoLoadDiff}\n loadError={loadError}\n isLoadingDiff={isLoadingDiff}\n onLoadDiff={loadDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n};\n\nexport const DiffCardHeader = (props: DiffCardHeaderProps) => {\n const { diff, isExpanded = true, onToggleExpanded } = props;\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const additions = diff.additions ?? 0;\n const deletions = diff.deletions ?? 0;\n\n return (\n <Grid\n data-testid=\"diff-card-header\"\n templateColumns=\"auto minmax(0, 1fr) auto\"\n px=\"xs\"\n py=\"2xs\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderBottom={isExpanded ? \"1px solid\" : \"none\"}\n borderColor=\"border.muted\"\n borderTopRadius=\"xs\"\n borderBottomRadius={isExpanded ? \"0\" : \"xs\"}\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n bg=\"bg\"\n cursor=\"pointer\"\n transition=\"background 0.14s ease\"\n _hover={{ bg: \"bg\" }}\n onClick={() => onToggleExpanded?.()}\n gap=\"sm\"\n >\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleExpanded?.();\n }}\n flexShrink={0}\n >\n {isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </IconButton>\n\n <Box minW={0} overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" title={filePath}>\n {diff.change === \"renamed\" ? (\n <Text as=\"span\" textStyle=\"sm\">\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" mr=\"xs\">\n {diff.oldPath}\n </Text>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" verticalAlign=\"middle\" mr=\"xs\">\n <ChevronRight size={12} />\n </Box>\n {diff.newPath}\n </Text>\n ) : diff.change === \"deleted\" ? (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n ) : (\n <Text as=\"span\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n </Box>\n\n <Box flexShrink={0}>\n <DiffBubble variant=\"ghost\" additions={additions} deletions={deletions} />\n </Box>\n </Grid>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffDrawerProps {\n diffs: Diff[];\n selectedDiffPath?: string | null;\n onLoadDiff?: (path: string) => Promise<void>;\n onSelectDiffPath?: (path: string) => void;\n onExpansionStateChange?: (state: DiffDrawerExpansionState) => void;\n expansionCommand?: DiffExpansionCommand | null;\n diffViewMode?: DiffViewMode;\n}\n\nexport interface DiffExpansionCommand {\n action: \"expand\" | \"collapse\" | \"expand-selected\";\n id: number;\n path?: string;\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst CARD_HEADER_HEIGHT = 36;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 44;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst ITEM_GAP_HEIGHT = 8;\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\n\ninterface EstimateDiffCardHeightInput {\n diff: Diff;\n isCollapsed: boolean;\n hasOptedIntoLargeDiff?: boolean;\n diffViewMode?: DiffViewMode;\n}\n\nconst deferredCardHeight = () => CARD_HEADER_HEIGHT + DEFERRED_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n\n// Mirrors the branches DiffCardContent renders, so the virtualizer's estimate matches the DOM\n// before measureElement gets a chance to refine it.\nexport const estimateDiffCardHeight = (input: EstimateDiffCardHeightInput) => {\n const { diff, isCollapsed, hasOptedIntoLargeDiff = false, diffViewMode = \"unified\" } = input;\n\n if (isCollapsed) return COLLAPSED_CARD_HEIGHT + ITEM_GAP_HEIGHT;\n\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n if (!hasDiffContent) return deferredCardHeight();\n if (isLargeDiffContent(diff) && !hasOptedIntoLargeDiff) return deferredCardHeight();\n\n const { unifiedContentRows, splitContentRows, hunkRows } = buildDiffViewData({\n original: diff.oldContent ?? \"\",\n modified: diff.newContent ?? \"\",\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n const contentRows = diffViewMode === \"split\" ? splitContentRows : unifiedContentRows;\n if (contentRows === 0 && hunkRows === 0) return deferredCardHeight();\n\n const bodyHeight = contentRows * CARD_BODY_LINE_HEIGHT + hunkRows * HUNK_ROW_HEIGHT;\n return CARD_HEADER_HEIGHT + bodyHeight + ITEM_GAP_HEIGHT;\n};\n\nexport const buildInitialCollapsedPaths = (diffs: Diff[]) => {\n if (diffs.length <= INITIAL_EXPANDED_DIFF_COUNT) return new Set<string>();\n\n return new Set(\n diffs\n .filter((diff, index) => {\n const lineCount = (diff.additions ?? 0) + (diff.deletions ?? 0);\n return index >= INITIAL_EXPANDED_DIFF_COUNT || lineCount > INITIAL_COLLAPSED_LINE_THRESHOLD;\n })\n .map((diff) => getDiffPath(diff)),\n );\n};\n\nexport const buildAllCollapsedPaths = (diffs: Diff[]) => new Set(diffs.map((diff) => getDiffPath(diff)));\n\nexport const toggleCollapsedPath = (collapsedPaths: Set<string>, path: string) => {\n const next = new Set(collapsedPaths);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n};\n\nexport const resolveCollapsedPathsForSelectedDiff = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string | null,\n) => {\n if (!selectedDiffPath) return collapsedPaths;\n if (!collapsedPaths.has(selectedDiffPath)) return collapsedPaths;\n if (!diffs.some((diff) => getDiffPath(diff) === selectedDiffPath)) return collapsedPaths;\n\n const next = new Set(collapsedPaths);\n next.delete(selectedDiffPath);\n return next;\n};\n\nexport function DiffDrawer(props: DiffDrawerProps) {\n const {\n diffs,\n selectedDiffPath = null,\n onLoadDiff,\n onSelectDiffPath,\n onExpansionStateChange,\n expansionCommand = null,\n diffViewMode = \"unified\",\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const reportedExpansionStateRef = useRef<DiffDrawerExpansionState | null>(null);\n const [collapsedPaths, setCollapsedPaths] = useState<Set<string>>(() => buildInitialCollapsedPaths(diffs));\n const [largeDiffOptInPaths, setLargeDiffOptInPaths] = useState<Set<string>>(() => new Set());\n\n const virtualizer = useVirtualizer({\n count: diffs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => {\n const diff = diffs[index];\n const path = getDiffPath(diff);\n return estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n },\n getItemKey: (index) => getDiffPath(diffs[index]),\n overscan: 3,\n });\n\n useEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useEffect(() => {\n if (!selectedDiffPath) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedDiffPath);\n if (index < 0) return;\n\n virtualizer.scrollToIndex(index, { align: \"start\", behavior: \"auto\" });\n }, [selectedDiffPath, diffs, virtualizer]);\n\n useEffect(() => {\n if (!expansionCommand) return;\n\n if (expansionCommand.action === \"expand-selected\") {\n setCollapsedPaths((prev) =>\n expansionCommand.path ? resolveCollapsedPathsForSelectedDiff(diffs, prev, expansionCommand.path) : prev,\n );\n return;\n }\n\n setCollapsedPaths(expansionCommand.action === \"collapse\" ? buildAllCollapsedPaths(diffs) : new Set());\n }, [diffs, expansionCommand]);\n\n useEffect(() => {\n const expansionState = {\n allExpanded: collapsedPaths.size === 0,\n allCollapsed: diffs.length > 0 && diffs.every((diff) => collapsedPaths.has(getDiffPath(diff))),\n };\n const reportedExpansionState = reportedExpansionStateRef.current;\n if (\n reportedExpansionState?.allExpanded === expansionState.allExpanded &&\n reportedExpansionState.allCollapsed === expansionState.allCollapsed\n ) {\n return;\n }\n\n reportedExpansionStateRef.current = expansionState;\n onExpansionStateChange?.(expansionState);\n }, [collapsedPaths, diffs, onExpansionStateChange]);\n\n if (diffs.length === 0) {\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <ScrollArea flex=\"1\" minH=\"0\" contentProps={{ p: \"xs\", spaceY: \"xs\" }}>\n <EmptyState title=\"No changes detected\" description=\"Make some changes to see the diff here.\" paddingY=\"sm\" />\n </ScrollArea>\n </Stack>\n );\n }\n\n const toggleExpanded = (path: string) => {\n setCollapsedPaths((prev) => toggleCollapsedPath(prev, path));\n };\n\n const showFullDiff = (path: string) => {\n setLargeDiffOptInPaths((prev) => {\n const next = new Set(prev);\n next.add(path);\n return next;\n });\n };\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Box position=\"relative\" flex=\"1\" minH=\"0\" bg=\"bg\">\n <ScrollArea\n position=\"absolute\"\n inset=\"0\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n contentProps={{ p: \"xs\" }}\n >\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualItems.map((virtualItem) => {\n const diff = diffs[virtualItem.index];\n const path = getDiffPath(diff);\n\n return (\n <Box\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n pb=\"xs\"\n style={{ top: virtualItem.start }}\n >\n <DiffCard\n key={path}\n diff={diff}\n isSelected={selectedDiffPath === path}\n isExpanded={!collapsedPaths.has(path)}\n onToggleExpanded={() => toggleExpanded(path)}\n onSelect={() => onSelectDiffPath?.(path)}\n onLoadDiff={onLoadDiff}\n hasOptedIntoLargeDiff={largeDiffOptInPaths.has(path)}\n onShowFullDiff={() => showFullDiff(path)}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\n </Box>\n </Stack>\n );\n}\n","import { Box } from \"@chakra-ui/react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from \"react\";\n\nexport type ResizableSplitSide = \"left\" | \"right\";\n\nconst RESIZE_SEPARATOR_HOVER_STYLE = { _before: { bg: \"border.emphasized\" } };\nconst RESIZE_HANDLE_WIDTH = \"12px\";\n\ninterface ResizeHandleProps {\n bounds: { minSize: number; maxSize: number };\n contentPanelId: string;\n resizablePanelId: string;\n resizeLabel: string;\n resolvedPanelWidth: number;\n showResizeSeparator: boolean;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizeHandle = (props: ResizeHandleProps) => {\n const {\n bounds,\n contentPanelId,\n resizablePanelId,\n resizeLabel,\n resolvedPanelWidth,\n showResizeSeparator,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n return (\n <Box\n role=\"separator\"\n aria-label={resizeLabel}\n aria-orientation=\"vertical\"\n aria-controls={`${resizablePanelId} ${contentPanelId}`}\n aria-valuemin={0}\n aria-valuemax={Math.round(bounds.maxSize)}\n aria-valuenow={Math.round(resolvedPanelWidth)}\n tabIndex={0}\n position=\"relative\"\n zIndex=\"1\"\n flex={`0 0 ${RESIZE_HANDLE_WIDTH}`}\n w={RESIZE_HANDLE_WIDTH}\n mx=\"-6px\"\n cursor=\"col-resize\"\n touchAction=\"none\"\n outline=\"none\"\n onPointerDown={onResizeStart}\n onKeyDown={onResizeKeyDown}\n _before={{\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n bottom: 0,\n insetInlineStart: \"50%\",\n w: \"1px\",\n bg: showResizeSeparator ? \"border.muted\" : \"transparent\",\n transform: \"translateX(-50%)\",\n }}\n _hover={showResizeSeparator ? RESIZE_SEPARATOR_HOVER_STYLE : undefined}\n _focusVisible={{\n _before: {\n bg: \"colorPalette.focusRing\",\n w: \"2px\",\n },\n }}\n />\n );\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { type ResizableSplitSide, ResizeHandle } from \"./resizable-split-layout.handle\";\n\ninterface ResizableSplitLayoutProps extends Omit<FlexProps, \"children\" | \"onResize\"> {\n resizablePanel: ReactNode;\n contentPanel: ReactNode;\n resizableSide?: ResizableSplitSide;\n defaultSizePx?: number;\n minSizePx?: number;\n maxSizePx?: number;\n contentMinSizePx?: number;\n collapsed?: boolean;\n collapsible?: boolean;\n resizeLabel?: string;\n showResizeSeparator?: boolean;\n onSizeChange?: (width: number) => void;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst FALLBACK_ROOT_WIDTH = 1200;\nconst KEYBOARD_RESIZE_STEP = 24;\nconst MIN_COLLAPSE_THRESHOLD_PX = 72;\nconst MAX_COLLAPSE_THRESHOLD_PX = 160;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveRootWidth = (rootWidth: number) => (rootWidth > 0 ? rootWidth : FALLBACK_ROOT_WIDTH);\n\nconst resolveCollapseThreshold = (minSizePx: number) =>\n clamp(minSizePx / 2, MIN_COLLAPSE_THRESHOLD_PX, MAX_COLLAPSE_THRESHOLD_PX);\n\nconst resolveResizableBoundsPx = (input: {\n rootWidth: number;\n minSizePx: number;\n maxSizePx?: number;\n contentMinSizePx: number;\n}) => {\n const rootWidth = resolveRootWidth(input.rootWidth);\n const maxFromContent = Math.max(0, rootWidth - input.contentMinSizePx);\n const configuredMax = input.maxSizePx ?? maxFromContent;\n const maxSize = Math.max(0, Math.min(configuredMax, maxFromContent));\n const minSize = Math.min(input.minSizePx, maxSize);\n\n return { minSize, maxSize };\n};\n\nconst getElementWidth = (element: HTMLDivElement | null) => element?.getBoundingClientRect().width ?? 0;\n\nconst applyPanelWidthToElement = (panel: HTMLDivElement | null, width: number) => {\n if (!panel) return;\n\n panel.style.width = `${width}px`;\n panel.style.flexBasis = `${width}px`;\n panel.style.flexGrow = \"0\";\n panel.style.flexShrink = \"0\";\n panel.style.display = width > 0 ? \"flex\" : \"none\";\n};\n\nconst clearPanelInlineStyles = (panel: HTMLDivElement | null) => {\n if (!panel) return;\n\n panel.style.width = \"\";\n panel.style.flexBasis = \"\";\n panel.style.flexGrow = \"\";\n panel.style.flexShrink = \"\";\n panel.style.display = \"\";\n};\n\nexport const ResizableSplitLayout = (props: ResizableSplitLayoutProps) => {\n const {\n resizablePanel,\n contentPanel,\n resizableSide = \"left\",\n defaultSizePx = 240,\n minSizePx = 200,\n maxSizePx,\n contentMinSizePx = 0,\n collapsed: controlledCollapsed,\n collapsible = true,\n resizeLabel = \"Resize panel\",\n showResizeSeparator = true,\n onSizeChange,\n onCollapsedChange,\n ...rest\n } = props;\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const resizablePanelRef = useRef<HTMLDivElement>(null);\n const contentPanelRef = useRef<HTMLDivElement>(null);\n const cleanupDragRef = useRef<() => void>(() => undefined);\n const lastWidthRef = useRef(defaultSizePx);\n const [panelWidth, setPanelWidth] = useState(defaultSizePx);\n const [rootWidth, setRootWidth] = useState(0);\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const collapseThresholdPx = resolveCollapseThreshold(minSizePx);\n const resolvedPanelWidth = collapsed ? 0 : clamp(panelWidth, bounds.minSize, bounds.maxSize);\n const contentPanelId = `${id}-content`;\n const resizablePanelId = `${id}-resizable`;\n\n useEffect(() => {\n const element = rootRef.current;\n if (!element) return;\n\n const updateRootWidth = () => {\n setRootWidth(element.getBoundingClientRect().width);\n };\n\n updateRootWidth();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootWidth);\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n useEffect(() => {\n lastWidthRef.current = defaultSizePx;\n setPanelWidth(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelWidth = (width: number) => {\n applyPanelWidthToElement(resizablePanelRef.current, width);\n };\n\n useEffect(() => {\n // React may reuse the same DOM element across renders when this component swaps roles\n // (e.g., a wrapping ResizableSplitLayout disappears, leaving the inner one in its place).\n // Clear any inline styles on the content panel that leaked from a prior render where\n // the same DOM element was the resizable panel; otherwise stale `flex: 0 0 Xpx` pins\n // the content's width.\n clearPanelInlineStyles(contentPanelRef.current);\n applyPanelWidthToElement(resizablePanelRef.current, resolvedPanelWidth);\n }, [resolvedPanelWidth]);\n\n const commitPanelWidth = (width: number) => {\n const rootWidth = getElementWidth(rootRef.current);\n const nextBounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const nextWidth = clamp(width, nextBounds.minSize, nextBounds.maxSize);\n\n lastWidthRef.current = nextWidth;\n setPanelWidth(nextWidth);\n applyPanelWidth(nextWidth);\n onSizeChange?.(nextWidth);\n };\n\n const setCollapsed = (nextCollapsed: boolean) => {\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(nextCollapsed);\n }\n\n onCollapsedChange?.(nextCollapsed);\n };\n\n const handleResizeStart = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0 || (collapsed && !collapsible)) return;\n\n event.preventDefault();\n cleanupDragRef.current();\n\n const resizeHandle = event.currentTarget;\n const rootWidth = getElementWidth(rootRef.current);\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const startX = event.clientX;\n const startWidth = collapsed ? 0 : getElementWidth(resizablePanelRef.current) || lastWidthRef.current;\n const direction = resizableSide === \"left\" ? 1 : -1;\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n let nextWidth = startWidth === 0 ? 0 : clamp(startWidth, bounds.minSize, bounds.maxSize);\n let nextCollapsed = collapsed;\n let animationFrame = 0;\n\n const setDraggingPanelState = (value: string) => {\n if (resizablePanelRef.current) resizablePanelRef.current.style.pointerEvents = value;\n if (contentPanelRef.current) contentPanelRef.current.style.pointerEvents = value;\n };\n\n const schedulePanelWidth = () => {\n if (animationFrame) return;\n\n animationFrame = window.requestAnimationFrame(() => {\n animationFrame = 0;\n applyPanelWidth(nextWidth);\n });\n };\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const rawWidth = startWidth + (moveEvent.clientX - startX) * direction;\n nextCollapsed = collapsible && rawWidth <= collapseThresholdPx;\n nextWidth = nextCollapsed ? 0 : clamp(rawWidth, bounds.minSize, bounds.maxSize);\n if (!nextCollapsed) lastWidthRef.current = nextWidth;\n schedulePanelWidth();\n };\n\n const cleanup = () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", cleanup);\n window.removeEventListener(\"pointercancel\", cleanup);\n window.removeEventListener(\"blur\", cleanup);\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n if (resizeHandle.hasPointerCapture(event.pointerId)) resizeHandle.releasePointerCapture(event.pointerId);\n setDraggingPanelState(\"\");\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n cleanupDragRef.current = () => undefined;\n if (nextCollapsed) {\n applyPanelWidth(0);\n setCollapsed(true);\n } else {\n setCollapsed(false);\n commitPanelWidth(nextWidth);\n }\n };\n\n cleanupDragRef.current = cleanup;\n resizeHandle.setPointerCapture(event.pointerId);\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n setDraggingPanelState(\"none\");\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", cleanup, { once: true });\n window.addEventListener(\"pointercancel\", cleanup, { once: true });\n window.addEventListener(\"blur\", cleanup, { once: true });\n };\n\n const handleResizeKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const direction = resizableSide === \"left\" ? 1 : -1;\n const width = lastWidthRef.current;\n\n if (collapsed && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\" || event.key === \"End\")) {\n event.preventDefault();\n setCollapsed(false);\n commitPanelWidth(width);\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n commitPanelWidth(width - KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n commitPanelWidth(width + KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitPanelWidth(bounds.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitPanelWidth(bounds.maxSize);\n }\n };\n\n const resizablePanelNode = (\n <Flex\n id={resizablePanelId}\n ref={resizablePanelRef}\n display={collapsed ? \"none\" : \"flex\"}\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex={`0 0 ${resolvedPanelWidth}px`}\n w={`${resolvedPanelWidth}px`}\n aria-hidden={collapsed ? true : undefined}\n >\n {resizablePanel}\n </Flex>\n );\n const contentPanelNode = (\n <Flex\n id={contentPanelId}\n ref={contentPanelRef}\n display=\"flex\"\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex=\"1\"\n >\n {contentPanel}\n </Flex>\n );\n const resizeTrigger = collapsed ? null : (\n <ResizeHandle\n bounds={bounds}\n contentPanelId={contentPanelId}\n resizablePanelId={resizablePanelId}\n resizeLabel={resizeLabel}\n resolvedPanelWidth={resolvedPanelWidth}\n showResizeSeparator={showResizeSeparator}\n onResizeKeyDown={handleResizeKeyDown}\n onResizeStart={handleResizeStart}\n />\n );\n\n return (\n <Flex ref={rootRef} direction=\"row\" h=\"full\" w=\"full\" overflow=\"hidden\" {...rest}>\n {resizableSide === \"left\" ? (\n <>\n {resizablePanelNode}\n {resizeTrigger}\n {contentPanelNode}\n </>\n ) : (\n <>\n {contentPanelNode}\n {resizeTrigger}\n {resizablePanelNode}\n </>\n )}\n </Flex>\n );\n};\n","import type { ChangedFilesViewMode, ChangedFileTreeNode } from \"./types\";\n\nconst normalizeChangedFilePath = (path: string) =>\n path\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join(\"/\");\n\nconst sortNodes = (nodes: ChangedFileTreeNode[]) => {\n nodes.sort((left, right) => {\n if (left.type !== right.type) return left.type === \"folder\" ? -1 : 1;\n return left.name.localeCompare(right.name);\n });\n\n nodes.forEach((node) => {\n if (node.children) sortNodes(node.children);\n });\n\n return nodes;\n};\n\nconst dedupePaths = (paths: string[]) => Array.from(new Set(paths.map(normalizeChangedFilePath).filter(Boolean)));\n\nconst buildFlatTree = (paths: string[]) =>\n dedupePaths(paths)\n .map((path) => ({ id: `file:${path}`, name: path, type: \"file\" }) satisfies ChangedFileTreeNode)\n .sort((left, right) => left.name.localeCompare(right.name));\n\nexport const buildChangedFilesTree = (paths: string[], mode: ChangedFilesViewMode): ChangedFileTreeNode[] => {\n if (mode === \"flat\") return buildFlatTree(paths);\n\n const treeById = new Map<string, ChangedFileTreeNode>();\n const rootNodes: ChangedFileTreeNode[] = [];\n\n dedupePaths(paths).forEach((path) => {\n const segments = path.split(\"/\");\n let parentPath = \"\";\n let parentNode: ChangedFileTreeNode | null = null;\n\n segments.forEach((segment, index) => {\n const currentPath = parentPath ? `${parentPath}/${segment}` : segment;\n const isFile = index === segments.length - 1;\n const nodeId = `${isFile ? \"file\" : \"folder\"}:${currentPath}`;\n const existingNode = treeById.get(nodeId);\n\n if (existingNode) {\n parentNode = existingNode;\n parentPath = currentPath;\n return;\n }\n\n const nextNode: ChangedFileTreeNode = {\n id: nodeId,\n name: segment,\n type: isFile ? \"file\" : \"folder\",\n ...(isFile ? {} : { children: [] }),\n };\n\n treeById.set(nodeId, nextNode);\n\n if (!parentNode) rootNodes.push(nextNode);\n else parentNode.children?.push(nextNode);\n\n parentNode = nextNode;\n parentPath = currentPath;\n });\n });\n\n return sortNodes(rootNodes);\n};\n\nexport const collectExpandedFolderIds = (nodes: ChangedFileTreeNode[]) => {\n const folderIds: string[] = [];\n\n const visit = (items: ChangedFileTreeNode[]) => {\n items.forEach((item) => {\n if (item.type !== \"folder\") return;\n folderIds.push(item.id);\n visit(item.children ?? []);\n });\n };\n\n visit(nodes);\n return folderIds;\n};\n\nconst collectNestedFileOrder = (nodes: ChangedFileTreeNode[]) => {\n const orderedPaths: string[] = [];\n\n const visit = (treeNodes: ChangedFileTreeNode[]) => {\n treeNodes.forEach((node) => {\n if (node.type === \"file\") {\n orderedPaths.push(node.id.replace(/^file:/, \"\"));\n return;\n }\n\n visit(node.children ?? []);\n });\n };\n\n visit(nodes);\n return orderedPaths;\n};\n\nexport const sortPathsByViewMode = (paths: string[], mode: ChangedFilesViewMode) => {\n if (mode === \"flat\") return [...paths].sort((left, right) => left.localeCompare(right));\n return collectNestedFileOrder(buildChangedFilesTree(paths, \"nested\"));\n};\n","import { create } from \"zustand\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerState {\n isTreePanelOpen: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n searchQuery: string;\n selectedPath: string | null;\n expandedFolderIds: Set<string>;\n setTreePanelOpen: (open: boolean) => void;\n toggleTreePanel: () => void;\n setViewMode: (viewMode: ChangedFilesViewMode) => void;\n setDiffViewMode: (diffViewMode: DiffViewMode) => void;\n setSearchQuery: (searchQuery: string) => void;\n setSelectedPath: (selectedPath: string | null) => void;\n setExpandedFolderIds: (folderIds: string[]) => void;\n toggleFolder: (folderId: string) => void;\n expandAll: (folderIds: string[]) => void;\n collapseAll: () => void;\n}\n\nexport const useDiffViewerStore = create<DiffViewerState>((set) => ({\n isTreePanelOpen: true,\n viewMode: \"nested\",\n diffViewMode: \"unified\",\n searchQuery: \"\",\n selectedPath: null,\n expandedFolderIds: new Set(),\n setTreePanelOpen: (isTreePanelOpen) => set({ isTreePanelOpen }),\n toggleTreePanel: () => set((state) => ({ isTreePanelOpen: !state.isTreePanelOpen })),\n setViewMode: (viewMode) => set({ viewMode }),\n setDiffViewMode: (diffViewMode) => set({ diffViewMode }),\n setSearchQuery: (searchQuery) => set({ searchQuery }),\n setSelectedPath: (selectedPath) => set({ selectedPath }),\n setExpandedFolderIds: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n toggleFolder: (folderId) =>\n set((state) => {\n const expandedFolderIds = new Set(state.expandedFolderIds);\n if (expandedFolderIds.has(folderId)) expandedFolderIds.delete(folderId);\n else expandedFolderIds.add(folderId);\n return { expandedFolderIds };\n }),\n expandAll: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n collapseAll: () => set({ expandedFolderIds: new Set() }),\n}));\n","import { Box, HStack, IconButton, Menu, Stack, type StackProps, Text } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { RefObject } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport type {\n TreeListAction,\n TreeListLinkComponent,\n TreeListNavigateEvent,\n TreeListNode,\n TreeListSection,\n} from \"./tree-list.types\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface TreeListProps {\n sections: TreeListSection[];\n expandedSectionIds?: string[];\n expandedNodeIds?: string[];\n activeNodeId?: string | string[] | null;\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n /**\n * When set, the tree's rows are virtualized via @tanstack/react-virtual.\n * Requires `scrollRef` to point at the ancestor scroll viewport.\n */\n virtualize?: boolean;\n scrollRef?: RefObject<HTMLDivElement | null>;\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface TreeListNodeRowProps {\n sectionId: string;\n node: TreeListNode;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n renderChildren?: boolean;\n}\n\nconst isInList = (id: string, values: string[]) => values.includes(id);\n\nconst isActiveNode = (id: string, activeNodeId?: string | string[] | null) =>\n Array.isArray(activeNodeId) ? activeNodeId.includes(id) : activeNodeId === id;\n\nconst isNavigableNode = (node: TreeListNode) => node.isNavigable || node.navigationIntent !== undefined;\n\nconst getNodeChildren = (node: TreeListNode): TreeListNode[] => (node.children as TreeListNode[] | undefined) ?? [];\n\nconst hasExpandableChildren = (node: TreeListNode) => getNodeChildren(node).length > 0 || node.isContainer === true;\n\nconst TreeListNodeRow = (props: TreeListNodeRowProps) => {\n const {\n sectionId,\n node,\n level,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent: LinkComponent,\n onNavigate,\n onToggleNode,\n renderChildren = true,\n } = props;\n\n const children = getNodeChildren(node);\n const hasChildren = hasExpandableChildren(node);\n const expanded = hasChildren && isInList(node.id, expandedNodeIds);\n const isActive = isActiveNode(node.id, activeNodeId);\n const isDisabled = node.disabled === true;\n const isNavigable = isNavigableNode(node);\n const canLink = Boolean(LinkComponent && node.href && isNavigable && !hasChildren && !isDisabled);\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasChildren) {\n onToggleNode?.(node.id);\n return;\n }\n if (isNavigable && onNavigate) {\n onNavigate({ sectionId, nodeId: node.id, node, intent: node.navigationIntent });\n return;\n }\n node.onActivate?.();\n };\n\n const rowItem: TreeListNode = {\n ...node,\n actions: node.actions?.map((action) => ({\n ...action,\n onAction: action.onAction\n ? (context) => action.onAction?.({ sectionId, nodeId: node.id, ...context })\n : undefined,\n })),\n };\n\n const row =\n canLink && LinkComponent && node.href ? (\n <LinkComponent to={node.href}>\n <ListRow\n {...rowItem}\n depth={level}\n variant={rowVariant}\n isSelected={isActive}\n isExpanded={expanded}\n showExpandToggle={hasChildren}\n onActivate={handleActivate}\n onToggleExpand={() => onToggleNode?.(node.id)}\n asChild\n />\n </LinkComponent>\n ) : (\n <ListRow\n {...rowItem}\n depth={level}\n variant={rowVariant}\n isSelected={isActive}\n isExpanded={expanded}\n showExpandToggle={hasChildren}\n onActivate={handleActivate}\n onToggleExpand={() => onToggleNode?.(node.id)}\n />\n );\n\n return (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {row}\n {renderChildren && expanded && children.length > 0\n ? children.map((childNode) => (\n <TreeListNodeRow\n key={childNode.id}\n sectionId={sectionId}\n node={childNode}\n level={level + 1}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={LinkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ))\n : null}\n </Stack>\n );\n};\n\ninterface TreeListSectionActionsProps {\n sectionId: string;\n actions: TreeListAction[];\n}\n\nconst TreeListSectionActions = (props: TreeListSectionActionsProps) => {\n const { sectionId, actions } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n if (action.menuItems && action.menuItems.length > 0) {\n return (\n <Menu.Root key={action.id}>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.disabled} onClick={() => item.onAction?.()}>\n {item.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n }\n return (\n <IconButton\n key={action.id}\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.({ sectionId });\n }}\n >\n {action.icon}\n </IconButton>\n );\n })}\n </HStack>\n );\n};\n\ninterface TreeListSectionHeaderProps {\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n onToggle: () => void;\n}\n\nconst TreeListSectionHeader = (props: TreeListSectionHeaderProps) => {\n const { section, collapsible, expanded, onToggle } = props;\n\n return (\n <HStack\n className=\"group\"\n justify=\"space-between\"\n align=\"center\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n px=\"sm\"\n py=\"2xs\"\n height=\"7\"\n cursor={collapsible ? \"pointer\" : \"default\"}\n _hover={collapsible ? { bg: \"bg.hover\" } : undefined}\n onClick={collapsible ? onToggle : undefined}\n >\n <HStack gap=\"1\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/XS\" textTransform=\"uppercase\" color=\"fg.muted\" letterSpacing=\"0.08em\" truncate>\n {section.label}\n </Text>\n {collapsible ? (\n <Box color=\"fg.muted\" flexShrink={0}>\n <ChevronRight\n size={14}\n style={{ transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"120ms\" }}\n />\n </Box>\n ) : null}\n </HStack>\n <TreeListSectionActions sectionId={section.id} actions={section.actions ?? []} />\n </HStack>\n );\n};\n\nexport type VirtualRow =\n | {\n kind: \"section-header\";\n key: string;\n sectionId: string;\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n }\n | { kind: \"node\"; key: string; sectionId: string; node: TreeListNode; level: number }\n | { kind: \"section-empty\"; key: string; sectionId: string; emptyState: TreeListSection[\"emptyState\"] };\n\nconst appendVisibleNodeRows = (input: {\n rows: VirtualRow[];\n sectionId: string;\n nodes: TreeListNode[];\n expandedNodeIds: string[];\n level: number;\n}) => {\n const { rows, sectionId, nodes, expandedNodeIds, level } = input;\n\n for (const node of nodes) {\n rows.push({ kind: \"node\", key: `${sectionId}:${node.id}`, sectionId, node, level });\n\n const children = getNodeChildren(node);\n if (children.length === 0 || !isInList(node.id, expandedNodeIds)) continue;\n\n appendVisibleNodeRows({ rows, sectionId, nodes: children, expandedNodeIds, level: level + 1 });\n }\n};\n\nexport const buildVirtualRows = (\n sections: TreeListSection[],\n expandedSectionIds: string[],\n expandedNodeIds: string[],\n): VirtualRow[] => {\n const rows: VirtualRow[] = [];\n for (const section of sections) {\n const collapsible = section.collapsible !== false && section.label !== undefined;\n const expanded = collapsible ? isInList(section.id, expandedSectionIds) : true;\n if (section.label) {\n rows.push({\n kind: \"section-header\",\n key: `header:${section.id}`,\n sectionId: section.id,\n section,\n collapsible,\n expanded,\n });\n }\n if (!expanded) continue;\n if (section.nodes.length === 0) {\n if (section.emptyState) {\n rows.push({\n kind: \"section-empty\",\n key: `empty:${section.id}`,\n sectionId: section.id,\n emptyState: section.emptyState,\n });\n }\n continue;\n }\n appendVisibleNodeRows({ rows, sectionId: section.id, nodes: section.nodes, expandedNodeIds, level: 0 });\n }\n return rows;\n};\n\ninterface VirtualTreeListProps extends TreeListProps {\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nconst VirtualTreeList = (props: VirtualTreeListProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n scrollRef,\n } = props;\n\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => VIRTUAL_ROW_ESTIMATE,\n overscan: VIRTUAL_ROW_OVERSCAN,\n getItemKey: (index) => rows[index]?.key ?? index,\n });\n\n return (\n <Box\n role=\"listbox\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n style={{ height: virtualizer.getTotalSize() }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = rows[virtualItem.index];\n if (!row) return null;\n\n const content =\n row.kind === \"section-header\" ? (\n <TreeListSectionHeader\n section={row.section}\n collapsible={row.collapsible}\n expanded={row.expanded}\n onToggle={() => onToggleSection?.(row.sectionId)}\n />\n ) : row.kind === \"section-empty\" ? (\n (row.emptyState ?? null)\n ) : (\n <TreeListNodeRow\n sectionId={row.sectionId}\n node={row.node}\n level={row.level}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n renderChildren={false}\n />\n );\n\n return (\n <Box\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n data-tree-list-row={row.kind}\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n w=\"full\"\n style={{ transform: `translateY(${virtualItem.start}px)` }}\n >\n {content}\n </Box>\n );\n })}\n </Box>\n );\n};\n\nexport const TreeList = (props: TreeListProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n virtualize,\n scrollRef,\n } = props;\n\n if (virtualize && scrollRef) {\n return <VirtualTreeList {...props} scrollRef={scrollRef} />;\n }\n\n return (\n <Stack role=\"listbox\" gap={sectionGap} w=\"full\" minW=\"0\" maxW=\"full\" overflowX=\"hidden\">\n {sections.map((section) => {\n const collapsible = section.collapsible !== false && section.label !== undefined;\n const sectionExpanded = collapsible ? isInList(section.id, expandedSectionIds) : true;\n\n return (\n <Stack key={section.id} gap=\"0\" w=\"full\" minW=\"0\" maxW=\"full\" data-testid={`tree-list-section-${section.id}`}>\n {section.label ? (\n <TreeListSectionHeader\n section={section}\n collapsible={collapsible}\n expanded={sectionExpanded}\n onToggle={() => onToggleSection?.(section.id)}\n />\n ) : null}\n\n {sectionExpanded ? (\n section.nodes.length > 0 ? (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {section.nodes.map((node) => (\n <TreeListNodeRow\n key={node.id}\n sectionId={section.id}\n node={node}\n level={0}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ))}\n </Stack>\n ) : (\n (section.emptyState ?? null)\n )\n ) : null}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FileText, Search } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport type { TreeListNode } from \"../tree-list/tree-list.types\";\nimport { buildChangedFilesTree } from \"./build-changed-files-tree\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\n title: string;\n paths: string[];\n selectedPath: string | null;\n viewMode: ChangedFilesViewMode;\n searchQuery: string;\n expandedFolderIds: Set<string>;\n onSelectPath: (path: string) => void;\n onSearchQueryChange: (value: string) => void;\n onToggleFolder: (id: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}\n\nconst changeLabels: Record<string, string> = {\n added: \"A\",\n copied: \"C\",\n deleted: \"D\",\n modified: \"U\",\n permissionChange: \"M\",\n renamed: \"R\",\n};\n\nconst changeColors: Record<string, string> = {\n added: \"green\",\n copied: \"purple\",\n deleted: \"red\",\n modified: \"blue\",\n permissionChange: \"yellow\",\n renamed: \"orange\",\n};\n\nconst getFilePathParts = (filePath: string) => {\n const lastSlashIndex = filePath.lastIndexOf(\"/\");\n if (lastSlashIndex < 0) return { fileName: filePath, dirPath: \"\" };\n return { fileName: filePath.slice(lastSlashIndex + 1), dirPath: filePath.slice(0, lastSlashIndex) };\n};\n\nconst renderFileLabel = (node: ChangedFileTreeNode, viewMode: ChangedFilesViewMode, filePath: string) => {\n const { fileName, dirPath } = getFilePathParts(filePath);\n if (viewMode !== \"flat\" || !dirPath) return node.name;\n\n return (\n <Text textStyle=\"label/S/regular\" truncate>\n <Text as=\"span\" color=\"fg.default\">\n {fileName}\n </Text>{\" \"}\n <Text as=\"span\" color=\"fg.muted\">\n {dirPath}\n </Text>\n </Text>\n );\n};\n\nconst toTreeListNodes = (input: {\n nodes: ChangedFileTreeNode[];\n viewMode: ChangedFilesViewMode;\n onSelectPath: (path: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}): TreeListNode[] => {\n const { nodes, viewMode, onSelectPath, resolveFileIcon, changeByPath } = input;\n\n return nodes.map((node) => {\n if (node.type === \"folder\") {\n return {\n id: node.id,\n label: node.name,\n isContainer: true,\n children: toTreeListNodes({\n nodes: node.children ?? [],\n viewMode,\n onSelectPath,\n resolveFileIcon,\n changeByPath,\n }),\n };\n }\n\n const filePath = node.id.replace(/^file:/, \"\");\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"14px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n\n return {\n id: node.id,\n label: renderFileLabel(node, viewMode, filePath),\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? (\n <Badge size=\"sm\" variant=\"subtle\" colorPalette={changeColors[change] ?? \"gray\"} flexShrink={0}>\n {changeLabels[change] ?? change}\n </Badge>\n ) : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\n title,\n paths,\n selectedPath,\n viewMode,\n searchQuery,\n expandedFolderIds,\n onSelectPath,\n onSearchQueryChange,\n onToggleFolder,\n resolveFileIcon,\n changeByPath,\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const fileTree = buildChangedFilesTree(paths, viewMode);\n const treeNodes = toTreeListNodes({ nodes: fileTree, viewMode, onSelectPath, resolveFileIcon, changeByPath });\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" gap=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Header variant=\"main\" justifyContent=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\">\n <HStack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"foreground.secondary\" truncate>\n {title}\n </Text>\n <Badge size=\"sm\" variant=\"subtle\" flexShrink={0}>\n {paths.length}\n </Badge>\n </HStack>\n </Header>\n <Stack gap=\"xs\" borderBottomWidth=\"1px\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n border=\"0\"\n borderRadius=\"0\"\n placeholder=\"Filter files\"\n value={searchQuery}\n _hover={{ borderColor: \"transparent\" }}\n _focus={{ borderColor: \"transparent\", boxShadow: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Stack>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n bg=\"bg\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowX: \"hidden\" } }}\n >\n {paths.length > 0 ? (\n <TreeList\n sections={[{ id: \"files\", nodes: treeNodes }]}\n expandedNodeIds={[...expandedFolderIds]}\n activeNodeId={selectedPath ? `file:${selectedPath}` : null}\n rowVariant=\"tree\"\n onToggleNode={onToggleFolder}\n virtualize\n scrollRef={scrollRef}\n />\n ) : (\n <Box px=\"xs\" py=\"xs\">\n <EmptyState title=\"No matching files\" size=\"sm\" textAlign=\"left\" alignItems=\"flex-start\" />\n </Box>\n )}\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, Flex, HStack, IconButton, Menu, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport {\n Check,\n ChevronsDownUp,\n ChevronsUpDown,\n List,\n ListTree,\n PanelLeftClose,\n PanelLeftOpen,\n Rows2,\n Settings2,\n SquareSplitHorizontal,\n} from \"lucide-react\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ResizableSplitLayout } from \"../resizable-split-layout\";\nimport { buildChangedFilesTree, collectExpandedFolderIds, sortPathsByViewMode } from \"./build-changed-files-tree\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffDrawer, type DiffDrawerExpansionState, type DiffExpansionCommand } from \"./diff-drawer\";\nimport { useDiffViewerStore } from \"./diff-viewer.store\";\nimport { FileListPanel } from \"./file-list-panel\";\nimport type { ChangedFilesViewMode, FileIconInfo } from \"./types\";\n\nexport interface DiffViewerProps {\n diffs: Diff[];\n changedFilePaths?: string[];\n defaultSelectedPath?: string | null;\n loading?: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst buildChangeByPath = (diffs: Diff[]) => new Map(diffs.map((diff) => [getDiffPath(diff), diff.change]));\nconst sumDiffStats = (diffs: Diff[]) =>\n diffs.reduce(\n (total, diff) => ({\n additions: total.additions + (diff.additions ?? 0),\n deletions: total.deletions + (diff.deletions ?? 0),\n }),\n { additions: 0, deletions: 0 },\n );\n\nconst buildFilteredDiffs = (input: {\n diffs: Diff[];\n normalizedSearchQuery: string;\n viewMode: ChangedFilesViewMode;\n}) => {\n const { diffs, normalizedSearchQuery, viewMode } = input;\n const matchingDiffs = normalizedSearchQuery\n ? diffs.filter((diff) => getDiffPath(diff).toLowerCase().includes(normalizedSearchQuery))\n : diffs;\n const orderedPaths = sortPathsByViewMode(matchingDiffs.map(getDiffPath), viewMode);\n const orderByPath = new Map(orderedPaths.map((path, index) => [path, index]));\n\n return [...matchingDiffs].sort((left, right) => {\n const leftOrder = orderByPath.get(getDiffPath(left)) ?? Number.MAX_SAFE_INTEGER;\n const rightOrder = orderByPath.get(getDiffPath(right)) ?? Number.MAX_SAFE_INTEGER;\n return leftOrder - rightOrder;\n });\n};\n\nconst resolveSelectedPath = (preferredPaths: string[], fallbackPaths: string[]) =>\n preferredPaths[0] ?? fallbackPaths[0] ?? null;\n\nconst MenuItemContent = (props: { checked?: boolean; icon: ReactNode; label: string }) => {\n const { checked, icon, label } = props;\n\n return (\n <HStack gap=\"2xs\" w=\"full\">\n <Box flexShrink={0}>{icon}</Box>\n <Text flex=\"1\">{label}</Text>\n {checked !== undefined ? (\n <Box w=\"14px\" flexShrink={0}>\n {checked ? <Check size={14} /> : null}\n </Box>\n ) : null}\n </HStack>\n );\n};\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Skeleton height=\"41px\" borderRadius=\"0\" />\n <Stack gap=\"xs\" px=\"sm\" py=\"sm\">\n <Skeleton height=\"22px\" borderRadius=\"sm\" />\n <Skeleton height=\"110px\" borderRadius=\"sm\" />\n <Skeleton height=\"110px\" borderRadius=\"sm\" />\n </Stack>\n </Stack>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => {\n const { diffs, changedFilePaths, defaultSelectedPath = null, loading = false, onLoadDiff, resolveFileIcon } = props;\n const [diffExpansionCommand, setDiffExpansionCommand] = useState<DiffExpansionCommand | null>(null);\n const [diffExpansionState, setDiffExpansionState] = useState<DiffDrawerExpansionState>({\n allExpanded: false,\n allCollapsed: false,\n });\n const {\n isTreePanelOpen,\n viewMode,\n diffViewMode,\n searchQuery,\n selectedPath,\n expandedFolderIds,\n setTreePanelOpen,\n setViewMode,\n setDiffViewMode,\n setSearchQuery,\n setSelectedPath,\n setExpandedFolderIds,\n toggleFolder,\n expandAll,\n collapseAll,\n } = useDiffViewerStore();\n\n const diffPaths = diffs.map(getDiffPath);\n const filePaths = changedFilePaths ?? diffPaths;\n const normalizedSearchQuery = searchQuery.trim().toLowerCase();\n const filteredFilePaths = normalizedSearchQuery\n ? filePaths.filter((path) => path.toLowerCase().includes(normalizedSearchQuery))\n : filePaths;\n const filteredDiffs = buildFilteredDiffs({ diffs, normalizedSearchQuery, viewMode });\n const changeByPath = buildChangeByPath(diffs);\n const filteredDiffPaths = filteredDiffs.map(getDiffPath);\n const fileTree = buildChangedFilesTree(filteredFilePaths, viewMode);\n const folderIds = viewMode === \"nested\" ? collectExpandedFolderIds(fileTree) : [];\n const filteredFilePathKey = filteredFilePaths.join(\"\\0\");\n const filteredDiffPathKey = filteredDiffPaths.join(\"\\0\");\n const resolvedSelectedPath =\n selectedPath ?? defaultSelectedPath ?? resolveSelectedPath(filteredDiffPaths, filteredFilePaths);\n const hasChangedFiles = filePaths.length > 0;\n const hasDiffs = filteredDiffs.length > 0;\n const totalDiff = sumDiffStats(filteredDiffs);\n const hasExpandableItems = folderIds.length > 0 || filteredDiffs.length > 0;\n const allFilesExpanded = folderIds.every((folderId) => expandedFolderIds.has(folderId));\n const allFilesCollapsed = folderIds.every((folderId) => !expandedFolderIds.has(folderId));\n const allDiffsExpanded = filteredDiffs.length === 0 || diffExpansionState.allExpanded;\n const allDiffsCollapsed = filteredDiffs.length === 0 || diffExpansionState.allCollapsed;\n const isExpandAllDisabled = !hasExpandableItems || (allFilesExpanded && allDiffsExpanded);\n const isCollapseAllDisabled = !hasExpandableItems || (allFilesCollapsed && allDiffsCollapsed);\n\n useEffect(() => {\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n const tree = buildChangedFilesTree(filePaths, viewMode);\n setExpandedFolderIds(viewMode === \"nested\" ? collectExpandedFolderIds(tree) : []);\n }, [filteredFilePathKey, setExpandedFolderIds, viewMode]);\n\n useEffect(() => {\n const diffPaths = filteredDiffPathKey ? filteredDiffPathKey.split(\"\\0\") : [];\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n if (resolvedSelectedPath && diffPaths.includes(resolvedSelectedPath)) return;\n setSelectedPath(resolveSelectedPath(diffPaths, filePaths));\n }, [filteredDiffPathKey, filteredFilePathKey, resolvedSelectedPath, setSelectedPath]);\n\n const expandAllFilesAndDiffs = () => {\n expandAll(folderIds);\n setDiffExpansionCommand((current) => ({ action: \"expand\", id: (current?.id ?? 0) + 1 }));\n };\n\n const collapseAllFilesAndDiffs = () => {\n collapseAll();\n setDiffExpansionCommand((current) => ({ action: \"collapse\", id: (current?.id ?? 0) + 1 }));\n };\n\n const selectChangedFilePath = (path: string) => {\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", id: (current?.id ?? 0) + 1, path }));\n };\n\n const diffPanel = (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" flex=\"1\" bg=\"bg\" gap=\"0\">\n <Header variant=\"main\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\" justifyContent=\"space-between\">\n <HStack gap=\"xs\">\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Diff view options\" variant=\"ghost\" size=\"sm\">\n <Settings2 size={14} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"190px\" bg=\"bg\">\n {hasChangedFiles ? (\n <>\n <Menu.Item value=\"toggle-file-tree\" onClick={() => setTreePanelOpen(!isTreePanelOpen)}>\n <MenuItemContent\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n />\n </Menu.Item>\n <Menu.Separator />\n <Menu.Item value=\"nested\" onClick={() => setViewMode(\"nested\")}>\n <MenuItemContent checked={viewMode === \"nested\"} icon={<ListTree size={14} />} label=\"Nested\" />\n </Menu.Item>\n <Menu.Item value=\"flat\" onClick={() => setViewMode(\"flat\")}>\n <MenuItemContent checked={viewMode === \"flat\"} icon={<List size={14} />} label=\"Flat\" />\n </Menu.Item>\n <Menu.Separator />\n </>\n ) : null}\n <Menu.Item value=\"unified\" onClick={() => setDiffViewMode(\"unified\")}>\n <MenuItemContent checked={diffViewMode === \"unified\"} icon={<Rows2 size={14} />} label=\"Unified\" />\n </Menu.Item>\n <Menu.Item value=\"split\" onClick={() => setDiffViewMode(\"split\")}>\n <MenuItemContent\n checked={diffViewMode === \"split\"}\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n />\n </Menu.Item>\n <Menu.Separator />\n <Menu.Item value=\"expand-all\" disabled={isExpandAllDisabled} onClick={expandAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsUpDown size={14} />} label=\"Expand all\" />\n </Menu.Item>\n <Menu.Item value=\"collapse-all\" disabled={isCollapseAllDisabled} onClick={collapseAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsDownUp size={14} />} label=\"Collapse all\" />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </HStack>\n <DiffBubble variant=\"ghost\" additions={totalDiff.additions} deletions={totalDiff.deletions} />\n </Header>\n {loading ? (\n <DiffViewerLoading />\n ) : hasDiffs ? (\n <Box flex=\"1\" minH=\"0\">\n <DiffDrawer\n diffs={filteredDiffs}\n selectedDiffPath={resolvedSelectedPath}\n onLoadDiff={onLoadDiff}\n onSelectDiffPath={setSelectedPath}\n onExpansionStateChange={setDiffExpansionState}\n expansionCommand={diffExpansionCommand}\n diffViewMode={diffViewMode}\n />\n </Box>\n ) : (\n <Box flex=\"1\" minH=\"0\" px=\"md\" py=\"lg\" display=\"flex\" alignItems=\"center\" justifyContent=\"center\" bg=\"bg\">\n <EmptyState title=\"No diffs yet\" description=\"Changes will appear here once files are modified.\" />\n </Box>\n )}\n </Stack>\n );\n\n return (\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" bg=\"bg\" gap=\"0\" data-testid=\"diff-viewer\">\n {hasChangedFiles ? (\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <FileListPanel\n title=\"Changed files\"\n paths={filteredFilePaths}\n selectedPath={resolvedSelectedPath}\n viewMode={viewMode}\n searchQuery={searchQuery}\n expandedFolderIds={expandedFolderIds}\n onSelectPath={selectChangedFilePath}\n onSearchQueryChange={setSearchQuery}\n onToggleFolder={toggleFolder}\n resolveFileIcon={resolveFileIcon}\n changeByPath={changeByPath}\n />\n }\n contentPanel={diffPanel}\n collapsed={!isTreePanelOpen}\n defaultSizePx={288}\n minSizePx={224}\n contentMinSizePx={320}\n resizeLabel=\"Resize file list panel\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n ) : (\n diffPanel\n )}\n </Flex>\n );\n};\n","import { AbsoluteCenter, Button, Stack, Text } from \"@chakra-ui/react\";\nimport { Component, type ErrorInfo, type ReactNode } from \"react\";\n\nimport { AlertMessage } from \"./alert\";\nimport { ContentPlaceholder } from \"./content-placeholder\";\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode;\n label?: string;\n onReset?: () => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n console.error(\"Dashboard error boundary caught an error\", error, info);\n }\n\n handleReset = () => {\n this.setState({ error: null });\n this.props.onReset?.();\n };\n\n render() {\n const { children, fallback, label } = this.props;\n const { error } = this.state;\n\n if (error) {\n if (fallback) {\n return fallback;\n }\n\n return <ErrorFallback error={error} label={label} onReset={this.handleReset} />;\n }\n\n return children;\n }\n}\n\ninterface ErrorFallbackProps {\n error: Error;\n label?: string;\n onReset?: () => void;\n}\n\nexport const ErrorFallback = (props: ErrorFallbackProps) => {\n const { error, label, onReset } = props;\n\n return (\n <ContentPlaceholder height=\"100%\" width=\"100%\">\n <AbsoluteCenter>\n <AlertMessage\n status=\"error\"\n title={<Text textStyle=\"paragraph/M/medium\">{label ?? \"Something went wrong\"}</Text>}\n >\n <Stack gap=\"sm\">\n <Text textStyle=\"paragraph/S/regular\">\n {error.message || \"An unexpected error occurred while rendering this section.\"}\n </Text>\n {onReset ? (\n <Button size=\"sm\" variant=\"solid\" colorScheme={\"black\"} onClick={onReset}>\n Try again\n </Button>\n ) : null}\n </Stack>\n </AlertMessage>\n </AbsoluteCenter>\n </ContentPlaceholder>\n );\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\n\ninterface HorizontalMenuStackProps extends StackProps {\n children?: StackProps[\"children\"];\n}\n\nexport function HorizontalMenuStack(props: HorizontalMenuStackProps) {\n const { children, h = \"41px\", px = \"xs\", py = \"xs\", borderBottomWidth = \"1px\", ...rest } = props;\n\n return (\n <HStack\n {...rest}\n h={h}\n justify=\"space-between\"\n align=\"center\"\n borderBottomWidth={borderBottomWidth}\n borderColor={\"border.muted\"}\n px={px}\n py={py}\n >\n {children}\n </HStack>\n );\n}\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\n\nexport type SimpleCardProps = BoxProps;\n\nexport const SimpleCard = (props: SimpleCardProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"0\" bg=\"bg\" {...rest}>\n {children}\n </Box>\n );\n};\n\nexport type SimpleCardBodyProps = BoxProps;\n\nexport const SimpleCardBody = (props: SimpleCardBodyProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box p=\"md\" {...rest}>\n {children}\n </Box>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { SimpleCard, SimpleCardBody } from \"./simple-card\";\n\nexport interface IntegrationCardProps {\n icon: ReactNode;\n name: string;\n description: string;\n id: string;\n version?: string;\n category?: string;\n active?: boolean;\n actionLabel?: string;\n}\n\nexport const IntegrationCard = (props: IntegrationCardProps) => {\n const { icon, name, description, id, version, category, active = false, actionLabel } = props;\n\n return (\n <SimpleCard>\n <SimpleCardBody>\n <HStack gap=\"4\" alignItems=\"flex-start\">\n <Icon boxSize=\"1em\" fontSize=\"2xl\" flexShrink=\"0\" color=\"fg.muted\">\n {icon}\n </Icon>\n <Box flex=\"1\" minW=\"0\">\n <Stack gap=\"1\">\n <HStack gap=\"2\" flexWrap=\"wrap\">\n <Text textStyle=\"sm\" fontWeight=\"semibold\">\n {name}\n </Text>\n <Badge size=\"sm\" variant=\"outline\">\n {id}\n </Badge>\n {version && (\n <Badge size=\"sm\" variant=\"outline\">\n v{version}\n </Badge>\n )}\n {category && (\n <Badge size=\"sm\" variant=\"outline\">\n {category}\n </Badge>\n )}\n </HStack>\n <Text color=\"fg.muted\">{description}</Text>\n </Stack>\n </Box>\n <Button\n type=\"button\"\n disabled={active}\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"gray\"\n bg=\"bg\"\n flexShrink=\"0\"\n >\n {active && (\n <Icon color=\"fg.success\">\n <Check />\n </Icon>\n )}\n {actionLabel ?? (active ? \"Active\" : \"Connect\")}\n </Button>\n </HStack>\n </SimpleCardBody>\n </SimpleCard>\n );\n};\n","import { Box, Collapsible, Flex, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ItemSectionProps {\n children: ReactNode;\n title?: string;\n defaultOpen?: boolean;\n action?: ReactNode;\n}\n\n/**\n * A collapsible section wrapper with a title trigger and optional action.\n */\nexport const ItemSection = (props: ItemSectionProps) => {\n const { children, title, defaultOpen = true, action } = props;\n\n return (\n <Collapsible.Root defaultOpen={defaultOpen} width=\"full\">\n <Flex>\n <Collapsible.Trigger\n _hover={{\n background: \"bg.hover\",\n }}\n padding=\"sm\"\n height=\"2rem\"\n display=\"flex\"\n width=\"full\"\n gap=\"2\"\n alignItems=\"center\"\n cursor=\"pointer\"\n justifyContent=\"space-between\"\n >\n {title && (\n <Text fontWeight=\"600\" textStyle=\"label/S/medium\">\n {title}\n </Text>\n )}\n <Collapsible.Indicator transition=\"transform 0.2s\" _open={{ transform: \"rotate(90deg)\" }}>\n <ChevronRight size={16} />\n </Collapsible.Indicator>\n </Collapsible.Trigger>\n {action && (\n <Box marginLeft=\"auto\" onClick={(e) => e.stopPropagation()}>\n {action}\n </Box>\n )}\n </Flex>\n <Collapsible.Content>{children}</Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","export const PANEL_HEADER_HEIGHT = \"2.5rem\";\n","import { createContext, type Dispatch, type SetStateAction, useContext, useEffect } from \"react\";\n\nexport interface PanelSidebarRegistration {\n open: boolean;\n resizable: boolean;\n width: number;\n minWidth: number;\n maxWidth: number;\n onWidthChange: (width: number) => void;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const PanelSidebarRegistrationContext = createContext<Dispatch<\n SetStateAction<PanelSidebarRegistration | null>\n> | null>(null);\n\nexport const usePanelSidebarRegistration = (registration: PanelSidebarRegistration) => {\n const setRegistration = useContext(PanelSidebarRegistrationContext);\n const { maxWidth, minWidth, onOpenChange, onWidthChange, open, resizable, width } = registration;\n\n useEffect(() => {\n if (!setRegistration) return;\n\n setRegistration({ maxWidth, minWidth, onOpenChange, onWidthChange, open, resizable, width });\n\n return () => {\n setRegistration(null);\n };\n }, [maxWidth, minWidth, onOpenChange, onWidthChange, open, resizable, setRegistration, width]);\n\n return setRegistration !== null;\n};\n","import { Toaster as ChakraToaster, createToaster, Portal, Spinner, Stack, Toast } from \"@chakra-ui/react\";\n\nexport const toaster: ReturnType<typeof createToaster> = createToaster({\n placement: \"top\",\n pauseOnPageIdle: true,\n duration: 10000,\n});\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }} alignItems=\"start\">\n {toast.type === \"loading\" ? <Spinner size=\"sm\" color=\"blue.solid\" /> : <Toast.Indicator />}\n <Stack gap=\"1\" flex=\"1\" minWidth=\"0\" maxWidth=\"100%\">\n {toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n {toast.description && (\n <Toast.Description\n maxHeight=\"12rem\"\n overflowY=\"auto\"\n paddingEnd=\"1\"\n whiteSpace=\"pre-wrap\"\n wordBreak=\"break-word\"\n >\n {toast.description}\n </Toast.Description>\n )}\n </Stack>\n {toast.action && <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>}\n <Toast.CloseTrigger />\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n );\n};\n","import { Flex, Stack } from \"@chakra-ui/react\";\nimport { Outlet, useRouterState } from \"@tanstack/react-router\";\nimport { useState } from \"react\";\nimport { ErrorBoundary } from \"@/components/error-boundary\";\nimport { HorizontalMenuStack } from \"@/components/horizontal-menu-stack\";\nimport { PANEL_HEADER_HEIGHT } from \"@/components/panel-header.constants\";\nimport {\n type PanelSidebarRegistration,\n PanelSidebarRegistrationContext,\n} from \"@/components/panel-sidebar-registration-context\";\nimport { ResizableSplitLayout } from \"@/components/resizable-split-layout\";\nimport { ScrollArea } from \"@/components/scroll-area\";\nimport { Toaster } from \"@/components/toaster\";\n\nexport const Layout = () => {\n const { location } = useRouterState();\n return (\n <>\n <Stack flex=\"1\" minH=\"100vh\" gap=\"0\" overflow=\"hidden\">\n <Flex flex=\"1\" height=\"100%\" alignItems=\"stretch\" overflow=\"hidden\">\n <ScrollArea flex=\"1\" bg=\"bg\" contentProps={{ minH: \"100%\" }}>\n <ErrorBoundary key={location.pathname} label=\"Unable to render this page.\">\n <Outlet />\n </ErrorBoundary>\n </ScrollArea>\n </Flex>\n </Stack>\n <Toaster />\n </>\n );\n};\n\ninterface PanelLayoutProps {\n sidebar?: React.ReactNode;\n errorLabel?: string;\n children?: React.ReactNode;\n}\n\nconst noop = () => undefined;\n\nconst DEFAULT_SIDEBAR_REGISTRATION = {\n open: true,\n resizable: true,\n width: 240,\n minWidth: 200,\n maxWidth: 480,\n onWidthChange: noop,\n onOpenChange: noop,\n} satisfies PanelSidebarRegistration;\n\nexport const PanelLayout = (props: PanelLayoutProps) => {\n const { sidebar, errorLabel, children } = props;\n const [sidebarRegistration, setSidebarRegistration] = useState<PanelSidebarRegistration | null>(null);\n const registration = sidebarRegistration ?? DEFAULT_SIDEBAR_REGISTRATION;\n const sidebarPanel = (\n <PanelSidebarRegistrationContext.Provider value={setSidebarRegistration}>\n <Flex minH=\"0\" h=\"100%\" w=\"100%\">\n {sidebar}\n </Flex>\n </PanelSidebarRegistrationContext.Provider>\n );\n const contentPanel = (\n <ErrorBoundary label={errorLabel ?? \"Unable to render the panel.\"}>\n <Flex flex=\"1\" overflow=\"hidden\" minH=\"0\" minW=\"0\">\n {children ?? <Outlet />}\n </Flex>\n </ErrorBoundary>\n );\n\n if (!sidebar) {\n return (\n <Flex height=\"100%\" width=\"100%\" minH=\"0\" minW=\"0\">\n {contentPanel}\n </Flex>\n );\n }\n\n return (\n <Flex height=\"100%\" width=\"100%\" minH=\"0\" minW=\"0\">\n {registration.resizable ? (\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={sidebarPanel}\n contentPanel={contentPanel}\n defaultSizePx={registration.width}\n minSizePx={registration.minWidth}\n maxSizePx={registration.maxWidth}\n contentMinSizePx={320}\n collapsed={!registration.open}\n resizeLabel=\"Resize sidebar\"\n showResizeSeparator={false}\n onSizeChange={registration.onWidthChange}\n onCollapsedChange={(collapsed) => registration.onOpenChange(!collapsed)}\n />\n ) : (\n <>\n {registration.open ? (\n <Flex minH=\"0\" flexShrink={0}>\n {sidebarPanel}\n </Flex>\n ) : null}\n {contentPanel}\n </>\n )}\n </Flex>\n );\n};\n\ninterface PanelSectionLayoutProps {\n actions: React.ReactNode;\n content: React.ReactNode;\n}\n\nexport const PanelSectionLayout = (props: PanelSectionLayoutProps) => {\n const { actions, content } = props;\n return (\n <Stack height=\"100%\" width=\"100%\" gap=\"0\" minH=\"0\">\n <HorizontalMenuStack\n data-testid=\"panel-section-actions\"\n align=\"flex-start\"\n minH={PANEL_HEADER_HEIGHT}\n flexWrap=\"wrap\"\n gap=\"sm\"\n py=\"2xs\"\n >\n {actions}\n </HorizontalMenuStack>\n <ScrollArea flex=\"1\" bg=\"bg\" contentProps={{ minH: \"100%\" }}>\n <ErrorBoundary label=\"Unable to render the panel.\">\n <Flex flex=\"1\" overflow=\"hidden\" minH=\"0\">\n {content}\n </Flex>\n </ErrorBoundary>\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, HStack, Link, Separator, Stack, Text } from \"@chakra-ui/react\";\n\nexport interface OpenSourceNotice {\n name: string;\n version?: string;\n license?: string;\n copyright?: string;\n homepageUrl?: string;\n sourceUrl?: string;\n attribution?: string;\n}\n\nexport interface OpenSourceNoticesScreenProps {\n notices: OpenSourceNotice[];\n title?: string;\n description?: string;\n productName?: string;\n productVersion?: string;\n generatedAt?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n}\n\nconst getNoticeKey = (notice: OpenSourceNotice, index: number) => {\n return `${notice.name}-${notice.version ?? \"unknown\"}-${index}`;\n};\n\nconst getNoticeTitle = (notice: OpenSourceNotice) => {\n if (!notice.version) return notice.name;\n\n return `${notice.name} v${notice.version}`;\n};\n\nexport const OpenSourceNoticesScreen = (props: OpenSourceNoticesScreenProps) => {\n const {\n notices,\n title = \"Open Source and Third-Party Notices\",\n description = \"This product includes software developed by the open source community.\",\n productName,\n productVersion,\n generatedAt,\n emptyTitle = \"No third-party notices available\",\n emptyDescription = \"No third-party packages were included in this build.\",\n } = props;\n\n return (\n <Stack width=\"full\" minHeight=\"100%\" background=\"bg\" color=\"fg\" padding={{ base: \"md\", md: \"xl\" }} gap=\"lg\">\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/L\">{title}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n\n <HStack gap=\"md\" flexWrap=\"wrap\">\n {productName ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Product: {productName}\n </Text>\n ) : null}\n\n {productVersion ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Version: {productVersion}\n </Text>\n ) : null}\n\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Packages: {notices.length}\n </Text>\n\n {generatedAt ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Generated: {generatedAt}\n </Text>\n ) : null}\n </HStack>\n </Stack>\n\n <Separator borderColor=\"border.muted\" />\n\n {notices.length === 0 ? (\n <Stack borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"md\" padding=\"lg\" gap=\"xs\">\n <Text textStyle=\"label/L/medium\">{emptyTitle}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {emptyDescription}\n </Text>\n </Stack>\n ) : (\n <Stack gap=\"md\">\n {notices.map((notice, index) => (\n <Box\n key={getNoticeKey(notice, index)}\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"md\"\n padding=\"md\"\n >\n <Stack gap=\"sm\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/L/medium\">{getNoticeTitle(notice)}</Text>\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n License: {notice.license ?? \"Unknown\"}\n </Text>\n </Stack>\n\n {notice.copyright ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n {notice.copyright}\n </Text>\n ) : null}\n\n {(notice.homepageUrl || notice.sourceUrl) && (\n <Stack gap=\"2xs\">\n {notice.homepageUrl ? (\n <Link\n href={notice.homepageUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Homepage\n </Link>\n ) : null}\n\n {notice.sourceUrl ? (\n <Link\n href={notice.sourceUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Source code\n </Link>\n ) : null}\n </Stack>\n )}\n\n {notice.attribution ? (\n <Box background=\"bg.muted\" borderRadius=\"sm\" padding=\"sm\">\n <Text textStyle=\"label/S/regular\" whiteSpace=\"pre-wrap\">\n {notice.attribution}\n </Text>\n </Box>\n ) : null}\n </Stack>\n </Box>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n","import type { ReactNode } from \"react\";\n\nexport const DEFAULT_PALETTE_ASSET_LIMIT = 48;\n\nexport interface PaletteSearchEntry {\n id: string;\n mode?: string;\n label: ReactNode;\n searchText?: string;\n secondaryLabel?: ReactNode;\n assetType?: string;\n}\n\nexport interface PaletteMode {\n id: string;\n inputPrefix?: string;\n}\n\nexport interface FilterPaletteEntriesOptions {\n query: string;\n mode?: string;\n getEffectiveQuery?: (query: string) => string;\n defaultAssetLimit?: number;\n}\n\nconst getSearchableText = (entry: PaletteSearchEntry) => {\n const label = typeof entry.label === \"string\" ? entry.label : \"\";\n const secondaryLabel = typeof entry.secondaryLabel === \"string\" ? entry.secondaryLabel : \"\";\n\n return `${label} ${entry.searchText ?? \"\"} ${secondaryLabel}`;\n};\n\nconst hasInputPrefix = (query: string, inputPrefix: string) => query.trimStart().startsWith(inputPrefix);\n\nexport const resolvePaletteMode = (query: string, modes: readonly PaletteMode[] = [], fallbackMode?: string) => {\n const prefixedMode = modes.find((mode) => mode.inputPrefix && hasInputPrefix(query, mode.inputPrefix));\n\n return prefixedMode?.id ?? fallbackMode ?? modes.find((mode) => !mode.inputPrefix)?.id ?? modes[0]?.id;\n};\n\nexport const getPaletteEffectiveQuery = (query: string, modes: readonly PaletteMode[] = [], modeId?: string) => {\n const mode = modes.find(\n (candidate) => candidate.id === modeId && candidate.inputPrefix && hasInputPrefix(query, candidate.inputPrefix),\n );\n\n if (!mode?.inputPrefix) return query.trim();\n\n return query.trimStart().slice(mode.inputPrefix.length).trim();\n};\n\nconst limitDefaultAssetEntries = <T extends PaletteSearchEntry>(entries: T[], limit: number) => {\n const counts: Record<string, number> = {};\n\n return entries.filter((entry) => {\n const assetType = entry.assetType;\n if (!assetType) return true;\n\n const count = counts[assetType] ?? 0;\n if (count >= limit) return false;\n\n counts[assetType] = count + 1;\n return true;\n });\n};\n\nexport const filterPaletteEntries = <T extends PaletteSearchEntry>(\n entries: T[],\n options: FilterPaletteEntriesOptions,\n) => {\n const effectiveQuery = (options.getEffectiveQuery?.(options.query) ?? options.query.trim()).toLowerCase();\n\n const filteredEntries = entries.filter((entry) => {\n if (options.mode && entry.mode !== options.mode) return false;\n if (!effectiveQuery) return true;\n\n return getSearchableText(entry).toLowerCase().includes(effectiveQuery);\n });\n\n if (effectiveQuery || options.defaultAssetLimit === undefined) {\n return filteredEntries;\n }\n\n return limitDefaultAssetEntries(filteredEntries, options.defaultAssetLimit);\n};\n","import { Box, HStack, Icon, Menu, Text } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { Check } from \"lucide-react\";\nimport { type RefObject, useEffect } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport type { PaletteEntry } from \"./palette\";\n\ntype PaletteRow<T extends PaletteEntry> =\n | { type: \"group\"; id: string; label: string }\n | { type: \"entry\"; id: string; entry: T; entryIndex: number };\n\nconst GROUP_ROW_HEIGHT = 24;\nconst ENTRY_ROW_HEIGHT = 40;\nconst INITIAL_VIEWPORT_HEIGHT = 384;\n\nconst buildEntryItem = (entry: PaletteEntry): ListRowItem => ({\n id: entry.id,\n label: entry.label,\n description: entry.description ?? entry.secondaryLabel,\n icon: entry.icon,\n endContent:\n entry.endContent ??\n (entry.shortcut || entry.isSelected ? (\n <HStack gap=\"2\">\n {entry.shortcut}\n {entry.isSelected ? <Icon as={Check} boxSize=\"14px\" color=\"fg.muted\" /> : null}\n </HStack>\n ) : undefined),\n onActivate: entry.onActivate,\n});\n\nconst buildRows = <T extends PaletteEntry>(entries: T[]) => {\n const rows: PaletteRow<T>[] = [];\n\n entries.forEach((entry, index) => {\n const previousEntry = entries[index - 1];\n if (entry.group && entry.group !== previousEntry?.group) {\n rows.push({ type: \"group\", id: `group:${entry.group}:${entry.id}`, label: entry.group });\n }\n\n rows.push({ type: \"entry\", id: entry.id, entry, entryIndex: index });\n });\n\n return rows;\n};\n\nconst getActiveRowIndex = <T extends PaletteEntry>(rows: PaletteRow<T>[], activeIndex: number) =>\n rows.findIndex((row) => row.type === \"entry\" && row.entryIndex === activeIndex);\n\ninterface PaletteListProps<T extends PaletteEntry> {\n entries: T[];\n activeIndex: number;\n emptyLabel: string;\n onHover: (index: number) => void;\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nexport const PaletteList = <T extends PaletteEntry>(props: PaletteListProps<T>) => {\n const { entries, activeIndex, emptyLabel, onHover, scrollRef } = props;\n const rows = buildRows(entries);\n const activeRowIndex = getActiveRowIndex(rows, activeIndex);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => (rows[index]?.type === \"group\" ? GROUP_ROW_HEIGHT : ENTRY_ROW_HEIGHT),\n getItemKey: (index) => rows[index]?.id ?? index,\n initialRect: { width: 0, height: INITIAL_VIEWPORT_HEIGHT },\n overscan: 6,\n });\n\n useEffect(() => {\n if (activeRowIndex < 0) return;\n\n virtualizer.scrollToIndex(activeRowIndex, { align: \"auto\", behavior: \"auto\" });\n }, [activeRowIndex, virtualizer]);\n\n if (entries.length === 0) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" px=\"sm\" py=\"md\">\n {emptyLabel}\n </Text>\n );\n }\n\n return (\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualRow.key}\n data-index={virtualRow.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n style={{ top: virtualRow.start }}\n >\n {row.type === \"group\" ? (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\" px=\"sm\" pt=\"xs\" pb=\"2xs\">\n {row.label}\n </Text>\n ) : (\n <Menu.Item value={row.entry.id} asChild onPointerMove={() => onHover(row.entryIndex)}>\n <ListRow\n asChild\n variant=\"compact\"\n {...buildEntryItem(row.entry)}\n isSelected={row.entryIndex === activeIndex}\n />\n </Menu.Item>\n )}\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { CloseButton, Dialog, Input, InputGroup, Menu } from \"@chakra-ui/react\";\nimport type { KeyboardEvent, ReactNode, SetStateAction } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n DEFAULT_PALETTE_ASSET_LIMIT,\n type FilterPaletteEntriesOptions,\n filterPaletteEntries,\n getPaletteEffectiveQuery,\n type PaletteMode,\n type PaletteSearchEntry,\n resolvePaletteMode,\n} from \"./palette-filter\";\nimport { PaletteList } from \"./palette-list\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport type { FilterPaletteEntriesOptions, PaletteMode, PaletteSearchEntry };\nexport { DEFAULT_PALETTE_ASSET_LIMIT, filterPaletteEntries };\n\nexport interface PaletteEntry extends PaletteSearchEntry {\n description?: ReactNode;\n icon?: ReactNode;\n shortcut?: ReactNode;\n endContent?: ReactNode;\n group?: string;\n isSelected?: boolean;\n onActivate: () => void;\n}\n\nexport interface PaletteState<T extends PaletteEntry> {\n query: string;\n mode?: string;\n activeIndex: number;\n entries: T[];\n}\n\nexport interface PaletteEscapeContext<T extends PaletteEntry> extends PaletteState<T> {\n activeEntry: T | null;\n entryCount: number;\n setQuery: (query: string) => void;\n setActiveIndex: (index: SetStateAction<number>) => void;\n runActiveEntry: () => void;\n closePalette: () => void;\n}\n\nexport type PaletteStateValue<T extends PaletteEntry, TValue> = TValue | ((state: PaletteState<T>) => TValue);\n\nexport interface PaletteProps<T extends PaletteEntry = PaletteEntry> {\n open: boolean;\n entries: T[];\n initialQuery?: string;\n initialActiveIndex?: number;\n mode?: string;\n modes?: PaletteMode[];\n resetKey?: string;\n inputIcon?: PaletteStateValue<T, ReactNode>;\n placeholder?: PaletteStateValue<T, string>;\n emptyLabel?: string;\n footerStart?: ReactNode;\n footerEnd?: ReactNode;\n filterEntries?: (entries: T[], query: string, mode?: string) => T[];\n onActiveEntryChange?: (entry: T | null, index: number) => void;\n onClose: () => void;\n onEscape?: (ctx: PaletteEscapeContext<T>) => boolean | undefined;\n}\n\nconst resolveStateValue = <T extends PaletteEntry, TValue>(\n value: PaletteStateValue<T, TValue> | undefined,\n state: PaletteState<T>,\n fallback: TValue,\n) => {\n if (typeof value === \"function\") {\n return (value as (state: PaletteState<T>) => TValue)(state);\n }\n\n return value ?? fallback;\n};\n\nexport const Palette = <T extends PaletteEntry>(props: PaletteProps<T>) => {\n const {\n open,\n entries,\n initialQuery = \"\",\n initialActiveIndex = 0,\n mode,\n modes,\n resetKey = \"default\",\n inputIcon,\n placeholder,\n emptyLabel = \"No results.\",\n footerStart,\n footerEnd,\n filterEntries,\n onActiveEntryChange,\n onClose,\n onEscape,\n } = props;\n const [query, setQueryState] = useState(initialQuery);\n const [activeIndex, setActiveIndex] = useState(initialActiveIndex);\n const inputRef = useRef<HTMLInputElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef({ open: false, resetKey });\n const activeMode = mode ?? resolvePaletteMode(query, modes);\n const filteredEntries = filterEntries\n ? filterEntries(entries, query, activeMode)\n : filterPaletteEntries(entries, {\n query,\n mode: activeMode,\n getEffectiveQuery: (value) => getPaletteEffectiveQuery(value, modes, activeMode),\n });\n const activeEntry = filteredEntries[activeIndex] ?? null;\n const state: PaletteState<T> = { query, mode: activeMode, activeIndex, entries: filteredEntries };\n const resolvedInputIcon = resolveStateValue(inputIcon, state, null);\n const resolvedPlaceholder = resolveStateValue(placeholder, state, \"Search\");\n\n const setQuery = (nextQuery: string) => {\n setQueryState(nextQuery);\n };\n\n const runActiveEntry = () => {\n activeEntry?.onActivate();\n };\n\n const closePalette = () => {\n onClose();\n };\n\n useEffect(() => {\n const previousSetup = setupRef.current;\n setupRef.current = { open, resetKey };\n if (!open) return;\n\n const shouldInitialize = !previousSetup.open || previousSetup.resetKey !== resetKey;\n if (!shouldInitialize) return;\n\n setQueryState(initialQuery);\n setActiveIndex(initialActiveIndex);\n\n const timeout = setTimeout(() => {\n const input = inputRef.current;\n if (!input) return;\n input.focus();\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n return () => clearTimeout(timeout);\n }, [initialActiveIndex, initialQuery, open, resetKey]);\n\n useEffect(() => {\n setActiveIndex((current) => Math.min(current, Math.max(filteredEntries.length - 1, 0)));\n }, [filteredEntries.length]);\n\n useEffect(() => {\n onActiveEntryChange?.(activeEntry, activeIndex);\n }, [activeEntry, activeIndex, onActiveEntryChange]);\n\n const handleEscape = () => {\n const handled = onEscape?.({\n ...state,\n activeEntry,\n entryCount: filteredEntries.length,\n setQuery,\n setActiveIndex,\n runActiveEntry,\n closePalette,\n });\n if (handled) return;\n\n if (query.length > 0) {\n setQuery(\"\");\n setActiveIndex(0);\n return;\n }\n\n closePalette();\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setActiveIndex((current) => Math.min(current + 1, Math.max(filteredEntries.length - 1, 0)));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(current - 1, 0));\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n runActiveEntry();\n return;\n }\n\n if (event.key !== \"Escape\") return;\n\n event.preventDefault();\n event.stopPropagation();\n handleEscape();\n };\n\n const hasFooter = footerStart || footerEnd;\n\n return (\n <Dialog.Root open={open} onOpenChange={(details) => !details.open && closePalette()}>\n <Dialog.Backdrop />\n <Dialog.Positioner alignItems=\"flex-start\" pt=\"10vh\">\n <Dialog.Content maxW=\"44rem\" p=\"0\" overflow=\"hidden\">\n <Dialog.Header px=\"0\" py=\"0\" borderBottomWidth=\"1px\" borderBottomColor=\"border.muted\">\n <InputGroup startElement={resolvedInputIcon}>\n <Input\n ref={inputRef}\n value={query}\n placeholder={resolvedPlaceholder}\n aria-label={resolvedPlaceholder}\n autoComplete=\"off\"\n borderWidth=\"0\"\n borderRadius=\"0\"\n h=\"3rem\"\n _focus={{ boxShadow: \"none\" }}\n _focusVisible={{ boxShadow: \"none\" }}\n onChange={(event) => {\n setQuery(event.target.value);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n />\n </InputGroup>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" mr=\"2\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body p=\"0\">\n <ScrollArea\n maxH=\"24rem\"\n showHorizontalScrollbar={false}\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n >\n <Menu.Root open closeOnSelect={false}>\n <Menu.Content\n borderRadius={0}\n position=\"static\"\n minW=\"full\"\n bg=\"transparent\"\n boxShadow=\"none\"\n borderWidth=\"0\"\n >\n <PaletteList\n entries={filteredEntries}\n activeIndex={activeIndex}\n emptyLabel={emptyLabel}\n onHover={setActiveIndex}\n scrollRef={scrollRef}\n />\n </Menu.Content>\n </Menu.Root>\n </ScrollArea>\n </Dialog.Body>\n {hasFooter ? (\n <Dialog.Footer\n justifyContent=\"space-between\"\n px=\"sm\"\n py=\"xs\"\n borderTopWidth=\"1px\"\n borderTopColor=\"border.muted\"\n >\n {footerStart}\n {footerEnd}\n </Dialog.Footer>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { Kbd } from \"@chakra-ui/react\";\nimport { Fragment } from \"react\";\n\nexport type PaletteShortcutBinding = string | string[];\n\nconst splitShortcutStep = (step: string) => {\n return step\n .split(\"+\")\n .map((part) => part.trim())\n .filter(Boolean);\n};\n\nconst getShortcutDisplayParts = (binding: PaletteShortcutBinding) => {\n const steps = Array.isArray(binding) ? binding.map(splitShortcutStep) : [splitShortcutStep(binding)];\n\n return steps.map((step) => step.map((label) => ({ label })));\n};\n\nexport const PaletteShortcut = (props: { binding: PaletteShortcutBinding }) => {\n const { binding } = props;\n const steps = getShortcutDisplayParts(binding);\n\n return (\n <>\n {steps.map((step, stepIndex) => (\n <Fragment key={`${step.map((part) => part.label).join(\"+\")}-${stepIndex}`}>\n {step.map((part, partIndex) => (\n <Fragment key={`${part.label}-${partIndex}`}>\n <Kbd fontSize=\"xs\" borderRadius=\"0\" display=\"inline-flex\" alignItems=\"center\" aria-label={part.label}>\n {part.label}\n </Kbd>\n {partIndex < step.length - 1 ? \" + \" : null}\n </Fragment>\n ))}\n {stepIndex < steps.length - 1 ? \" then \" : null}\n </Fragment>\n ))}\n </>\n );\n};\n","import { HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { CircleHelp } from \"lucide-react\";\nimport { Tooltip } from \"./tooltip\";\n\ninterface ParamEditorLabelProps {\n name: string;\n description?: string;\n}\n\nexport const ParamEditorLabel = (props: ParamEditorLabelProps) => {\n const { name, description } = props;\n\n return (\n <HStack gap=\"1\" alignItems=\"center\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\" truncate>\n {name}\n </Text>\n {description ? (\n <Tooltip content={description} showArrow>\n <Icon as={CircleHelp} boxSize=\"12px\" color=\"fg.muted\" opacity={0.6} cursor=\"help\" flexShrink={0} />\n </Tooltip>\n ) : null}\n </HStack>\n );\n};\n","import { Box, ColorPicker, type ColorPickerValueChangeDetails, Flex, parseColor } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\n\ninterface ColorInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const ColorInput = (props: ColorInputProps) => {\n const { id, defaultValue, name, onChange, description, readOnly, hideLabel = false, fullWidth = false } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextColor: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextColor), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newColor: string) => {\n setValue(newColor);\n scheduleChange(newColor);\n };\n\n const rootProps = {\n value: parseColor(value),\n onValueChange: (details: ColorPickerValueChangeDetails) => handleChange(details.value.toString(\"hex\")),\n disabled: readOnly,\n };\n\n const picker = (\n <ColorPicker.Root {...rootProps} size=\"sm\" maxW={fullWidth ? \"100%\" : \"8.75rem\"}>\n <ColorPicker.HiddenInput />\n <ColorPicker.Label srOnly>{name}</ColorPicker.Label>\n <ColorPicker.Control>\n <ColorPicker.Input readOnly={readOnly} />\n <ColorPicker.Trigger />\n </ColorPicker.Control>\n <ColorPicker.Positioner>\n <ColorPicker.Content>\n <ColorPicker.Area />\n <ColorPicker.Sliders />\n <ColorPicker.SwatchGroup>\n <ColorPicker.SwatchTrigger value={value}>\n <ColorPicker.Swatch value={value} />\n </ColorPicker.SwatchTrigger>\n </ColorPicker.SwatchGroup>\n </ColorPicker.Content>\n </ColorPicker.Positioner>\n </ColorPicker.Root>\n );\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {picker}\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {picker}\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\n\ninterface DateInputProps {\n id: string;\n defaultValue: string;\n name: string;\n min?: string;\n max?: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const DateInput = (props: DateInputProps) => {\n const {\n id,\n defaultValue,\n name,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"8.75rem\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n )}\n </Box>\n );\n};\n","import { NumberInput as ChakraNumberInput } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface NumberInputProps extends ChakraNumberInput.RootProps {}\n\nexport const NumberInputRoot = React.forwardRef<HTMLDivElement, NumberInputProps>(function NumberInput(props, ref) {\n const { children, ...rest } = props;\n return (\n <ChakraNumberInput.Root ref={ref} variant=\"outline\" {...rest}>\n {children}\n <ChakraNumberInput.Control>\n <ChakraNumberInput.IncrementTrigger />\n <ChakraNumberInput.DecrementTrigger />\n </ChakraNumberInput.Control>\n </ChakraNumberInput.Root>\n );\n});\n\nexport const NumberInputField = ChakraNumberInput.Input;\nexport const NumberInputScrubber = ChakraNumberInput.Scrubber;\nexport const NumberInputLabel = ChakraNumberInput.Label;\n","import { Slider as ChakraSlider } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SliderProps extends ChakraSlider.RootProps {}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(function Slider(props, ref) {\n const { children, ...rest } = props;\n\n return (\n <ChakraSlider.Root ref={ref} variant=\"solid\" {...rest}>\n <ChakraSlider.Control>\n <ChakraSlider.Track borderRadius=\"0\">\n <ChakraSlider.Range />\n </ChakraSlider.Track>\n <ChakraSlider.Thumbs />\n </ChakraSlider.Control>\n {children}\n </ChakraSlider.Root>\n );\n});\n","import { Box, Flex, type NumberInputValueChangeDetails, type SliderValueChangeDetails } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { NumberInputField, NumberInputRoot } from \"./number-input\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { Slider } from \"./slider\";\n\ninterface NumberInputProps {\n id: string;\n defaultValue: number;\n name: string;\n step?: number;\n min?: number;\n max?: number;\n onChange: (id: string, value: number) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n hideSlider?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const NumberInput = (props: NumberInputProps) => {\n const {\n id,\n defaultValue,\n name,\n step = 1,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n hideSlider = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const isRange = min !== undefined && max !== undefined;\n const showSlider = isRange && !hideSlider;\n const useFullWidthLayout = fullWidth && !showSlider;\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const scheduleChange = (nextValue: number) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n return (\n <Box>\n {useFullWidthLayout ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <NumberInputRoot\n disabled={readOnly}\n width=\"100%\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <NumberInputRoot\n disabled={readOnly}\n width=\"5rem\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Flex>\n )}\n {showSlider && (\n <Slider\n size=\"sm\"\n disabled={readOnly}\n value={[value]}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: SliderValueChangeDetails) => {\n setValue(details.value[0]);\n }}\n onValueChangeEnd={(details: SliderValueChangeDetails) => {\n onChange(id, details.value[0]);\n }}\n />\n )}\n </Box>\n );\n};\n","import { Box, Button, Flex, Icon, Menu } from \"@chakra-ui/react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\n\ninterface Option {\n id: string;\n name: string;\n icon?: string;\n}\n\ninterface SelectionInputProps {\n id: string;\n defaultValue: string | string[];\n name: string;\n options: Option[];\n onChange: (id: string, value: string | string[]) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n multiSelect?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n placeholder?: string;\n fullWidth?: boolean;\n}\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const {\n id,\n defaultValue,\n name,\n options,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n multiSelect = false,\n placeholder,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string | string[]) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const isSelected = (optionId: string) => {\n if (multiSelect) {\n return Array.isArray(value) && value.includes(optionId);\n }\n return value === optionId;\n };\n\n const getDisplayText = () => {\n if (multiSelect) {\n const selectedValues = Array.isArray(value) ? value : [];\n if (selectedValues.length === 0) {\n return placeholder || `Select`;\n }\n\n const selectedOptions = selectedValues\n .map((id) => options.find((o) => o.id === id))\n .filter(Boolean)\n .map((opt) => opt!.name);\n\n if (selectedOptions.length <= 3) {\n return selectedOptions.join(\", \");\n }\n const displayItems = selectedOptions.slice(0, 3).join(\", \");\n const remaining = selectedOptions.length - 3;\n return `${displayItems} +${remaining}`;\n }\n const selectedOption = options.find((o) => o.id === value);\n return selectedOption?.name || \"Select\";\n };\n\n const handleSelect = (newValue: string) => {\n if (multiSelect) {\n const currentValues = Array.isArray(value) ? value : [];\n let updatedValues: string[];\n\n if (currentValues.includes(newValue)) {\n updatedValues = currentValues.filter((v) => v !== newValue);\n } else {\n updatedValues = [...currentValues, newValue];\n }\n\n setValue(updatedValues);\n scheduleChange(updatedValues);\n } else {\n setValue(newValue);\n scheduleChange(newValue);\n }\n };\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button\n size=\"sm\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"border\"\n disabled={readOnly}\n width=\"100%\"\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\" w=\"full\">\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n </Flex>\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button size=\"sm\" borderWidth=\"1px\" borderStyle=\"solid\" borderColor=\"border\" disabled={readOnly}>\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input, Textarea } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\n\ninterface TextInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n singleLine?: boolean;\n hideLabel?: boolean;\n fullWidth?: boolean;\n}\n\nexport const TextInput = (props: TextInputProps) => {\n const {\n id,\n defaultValue,\n name,\n onChange,\n description,\n readOnly,\n singleLine = true,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n return (\n <Box>\n {singleLine && !fullWidth ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n flex=\"1\"\n maxW=\"12.5rem\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n ) : (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {singleLine ? (\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n ) : (\n <Textarea\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n rows={3}\n resize=\"vertical\"\n />\n )}\n </Box>\n )}\n </Box>\n );\n};\n","import { Box, Button, Collapsible, Flex, Stack, Text, useDisclosure } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronLeft } from \"lucide-react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ColorInput } from \"./param-editor-color-input\";\nimport { DateInput } from \"./param-editor-date-input\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { NumberInput } from \"./param-editor-number-input\";\nimport { SelectionInput } from \"./param-editor-selection-input\";\nimport { TextInput } from \"./param-editor-text-input\";\n\ninterface InputGroupComponentProps {\n group: InputGroup;\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const InputGroupComponent = (props: InputGroupComponentProps) => {\n const { group, defaultValues, onChange, readOnly, fullWidth = false } = props;\n const { open, onToggle } = useDisclosure({\n defaultOpen: !group.defaultCollapsed,\n });\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={onChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <Box minW=\"0\" textStyle=\"label/S/regular\">\n {param.value}\n </Box>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <Box minW=\"0\" textStyle=\"label/S/regular\">\n {param.value}\n </Box>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Box>\n {group.collapsible ? (\n <Button variant=\"ghost\" size=\"xs\" onClick={onToggle} pl={0} _hover={{ bg: \"transparent\" }}>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n {open ? <ChevronDown size={14} /> : <ChevronLeft size={14} />}\n </Flex>\n </Button>\n ) : (\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n )}\n\n {group.description && (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" mb=\"sm\">\n {group.description}\n </Text>\n )}\n\n <Collapsible.Root open={group.collapsible ? open : true}>\n <Collapsible.Content>\n <Stack gap=\"md\">{group.params.map(renderParam)}</Stack>\n </Collapsible.Content>\n </Collapsible.Root>\n </Box>\n );\n};\n","import { Box, Flex, Separator, Stack } from \"@chakra-ui/react\";\nimport { Fragment } from \"react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ColorInput } from \"./param-editor-color-input\";\nimport { DateInput } from \"./param-editor-date-input\";\nimport { InputGroupComponent } from \"./param-editor-input-group\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { NumberInput } from \"./param-editor-number-input\";\nimport { SelectionInput } from \"./param-editor-selection-input\";\nimport { TextInput } from \"./param-editor-text-input\";\n\nexport interface ParamEditorProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues?: ParamValueMap;\n onChange?: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const ParamEditor = (props: ParamEditorProps) => {\n const { params = [], groups = [], defaultValues = {}, onChange, readOnly, fullWidth = false } = props;\n const handleChange = onChange ?? (() => undefined);\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={handleChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <Box minW=\"0\" textStyle=\"label/S/regular\">\n {param.value}\n </Box>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <Box minW=\"0\" textStyle=\"label/S/regular\">\n {param.value}\n </Box>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap=\"md\">\n {params.map(renderParam)}\n\n {params.length > 0 && groups.length > 0 && <Separator borderColor=\"border.muted\" />}\n\n {groups.map((group, index) => (\n <Fragment key={group.id}>\n <InputGroupComponent\n group={group}\n defaultValues={defaultValues}\n onChange={handleChange}\n readOnly={readOnly}\n fullWidth={fullWidth}\n />\n {index < groups.length - 1 && <Separator borderColor=\"border.muted\" />}\n </Fragment>\n ))}\n </Stack>\n );\n};\n","import { Badge, Button, Dialog, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUp, FileText, Folder, FolderOpen, Home, Search } from \"lucide-react\";\nimport { type KeyboardEvent, useEffect, useState } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport interface RepoPickerDialogEntry {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n}\n\ninterface RepoPickerDialogProps {\n open: boolean;\n title?: string;\n description?: string;\n currentPath?: string;\n entries: RepoPickerDialogEntry[];\n selectedPath?: string | null;\n selectedPaths?: string[];\n isLoading?: boolean;\n error?: string;\n isSelectDisabled?: boolean;\n onClose: () => void;\n onSelect: () => void;\n onSelectHomeDirectory: () => void;\n onSelectParentDirectory: () => void;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n}\n\nexport type { RepoPickerDialogProps };\n\nconst getEntryIcon = (entry: RepoPickerDialogEntry) => {\n if (!entry.isDirectory) return FileText;\n if (entry.isGitRepo) return FolderOpen;\n return Folder;\n};\n\nconst filterEntries = (entries: RepoPickerDialogEntry[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return entries;\n }\n\n return entries.filter((entry) => `${entry.name} ${entry.path}`.toLowerCase().includes(normalizedQuery));\n};\n\ntype RepoPickerListEntryProps = {\n entry: RepoPickerDialogEntry;\n selectedPath: string | null;\n selectedPathSet: Set<string>;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n};\n\nconst RepoPickerListEntry = (props: RepoPickerListEntryProps) => {\n const { entry, selectedPath, selectedPathSet, onEntryClick } = props;\n const isAlreadySelected = entry.isGitRepo && selectedPathSet.has(entry.path);\n const isDisabled = !entry.isDirectory || isAlreadySelected;\n\n const handleClick = () => {\n if (isAlreadySelected) {\n return;\n }\n\n onEntryClick(entry);\n };\n\n return (\n <ListRow\n variant=\"compact\"\n isSelected={selectedPath === entry.path}\n id={entry.path}\n label={entry.name}\n icon={<Icon as={getEntryIcon(entry)} boxSize=\"16px\" />}\n endContent={\n entry.isGitRepo ? (\n <Badge\n textStyle=\"label/XS/medium\"\n px=\"xs\"\n py=\"2px\"\n colorPalette=\"green\"\n variant=\"subtle\"\n pointerEvents=\"none\"\n >\n Git repo\n </Badge>\n ) : undefined\n }\n disabled={isDisabled}\n onActivate={handleClick}\n />\n );\n};\n\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nconst searchInputFocusVisibleProps = {\n boxShadow: \"none\",\n outline: \"2px solid\",\n outlineColor: \"blue.border\",\n outlineOffset: \"-2px\",\n} as const;\n\nconst focusInlinePickerOption = (event: KeyboardEvent<HTMLDivElement>) => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) {\n return;\n }\n\n const options = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]:not(:disabled)'),\n );\n\n if (options.length === 0) {\n return;\n }\n\n const currentIndex = options.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex = (() => {\n if (event.key === \"Home\") return 0;\n if (event.key === \"End\") return options.length - 1;\n if (event.key === \"ArrowUp\") return currentIndex <= 0 ? options.length - 1 : currentIndex - 1;\n return currentIndex < 0 || currentIndex === options.length - 1 ? 0 : currentIndex + 1;\n })();\n\n event.preventDefault();\n options[nextIndex]?.focus();\n};\n\nexport const RepoPickerDialog = (props: RepoPickerDialogProps) => {\n const {\n open,\n title = \"Select folder\",\n description,\n currentPath = \"\",\n entries,\n selectedPath = null,\n selectedPaths = [],\n isLoading = false,\n error = \"\",\n isSelectDisabled = false,\n onClose,\n onSelect,\n onSelectHomeDirectory,\n onSelectParentDirectory,\n onEntryClick,\n } = props;\n\n const [query, setQuery] = useState(\"\");\n const selectedPathSet = new Set(selectedPaths);\n const filteredEntries = filterEntries(entries, query);\n const searchScope = currentPath || \"Home\";\n\n useEffect(() => {\n if (!open || !searchScope) return;\n setQuery(\"\");\n }, [open, searchScope]);\n\n return (\n <Dialog.Root\n lazyMount\n unmountOnExit\n closeOnInteractOutside={false}\n open={open}\n onOpenChange={(details) => !details.open && onClose()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n <Stack direction=\"row\" gap=\"sm\" align=\"center\">\n <Button aria-label=\"Go to home directory\" variant=\"outline\" size=\"sm\" onClick={onSelectHomeDirectory}>\n <Home size={16} />\n </Button>\n <Button\n aria-label=\"Go to parent directory\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onSelectParentDirectory}\n disabled={!currentPath || currentPath === \"/\"}\n >\n <ChevronUp size={16} />\n </Button>\n <Text\n data-testid=\"folder-picker-path\"\n textStyle=\"paragraph/S/regular\"\n color=\"fg.muted\"\n flex=\"1\"\n lineClamp={1}\n >\n {searchScope}\n </Text>\n </Stack>\n\n <Stack gap=\"0\" borderWidth=\"1px\" borderRadius=\"md\" borderColor=\"border.muted\" overflow=\"hidden\">\n <InputGroup\n startElement={<Search size={14} />}\n width=\"full\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n >\n <Input\n borderWidth=\"0\"\n borderRadius=\"0\"\n value={query}\n placeholder=\"Search repositories\"\n aria-label=\"Search repositories\"\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputFocusVisibleProps}\n onChange={(event) => setQuery(event.target.value)}\n />\n </InputGroup>\n {isLoading ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Loading...\n </Text>\n ) : error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"red.500\" p=\"sm\">\n {error}\n </Text>\n ) : filteredEntries.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n No entries found.\n </Text>\n ) : (\n <ScrollArea maxHeight=\"320px\" contentProps={{ padding: \"sm\" }}>\n <Stack gap=\"xs\" role=\"listbox\" aria-label=\"Repository folders\" onKeyDown={focusInlinePickerOption}>\n {filteredEntries.map((entry) => (\n <RepoPickerListEntry\n key={entry.path}\n entry={entry}\n selectedPath={selectedPath}\n selectedPathSet={selectedPathSet}\n onEntryClick={onEntryClick}\n />\n ))}\n </Stack>\n </ScrollArea>\n )}\n </Stack>\n </Stack>\n </Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"sm\">\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={onSelect} disabled={isSelectDisabled}>\n Select repository\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\n\ninterface SidebarSnapshot {\n open: boolean;\n expandedSections: string[];\n expandedNodes: string[];\n width: number | null;\n}\n\ninterface SidebarState extends SidebarSnapshot {\n openSidebar: () => void;\n closeSidebar: () => void;\n toggleSidebar: () => void;\n toggleSection: (sectionId: string) => void;\n toggleNode: (nodeId: string) => void;\n setSectionExpanded: (sectionId: string, expanded: boolean) => void;\n setNodeExpanded: (nodeId: string, expanded: boolean) => void;\n setWidth: (width: number) => void;\n reset: () => void;\n}\n\ninterface CreateSidebarStoreOptions {\n storageKey: string;\n initialState?: Partial<SidebarSnapshot>;\n}\n\nconst DEFAULT_SNAPSHOT = {\n open: true,\n expandedSections: [],\n expandedNodes: [],\n width: null,\n} satisfies SidebarSnapshot;\n\nconst SIDEBAR_STORE_NAMESPACE = \"pstdio/ui/sidebar\";\n\nconst toStorageName = (storageKey: string) => `${SIDEBAR_STORE_NAMESPACE}/${storageKey}`;\n\nconst createNoopStorage = () => ({\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n});\n\nconst toggleId = (values: string[], id: string) =>\n values.includes(id) ? values.filter((value) => value !== id) : [...values, id];\n\nconst setExpanded = (values: string[], id: string, expanded: boolean) => {\n if (expanded) {\n return values.includes(id) ? values : [...values, id];\n }\n\n return values.filter((value) => value !== id);\n};\n\nconst getPersistedSnapshot = (state: SidebarState) => ({\n open: state.open,\n expandedSections: state.expandedSections,\n expandedNodes: state.expandedNodes,\n width: state.width,\n});\n\nexport const createSidebarStore = (options: CreateSidebarStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = { ...DEFAULT_SNAPSHOT, ...initialState };\n\n return createStore<SidebarState>()(\n persist(\n (set) => ({\n ...snapshot,\n openSidebar: () => set((state) => ({ ...state, open: true })),\n closeSidebar: () => set((state) => ({ ...state, open: false })),\n toggleSidebar: () => set((state) => ({ ...state, open: !state.open })),\n toggleSection: (sectionId) =>\n set((state) => ({\n ...state,\n expandedSections: toggleId(state.expandedSections, sectionId),\n })),\n toggleNode: (nodeId) =>\n set((state) => ({\n ...state,\n expandedNodes: toggleId(state.expandedNodes, nodeId),\n })),\n setSectionExpanded: (sectionId, expanded) =>\n set((state) => ({\n ...state,\n expandedSections: setExpanded(state.expandedSections, sectionId, expanded),\n })),\n setNodeExpanded: (nodeId, expanded) =>\n set((state) => ({\n ...state,\n expandedNodes: setExpanded(state.expandedNodes, nodeId, expanded),\n })),\n setWidth: (width) => set((state) => ({ ...state, width })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(storageKey),\n storage: createJSONStorage(() => {\n if (typeof globalThis.localStorage === \"undefined\") {\n return createNoopStorage();\n }\n\n return globalThis.localStorage;\n }),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n};\n\nconst sidebarStoreRegistry = new Map<string, ReturnType<typeof createSidebarStore>>();\n\nexport const getSidebarStore = (storageKey: string, initialState?: Partial<SidebarSnapshot>) => {\n const existingStore = sidebarStoreRegistry.get(storageKey);\n\n if (existingStore) {\n return existingStore;\n }\n\n const store = createSidebarStore({ storageKey, initialState });\n sidebarStoreRegistry.set(storageKey, store);\n\n return store;\n};\n\nexport const useSidebarStore = <T>(\n storageKey: string,\n selector: (state: SidebarState) => T,\n initialState?: Partial<SidebarSnapshot>,\n) => {\n const store = getSidebarStore(storageKey, initialState);\n return useStore(store, selector);\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface SidebarFooterProps {\n children?: ReactNode;\n}\n\nexport const SidebarFooter = (props: SidebarFooterProps) => {\n const { children } = props;\n\n if (!children) {\n return null;\n }\n\n return (\n <Box bg=\"bg\" position=\"sticky\" bottom=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n","import { HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { PANEL_HEADER_HEIGHT } from \"../panel-header.constants\";\n\ninterface SidebarHeaderProps {\n children?: ReactNode;\n}\n\nexport const SidebarHeader = (props: SidebarHeaderProps) => {\n const { children } = props;\n\n return (\n <HStack\n data-testid=\"sidebar-header\"\n justify=\"space-between\"\n align=\"center\"\n minH={PANEL_HEADER_HEIGHT}\n bg=\"bg\"\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n gap=\"0\"\n >\n <HStack minW=\"0\" flex=\"1\">\n {children}\n </HStack>\n </HStack>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef } from \"react\";\nimport { usePanelSidebarRegistration } from \"../panel-sidebar-registration-context\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport { useSidebarStore } from \"./sidebar.store\";\nimport type { SidebarProps } from \"./sidebar.types\";\nimport { SidebarFooter } from \"./sidebar-footer\";\nimport { SidebarHeader } from \"./sidebar-header\";\n\nconst DEFAULT_WIDTH = 240;\nconst DEFAULT_MIN_WIDTH = 200;\nconst DEFAULT_MAX_WIDTH = 480;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveInitialWidth = (width?: string | number, defaultWidth = DEFAULT_WIDTH) => {\n if (typeof width === \"number\") return width;\n if (typeof width === \"string\") {\n const parsed = parseInt(width, 10);\n if (!Number.isNaN(parsed)) return parsed;\n }\n return defaultWidth;\n};\n\nexport const Sidebar = (props: SidebarProps) => {\n const {\n storageKey,\n sections,\n activeNodeId,\n header,\n footer,\n width,\n closable = true,\n emptyLabel = \"No items available.\",\n defaultExpandedSections,\n linkComponent,\n onNavigate,\n onOpenChange,\n resizable = true,\n defaultWidth,\n minWidth = DEFAULT_MIN_WIDTH,\n maxWidth = DEFAULT_MAX_WIDTH,\n virtualize = false,\n } = props;\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n\n const initialWidth = resolveInitialWidth(width, defaultWidth);\n const initialState = {\n ...(defaultExpandedSections ? { expandedSections: defaultExpandedSections } : {}),\n width: initialWidth,\n };\n\n const open = useSidebarStore(storageKey, (state) => state.open, initialState);\n const persistedWidth = useSidebarStore(storageKey, (state) => state.width, initialState);\n const expandedSections = useSidebarStore(storageKey, (state) => state.expandedSections, initialState);\n const expandedNodes = useSidebarStore(storageKey, (state) => state.expandedNodes, initialState);\n const openSidebar = useSidebarStore(storageKey, (state) => state.openSidebar, initialState);\n const closeSidebar = useSidebarStore(storageKey, (state) => state.closeSidebar, initialState);\n const toggleSection = useSidebarStore(storageKey, (state) => state.toggleSection, initialState);\n const toggleNode = useSidebarStore(storageKey, (state) => state.toggleNode, initialState);\n const setStoreWidth = useSidebarStore(storageKey, (state) => state.setWidth, initialState);\n\n useEffect(() => {\n onOpenChange?.(open);\n }, [onOpenChange, open]);\n\n const effectiveWidth = clamp(persistedWidth ?? initialWidth, minWidth, maxWidth);\n const setOpen = (nextOpen: boolean) => {\n if (nextOpen) openSidebar();\n else closeSidebar();\n };\n const managedByPanelLayout = usePanelSidebarRegistration({\n open,\n resizable,\n width: effectiveWidth,\n minWidth,\n maxWidth,\n onWidthChange: setStoreWidth,\n onOpenChange: setOpen,\n });\n\n if (!open && closable) {\n return null;\n }\n\n const widthCss = resizable ? `${effectiveWidth}px` : (width ?? `${initialWidth}px`);\n\n return (\n <Flex\n as=\"aside\"\n data-testid=\"sidebar\"\n direction=\"column\"\n position=\"relative\"\n h=\"100%\"\n w={managedByPanelLayout ? \"full\" : widthCss}\n minW={managedByPanelLayout ? \"0\" : widthCss}\n maxW={managedByPanelLayout ? \"none\" : widthCss}\n flexShrink={0}\n borderRightWidth=\"1px\"\n borderRightColor=\"border.muted\"\n bg=\"bg\"\n >\n <SidebarHeader>{header}</SidebarHeader>\n\n <ScrollArea\n flex=\"1\"\n mt=\"lg\"\n viewportRef={viewportRef}\n viewportProps={{ display: \"block\", style: { overflowX: \"hidden\" } }}\n contentProps={{ style: { minWidth: \"100%\", width: \"100%\" } }}\n >\n <Box w=\"full\" minW=\"0\">\n {sections.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"3\">\n {emptyLabel}\n </Text>\n ) : (\n <TreeList\n sections={sections}\n expandedSectionIds={expandedSections}\n expandedNodeIds={expandedNodes}\n activeNodeId={activeNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n virtualize={virtualize}\n scrollRef={viewportRef}\n />\n )}\n </Box>\n </ScrollArea>\n\n <SidebarFooter>{footer}</SidebarFooter>\n </Flex>\n );\n};\n","import { Avatar, Button, HStack, Icon, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, FolderIcon } from \"lucide-react\";\nimport { ListRow } from \"../list-row/list-row\";\n\ninterface SidebarProjectMenuProps {\n name: string;\n projectsLabel: string;\n onSelectProjects: () => void;\n}\n\nexport const SidebarProjectMenu = (props: SidebarProjectMenuProps) => {\n const { name, projectsLabel, onSelectProjects } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button borderRadius=\"0\" variant=\"ghost\" size=\"sm\" width=\"full\" justifyContent=\"flex-start\">\n <HStack gap=\"0\" minW=\"0\" flex=\"1\">\n <Avatar.Root size=\"2xs\">\n <Avatar.Fallback name={name} />\n </Avatar.Root>\n <Text textStyle=\"label/S/medium\" truncate>\n {name}\n </Text>\n </HStack>\n <ChevronDown size={14} />\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"240px\" bg=\"bg\">\n <Menu.Item value=\"projects\" asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id=\"projects\"\n label={projectsLabel}\n icon={<Icon as={FolderIcon} boxSize=\"16px\" />}\n onActivate={onSelectProjects}\n />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Switch as ChakraSwitch } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SwitchProps extends ChakraSwitch.RootProps {\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n rootRef?: React.RefObject<HTMLLabelElement | null>;\n trackLabel?: { on: React.ReactNode; off: React.ReactNode };\n thumbLabel?: { on: React.ReactNode; off: React.ReactNode };\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(props, ref) {\n const { inputProps, children, rootRef, trackLabel, thumbLabel, disabled = false, ...rest } = props;\n const interactiveCursor = disabled ? \"not-allowed\" : \"pointer\";\n\n return (\n <ChakraSwitch.Root ref={rootRef} disabled={disabled} cursor={interactiveCursor} {...rest}>\n <ChakraSwitch.HiddenInput ref={ref} {...inputProps} />\n <ChakraSwitch.Control borderRadius=\"md\" cursor={interactiveCursor}>\n <ChakraSwitch.Thumb borderRadius=\"full\">\n {thumbLabel && (\n <ChakraSwitch.ThumbIndicator fallback={thumbLabel?.off}>{thumbLabel?.on}</ChakraSwitch.ThumbIndicator>\n )}\n </ChakraSwitch.Thumb>\n {trackLabel && <ChakraSwitch.Indicator fallback={trackLabel.off}>{trackLabel.on}</ChakraSwitch.Indicator>}\n </ChakraSwitch.Control>\n {children != null && <ChakraSwitch.Label cursor={interactiveCursor}>{children}</ChakraSwitch.Label>}\n </ChakraSwitch.Root>\n );\n});\n"],"names":["ActivityAvatar","props","$","_c","actor","icon","color","t0","background","t1","undefined","t2","Box","avatarSrc","t3","avatarAlt","name","t4","Avatar","t5","t6","t7","TimestampSeparator","Symbol","for","jsx","ActivityCommentHeader","timestamp","actions","Text","jsxs","Fragment","HStack","ActivityReply","children","rootProps","Stack","ActivityComment","composer","replies","hasReplies","Children","count","ActivityComposer","value","defaultValue","placeholder","variant","minRows","attachLabel","submitLabel","onAttach","onChange","onSubmit","internalValue","setInternalValue","useState","currentValue","isInline","canSubmit","trim","length","handleChange","nextValue","handleSubmit","event","preventDefault","chakra","borderColor","boxShadow","Textarea","outline","currentTarget","Spacer","Tooltip","IconButton","Icon","Paperclip","ArrowUp","EventSeparator","ActivityEvent","iconColor","iconBackground","Timeline","t8","ActivityRoot","ActivityHeader","title","ActivityFeed","ActivityTimeline","Activity","Root","Header","Feed","Event","Comment","Reply","Composer","DEFAULT_RESIZABLE_MIN_WIDTH","AttachedPanel","header","minWidth","rest","width","resizable","resolvedMinWidth","resolvedWidth","Flex","headerVariantStyles","main","h","px","narrow","input","React","forwardRef","ref","filterSearchableMenuItems","items","query","normalizedQuery","toLowerCase","filter","item","label","searchText","Boolean","join","includes","shouldResetSearchableMenuQuery","currentListId","nextListId","resolveActiveListConfig","isShowingParent","parentList","childConfig","filterItems","showSearch","searchPlaceholder","emptyState","contentTestId","closeOnSelect","listId","searchInputBorderProps","SearchableMenu","trigger","maxListHeight","lazyMount","open","positioning","onOpenChange","onFocusOutside","portalled","hasParentList","internalOpen","setInternalOpen","setQuery","activeList","setActiveList","inputRef","useRef","isOpen","config","filteredItems","previousListIdRef","useEffect","current","timeout","setTimeout","focus","clearTimeout","details","handleOpenChange","t9","details_0","find","i","id","onSelect","handleMenuItemSelect","renderIcon","_temp","t10","item_0","description","secondaryLabel","disabled","isDisabled","tooltip","tooltipLabel","buildRowItem","t11","ariaLabel","_temp2","event_0","stopPropagation","_temp3","ListRow","selectedLabel","selectedIcon","ChevronDown","resolvedHeader","shouldShowSeparator","searchInput","InputGroup","Search","Input","event_1","target","_temp4","t12","Menu","t13","t14","T0","Portal","t15","t16","t17","t18","t19","t20","t21","t22","T1","ScrollArea","t23","overscrollBehavior","t24","t25","t26","map","item_1","bg","isSelected","t27","t28","Content","t29","Positioner","t30","t31","event_2","SearchableActionMenu","action","menuItems","emptyMenuLabel","onAction","keyedTooltip","child","RowActions","context","opacity","pointerEvents","endContent","ListRowMenuItemIcon","ListRowMenu","placement","mainAxis","offset","RowContent","isExpanded","showChevron","tone","isDenseVariant","labelTextStyle","descriptionTextStyle","descriptionMarginLeft","bb0","labelColor","descriptionColor","ChevronRight","transform","transition","height","indicator","computePaddingLeft","depth","ListRowContent","nodeId","resolveListRowSizing","hasDescription","rowHeight","minHeight","className","contextMenuItems","draggable","href","isContainer","isNavigable","menuPlacement","navigationIntent","onActivate","onClick","onDragEnd","onDragOver","onDragStart","onDrop","onPointerMove","onToggleExpand","showExpandToggle","asChild","menuOpen","setMenuOpen","dragProps","hasChildren","hasMenuItems","handleActivate","defaultPrevented","handleClick","handleMenuClick","paddingLeft","verticalPadding","activationProps","role","maxWidth","display","alignItems","justifyContent","gap","py","pl","borderRadius","_hover","cursor","overflow","textAlign","textDecoration","rowProps","content","children_0","contextActions","ResourceContextMenu","wrapWithContextMenu","children_1","menuItem","wrapWithMenu","children_2","wrapWithTooltip","children_3","wrap","entry","key","contentMinWidth","contentBackground","linkProps","minW","maxW","textOverflow","whiteSpace","_active","_focus","_focusVisible","Breadcrumb","LinkComponent","separator","separatorGap","linkComponent","index","last","isInteractive","url","itemContent","ChakraBreadcrumb","contextMenuActions","BubbleButton","containerProps","button","BubblePanel","menu","onClose","closeLabel","onPopOut","popOutLabel","testId","SquareArrowOutUpRight","Minus","defaultThemePreferences","mode","isThemePreference","themePreferences","some","theme","getThemePreferenceMode","preference","getThemePreferenceClassName","getThemePreferenceClassNames","THEME_TOKEN_PATHS_ATTRIBUTE","getThemePreferenceCssVariableName","tokenPath","replaceAll","removeThemeTokens","el","tokens","Object","keys","style","removeProperty","removeTrackedThemeTokens","tokenPaths","getAttribute","split","setAttribute","applyThemeTokens","entries","setProperty","applyThemePreference","document","root","documentElement","body","option","previousTheme","previousPreference","classList","remove","add","colorScheme","STORAGE_KEY","ThemePreferenceContext","createContext","getDefaultThemePreference","getInitialThemePreference","window","stored","localStorage","getItem","prefersDark","matchMedia","matches","ThemePreferenceProvider","initialPreference","themePreference","setThemePreference","setItem","prev","nextMode","toggleThemePreference","useThemePreference","useContext","Error","customTheme","base","inherit","rules","colors","isMonacoTheme","EDITOR_THEME_NAME","useEditorTheme","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","monaco","editor","defineTheme","setTheme","monaco_0","CodeEditor","defaultCode","code","showLineNumbers","isEditable","language","disableScroll","applyEditorTheme","enabled","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","tabSize","minimap","fontSize","readOnly","lineNumbers","options","languages","typescript","typescriptDefaults","setCompilerOptions","JsxEmit","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","Editor","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","DiffEditor","contentPlaceholderBackgroundImage","ContentPlaceholder","backgroundClip","backgroundImage","Label","resolveSessionIndicatorIcon","status","CircleCheck","CircleAlert","CircleStop","CirclePause","ClockAlert","CircleDashed","resolveSessionIndicatorColor","SessionIndicator","boxSize","ATTEMPT_STATUS_COLOR_ALIASES","amber","CHAKRA_COLOR_PALETTES","Set","resolveWorkspaceIcon","workspaceType","GitCommitIcon","GitBranchIcon","resolveAttemptStatusColor","startsWith","resolvedColor","has","buildAttemptStatusTooltip","attemptStatus","handleIconClick","handleBadgeClick","LeadingSessionIndicator","sessionStatus","onSessionIndicatorClick","sessionTooltip","WorkspaceTypeIndicator","initializing","shorthand","WorkspaceTypeIcon","Spinner","WorkspaceAttemptStatusIndicator","WorkspaceDiffTotals","diffAdditions","diffDeletions","DiffBubble","WorkspaceDropdownTrigger","hasMultipleWorkspaces","onDropdownClick","WorkspaceBadge","showLeadingSessionIndicator","backgroundColor","TAG_OPTION_ICON_MAP","circle","Circle","bug","Bug","sparkles","Sparkles","BookOpen","wrench","Wrench","gauge","Gauge","AlertTriangle","star","Star","flag","Flag","flame","Flame","lightbulb","Lightbulb","shield","Shield","eye","Eye","clock","Clock","CheckCircle","getTagOptionIcon","TagBadge","onValueChange","selectedOption","displayLabel","Badge","option_0","optionIcon","Check","DataRendererCard","ticketId","parentPath","badges","tagBadges","workspaceBadge","onTagChange","hasBadges","Wrap","tag","newValue","tagName","badge","DataRendererBoard","columns","selectedItemId","onMoveItem","onMoveToGroup","onCreateStart","onColumnAction","activeColumn","setActiveColumn","activeGroup","setActiveGroup","handleDragStart","handleDragEnd","columnId","dataTransfer","dropEffect","handleDragOver","contains","relatedTarget","handleDragLeave","columnId_0","itemId_0","getData","itemId","handleDrop","pb","minH","column","borderLeft","canDragIn","ColumnHeader","margin","spaceY","ps","pe","groups","group","groupId","GroupSection","canDragOut","event_3","event_4","event_5","beforeItemId","itemId_1","event_6","event_7","itemId_2","cardProps","isDropTarget","onGroupDragOver","onGroupDragLeave","onGroupDrop","expanded","setExpanded","canCreate","Plus","MoreHorizontal","setData","effectAllowed","v","DEFAULT_DATA_RENDERER_SETTINGS","viewMode","columnGrouping","rowGrouping","ordering","field","direction","displayProperties","DEFAULT_GROUPING_OPTIONS","DEFAULT_ORDERING_OPTIONS","DEFAULT_DISPLAY_PROPERTY_OPTIONS","isTagKey","toTagName","slice","FALLBACK_LABELS","assignee","normalize","fallback","getTagValue","ticket","tags","getGroupingValue","grouping","compareGroupKey","a","b","localeCompare","numeric","orderByDirection","orderRows","tickets","tagDefinitions","sort","left","Date","updatedAt","getTime","right","def","d","leftVal","rightVal","toOptionIndex","findIndex","o","leftIndex","rightIndex","groupRows","knownColumnKeys","groupedByColumn","Map","set","get","columnKey","columnTickets","rows","groupedByRow","rowKey","rowTickets","getTicketFilterValues","category","filterRows","filters","activeFilters","values","every","countFilterValues","counts","toTitleCase","chunk","toUpperCase","collectCategoryOptions","t","buildDefaultFilterCategories","categories","categoryId","push","toBadges","property","statusColor","toLocaleDateString","toTagBadges","displayKey","optionDef","buildTagOptions","orderGroupingOptions","noGrouping","resolveSubGroupingOptions","resolveListDropTargetColumnKey","resolveKnownColumnKeys","activeValues","omitFilterCategory","next","renderLabel","hasTicketId","renderEndContent","hasCount","countBadge","hasAssignee","assigneeIcon","hasDate","date","buildListRowItem","statusIcon","DataRendererList","onItemClick","table","useReactTable","data","state","onExpandedChange","getSubRows","row","getCoreRowModel","getExpandedRowModel","getRowId","getRowModel","TicketListRow","canExpand","getCanExpand","rowItem","toggleExpanded","onDropTicket","getIsExpanded","SectionLabel","viewModeOptions","List","KanbanSquare","Dropdown","T2","T3","orderedOptions","hasNoGrouping","Button","DisplayMenu","settings","groupingOptions","orderingOptions","displayPropertyOptions","onViewModeChange","onColumnGroupingChange","onRowGroupingChange","onOrderingFieldChange","onSortDirectionToggle","onDisplayPropertyToggle","triggerRef","contentRef","setOpen","closeOnOutsidePointerDown","Node","addEventListener","removeEventListener","Settings2","ViewModeIcon","active","Separator","ArrowDownUp","isActive","Popover","getActiveFilterCount","reduce","sum","FilterMenu","countsByCategory","onToggleFilterValue","onClearFilter","onClearAll","activeCategoryId","setActiveCategoryId","activeCategory","activeFilterCount","Filter","category_0","selectedValues","checked","WORKSPACE_STORE_NAMESPACE","toStorageName","storageKey","DEFAULT_SNAPSHOT","createNoopStorage","removeItem","toggleValue","createDataRendererStore","initialState","snapshot","createStore","persist","setViewMode","setColumnGrouping","setRowGrouping","setOrdering","setOrderingField","setDisplayProperties","toggleSortDirection","toggleDisplayProperty","setFilter","toggleFilterValue","currentValues","nextValues","nextFilters","clearFilter","clearAllFilters","reset","version","migrate","persisted","labels","p","storage","createJSONStorage","globalThis","partialize","workspaceStoreRegistry","getDataRendererStore","existingStore","store","useDataRendererStore","selector","useStore","buildListItems","visibleTickets","grouped","onTicketClick","onMoveTicket","toListItem","draggedTicketId","targetColumnKey","beforeTicketId","toGroupListItem","parent","DataRenderer","selectedTicketId","groupingOptionsProp","orderingOptionsProp","displayPropertyOptionsProp","filterCategories","knownColumnKeysProp","emptyTitle","emptyDescription","onCreateTicket","getBoardColumnConfig","hideToolbar","toolbarLeading","tagOptions","_temp5","_temp6","_temp7","_temp8","_temp9","_temp0","_temp1","categoryOptions","fromEntries","listItems","toBoardItems","tickets_0","boardColumns","columnConfig","orderedTickets","targetColumnId","ticketId_0","targetGroupKey","context_0","EmptyState","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","state_8","state_9","DeleteConfirmationModal","isDeleting","setIsDeleting","headline","buttonText","notificationText","onDelete","handleDelete","Dialog","CloseButton","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","getDiffLineCount","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","path","fileName","pop","endsWith","createDiffCardBodyModel","diff","filePath","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","kind","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","DiffCardBody","model","LargeDiffPlaceholder","DeferredDiffLoad","actionLabel","isLoadingDiff","LoadingDiffContent","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","requestedPath","resolveRequestedDiffPath","useDiffContentLoader","setLoadingDiff","setRequestedPath","setLoadError","loadDiff","DiffCard","onToggleExpanded","DiffCardHeader","change","Grid","getDiffPath","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","ITEM_GAP_HEIGHT","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","buildInitialCollapsedPaths","diffs","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","collapsedPaths","delete","resolveCollapsedPathsForSelectedDiff","selectedDiffPath","DiffDrawer","onSelectDiffPath","onExpansionStateChange","expansionCommand","scrollRef","reportedExpansionStateRef","setCollapsedPaths","largeDiffOptInPaths","setLargeDiffOptInPaths","virtualizer","useVirtualizer","getScrollElement","estimateSize","getItemKey","overscan","scrollToIndex","align","behavior","expansionState","allExpanded","size","allCollapsed","reportedExpansionState","showFullDiff","virtualItems","getVirtualItems","overflowAnchor","getTotalSize","virtualItem","measureElement","top","start","RESIZE_SEPARATOR_HOVER_STYLE","_before","RESIZE_HANDLE_WIDTH","ResizeHandle","bounds","contentPanelId","resizablePanelId","resizeLabel","resolvedPanelWidth","showResizeSeparator","onResizeKeyDown","onResizeStart","maxSize","Math","round","position","bottom","insetInlineStart","w","FALLBACK_ROOT_WIDTH","KEYBOARD_RESIZE_STEP","MIN_COLLAPSE_THRESHOLD_PX","MAX_COLLAPSE_THRESHOLD_PX","clamp","min","max","resolveRootWidth","rootWidth","resolveCollapseThreshold","minSizePx","resolveResizableBoundsPx","maxFromContent","contentMinSizePx","configuredMax","maxSizePx","minSize","getElementWidth","element","getBoundingClientRect","applyPanelWidthToElement","panel","flexBasis","flexGrow","flexShrink","clearPanelInlineStyles","ResizableSplitLayout","contentPanel","controlledCollapsed","onCollapsedChange","onSizeChange","resizablePanel","resizableSide","defaultSizePx","collapsed","collapsible","useId","rootRef","resizablePanelRef","contentPanelRef","cleanupDragRef","lastWidthRef","panelWidth","setPanelWidth","setRootWidth","internalCollapsed","setInternalCollapsed","collapseThresholdPx","updateRootWidth","ResizeObserver","observer","observe","disconnect","applyPanelWidth","width_0","rootWidth_0","nextBounds","nextWidth","commitPanelWidth","nextCollapsed","setCollapsed","resizeHandle","rootWidth_1","bounds_0","startX","clientX","startWidth","previousCursor","previousUserSelect","userSelect","nextWidth_0","nextCollapsed_0","animationFrame","setDraggingPanelState","schedulePanelWidth","requestAnimationFrame","handlePointerMove","moveEvent","rawWidth","cleanup","hasPointerCapture","pointerId","releasePointerCapture","cancelAnimationFrame","setPointerCapture","once","handleResizeStart","direction_0","width_1","handleResizeKeyDown","resizablePanelNode","contentPanelNode","resizeTrigger","normalizeChangedFilePath","segment","sortNodes","nodes","type","forEach","node","dedupePaths","paths","Array","from","buildFlatTree","buildChangedFilesTree","treeById","rootNodes","segments","parentNode","currentPath","isFile","existingNode","nextNode","collectExpandedFolderIds","folderIds","visit","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","isInList","isActiveNode","activeNodeId","isArray","isNavigableNode","getNodeChildren","hasExpandableChildren","TreeListNodeRow","sectionId","level","expandedNodeIds","rowVariant","nodeGap","onNavigate","onToggleNode","renderChildren","canLink","intent","childNode","TreeListSectionActions","TreeListSectionHeader","section","onToggle","appendVisibleNodeRows","buildVirtualRows","sections","expandedSectionIds","VirtualTreeList","onToggleSection","TreeList","sectionGap","virtualize","sectionExpanded","changeLabels","added","copied","deleted","permissionChange","renamed","changeColors","getFilePathParts","lastSlashIndex","lastIndexOf","dirPath","renderFileLabel","toTreeListNodes","onSelectPath","resolveFileIcon","changeByPath","fileIcon","FileText","FileListPanel","onSearchQueryChange","onToggleFolder","fileTree","overflowX","buildChangeByPath","sumDiffStats","total","buildFilteredDiffs","normalizedSearchQuery","matchingDiffs","orderByPath","leftOrder","Number","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","MenuItemContent","DiffViewerLoading","Skeleton","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","filteredDiffPathKey","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasChangedFiles","hasDiffs","hasExpandableItems","resolvedSelectedPath","totalDiff","diffPaths","filePaths","filteredDiffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","isExpandAllDisabled","isCollapseAllDisabled","filePaths_0","tree","diffPaths_0","filePaths_1","expandAllFilesAndDiffs","collapseAllFilesAndDiffs","path_0","current_1","selectChangedFilePath","PanelLeftClose","PanelLeftOpen","ListTree","Rows2","SquareSplitHorizontal","ChevronsUpDown","ChevronsDownUp","t32","diffPanel","t33","current_0","ErrorBoundary","Component","error","getDerivedStateFromError","componentDidCatch","info","console","handleReset","setState","onReset","render","ErrorFallback","message","AbsoluteCenter","AlertMessage","HorizontalMenuStack","borderBottomWidth","SimpleCard","SimpleCardBody","IntegrationCard","ItemSection","defaultOpen","Collapsible","e","PANEL_HEADER_HEIGHT","PanelSidebarRegistrationContext","usePanelSidebarRegistration","registration","setRegistration","onWidthChange","toaster","createToaster","pauseOnPageIdle","duration","Toaster","ChakraToaster","mdDown","toast","Toast","md","noop","DEFAULT_SIDEBAR_REGISTRATION","PanelLayout","sidebar","errorLabel","sidebarRegistration","setSidebarRegistration","sidebarPanel","Outlet","PanelSectionLayout","getNoticeKey","notice","getNoticeTitle","OpenSourceNoticesScreen","notices","productName","productVersion","generatedAt","license","copyright","homepageUrl","sourceUrl","Link","attribution","DEFAULT_PALETTE_ASSET_LIMIT","getSearchableText","hasInputPrefix","inputPrefix","trimStart","resolvePaletteMode","modes","fallbackMode","getPaletteEffectiveQuery","modeId","candidate","limitDefaultAssetEntries","limit","assetType","filterPaletteEntries","effectiveQuery","getEffectiveQuery","filteredEntries","defaultAssetLimit","GROUP_ROW_HEIGHT","ENTRY_ROW_HEIGHT","INITIAL_VIEWPORT_HEIGHT","buildEntryItem","shortcut","buildRows","previousEntry","entryIndex","getActiveRowIndex","activeIndex","PaletteList","emptyLabel","onHover","activeRowIndex","initialRect","virtualRow","resolveStateValue","Palette","initialQuery","initialActiveIndex","resetKey","inputIcon","footerStart","footerEnd","filterEntries","onActiveEntryChange","onEscape","setQueryState","setActiveIndex","setupRef","activeEntry","resolvedInputIcon","activeMode","resolvedPlaceholder","nextQuery","runActiveEntry","closePalette","previousSetup","setSelectionRange","entryCount","handleEscape","handleKeyDown","hasFooter","splitShortcutStep","step","part","getShortcutDisplayParts","binding","PaletteShortcut","steps","stepIndex","part_0","partIndex","Kbd","ParamEditorLabel","CircleHelp","ColorInput","hideLabel","fullWidth","setValue","timeoutRef","nextColor","scheduleChange","newColor","parseColor","toString","ColorPicker","picker","DateInput","e_1","e_0","blur","e_2","NumberInputRoot","ChakraNumberInput","NumberInputField","Scrubber","Slider","ChakraSlider","NumberInput","hideSlider","showSlider","useFullWidthLayout","isNaN","valueAsNumber","next_0","details_1","details_2","SelectionInput","multiSelect","optionId","selectedOptions","id_0","displayItems","remaining","o_0","getDisplayText","handleSelect","updatedValues","opt_0","opt","opt_1","TextInput","singleLine","e_3","resolveDefaultValue","defaultValues","paramId","InputGroupComponent","defaultCollapsed","useDisclosure","param","renderNumberParam","param_0","renderTextParam","param_1","renderSelectionParam","param_2","renderDateParam","param_3","renderColorParam","param_4","renderPropertyParam","param_5","renderParam","ChevronLeft","params","ParamEditor","getEntryIcon","isDirectory","isGitRepo","FolderOpen","Folder","RepoPickerListEntry","selectedPathSet","onEntryClick","isAlreadySelected","searchInputFocusVisibleProps","outlineColor","outlineOffset","focusInlinePickerOption","querySelectorAll","currentIndex","indexOf","activeElement","nextIndex","RepoPickerDialog","selectedPaths","isLoading","isSelectDisabled","onSelectHomeDirectory","onSelectParentDirectory","searchScope","Home","ChevronUp","t34","t35","t36","t37","t38","t39","padding","t40","t41","t42","Body","t43","t44","t45","t46","t47","t48","expandedSections","expandedNodes","SIDEBAR_STORE_NAMESPACE","toggleId","getPersistedSnapshot","createSidebarStore","openSidebar","closeSidebar","toggleSidebar","toggleSection","toggleNode","setSectionExpanded","setNodeExpanded","setWidth","sidebarStoreRegistry","getSidebarStore","useSidebarStore","SidebarFooter","SidebarHeader","DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","resolveInitialWidth","defaultWidth","parsed","parseInt","Sidebar","footer","closable","defaultExpandedSections","viewportRef","initialWidth","persistedWidth","setStoreWidth","effectiveWidth","nextOpen","managedByPanelLayout","widthCss","SidebarProjectMenu","projectsLabel","onSelectProjects","FolderIcon","Switch","inputProps","thumbLabel","trackLabel","interactiveCursor","ChakraSwitch","off","on"],"mappings":"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"}