@pstdio/ui 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data-renderer/data-renderer-content.d.ts +20 -0
- package/dist/components/data-renderer/data-renderer-list.d.ts +8 -0
- package/dist/components/data-renderer/data-renderer-story-fixtures.d.ts +13 -0
- package/dist/components/data-renderer/data-renderer.d.ts +3 -0
- package/dist/components/diff-viewer/diff-drawer-empty-state.d.ts +1 -0
- package/dist/components/diff-viewer/diff-drawer-height.d.ts +10 -0
- package/dist/components/diff-viewer/diff-drawer-scroll.d.ts +47 -0
- package/dist/components/diff-viewer/diff-drawer.d.ts +2 -7
- package/dist/components/diff-viewer/use-selected-diff-scroll.d.ts +19 -0
- package/dist/components/icon-color-picker.d.ts +17 -1
- package/dist/components/list-row/list-row.types.d.ts +2 -0
- package/dist/components/palette.d.ts +1 -0
- package/dist/components/param-editor/index.d.ts +2 -0
- package/dist/components/tag-editor/index.d.ts +4 -0
- package/dist/components/tag-editor/tag-editor-row.d.ts +19 -0
- package/dist/components/tag-editor/tag-editor.d.ts +2 -0
- package/dist/components/{status-option-editor/status-option-editor.types.d.ts → tag-editor/tag-editor.types.d.ts} +14 -9
- package/dist/components/tag-editor/tag-settings-panel.d.ts +24 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4154 -3736
- package/dist/index.js.map +1 -1
- package/dist/theme/recipes/editable.d.ts +46 -1
- package/dist/{theme-qP4YOZ2R.js → theme-DOFdi_Ir.js} +63 -17
- package/dist/theme-DOFdi_Ir.js.map +1 -0
- package/dist/theme.js +1 -1
- package/package.json +2 -2
- package/dist/components/status-option-editor/index.d.ts +0 -2
- package/dist/components/status-option-editor/status-option-editor.d.ts +0 -2
- package/dist/components/status-option-editor/status-option-row.d.ts +0 -16
- package/dist/theme-qP4YOZ2R.js.map +0 -1
- /package/dist/components/{param-editor-color-input.d.ts → param-editor/color-input.d.ts} +0 -0
- /package/dist/components/{param-editor-date-input.d.ts → param-editor/date-input.d.ts} +0 -0
- /package/dist/components/{param-editor-horizontal-text-input.d.ts → param-editor/horizontal-text-input.d.ts} +0 -0
- /package/dist/components/{param-editor-input-group.d.ts → param-editor/input-group.d.ts} +0 -0
- /package/dist/components/{param-editor-number-input.d.ts → param-editor/number-input.d.ts} +0 -0
- /package/dist/components/{param-editor-horizontal.d.ts → param-editor/param-editor-horizontal.d.ts} +0 -0
- /package/dist/components/{param-editor-label.d.ts → param-editor/param-editor-label.d.ts} +0 -0
- /package/dist/components/{param-editor.d.ts → param-editor/param-editor.d.ts} +0 -0
- /package/dist/components/{param-editor.types.d.ts → param-editor/param-editor.types.d.ts} +0 -0
- /package/dist/components/{param-editor-selection-input.d.ts → param-editor/selection-input.d.ts} +0 -0
- /package/dist/components/{param-editor-text-input.d.ts → param-editor/text-input.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/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-content.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/browser-storage.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/data-renderer-card.tsx","../src/components/data-renderer/data-renderer-board.tsx","../src/components/data-renderer/types.ts","../src/components/data-renderer/data-renderer-helpers.ts","../src/components/data-renderer/data-renderer-grouping.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/use-resolved-attributes.ts","../src/components/data-renderer/data-renderer-toolbar.tsx","../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-model.ts","../src/components/tree-list/tree-list-node-row.tsx","../src/components/tree-list/tree-list-section-header.tsx","../src/components/tree-list/tree-list-reorder.ts","../src/components/tree-list/tree-list-sortable.tsx","../src/components/tree-list/use-tree-list-keyboard-navigation.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/icon-color-picker.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/status-option-editor/status-option-row.tsx","../src/components/status-option-editor/status-option-editor.tsx","../src/components/switch.tsx","../src/components/tab-strip/tab-visibility.store.ts","../src/components/tree-list/tree-list-visibility-filter.ts","../src/components/tab-strip/tab-visibility-filter.ts","../src/components/tree-list/tree-list-order.store.ts","../src/components/tree-list/tree-list-order-filter.ts","../src/components/tree-list/tree-list-visibility.store.ts","../src/utils/prism.ts"],"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\n value={item.id}\n disabled={item.disabled || item.readOnly}\n onClick={() => {\n if (!item.readOnly) item.onAction?.();\n }}\n >\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, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowItem, ListRowProps, RowContentProps } from \"./list-row.types\";\nimport { RowActions } from \"./list-row-actions\";\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 <Icon\n as={ChevronRight}\n boxSize=\"12px\"\n transform={isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 120ms ease\"\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\" color={labelColor}>\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\nexport const 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","import { Box, HStack, Icon, Menu, Portal, Stack, 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\n key={item.id}\n value={item.id}\n disabled={item.disabled || item.readOnly}\n _disabled={item.readOnly ? { opacity: 1, cursor: \"default\" } : undefined}\n onClick={() => {\n if (!item.readOnly) onSelect(item);\n }}\n >\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\" alignItems=\"center\">\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" alignItems={item.description ? \"flex-start\" : \"center\"}>\n <ListRowMenuItemIcon item={item} />\n <Stack gap=\"0\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" truncate>\n {item.label}\n </Text>\n {item.description ? (\n <Text textStyle=\"label/XS\" color=\"fg.menu-item.secondary\" truncate>\n {item.description}\n </Text>\n ) : null}\n </Stack>\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 { chakra, Icon } from \"@chakra-ui/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 } from \"./list-row.types\";\nimport { ListRowContent } from \"./list-row-content\";\nimport { ListRowMenu } from \"./list-row-menu\";\n\nconst computePaddingLeft = (depth: number) => {\n if (depth <= 0) return undefined;\n return `calc(var(--chakra-spacing-1) + ${depth} * 12px)`;\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 \"aria-expanded\": showChevron ? isExpanded : undefined,\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\ninterface BreadcrumbItemContentProps {\n item: BreadcrumbItem;\n isCurrent: boolean;\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\ninterface BreadcrumbSeparatorProps {\n separator?: React.ReactNode;\n}\n\nconst isInteractiveItem = (item: BreadcrumbItem) => Boolean(item.url || item.onClick);\n\nconst BreadcrumbItemLink = (props: BreadcrumbItemContentProps) => {\n const { item, isCurrent, linkComponent: LinkComponent } = props;\n\n if (isCurrent && !isInteractiveItem(item)) {\n return <ChakraBreadcrumb.CurrentLink {...linkProps}>{item.title}</ChakraBreadcrumb.CurrentLink>;\n }\n\n if (item.url && LinkComponent) {\n return (\n <ChakraBreadcrumb.Link asChild {...linkProps}>\n <LinkComponent to={item.url}>{item.title}</LinkComponent>\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.url) {\n return (\n <ChakraBreadcrumb.Link href={item.url} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.onClick) {\n return (\n <ChakraBreadcrumb.Link as=\"button\" type=\"button\" onClick={item.onClick} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n return <ChakraBreadcrumb.Link {...linkProps}>{item.title}</ChakraBreadcrumb.Link>;\n};\n\nconst BreadcrumbItemContent = (props: BreadcrumbItemContentProps) => {\n const { item } = props;\n const content = <BreadcrumbItemLink {...props} />;\n\n if (!item.contextMenuActions?.length) return content;\n\n return (\n <ResourceContextMenu actions={item.contextMenuActions} positioning={{ placement: \"bottom-start\" }}>\n {content}\n </ResourceContextMenu>\n );\n};\n\nconst BreadcrumbSeparator = (props: BreadcrumbSeparatorProps) => {\n const { separator } = props;\n\n if (separator === undefined) {\n return <ChakraBreadcrumb.Separator flexShrink={0} />;\n }\n\n return <ChakraBreadcrumb.Separator flexShrink={0}>{separator}</ChakraBreadcrumb.Separator>;\n};\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 isCurrent = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n <ChakraBreadcrumb.Item minW=\"0\" flexShrink={isCurrent ? 1 : 0} overflow=\"hidden\">\n <BreadcrumbItemContent item={item} isCurrent={isCurrent} linkComponent={LinkComponent} />\n </ChakraBreadcrumb.Item>\n {isCurrent ? null : <BreadcrumbSeparator separator={separator} />}\n </React.Fragment>\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","interface BrowserStorage {\n getItem: (key: string) => string | null;\n removeItem: (key: string) => void;\n setItem: (key: string, value: string) => void;\n}\n\nconst noopStorage = {\n getItem: () => null,\n removeItem: () => {},\n setItem: () => {},\n} satisfies BrowserStorage;\n\nconst readLocalStorage = () => {\n try {\n return globalThis.localStorage;\n } catch {\n return undefined;\n }\n};\n\nexport const createBrowserStorage = (): BrowserStorage => {\n const storage = readLocalStorage();\n if (!storage) return noopStorage;\n\n return {\n getItem(key) {\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n },\n removeItem(key) {\n try {\n storage.removeItem(key);\n } catch {}\n },\n setItem(key, value) {\n try {\n storage.setItem(key, value);\n } catch {}\n },\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\";\nimport { createBrowserStorage } from \"./browser-storage\";\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 = createBrowserStorage().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\") createBrowserStorage().setItem(STORAGE_KEY, themePreference);\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 { Badge, HStack, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler, ReactNode } from \"react\";\nimport type { WorkspaceBadgeProps } from \"@/components/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/workspace-badge\";\nimport type { AttributeBadge } from \"./data-renderer-helpers\";\n\nexport interface DataRendererCardProps {\n title: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n}\n\nexport const DataRendererCard = (props: DataRendererCardProps) => {\n const {\n title,\n badges = [],\n customSlots = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onDragStart,\n onDragEnd,\n onClick,\n } = props;\n\n const hasBadges = badges.length > 0 || customSlots.length > 0;\n const cursor = draggable ? \"grab\" : onClick ? \"pointer\" : \"default\";\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={{ borderColor: \"border.blue\", boxShadow: \"mid\" }}\n cursor={cursor}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"renderer-card\"\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 {workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}\n </HStack>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <Badge\n key={badge.attributeId}\n variant=\"subtle\"\n colorPalette={badge.color ?? \"gray\"}\n textStyle=\"label/XS/medium\"\n >\n {badge.label}\n </Badge>\n ))}\n {customSlots}\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 createLabel?: 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 size=\"xs\"\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 size=\"xs\"\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={column.createLabel ?? \"Create new row\"}>\n <IconButton\n size=\"2xs\"\n variant=\"outline\"\n onClick={() => onCreateStart(column.id)}\n aria-label={column.createLabel ?? \"Create row\"}\n >\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 type { ReactNode } from \"react\";\n\nexport type ViewMode = \"board\" | \"list\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport const NO_GROUPING = \"none\";\nexport const MANUAL_ORDERING = \"manual\";\n\nexport interface EnumOption {\n value: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\n/**\n * Reactive options source for enum / enum-multi attributes. Mirrors React's\n * useSyncExternalStore contract so a contribution can hand its options off as\n * a live collection (e.g. a project-scoped resource) instead of a frozen\n * array, and the renderer subscribes to it the same way it subscribes to rows.\n */\nexport interface EnumOptionsSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => EnumOption[];\n}\n\nexport type EnumOptions = EnumOption[] | EnumOptionsSource;\n\nexport type AttributeType =\n | { kind: \"enum\"; options: EnumOptions }\n | { kind: \"enum-multi\"; options: EnumOptions }\n | { kind: \"string\" }\n | { kind: \"date\" }\n | { kind: \"number\" }\n | { kind: \"user\" };\n\nexport const isEnumOptionsSource = (options: EnumOptions): options is EnumOptionsSource => !Array.isArray(options);\n\nexport type AttributeKind = AttributeType[\"kind\"];\n\nexport interface AttributeDescriptor {\n id: string;\n label: string;\n type: AttributeType;\n filterable?: boolean;\n groupable?: boolean;\n sortable?: boolean;\n displayable?: boolean;\n editable?: boolean;\n render?: (value: unknown, row: DataRendererRow) => ReactNode;\n compare?: (a: unknown, b: unknown) => number;\n}\n\n/**\n * Reactive source for an entire attribute schema. Mirrors React's\n * useSyncExternalStore contract so consumers (e.g. the workbench's\n * data-renderer bridge) can subscribe and re-resolve when the schema changes\n * — letting a contribution add/remove/edit attributes at runtime without\n * re-registering.\n */\nexport interface AttributesSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => AttributeDescriptor[];\n}\n\nexport const isAttributesSource = (\n attributes: AttributeDescriptor[] | AttributesSource,\n): attributes is AttributesSource => !Array.isArray(attributes);\n\nexport interface DataRendererRow {\n id: string;\n title: string;\n /**\n * Optional navigation handle. When set, the renderer's default click handler\n * routes through the contribution's onRowClick (which typically opens the\n * resource via the workbench).\n */\n resource?: unknown;\n attributes: Record<string, unknown>;\n}\n\nexport interface DataRendererOrdering {\n attributeId: string | typeof MANUAL_ORDERING;\n direction: SortDirection;\n}\n\nexport interface DataRendererSettings {\n viewMode: ViewMode;\n columnGrouping: string | typeof NO_GROUPING;\n rowGrouping: string | typeof NO_GROUPING;\n ordering: DataRendererOrdering;\n displayProperties: string[];\n}\n\nexport type DataRendererFilterState = Record<string, string[]>;\n\nexport const DEFAULT_DATA_RENDERER_SETTINGS: DataRendererSettings = {\n viewMode: \"board\",\n columnGrouping: NO_GROUPING,\n rowGrouping: NO_GROUPING,\n ordering: { attributeId: MANUAL_ORDERING, direction: \"asc\" },\n displayProperties: [],\n};\n\nexport const isEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum\" }> =>\n type.kind === \"enum\";\nexport const isMultiEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum-multi\" }> =>\n type.kind === \"enum-multi\";\n\n/**\n * Look up an attribute by id from a contribution-provided descriptor list.\n * Returns undefined for sentinels (\"none\", \"manual\") or unknown ids.\n */\nexport const findAttribute = (attributes: AttributeDescriptor[], id: string | undefined) => {\n if (!id || id === NO_GROUPING || id === MANUAL_ORDERING) return undefined;\n return attributes.find((attribute) => attribute.id === id);\n};\n","import type { ReactNode } from \"react\";\nimport type {\n AttributeDescriptor,\n AttributeType,\n DataRendererFilterState,\n DataRendererRow,\n DataRendererSettings,\n EnumOption,\n} from \"./types\";\nimport { findAttribute, isEnumOptionsSource, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\n/**\n * Normalize an enum / enum-multi attribute's `options` to a plain `EnumOption[]`.\n * Sources resolve via `getSnapshot()` on every call, so callers naturally see\n * the latest values — pair with `useResolvedAttributes` to also rerender on\n * source change.\n */\nexport const getEnumOptions = (type: AttributeType): EnumOption[] => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return [];\n return isEnumOptionsSource(type.options) ? type.options.getSnapshot() : type.options;\n};\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\n/**\n * Read a typed attribute value out of a row. enum-multi normalizes to an array;\n * single-valued kinds normalize to undefined when missing.\n */\nexport const getAttributeValue = (row: DataRendererRow, descriptor: AttributeDescriptor) => {\n const raw = row.attributes[descriptor.id];\n if (descriptor.type.kind === \"enum-multi\") {\n if (Array.isArray(raw)) return raw.filter((entry): entry is string => typeof entry === \"string\");\n return [] as string[];\n }\n return raw;\n};\n\nexport const getAttributeStringValues = (row: DataRendererRow, descriptor: AttributeDescriptor): string[] => {\n const value = getAttributeValue(row, descriptor);\n if (descriptor.type.kind === \"enum-multi\") return value as string[];\n if (value === null || value === undefined) return [];\n if (typeof value === \"string\") return value === \"\" ? [] : [value];\n if (typeof value === \"number\") return [String(value)];\n return [];\n};\n\nexport const findEnumOption = (type: AttributeType, value: string): EnumOption | undefined => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return undefined;\n return getEnumOptions(type).find((option) => option.value === value);\n};\n\nexport const enumOptionLabel = (type: AttributeType, value: string) => {\n const option = findEnumOption(type, value);\n return option?.label ?? toTitleCase(value);\n};\n\nconst formatDateValue = (value: unknown) => {\n if (typeof value !== \"string\" || value === \"\") return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleDateString();\n};\n\nconst formatNumberValue = (value: unknown) => {\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n if (typeof value === \"string\" && value !== \"\" && !Number.isNaN(Number(value))) return value;\n return null;\n};\n\nconst formatStringValue = (value: unknown) => {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return value === \"\" ? null : value;\n return String(value);\n};\n\nconst formatUserValue = (value: unknown) => formatStringValue(value);\n\nconst summarizeMultiEnum = (values: string[], type: AttributeType) => {\n if (values.length === 0) return null;\n if (values.length <= 2) return values.map((value) => enumOptionLabel(type, value)).join(\", \");\n return `${enumOptionLabel(type, values[0]!)}, ${enumOptionLabel(type, values[1]!)} +${values.length - 2}`;\n};\n\nexport interface AttributeBadge {\n attributeId: string;\n label: string;\n color?: string;\n}\n\nconst renderEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum\") return null;\n const stringValue = typeof value === \"string\" ? value : null;\n if (!stringValue) return null;\n const option = findEnumOption(type, stringValue);\n return { attributeId: descriptor.id, label: option?.label ?? toTitleCase(stringValue), color: option?.color };\n};\n\nconst renderMultiEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum-multi\") return null;\n const values = value as string[];\n const summary = summarizeMultiEnum(values, type);\n if (!summary) return null;\n const firstColor = values[0] ? findEnumOption(type, values[0])?.color : undefined;\n return { attributeId: descriptor.id, label: summary, color: firstColor };\n};\n\nconst isRenderableNode = (value: unknown) => value !== null && value !== undefined && value !== false;\n\n/**\n * Per-type default cell summary used by the card / list end-content. Returns\n * null when the attribute has no displayable value.\n */\nexport const renderAttributeBadge = (descriptor: AttributeDescriptor, row: DataRendererRow): AttributeBadge | null => {\n const type = descriptor.type;\n const value = getAttributeValue(row, descriptor);\n\n if (descriptor.render) return null;\n\n if (type.kind === \"enum\") return renderEnumBadge(descriptor, type, value);\n if (type.kind === \"enum-multi\") return renderMultiEnumBadge(descriptor, type, value);\n\n if (type.kind === \"date\") {\n const formatted = formatDateValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"number\") {\n const formatted = formatNumberValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"user\") {\n const formatted = formatUserValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted, color: \"blue\" } : null;\n }\n\n const formatted = formatStringValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n};\n\nexport const collectDisplayBadges = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): AttributeBadge[] => {\n const badges: AttributeBadge[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n const badge = renderAttributeBadge(descriptor, row);\n if (badge) badges.push(badge);\n }\n return badges;\n};\n\nexport const collectDisplayCustomSlots = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): ReactNode[] => {\n const slots: ReactNode[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor?.render || descriptor.displayable === false) continue;\n\n const slot = descriptor.render(getAttributeValue(row, descriptor), row);\n if (isRenderableNode(slot)) slots.push(slot);\n }\n return slots;\n};\n\nconst collectValuesFromRows = (rows: DataRendererRow[], descriptor: AttributeDescriptor) => {\n const values = new Set<string>();\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) values.add(value);\n }\n return values;\n};\n\nexport interface FilterCategoryView {\n id: string;\n label: string;\n options: { value: string; label: string; color?: string }[];\n}\n\n/**\n * Build the filter menu's category list from the declared attributes. Enum\n * descriptors expose their declared options first; auto-derived values from\n * the data fill in the gaps for string / date / number / user attributes (so\n * filter chips for free-form fields don't require declaring every option).\n */\nexport const buildFilterCategories = (\n attributes: AttributeDescriptor[],\n rows: DataRendererRow[],\n): FilterCategoryView[] => {\n const categories: FilterCategoryView[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.filterable) continue;\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const declared = getEnumOptions(descriptor.type);\n const auto = collectValuesFromRows(rows, descriptor);\n const declaredValues = new Set(declared.map((option) => option.value));\n const undeclared = [...auto]\n .filter((value) => !declaredValues.has(value))\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n\n categories.push({\n id: descriptor.id,\n label: descriptor.label,\n options: [\n ...declared.map((option) => ({ value: option.value, label: option.label, color: option.color })),\n ...undeclared,\n ],\n });\n continue;\n }\n\n const auto = [...collectValuesFromRows(rows, descriptor)]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n categories.push({ id: descriptor.id, label: descriptor.label, options: auto });\n }\n return categories;\n};\n\nexport interface MenuOption {\n value: string;\n label: string;\n}\n\nexport const buildGroupingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: NO_GROUPING, label: \"None\" }];\n for (const descriptor of attributes) {\n if (!descriptor.groupable) continue;\n // enum-multi is intentionally not offered for grouping (one row can hold\n // multiple values; we don't double-render).\n if (descriptor.type.kind === \"enum-multi\") continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildOrderingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: MANUAL_ORDERING, label: \"Manual\" }];\n options.push({ value: \"title\", label: \"Title\" });\n for (const descriptor of attributes) {\n if (!descriptor.sortable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildDisplayPropertyOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.displayable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const resolveSubGroupingOptions = (options: MenuOption[], columnGrouping: string) => {\n if (columnGrouping === NO_GROUPING) return options.filter((option) => option.value === NO_GROUPING);\n return options.filter((option) => option.value === NO_GROUPING || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: string, placement?: { columnKey?: string }) => {\n if (columnGrouping === NO_GROUPING) return \"all\";\n return placement?.columnKey;\n};\n\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filters?: DataRendererFilterState,\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const active = filters?.[columnGrouping];\n if (active && active.length > 0) return active;\n const descriptor = findAttribute(attributes, columnGrouping);\n if (!descriptor) return undefined;\n if (descriptor.type.kind === \"enum\") return getEnumOptions(descriptor.type).map((option) => option.value);\n return undefined;\n};\n\nexport const omitFilterCategory = (filters: DataRendererFilterState, id: string): DataRendererFilterState => {\n const next = { ...filters };\n delete next[id];\n return next;\n};\n\n/**\n * Drop persisted settings entries that reference attribute ids no longer\n * declared by the contribution. Falls back to defaults for missing grouping\n * and ordering attributes so a stale saved view still loads cleanly.\n */\nexport const sanitizeSettings = (\n settings: DataRendererSettings,\n attributes: AttributeDescriptor[],\n): DataRendererSettings => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const validGroupingId = (id: string) => id === NO_GROUPING || knownIds.has(id);\n const validOrderingId = (id: string) => id === MANUAL_ORDERING || id === \"title\" || knownIds.has(id);\n\n const columnGrouping = validGroupingId(settings.columnGrouping) ? settings.columnGrouping : NO_GROUPING;\n const rowGrouping = validGroupingId(settings.rowGrouping) ? settings.rowGrouping : NO_GROUPING;\n const orderingId = validOrderingId(settings.ordering.attributeId) ? settings.ordering.attributeId : MANUAL_ORDERING;\n const displayProperties = settings.displayProperties.filter(validGroupingId);\n\n return {\n viewMode: settings.viewMode,\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId, direction: settings.ordering.direction },\n displayProperties,\n };\n};\n\nexport const sanitizeFilters = (filters: DataRendererFilterState, attributes: AttributeDescriptor[]) => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!knownIds.has(id)) continue;\n if (!values || values.length === 0) continue;\n next[id] = values;\n }\n return next;\n};\n","import {\n enumOptionLabel,\n getAttributeStringValues,\n getAttributeValue,\n getEnumOptions,\n toTitleCase,\n} from \"./data-renderer-helpers\";\nimport {\n type AttributeDescriptor,\n type AttributeType,\n type DataRendererFilterState,\n type DataRendererOrdering,\n type DataRendererRow,\n findAttribute,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface GroupingOptions {\n attributes: AttributeDescriptor[];\n columnGrouping: string;\n rowGrouping: string;\n knownColumnKeys?: string[];\n}\n\ninterface DataRendererRowGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n}\n\ninterface DataRendererColumnGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n subgroups: DataRendererRowGroup[];\n}\n\nconst UNASSIGNED_LABEL = \"Unassigned\";\n\nconst fallbackLabel = (descriptor: AttributeDescriptor) => `No ${descriptor.label.toLowerCase()}`;\n\nconst labelForGroupKey = (key: string, descriptor: AttributeDescriptor | undefined) => {\n if (!descriptor) return key === NO_GROUPING ? \"All\" : key;\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")\n return enumOptionLabel(descriptor.type, key);\n return key;\n};\n\nconst getGroupingKey = (row: DataRendererRow, descriptor: AttributeDescriptor | undefined, columnId: string) => {\n if (columnId === NO_GROUPING) return \"all\";\n if (!descriptor) return \"all\";\n // Grouping by an enum-multi is intentionally rejected at the renderer level\n // (the contribution lists it as non-groupable). Defensive fallback: treat\n // each row as a single bucket using its first value, else fallback.\n if (descriptor.type.kind === \"enum-multi\") {\n const [first] = getAttributeStringValues(row, descriptor);\n return first ?? fallbackLabel(descriptor);\n }\n const [value] = getAttributeStringValues(row, descriptor);\n return value ?? fallbackLabel(descriptor);\n};\n\nconst compareGroupKey = (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true });\n\nconst compareGroupKeyForDescriptor = (a: string, b: string, descriptor: AttributeDescriptor | undefined) => {\n if (descriptor && (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")) {\n const ordered = compareEnumValues(a, b, descriptor.type);\n if (ordered !== 0) return ordered;\n }\n return compareGroupKey(a, b);\n};\n\nconst orderByDirection = (value: number, direction: DataRendererOrdering[\"direction\"]) =>\n direction === \"asc\" ? value : value * -1;\n\nconst compareEnumValues = (left: string | undefined, right: string | undefined, type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return 0;\n const options = getEnumOptions(type);\n const toIndex = (value: string | undefined) => {\n if (value === undefined) return options.length;\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? options.length + 1 : index;\n };\n return toIndex(left) - toIndex(right);\n};\n\nconst compareForDescriptor = (a: DataRendererRow, b: DataRendererRow, descriptor: AttributeDescriptor) => {\n if (descriptor.compare) return descriptor.compare(getAttributeValue(a, descriptor), getAttributeValue(b, descriptor));\n\n const left = getAttributeValue(a, descriptor);\n const right = getAttributeValue(b, descriptor);\n\n if (descriptor.type.kind === \"date\") {\n const leftTime = typeof left === \"string\" ? new Date(left).getTime() : 0;\n const rightTime = typeof right === \"string\" ? new Date(right).getTime() : 0;\n return leftTime - rightTime;\n }\n\n if (descriptor.type.kind === \"number\") {\n const leftNum = typeof left === \"number\" ? left : Number(left ?? 0);\n const rightNum = typeof right === \"number\" ? right : Number(right ?? 0);\n return leftNum - rightNum;\n }\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const [leftValue] = getAttributeStringValues(a, descriptor);\n const [rightValue] = getAttributeStringValues(b, descriptor);\n return compareEnumValues(leftValue, rightValue, descriptor.type);\n }\n\n const leftString = typeof left === \"string\" ? left : String(left ?? \"\");\n const rightString = typeof right === \"string\" ? right : String(right ?? \"\");\n return leftString.localeCompare(rightString, undefined, { numeric: true });\n};\n\nexport const orderRows = (\n rows: DataRendererRow[],\n ordering: DataRendererOrdering,\n attributes: AttributeDescriptor[],\n) => {\n if (ordering.attributeId === MANUAL_ORDERING) return rows;\n\n if (ordering.attributeId === \"title\") {\n return [...rows].sort((a, b) => orderByDirection(a.title.localeCompare(b.title), ordering.direction));\n }\n\n const descriptor = findAttribute(attributes, ordering.attributeId);\n if (!descriptor) return rows;\n\n return [...rows].sort((a, b) => orderByDirection(compareForDescriptor(a, b, descriptor), ordering.direction));\n};\n\nexport const groupRows = (rows: DataRendererRow[], options: GroupingOptions): DataRendererColumnGroup[] => {\n const { attributes, columnGrouping, rowGrouping, knownColumnKeys } = options;\n const columnDescriptor = findAttribute(attributes, columnGrouping);\n const rowDescriptor = findAttribute(attributes, rowGrouping);\n const groupedByColumn = new Map<string, DataRendererRow[]>();\n\n if (knownColumnKeys) {\n for (const key of knownColumnKeys) groupedByColumn.set(key, []);\n }\n\n for (const row of rows) {\n const key = getGroupingKey(row, columnDescriptor, columnGrouping);\n groupedByColumn.set(key, [...(groupedByColumn.get(key) ?? []), row]);\n }\n\n const columnEntries = [...groupedByColumn.entries()].sort(([left], [right]) =>\n compareGroupKeyForDescriptor(left, right, columnDescriptor),\n );\n\n return columnEntries.map(([columnKey, columnRows]) => {\n const label = labelForGroupKey(columnKey, columnDescriptor);\n\n if (rowGrouping === NO_GROUPING) {\n return { key: columnKey, label, rows: columnRows, subgroups: [] };\n }\n\n const groupedByRow = new Map<string, DataRendererRow[]>();\n for (const row of columnRows) {\n const rowKey = getGroupingKey(row, rowDescriptor, rowGrouping);\n groupedByRow.set(rowKey, [...(groupedByRow.get(rowKey) ?? []), row]);\n }\n\n const subgroups = [...groupedByRow.entries()]\n .sort(([left], [right]) => compareGroupKeyForDescriptor(left, right, rowDescriptor))\n .map(([rowKey, rowRows]) => ({\n key: rowKey,\n label: labelForGroupKey(rowKey, rowDescriptor) || toTitleCase(rowKey || UNASSIGNED_LABEL),\n rows: rowRows,\n }));\n\n return { key: columnKey, label, rows: columnRows, subgroups };\n });\n};\n\nconst matchesFilter = (row: DataRendererRow, descriptor: AttributeDescriptor, values: string[]) => {\n const rowValues = getAttributeStringValues(row, descriptor);\n return rowValues.some((value) => values.includes(value));\n};\n\nexport const filterRows = (\n rows: DataRendererRow[],\n filters: DataRendererFilterState,\n attributes: AttributeDescriptor[],\n) => {\n const activeFilters = Object.entries(filters).filter(\n (entry): entry is [string, string[]] => Array.isArray(entry[1]) && entry[1].length > 0,\n );\n if (activeFilters.length === 0) return rows;\n\n return rows.filter((row) =>\n activeFilters.every(([id, values]) => {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor) return true;\n return matchesFilter(row, descriptor, values);\n }),\n );\n};\n\nexport const countFilterValues = (rows: DataRendererRow[], attributeId: string, attributes: AttributeDescriptor[]) => {\n const counts: Record<string, number> = {};\n const descriptor = findAttribute(attributes, attributeId);\n if (!descriptor) return counts;\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) {\n counts[value] = (counts[value] ?? 0) + 1;\n }\n }\n return counts;\n};\n\nexport type { DataRendererColumnGroup, DataRendererRowGroup };\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 DragEvent, 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 { AttributeBadge } from \"./data-renderer-helpers\";\n\nexport interface DataRendererListItem {\n id: string;\n title: string;\n countBadge?: number;\n countColorPalette?: string;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n children?: DataRendererListItem[];\n onClick?: () => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropRow?: (rowId: 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: \"row\" }];\n\nconst createDefaultExpandedState = (items: DataRendererListItem[]) => {\n const expandedState: Record<string, boolean> = {};\n const visit = (item: DataRendererListItem) => {\n if ((item.children?.length ?? 0) === 0) return;\n expandedState[item.id] = true;\n item.children?.forEach(visit);\n };\n\n items.forEach(visit);\n return expandedState;\n};\n\nconst getDropTargetBoxShadow = (isDropTarget: boolean, isGroup: boolean) => {\n if (!isDropTarget) return undefined;\n if (isGroup) return \"inset 3px 0 0 var(--chakra-colors-border-accent)\";\n return \"inset 0 2px 0 var(--chakra-colors-border-accent)\";\n};\n\nconst getRowIsExpanded = (expandedState: ExpandedState, rowId: string) => {\n if (expandedState === true) return true;\n return expandedState[rowId] === true;\n};\n\nconst renderLabel = (item: DataRendererListItem) => (\n <HStack gap=\"xs\" minW=\"0\" maxW=\"full\" flex=\"1\">\n <Text textStyle=\"label/S/regular\" minW=\"0\" truncate>\n {item.title}\n </Text>\n {typeof item.countBadge === \"number\" ? (\n <Badge variant=\"subtle\" size=\"sm\" colorPalette={item.countColorPalette ?? \"gray\"} flexShrink={0}>\n {item.countBadge}\n </Badge>\n ) : null}\n </HStack>\n);\n\nconst renderEndContent = (item: DataRendererListItem) => {\n const hasBadges = (item.badges?.length ?? 0) > 0 || (item.customSlots?.length ?? 0) > 0;\n\n if (!hasBadges) return null;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <Badge\n key={badge.attributeId}\n variant=\"subtle\"\n colorPalette={badge.color ?? \"gray\"}\n textStyle=\"label/XS/medium\"\n >\n {badge.label}\n </Badge>\n ))}\n {item.customSlots}\n </Wrap>\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>(() => createDefaultExpandedState(items));\n const [activeDropTargetId, setActiveDropTargetId] = useState<string | null>(null);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\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 <DataRendererListRow\n key={row.id}\n row={row}\n isExpanded={getRowIsExpanded(expanded, row.id)}\n selectedItemId={selectedItemId}\n activeDropTargetId={activeDropTargetId}\n draggedItemId={draggedItemId}\n onDraggedItemChange={setDraggedItemId}\n onDropTargetChange={setActiveDropTargetId}\n onItemClick={onItemClick}\n />\n ))}\n </Box>\n );\n};\n\ninterface DataRendererListRowProps {\n row: Row<DataRendererListItem>;\n isExpanded: boolean;\n selectedItemId: string | null;\n activeDropTargetId: string | null;\n draggedItemId: string | null;\n onDraggedItemChange: (itemId: string | null) => void;\n onDropTargetChange: (itemId: string | null) => void;\n onItemClick?: (item: DataRendererListItem) => void;\n}\n\nconst DataRendererListRow = (props: DataRendererListRowProps) => {\n const {\n row,\n isExpanded,\n selectedItemId,\n activeDropTargetId,\n draggedItemId,\n onDraggedItemChange,\n onDropTargetChange,\n onItemClick,\n } = props;\n const item = row.original;\n const canExpand = row.getCanExpand();\n const isSelected = item.id === selectedItemId;\n const canDropHere = Boolean(item.onDropRow) && item.id !== draggedItemId;\n const isDropTarget = canDropHere && item.id === activeDropTargetId;\n const rowItem = buildListRowItem(item, canExpand);\n const toggleExpanded = () => row.toggleExpanded(!isExpanded);\n\n const handleActivate = () => {\n if (canExpand) {\n toggleExpanded();\n return;\n }\n item.onClick?.();\n onItemClick?.(item);\n };\n\n const handleDragStart = (event: DragEvent<HTMLDivElement>) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n onDraggedItemChange(item.id);\n onDropTargetChange(null);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n onDropTargetChange(item.id);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n onDropTargetChange(null);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere || !item.onDropRow) return;\n event.preventDefault();\n event.stopPropagation();\n onDropTargetChange(null);\n onDraggedItemChange(null);\n const draggedId = event.dataTransfer.getData(\"text/plain\");\n if (!draggedId || draggedId === item.id) return;\n item.onDropRow(draggedId);\n };\n\n const handleDragEnd = () => {\n onDropTargetChange(null);\n onDraggedItemChange(null);\n };\n\n return (\n <Box\n data-drop-target={isDropTarget ? \"true\" : undefined}\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n bg={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n boxShadow={getDropTargetBoxShadow(isDropTarget, canExpand)}\n draggable={item.draggable}\n transition=\"background 120ms ease, box-shadow 120ms ease\"\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragLeave={item.onDropRow ? handleDragLeave : undefined}\n onDragEnd={handleDragEnd}\n onDrop={handleDrop}\n >\n <ListRow\n {...rowItem}\n variant=\"tree\"\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={isExpanded}\n showExpandToggle={canExpand}\n onActivate={handleActivate}\n onToggleExpand={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 { type MenuOption, resolveSubGroupingOptions } from \"./data-renderer-helpers\";\nimport type { DataRendererSettings } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: DataRendererSettings;\n groupingOptions: MenuOption[];\n orderingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: DataRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onOrderingAttributeIdChange: (value: string) => void;\n onSortDirectionToggle: () => void;\n onDisplayPropertyToggle: (property: string) => 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 = (props: {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n}) => {\n const selectedLabel = props.options.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoneFirst = props.options[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 {props.options.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoneFirst && 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 onOrderingAttributeIdChange,\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) onRowGroupingChange(\"none\");\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.attributeId}\n options={orderingOptions}\n onSelect={onOrderingAttributeIdChange}\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 { FilterCategoryView } from \"./data-renderer-helpers\";\nimport type { DataRendererFilterState } from \"./types\";\n\ninterface FilterMenuProps {\n categories: FilterCategoryView[];\n filters: DataRendererFilterState;\n countsByCategory: Record<string, Record<string, number>>;\n onToggleFilterValue: (attributeId: string, value: string) => void;\n onClearFilter: (attributeId: string) => 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<string>(categories[0]?.id ?? \"\");\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 ref={triggerRef} aria-label=\"Filter rows\" variant=\"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 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 { createBrowserStorage } from \"../../utils/browser-storage\";\nimport { omitFilterCategory } from \"./data-renderer-helpers\";\nimport {\n type DataRendererFilterState,\n type DataRendererSettings,\n DEFAULT_DATA_RENDERER_SETTINGS,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface DataRendererSnapshot {\n settings: DataRendererSettings;\n filters: DataRendererFilterState;\n}\n\ninterface DataRendererStoreInitialState {\n settings?: Partial<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 setOrderingAttributeId: (attributeId: DataRendererSettings[\"ordering\"][\"attributeId\"]) => void;\n setDisplayProperties: (displayProperties: string[]) => void;\n toggleSortDirection: () => void;\n toggleDisplayProperty: (property: string) => void;\n setFilter: (attributeId: string, values: string[]) => void;\n toggleFilterValue: (attributeId: string, value: string) => void;\n clearFilter: (attributeId: string) => void;\n clearAllFilters: () => void;\n reset: () => void;\n}\n\ninterface CreateDataRendererStoreOptions {\n storageKey: string;\n initialState?: DataRendererStoreInitialState;\n}\n\nconst WORKSPACE_STORE_NAMESPACE = \"pstdio/ui/data-renderer\";\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 createSnapshot = (initialState?: DataRendererStoreInitialState): DataRendererSnapshot => ({\n settings: { ...DEFAULT_SNAPSHOT.settings, ...(initialState?.settings ?? {}) },\n filters: initialState?.filters ?? DEFAULT_SNAPSHOT.filters,\n});\n\nconst toggleValue = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\n// Strip the legacy \"tag:\" prefix used before attributes became first-class.\nconst stripTagPrefix = (id: string) => (id.startsWith(\"tag:\") ? id.slice(4) : id);\n\nconst migrateSettings = (settings: Record<string, unknown>): DataRendererSettings => {\n const orderingRaw = settings.ordering as Record<string, unknown> | undefined;\n const orderingId =\n typeof orderingRaw?.attributeId === \"string\"\n ? (orderingRaw.attributeId as string)\n : typeof orderingRaw?.field === \"string\"\n ? stripTagPrefix(orderingRaw.field as string)\n : MANUAL_ORDERING;\n const orderingDirection = (\n orderingRaw?.direction === \"desc\" ? \"desc\" : \"asc\"\n ) as DataRendererSettings[\"ordering\"][\"direction\"];\n\n const columnGrouping =\n typeof settings.columnGrouping === \"string\" ? stripTagPrefix(settings.columnGrouping) : NO_GROUPING;\n const rowGrouping = typeof settings.rowGrouping === \"string\" ? stripTagPrefix(settings.rowGrouping) : NO_GROUPING;\n const displayProperties = Array.isArray(settings.displayProperties)\n ? (settings.displayProperties as unknown[])\n .filter((entry): entry is string => typeof entry === \"string\")\n .map(stripTagPrefix)\n : [];\n\n return {\n viewMode: settings.viewMode === \"list\" ? \"list\" : \"board\",\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId === \"manual\" ? MANUAL_ORDERING : orderingId, direction: orderingDirection },\n displayProperties,\n };\n};\n\nconst migrateFilters = (filters: Record<string, unknown>): DataRendererFilterState => {\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!Array.isArray(values)) continue;\n const stringValues = values.filter((value): value is string => typeof value === \"string\");\n if (stringValues.length === 0) continue;\n next[stripTagPrefix(id)] = stringValues;\n }\n return next;\n};\n\nexport const createDataRendererStore = (options: CreateDataRendererStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = createSnapshot(initialState);\n\n return createStore<DataRendererState>()(\n persist(\n (set) => ({\n ...snapshot,\n setViewMode: (viewMode) => set((state) => ({ ...state, settings: { ...state.settings, viewMode } })),\n setColumnGrouping: (columnGrouping) =>\n set((state) => ({ ...state, settings: { ...state.settings, columnGrouping } })),\n setRowGrouping: (rowGrouping) => set((state) => ({ ...state, settings: { ...state.settings, rowGrouping } })),\n setOrdering: (ordering) => set((state) => ({ ...state, settings: { ...state.settings, ordering } })),\n setOrderingAttributeId: (attributeId) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, ordering: { ...state.settings.ordering, attributeId } },\n })),\n setDisplayProperties: (displayProperties) =>\n set((state) => ({ ...state, settings: { ...state.settings, displayProperties } })),\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 return { ...state, settings: { ...state.settings, displayProperties } };\n }),\n setFilter: (attributeId, values) =>\n set((state) => ({ ...state, filters: { ...state.filters, [attributeId]: values } })),\n toggleFilterValue: (attributeId, value) =>\n set((state) => {\n const currentValues = state.filters[attributeId] ?? [];\n const nextValues = toggleValue(currentValues, value);\n const nextFilters =\n nextValues.length === 0\n ? omitFilterCategory(state.filters, attributeId)\n : { ...state.filters, [attributeId]: nextValues };\n return { ...state, filters: nextFilters };\n }),\n clearFilter: (attributeId) =>\n set((state) => ({ ...state, filters: omitFilterCategory(state.filters, attributeId) })),\n clearAllFilters: () => set((state) => ({ ...state, filters: {} })),\n reset: () => set(snapshot),\n }),\n {\n name: toStorageName(storageKey),\n version: 2,\n migrate: (persisted, version) => {\n if (!persisted || typeof persisted !== \"object\") return persisted as DataRendererSnapshot;\n const state = persisted as { settings?: Record<string, unknown>; filters?: Record<string, unknown> };\n if (version >= 2) return state as unknown as DataRendererSnapshot;\n return {\n settings: migrateSettings(state.settings ?? {}),\n filters: migrateFilters(state.filters ?? {}),\n };\n },\n storage: createJSONStorage(createBrowserStorage),\n partialize: (state) => ({ settings: state.settings, filters: state.filters }),\n },\n ),\n );\n};\n\nconst workspaceStoreRegistry = new Map<string, ReturnType<typeof createDataRendererStore>>();\n\nexport const getDataRendererStore = (storageKey: string, initialState?: DataRendererStoreInitialState) => {\n const existingStore = workspaceStoreRegistry.get(storageKey);\n if (existingStore) return existingStore;\n\n const store = createDataRendererStore({ storageKey, initialState });\n workspaceStoreRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useDataRendererStore = <T>(\n storageKey: string,\n selector: (state: DataRendererState) => T,\n initialState?: DataRendererStoreInitialState,\n) => {\n const store = getDataRendererStore(storageKey, initialState);\n return useStore(store, selector);\n};\n\nexport type { DataRendererSnapshot, DataRendererState, DataRendererStoreInitialState };\n","import { useEffect, useReducer } from \"react\";\n\nimport type { AttributeDescriptor, EnumOptionsSource } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\nconst collectSources = (attributes: AttributeDescriptor[]): EnumOptionsSource[] => {\n const sources: EnumOptionsSource[] = [];\n for (const attribute of attributes) {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") continue;\n if (isEnumOptionsSource(attribute.type.options)) sources.push(attribute.type.options);\n }\n return sources;\n};\n\n/**\n * Returns the same descriptors with every source-backed enum's options\n * replaced by a fresh `getSnapshot()` array. Pure — call from anywhere that\n * needs a normalized view of the schema.\n */\nexport const resolveAttributeOptions = (attributes: AttributeDescriptor[]): AttributeDescriptor[] =>\n attributes.map((attribute) => {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") return attribute;\n if (!isEnumOptionsSource(attribute.type.options)) return attribute;\n return { ...attribute, type: { ...attribute.type, options: attribute.type.options.getSnapshot() } };\n });\n\n/**\n * Subscribes to every source-backed enum in `attributes` and returns the\n * resolved descriptors (options materialized to plain arrays). When any\n * source's listener fires the component rerenders, so downstream renders see\n * the new snapshot automatically.\n */\nexport const useResolvedAttributes = (attributes: AttributeDescriptor[]) => {\n const [, forceRender] = useReducer((tick: number) => tick + 1, 0);\n\n useEffect(() => {\n const sources = collectSources(attributes);\n if (sources.length === 0) return;\n const unsubscribes = sources.map((source) => source.subscribe(forceRender));\n return () => {\n for (const dispose of unsubscribes) dispose();\n };\n }, [attributes]);\n\n return resolveAttributeOptions(attributes);\n};\n","import { Box, HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { countFilterValues } from \"./data-renderer-grouping\";\nimport {\n buildDisplayPropertyOptions,\n buildFilterCategories,\n buildGroupingOptions,\n buildOrderingOptions,\n} from \"./data-renderer-helpers\";\nimport { DisplayMenu } from \"./display-menu\";\nimport { FilterMenu } from \"./filter-menu\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\nexport interface DataRendererToolbarProps<TRow extends DataRendererRow = DataRendererRow> {\n rows: TRow[];\n storageKey: string;\n attributes: AttributeDescriptor[];\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n leading?: ReactNode;\n align?: \"split\" | \"end\";\n}\n\nexport const DataRendererToolbar = <TRow extends DataRendererRow>(props: DataRendererToolbarProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n defaultSettings,\n defaultFilters,\n leading,\n align = \"split\",\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const groupingOptions = buildGroupingOptions(attributes);\n const orderingOptions = buildOrderingOptions(attributes);\n const displayPropertyOptions = buildDisplayPropertyOptions(attributes);\n\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n const setViewMode = useDataRendererStore(storageKey, (state) => state.setViewMode, initialState);\n const setColumnGrouping = useDataRendererStore(storageKey, (state) => state.setColumnGrouping, initialState);\n const setRowGrouping = useDataRendererStore(storageKey, (state) => state.setRowGrouping, initialState);\n const setOrderingAttributeId = useDataRendererStore(\n storageKey,\n (state) => state.setOrderingAttributeId,\n initialState,\n );\n const toggleSortDirection = useDataRendererStore(storageKey, (state) => state.toggleSortDirection, initialState);\n const toggleDisplayProperty = useDataRendererStore(storageKey, (state) => state.toggleDisplayProperty, initialState);\n const toggleFilterValue = useDataRendererStore(storageKey, (state) => state.toggleFilterValue, initialState);\n const clearFilter = useDataRendererStore(storageKey, (state) => state.clearFilter, initialState);\n const clearAllFilters = useDataRendererStore(storageKey, (state) => state.clearAllFilters, initialState);\n\n const categoryOptions = buildFilterCategories(attributes, rows);\n const countsByCategory = Object.fromEntries(\n categoryOptions.map((category) => [category.id, countFilterValues(rows, category.id, attributes)]),\n );\n\n return (\n <HStack gap=\"2xs\" minW=\"0\" w={align === \"split\" ? \"full\" : undefined} flexShrink={0}>\n {leading}\n {align === \"split\" ? <Box flex=\"1\" /> : null}\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 onOrderingAttributeIdChange={setOrderingAttributeId}\n onSortDirectionToggle={toggleSortDirection}\n onDisplayPropertyToggle={toggleDisplayProperty}\n />\n </HStack>\n );\n};\n","import { Box, 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 { type DataRendererColumnGroup, filterRows, groupRows, orderRows } from \"./data-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveKnownColumnKeys,\n resolveListDropTargetColumnKey,\n} from \"./data-renderer-helpers\";\nimport { DataRendererList, type DataRendererListItem } from \"./data-renderer-list\";\nimport { DataRendererToolbar } from \"./data-renderer-toolbar\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\nexport interface BoardColumnConfig {\n color?: string;\n canDragIn?: boolean;\n canDragOut?: boolean;\n canCreate?: boolean;\n actions?: DataRendererBoardColumnAction[];\n}\n\nexport interface DataRendererProps<TRow extends DataRendererRow = DataRendererRow> {\n rows: TRow[];\n storageKey: string;\n attributes: AttributeDescriptor[];\n selectedRowId?: string | null;\n emptyTitle?: string;\n emptyDescription?: string;\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n hideToolbar?: boolean;\n toolbarLeading?: ReactNode;\n onRowClick?: (row: TRow) => void;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => void;\n onReorder?: (rowId: string, beforeRowId?: string) => void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n}\n\ninterface BuildListItemsInput<TRow extends DataRendererRow> {\n settings: DataRendererSettings;\n visibleRows: TRow[];\n grouped: DataRendererColumnGroup[];\n attributes: AttributeDescriptor[];\n onRowClick?: (row: TRow) => void;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => void;\n onReorder?: (rowId: string, beforeRowId?: string) => void;\n}\n\nconst buildListItems = <TRow extends DataRendererRow>(input: BuildListItemsInput<TRow>): DataRendererListItem[] => {\n const { settings, visibleRows, grouped, attributes, onRowClick, onAttributeChange, onReorder } = input;\n\n const supportsManualReorder = settings.ordering.attributeId === MANUAL_ORDERING;\n const getGroupColorPalette = (attributeId: string, key: string) => {\n const descriptor = findAttribute(attributes, attributeId);\n return descriptor ? findEnumOption(descriptor.type, key)?.color : undefined;\n };\n\n const toListItem = (row: TRow, placement?: { columnKey?: string; rowKey?: string }): DataRendererListItem => ({\n id: row.id,\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n onClick: () => onRowClick?.(row),\n draggable: Boolean(onAttributeChange || onReorder),\n onDropRow:\n supportsManualReorder && (onAttributeChange || onReorder)\n ? (draggedId) => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (targetColumnKey && settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n onAttributeChange(draggedId, settings.columnGrouping, targetColumnKey);\n }\n if (settings.rowGrouping !== NO_GROUPING && placement?.rowKey && onAttributeChange) {\n onAttributeChange(draggedId, settings.rowGrouping, placement.rowKey);\n }\n onReorder?.(draggedId, row.id);\n }\n : undefined,\n });\n\n const toSubgroupListItem = (\n subgroup: { key: string; label: string; rows: DataRendererRow[] },\n parent?: { columnKey: string },\n ): DataRendererListItem => ({\n id: parent ? `group::${parent.columnKey}::${subgroup.key}` : `group::${subgroup.key}`,\n title: subgroup.label,\n countBadge: subgroup.rows.length,\n countColorPalette: getGroupColorPalette(parent ? settings.rowGrouping : settings.columnGrouping, subgroup.key),\n onDropRow:\n onAttributeChange && settings.columnGrouping !== NO_GROUPING\n ? (draggedId) => {\n const columnKey = parent?.columnKey ?? subgroup.key;\n onAttributeChange(draggedId, settings.columnGrouping, columnKey);\n if (settings.rowGrouping !== NO_GROUPING && parent) {\n onAttributeChange(draggedId, settings.rowGrouping, subgroup.key);\n }\n }\n : undefined,\n children: orderRows(subgroup.rows, settings.ordering, attributes).map((row) =>\n toListItem(row as TRow, {\n columnKey: parent?.columnKey ?? subgroup.key,\n rowKey: parent ? subgroup.key : undefined,\n }),\n ),\n });\n\n if (settings.columnGrouping === NO_GROUPING) {\n return orderRows(visibleRows, settings.ordering, attributes).map((row) => toListItem(row as TRow));\n }\n\n return grouped.map((column) => {\n if (column.subgroups.length > 0) {\n return {\n id: `group::${column.key}`,\n title: column.label,\n countBadge: column.rows.length,\n countColorPalette: getGroupColorPalette(settings.columnGrouping, column.key),\n onDropRow: onAttributeChange\n ? (draggedId: string) => onAttributeChange(draggedId, settings.columnGrouping, column.key)\n : undefined,\n children: column.subgroups.map((subgroup) => toSubgroupListItem(subgroup, { columnKey: column.key })),\n } satisfies DataRendererListItem;\n }\n\n return toSubgroupListItem(column);\n });\n};\n\nexport const DataRenderer = <TRow extends DataRendererRow>(props: DataRendererProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n selectedRowId = null,\n emptyTitle = \"No rows found\",\n emptyDescription = \"Try changing filters or display settings.\",\n defaultSettings,\n defaultFilters,\n onRowClick,\n onAttributeChange,\n onReorder,\n onCreateRow,\n onColumnAction,\n getBoardColumnConfig,\n hideToolbar = false,\n toolbarLeading,\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n\n const visibleRows = filterRows(rows, filters, attributes) as TRow[];\n\n const knownColumnKeys = resolveKnownColumnKeys(settings.columnGrouping, attributes, filters);\n\n const grouped = groupRows(visibleRows, {\n attributes,\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys,\n });\n\n const listItems = buildListItems({\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n });\n\n const toBoardItems = (boardRows: DataRendererRow[]) =>\n boardRows.map((row) => ({\n id: row.id,\n cardProps: {\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n onClick: () => onRowClick?.(row as TRow),\n },\n }));\n\n const columnGroupingDescriptor = findAttribute(attributes, settings.columnGrouping);\n\n const boardColumns: DataRendererBoardColumn[] = grouped.map((column) => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n const orderedRows = orderRows(column.rows, settings.ordering, attributes);\n // Fall back to the enum option's declared color when the contribution\n // doesn't provide one — keeps the board in sync with the schema by\n // default (matches how card / list badges already pick up enum colors).\n const enumColor = columnGroupingDescriptor\n ? findEnumOption(columnGroupingDescriptor.type, column.key)?.color\n : undefined;\n\n const groups: DataRendererBoardGroup[] | undefined =\n column.subgroups.length > 0\n ? column.subgroups.map((subgroup) => ({\n key: subgroup.key,\n label: subgroup.label,\n items: toBoardItems(orderRows(subgroup.rows, settings.ordering, attributes)),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color ?? enumColor,\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(orderedRows),\n groups,\n } satisfies DataRendererBoardColumn;\n });\n\n const handleBoardMoveItem = (rowId: string, targetColumnId: string) => {\n if (settings.columnGrouping === NO_GROUPING || !onAttributeChange) return;\n onAttributeChange(rowId, settings.columnGrouping, targetColumnId);\n };\n\n const handleBoardMoveToGroup = (rowId: string, targetGroupKey: string) => {\n if (settings.rowGrouping === NO_GROUPING || !onAttributeChange) return;\n onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n };\n\n return (\n <Stack gap=\"sm\" height=\"100%\" minH=\"0\">\n {hideToolbar ? null : (\n <DataRendererToolbar\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={defaultSettings}\n defaultFilters={defaultFilters}\n leading={toolbarLeading}\n />\n )}\n\n {settings.viewMode === \"board\" ? (\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <DataRendererBoard\n columns={boardColumns}\n selectedItemId={selectedRowId}\n onMoveItem={handleBoardMoveItem}\n onMoveToGroup={handleBoardMoveToGroup}\n onCreateStart={onCreateRow}\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\n key={`${settings.columnGrouping}:${settings.rowGrouping}`}\n items={listItems}\n selectedItemId={selectedRowId}\n />\n ) : (\n <EmptyState title={emptyTitle} description={emptyDescription} borderWidth=\"1px\" borderRadius=\"md\" />\n )}\n </Stack>\n );\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\n// Extensions whose byte content cannot be meaningfully shown as a unified diff.\n// SVG is intentionally excluded — it is text-based XML and benefits from a line diff.\nconst binaryDiffExtensions = new Set([\n \"avif\",\n \"bmp\",\n \"gif\",\n \"heic\",\n \"ico\",\n \"jpeg\",\n \"jpg\",\n \"png\",\n \"tif\",\n \"tiff\",\n \"webp\",\n \"pdf\",\n \"zip\",\n \"tar\",\n \"gz\",\n \"tgz\",\n \"rar\",\n \"7z\",\n \"exe\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"wasm\",\n \"class\",\n \"jar\",\n \"mp3\",\n \"mp4\",\n \"mov\",\n \"ogg\",\n \"wav\",\n \"webm\",\n \"flac\",\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n]);\n\nconst imageDiffExtensions = new Set([\"avif\", \"bmp\", \"gif\", \"heic\", \"ico\", \"jpeg\", \"jpg\", \"png\", \"tif\", \"tiff\", \"webp\"]);\n\nconst getExtension = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n const ext = fileName.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\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\nexport const isBinaryDiffPath = (path: string) => {\n const ext = getExtension(path);\n return ext.length > 0 && binaryDiffExtensions.has(ext);\n};\n\nexport const isImageDiffPath = (path: string) => {\n const ext = getExtension(path);\n return ext.length > 0 && imageDiffExtensions.has(ext);\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, isBinaryDiffPath, isImageDiffPath } 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 (isBinaryDiffPath(filePath)) {\n return {\n kind: \"binary\" as const,\n filePath,\n isImage: isImageDiffPath(filePath),\n };\n }\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 ) : model.kind === \"binary\" ? (\n <BinaryDiffPlaceholder isImage={model.isImage} />\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\ninterface BinaryDiffPlaceholderProps {\n isImage: boolean;\n}\n\nconst BinaryDiffPlaceholder = (props: BinaryDiffPlaceholderProps) => {\n const { isImage } = props;\n const title = isImage ? \"Image diffs are not shown\" : \"Binary diffs are not shown\";\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title={title} paddingY=\"sm\" />\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 isBinaryDiff: 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 isBinaryDiff,\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 (isBinaryDiff) {\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={false}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n }\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 { isBinaryDiffPath, 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 isBinaryDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const { isExpanded, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, requestedPath, filePath } = input;\n\n return (\n isExpanded && !hasDiffContent && !isLargeDiff && !isGeneratedDiff && !isBinaryDiff && requestedPath !== filePath\n );\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 isBinaryDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, onLoadDiff } =\n 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 isBinaryDiff,\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 isBinaryDiff = isBinaryDiffPath(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 isBinaryDiff,\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 isBinaryDiff={isBinaryDiff}\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 type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nexport const isInList = (id: string, values: string[]) => values.includes(id);\n\nexport const isActiveNode = (id: string, activeNodeId?: string | string[] | null) =>\n Array.isArray(activeNodeId) ? activeNodeId.includes(id) : activeNodeId === id;\n\nexport const isNavigableNode = (node: TreeListNode) => node.isNavigable || node.navigationIntent !== undefined;\n\nexport const getNodeChildren = (node: TreeListNode) => (node.children as TreeListNode[] | undefined) ?? [];\n\nexport const hasExpandableChildren = (node: TreeListNode) =>\n getNodeChildren(node).length > 0 || node.isContainer === true;\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; parentNodeId?: string }\n | { kind: \"section-empty\"; key: string; sectionId: string; emptyState: TreeListSection[\"emptyState\"] };\n\nexport type VirtualNodeRow = Extract<VirtualRow, { kind: \"node\" }>;\nexport type VirtualSectionHeaderRow = Extract<VirtualRow, { kind: \"section-header\" }>;\n\n/** Rows the keyboard can land on: enabled nodes and collapsible section headers. */\nexport type FocusableRow = VirtualNodeRow | VirtualSectionHeaderRow;\n\nconst appendVisibleNodeRows = (input: {\n rows: VirtualRow[];\n sectionId: string;\n nodes: TreeListNode[];\n expandedNodeIds: string[];\n level: number;\n parentNodeId?: string;\n}) => {\n const { rows, sectionId, nodes, expandedNodeIds, level, parentNodeId } = input;\n\n for (const node of nodes) {\n rows.push({ kind: \"node\", key: `${sectionId}:${node.id}`, sectionId, node, level, parentNodeId });\n\n const children = getNodeChildren(node);\n if (children.length === 0 || !isInList(node.id, expandedNodeIds)) continue;\n\n appendVisibleNodeRows({\n rows,\n sectionId,\n nodes: children,\n expandedNodeIds,\n level: level + 1,\n parentNodeId: node.id,\n });\n }\n};\n\nexport const buildVirtualRows = (\n sections: TreeListSection[],\n expandedSectionIds: string[],\n expandedNodeIds: string[],\n) => {\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\n/** Stable id used to track keyboard focus across renders. */\nexport const getRowFocusId = (row: FocusableRow) => (row.kind === \"node\" ? row.node.id : row.key);\n\nexport const isFocusableRow = (row: VirtualRow): row is FocusableRow => {\n if (row.kind === \"node\") return row.node.disabled !== true;\n return row.kind === \"section-header\" && row.collapsible;\n};\n\nexport const getFocusableRows = (rows: VirtualRow[]) => rows.filter(isFocusableRow);\n\nexport const resolveTreeListFocusRowId = (\n focusedRowId: string | undefined,\n activeNodeId: string | string[] | null | undefined,\n rows: VirtualRow[],\n) => {\n const focusableRows = getFocusableRows(rows);\n const focusableIds = new Set(focusableRows.map(getRowFocusId));\n if (focusedRowId && focusableIds.has(focusedRowId)) return focusedRowId;\n\n const activeIds = Array.isArray(activeNodeId) ? activeNodeId : activeNodeId ? [activeNodeId] : [];\n const activeId = activeIds.find((id) => focusableIds.has(id));\n if (activeId) return activeId;\n\n const firstRow = focusableRows[0];\n return firstRow ? getRowFocusId(firstRow) : undefined;\n};\n\nconst resolveSectionHeaderNavigation = (input: {\n row: VirtualSectionHeaderRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, key } = input;\n\n if (key === \"Enter\" || key === \" \") return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n if (key === \"ArrowRight\") {\n if (!row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.sectionId === row.sectionId) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\" && row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n return null;\n};\n\nconst resolveNodeNavigation = (input: {\n row: VirtualNodeRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, expandedNodeIds, key } = input;\n const expanded = isInList(row.node.id, expandedNodeIds);\n const expandable = hasExpandableChildren(row.node);\n\n if (key === \"ArrowRight\") {\n if (!expandable) return null;\n if (!expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.parentNodeId === row.node.id) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\") {\n if (expandable && expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n if (row.parentNodeId) return { type: \"focus\" as const, rowId: row.parentNodeId };\n }\n\n return null;\n};\n\nexport const resolveTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n focusedRowId: string | undefined;\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { rows, focusedRowId, activeNodeId, expandedNodeIds, key } = input;\n const focusableRows = getFocusableRows(rows);\n if (focusableRows.length === 0) return null;\n\n const resolvedFocusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const currentIndex = Math.max(\n 0,\n focusableRows.findIndex((row) => getRowFocusId(row) === resolvedFocusRowId),\n );\n const currentRow = focusableRows[currentIndex];\n if (!currentRow) return null;\n\n const focusByIndex = (index: number) => {\n const clamped = Math.min(Math.max(index, 0), focusableRows.length - 1);\n return { type: \"focus\" as const, rowId: getRowFocusId(focusableRows[clamped]!) };\n };\n\n if (key === \"ArrowDown\") return focusByIndex(currentIndex + 1);\n if (key === \"ArrowUp\") return focusByIndex(currentIndex - 1);\n if (key === \"Home\") return focusByIndex(0);\n if (key === \"End\") return focusByIndex(focusableRows.length - 1);\n\n if (currentRow.kind === \"section-header\") {\n return resolveSectionHeaderNavigation({ row: currentRow, focusableRows, currentIndex, key });\n }\n\n return resolveNodeNavigation({ row: currentRow, focusableRows, currentIndex, expandedNodeIds, key });\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FocusEventHandler } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode } from \"./tree-list.types\";\nimport { hasExpandableChildren, isActiveNode, isInList, isNavigableNode } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\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 tabIndex?: number;\n onFocus?: FocusEventHandler<HTMLElement>;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nexport const TreeListNodeRow = (props: TreeListNodeRowProps) => {\n const {\n sectionId,\n node,\n level,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent: LinkComponent,\n tabIndex,\n onFocus,\n onNavigate,\n onToggleNode,\n } = props;\n\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 rowProps = {\n ...rowItem,\n depth: level,\n variant: rowVariant,\n isSelected: isActive,\n isExpanded: expanded,\n showExpandToggle: hasChildren,\n tabIndex,\n \"data-tree-list-focus-id\": node.id,\n \"aria-level\": level + 1,\n \"aria-expanded\": hasChildren ? expanded : undefined,\n onFocus,\n onActivate: handleActivate,\n onToggleExpand: () => onToggleNode?.(node.id),\n };\n\n const row =\n canLink && LinkComponent && node.href ? (\n <LinkComponent to={node.href}>\n <ListRow {...rowProps} asChild />\n </LinkComponent>\n ) : (\n <ListRow {...rowProps} />\n );\n\n return (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {row}\n </Stack>\n );\n};\n","import { Box, HStack, IconButton, Menu, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { FocusEventHandler, MouseEvent as ReactMouseEvent } from \"react\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport type { TreeListAction, TreeListSection } from \"./tree-list.types\";\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 focusId: string;\n tabIndex: number;\n onFocus: FocusEventHandler<HTMLElement>;\n onToggle: () => void;\n onContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nexport const TreeListSectionHeader = (props: TreeListSectionHeaderProps) => {\n const { section, collapsible, expanded, focusId, tabIndex, onFocus, onToggle, onContextMenu } = 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 tabIndex={collapsible ? tabIndex : undefined}\n data-tree-list-focus-id={collapsible ? focusId : undefined}\n aria-expanded={collapsible ? expanded : undefined}\n _hover={collapsible ? { bg: \"bg.hover\" } : undefined}\n _focusVisible={collapsible ? { bg: \"bg.hover\" } : undefined}\n onFocus={collapsible ? onFocus : undefined}\n onClick={collapsible ? onToggle : undefined}\n onContextMenu={\n onContextMenu\n ? (event) => {\n event.preventDefault();\n onContextMenu(event, section.id);\n }\n : undefined\n }\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","import type { TreeListSection } from \"./tree-list.types\";\n\nconst SECTION_PREFIX = \"section:\";\n\nexport const toSectionDragId = (sectionId: string) => `${SECTION_PREFIX}${sectionId}`;\nexport const isSectionDragId = (id: string) => id.startsWith(SECTION_PREFIX);\nexport const fromSectionDragId = (id: string) => id.slice(SECTION_PREFIX.length);\n\nconst arrayMoveInPlace = <T>(items: T[], from: number, to: number) => {\n const next = items.slice();\n const [removed] = next.splice(from, 1);\n next.splice(to, 0, removed);\n return next;\n};\n\nexport type ReorderResult =\n | { kind: \"section\"; nextSectionIds: string[] }\n | { kind: \"node\"; sectionId: string; nextNodeIds: string[] };\n\nexport const computeReorderResult = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n): ReorderResult | null => {\n if (activeId === overId) return null;\n\n if (isSectionDragId(activeId) && isSectionDragId(overId)) {\n const orderedIds = sections.map((section) => section.id);\n const oldIndex = orderedIds.indexOf(fromSectionDragId(activeId));\n const newIndex = orderedIds.indexOf(fromSectionDragId(overId));\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) return null;\n return { kind: \"section\", nextSectionIds: arrayMoveInPlace(orderedIds, oldIndex, newIndex) };\n }\n\n for (const section of sections) {\n const nodeIds = section.nodes.map((node) => node.id);\n const oldIndex = nodeIds.indexOf(activeId);\n const newIndex = nodeIds.indexOf(overId);\n if (oldIndex < 0 || newIndex < 0) continue;\n if (oldIndex === newIndex) return null;\n return {\n kind: \"node\",\n sectionId: section.id,\n nextNodeIds: arrayMoveInPlace(nodeIds, oldIndex, newIndex),\n };\n }\n\n return null;\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { computeReorderResult, toSectionDragId } from \"./tree-list-reorder\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface SortableHostProps {\n id: string;\n children: (input: {\n setNodeRef: (element: HTMLElement | null) => void;\n attributes: ReturnType<typeof useSortable>[\"attributes\"];\n listeners: ReturnType<typeof useSortable>[\"listeners\"];\n style: { transform?: string; transition?: string; opacity?: number };\n }) => React.ReactNode;\n}\n\n// Render-prop sortable host. The child decides which DOM node receives the\n// drag listeners so we never paint a visible grip glyph — the row or section\n// header is itself the drag handle. Clicks pass through because the pointer\n// sensor activates only after the cursor moves 4px (configured below).\nconst SortableHost = (props: SortableHostProps) => {\n const sortable = useSortable({ id: props.id });\n const style = {\n transform: CSS.Transform.toString(sortable.transform),\n transition: sortable.transition,\n opacity: sortable.isDragging ? 0.5 : 1,\n };\n return (\n <>\n {props.children({\n setNodeRef: sortable.setNodeRef,\n attributes: sortable.attributes,\n listeners: sortable.listeners,\n style,\n })}\n </>\n );\n};\n\ninterface SortableSectionGroupProps {\n section: TreeListSection;\n sectionRows: VirtualRow[];\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst SortableSectionGroup = (props: SortableSectionGroupProps) => {\n const {\n section,\n sectionRows,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = props;\n\n const headerRow = sectionRows.find((row) => row.kind === \"section-header\");\n const nodeRows = sectionRows.filter((row) => row.kind === \"node\");\n const topLevelNodeIds = nodeRows\n .filter((row) => row.kind === \"node\" && row.level === 0)\n .map((row) => (row.kind === \"node\" ? row.node.id : \"\"));\n\n return (\n <SortableHost id={toSectionDragId(section.id)}>\n {({ setNodeRef, attributes, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\">\n {headerRow && headerRow.kind === \"section-header\" ? (\n // Drag listeners live on the header so dragging the section moves\n // it, while click-to-collapse still works via the activation\n // distance on the pointer sensor.\n <Box {...attributes} {...listeners}>\n <TreeListSectionHeader\n section={headerRow.section}\n collapsible={headerRow.collapsible}\n expanded={headerRow.expanded}\n focusId={headerRow.key}\n tabIndex={-1}\n onFocus={() => {}}\n onToggle={() => onToggleSection?.(headerRow.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n </Box>\n ) : null}\n <SortableContext items={topLevelNodeIds} strategy={verticalListSortingStrategy}>\n <Stack gap={nodeGap} w=\"full\" minW=\"0\">\n {nodeRows.map((row) =>\n row.kind === \"node\" ? (\n <SortableOrPlainNodeRow\n key={row.key}\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ) : null,\n )}\n </Stack>\n </SortableContext>\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface SortableOrPlainNodeRowProps {\n row: Extract<VirtualRow, { kind: \"node\" }>;\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}\n\nconst renderNodeRow = (input: {\n node: TreeListNode;\n sectionId: string;\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}) => (\n <TreeListNodeRow\n sectionId={input.sectionId}\n node={input.node}\n level={input.level}\n expandedNodeIds={input.expandedNodeIds}\n activeNodeId={input.activeNodeId}\n rowVariant={input.rowVariant}\n nodeGap={input.nodeGap}\n linkComponent={input.linkComponent}\n onNavigate={input.onNavigate}\n onToggleNode={input.onToggleNode}\n />\n);\n\n// Top-level nodes participate in their section's SortableContext; nested rows\n// inherit position from their parent and render plain (cross-section moves are\n// out of scope per the ADR).\nconst SortableOrPlainNodeRow = (props: SortableOrPlainNodeRowProps) => {\n const { row, ...rest } = props;\n if (row.level > 0) {\n return renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest });\n }\n return (\n <SortableHost id={row.node.id}>\n {({ setNodeRef, attributes, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\" {...attributes} {...listeners}>\n {renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest })}\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface TreeListSortableProps {\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 onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nexport const TreeListSortable = (props: TreeListSortableProps) => {\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 onSectionContextMenu,\n onReorderSections,\n onReorderNodes,\n } = props;\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }));\n\n const handleDragEnd = (event: DragEndEvent) => {\n if (!event.over) return;\n const result = computeReorderResult(sections, String(event.active.id), String(event.over.id));\n if (!result) return;\n if (result.kind === \"section\") {\n onReorderSections?.(result.nextSectionIds);\n } else {\n onReorderNodes?.(result.sectionId, result.nextNodeIds);\n }\n };\n\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n\n return (\n <DndContext sensors={sensors} onDragEnd={handleDragEnd}>\n <SortableContext\n items={sections.map((section) => toSectionDragId(section.id))}\n strategy={verticalListSortingStrategy}\n >\n <Stack gap={sectionGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {sections.map((section) => (\n <SortableSectionGroup\n key={section.id}\n section={section}\n sectionRows={rows.filter((row) => row.sectionId === section.id)}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n />\n ))}\n </Stack>\n </SortableContext>\n </DndContext>\n );\n};\n","import { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport {\n getFocusableRows,\n getRowFocusId,\n isFocusableRow,\n resolveTreeListFocusRowId,\n resolveTreeListKeyboardNavigation,\n type VirtualRow,\n} from \"./tree-list-model\";\n\nconst findRowElement = (root: HTMLElement | null, focusId: string) => {\n if (!root) return null;\n const elements = root.querySelectorAll<HTMLElement>(\"[data-tree-list-focus-id]\");\n return [...elements].find((element) => element.dataset.treeListFocusId === focusId) ?? null;\n};\n\nconst findFocusedRowId = (root: HTMLElement | null, target: EventTarget | null) => {\n if (!root || !(target instanceof HTMLElement) || !root.contains(target)) return undefined;\n return target.closest<HTMLElement>(\"[data-tree-list-focus-id]\")?.dataset.treeListFocusId;\n};\n\nconst isTextEditingTarget = (target: EventTarget | null) => {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n return [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName);\n};\n\nconst getRowIndex = (rows: VirtualRow[], focusId: string) =>\n rows.findIndex((row) => isFocusableRow(row) && getRowFocusId(row) === focusId);\n\nexport const useTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n onToggleNode?: (nodeId: string) => void;\n onToggleSection?: (sectionId: string) => void;\n scrollToRow?: (index: number) => void;\n}) => {\n const { rows, activeNodeId, expandedNodeIds, onToggleNode, onToggleSection, scrollToRow } = input;\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [focusedRowId, setFocusedRowId] = useState<string>();\n const [pendingFocusRowId, setPendingFocusRowId] = useState<string>();\n const focusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const focusableRowIds = getFocusableRows(rows).map(getRowFocusId).join(\"\\0\");\n\n useEffect(() => {\n if (!focusedRowId) return;\n if (focusableRowIds.split(\"\\0\").includes(focusedRowId)) return;\n setFocusedRowId(undefined);\n }, [focusedRowId, focusableRowIds]);\n\n useEffect(() => {\n if (!pendingFocusRowId) return;\n const frame = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const element = findRowElement(rootRef.current, pendingFocusRowId);\n if (!element) return;\n element.focus();\n setPendingFocusRowId(undefined);\n });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [pendingFocusRowId]);\n\n const focusRow = (rowId: string) => {\n setFocusedRowId(rowId);\n const element = findRowElement(rootRef.current, rowId);\n if (element) {\n element.focus();\n return;\n }\n\n const rowIndex = getRowIndex(rows, rowId);\n if (rowIndex === -1) return;\n scrollToRow?.(rowIndex);\n setPendingFocusRowId(rowId);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (isTextEditingTarget(event.target)) return;\n\n const navigation = resolveTreeListKeyboardNavigation({\n rows,\n focusedRowId: findFocusedRowId(rootRef.current, event.target) ?? focusRowId,\n activeNodeId,\n expandedNodeIds,\n key: event.key,\n });\n if (!navigation) return;\n\n event.preventDefault();\n if (navigation.type === \"toggle-node\") {\n onToggleNode?.(navigation.nodeId);\n return;\n }\n if (navigation.type === \"toggle-section\") {\n onToggleSection?.(navigation.sectionId);\n return;\n }\n\n focusRow(navigation.rowId);\n };\n\n return {\n focusRowId,\n rootRef,\n handleKeyDown,\n onRowFocus: (rowId: string) => setFocusedRowId(rowId),\n };\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { MouseEvent as ReactMouseEvent, RefObject } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\nimport { TreeListSortable } from \"./tree-list-sortable\";\nimport { useTreeListKeyboardNavigation } from \"./use-tree-list-keyboard-navigation\";\n\nexport { buildVirtualRows } from \"./tree-list-model\";\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 onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n virtualize?: boolean;\n scrollRef?: RefObject<HTMLDivElement | null>;\n // When true, sections and items render with drag handles. Virtualization is\n // bypassed (per the ADR) — customizable trees are typically small. Hosts\n // must supply onReorderSections / onReorderNodes to persist the new order.\n draggable?: boolean;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface RenderVirtualRowInput {\n row: VirtualRow;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n focusRowId?: string;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onRowFocus: (rowId: string) => void;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst renderVirtualRow = (input: RenderVirtualRowInput) => {\n const {\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = input;\n\n if (row.kind === \"section-header\") {\n return (\n <TreeListSectionHeader\n section={row.section}\n collapsible={row.collapsible}\n expanded={row.expanded}\n focusId={row.key}\n tabIndex={row.key === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.key)}\n onToggle={() => onToggleSection?.(row.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n );\n }\n\n if (row.kind === \"section-empty\") return row.emptyState ?? null;\n\n return (\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 tabIndex={row.node.id === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.node.id)}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n );\n};\n\ninterface VirtualTreeListProps extends TreeListProps {\n rows: VirtualRow[];\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nconst VirtualTreeList = (props: VirtualTreeListProps) => {\n const {\n rows,\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n scrollRef,\n } = props;\n\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 const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n scrollToRow: (index) => virtualizer.scrollToIndex(index, { align: \"auto\" }),\n });\n\n return (\n <Box\n ref={keyboard.rootRef}\n role=\"listbox\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n style={{ height: virtualizer.getTotalSize() }}\n onKeyDown={keyboard.handleKeyDown}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = rows[virtualItem.index];\n if (!row) return null;\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 {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n );\n })}\n </Box>\n );\n};\n\nconst StackTreeList = (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 onSectionContextMenu,\n virtualize,\n scrollRef,\n } = props;\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n });\n\n if (virtualize && scrollRef) {\n return <VirtualTreeList {...props} rows={rows} scrollRef={scrollRef} />;\n }\n\n return (\n <Stack\n ref={keyboard.rootRef}\n role=\"listbox\"\n gap={sectionGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n overflowX=\"hidden\"\n onKeyDown={keyboard.handleKeyDown}\n >\n {sections.map((section) => {\n const sectionRows = rows.filter((row) => row.sectionId === section.id);\n\n return (\n <Stack\n key={section.id}\n gap={nodeGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n data-testid={`tree-list-section-${section.id}`}\n >\n {sectionRows.map((row) => (\n <Box key={row.key} w=\"full\" minW=\"0\">\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n ))}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n\nexport const TreeList = (props: TreeListProps) => {\n if (props.draggable) {\n return (\n <TreeListSortable\n sections={props.sections}\n expandedSectionIds={props.expandedSectionIds}\n expandedNodeIds={props.expandedNodeIds}\n activeNodeId={props.activeNodeId}\n rowVariant={props.rowVariant}\n sectionGap={props.sectionGap}\n nodeGap={props.nodeGap}\n linkComponent={props.linkComponent}\n onNavigate={props.onNavigate}\n onToggleSection={props.onToggleSection}\n onToggleNode={props.onToggleNode}\n onSectionContextMenu={props.onSectionContextMenu}\n onReorderSections={props.onReorderSections}\n onReorderNodes={props.onReorderNodes}\n />\n );\n }\n\n return <StackTreeList {...props} />;\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 { Grid, GridItem, Icon, IconButton, Popover, Text } from \"@chakra-ui/react\";\nimport {\n AlertTriangle,\n BookOpen,\n Bug,\n ChartColumnIncreasing,\n CheckCircle,\n Circle,\n CircleQuestionMark,\n Clock,\n Code,\n Eye,\n Flag,\n Flame,\n Gauge,\n Lightbulb,\n Shield,\n ShieldAlert,\n Sparkles,\n Star,\n Tag,\n Wrench,\n} from \"lucide-react\";\nimport type { ComponentType } from \"react\";\n\nexport const optionColors = [\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n] as const;\n\nconst optionIcons = [\n { name: \"circle\", icon: Circle },\n { name: \"bug\", icon: Bug },\n { name: \"sparkles\", icon: Sparkles },\n { name: \"book-open\", icon: BookOpen },\n { name: \"wrench\", icon: Wrench },\n { name: \"gauge\", icon: Gauge },\n { name: \"alert-triangle\", icon: AlertTriangle },\n { name: \"star\", icon: Star },\n { name: \"flag\", icon: Flag },\n { name: \"flame\", icon: Flame },\n { name: \"lightbulb\", icon: Lightbulb },\n { name: \"shield\", icon: Shield },\n { name: \"eye\", icon: Eye },\n { name: \"clock\", icon: Clock },\n { name: \"check-circle\", icon: CheckCircle },\n { name: \"tag\", icon: Tag },\n { name: \"code\", icon: Code },\n { name: \"chart-column-increasing\", icon: ChartColumnIncreasing },\n { name: \"circle-question-mark\", icon: CircleQuestionMark },\n { name: \"shield-alert\", icon: ShieldAlert },\n] as const;\n\nexport const getIconComponent = (name: string | null | undefined): ComponentType => {\n if (!name) return Circle;\n const entry = optionIcons.find((icon) => icon.name === name);\n return entry?.icon ?? Circle;\n};\n\nexport interface IconColorPickerProps {\n color: string;\n icon?: string | null;\n onColorChange: (color: string) => void;\n onIconChange?: (icon: string | null) => void;\n disabled?: boolean;\n showIcons?: boolean;\n \"aria-label\"?: string;\n}\n\nexport const IconColorPicker = (props: IconColorPickerProps) => {\n const {\n color,\n icon,\n onColorChange,\n onIconChange,\n disabled,\n showIcons = true,\n \"aria-label\": ariaLabel = \"Pick color and icon\",\n } = props;\n const IconComponent = showIcons ? getIconComponent(icon) : Circle;\n const selectedIconName = icon ?? \"circle\";\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" disabled={disabled} aria-label={ariaLabel}>\n <Icon\n as={IconComponent}\n boxSize=\"14px\"\n color={`${color}.500`}\n fill={showIcons ? undefined : `${color}.500`}\n />\n </IconButton>\n </Popover.Trigger>\n <Popover.Positioner>\n <Popover.Content w={showIcons ? \"320px\" : \"220px\"} p=\"sm\" bg=\"bg\">\n <Text textStyle=\"label/S\" mb=\"xs\">\n Color\n </Text>\n <Grid\n templateColumns={showIcons ? \"repeat(10, 1fr)\" : \"repeat(5, 1fr)\"}\n gap=\"2xs\"\n mb={showIcons ? \"md\" : \"0\"}\n >\n {optionColors.map((optionColor) => (\n <GridItem key={optionColor}>\n <IconButton\n size=\"2xs\"\n variant={optionColor === color ? \"solid\" : \"ghost\"}\n colorPalette={optionColor}\n onClick={() => onColorChange(optionColor)}\n aria-label={optionColor}\n >\n <Icon as={Circle} boxSize=\"14px\" fill={`${optionColor}.500`} color={`${optionColor}.500`} />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n {showIcons ? (\n <>\n <Text textStyle=\"label/S\" mb=\"xs\">\n Icon\n </Text>\n <Grid templateColumns=\"repeat(5, 1fr)\" gap=\"2xs\">\n {optionIcons.map((entry) => (\n <GridItem key={entry.name}>\n <IconButton\n size=\"2xs\"\n variant={entry.name === selectedIconName ? \"solid\" : \"ghost\"}\n onClick={() => onIconChange?.(entry.name === \"circle\" ? null : entry.name)}\n aria-label={entry.name}\n >\n <Icon as={entry.icon} boxSize=\"14px\" />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n </>\n ) : null}\n </Popover.Content>\n </Popover.Positioner>\n </Popover.Root>\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\";\nimport { ScrollArea } from \"@/components/scroll-area\";\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 <ScrollArea maxHeight=\"12rem\" contentProps={{ paddingEnd: \"1\" }}>\n <Toast.Description whiteSpace=\"pre-wrap\" wordBreak=\"break-word\">\n {toast.description}\n </Toast.Description>\n </ScrollArea>\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, 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 role=\"listbox\" 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 <ListRow\n variant=\"compact\"\n {...buildEntryItem(row.entry)}\n isSelected={row.entryIndex === activeIndex}\n tabIndex={-1}\n onPointerMove={() => onHover(row.entryIndex)}\n />\n )}\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { CloseButton, Dialog, Input, InputGroup } 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\nconst paletteInputStateProps = {\n borderColor: \"transparent\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\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 borderColor=\"transparent\"\n borderRadius=\"0\"\n h=\"3rem\"\n _hover={paletteInputStateProps}\n _active={paletteInputStateProps}\n _focus={paletteInputStateProps}\n _focusVisible={paletteInputStateProps}\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 <PaletteList\n entries={filteredEntries}\n activeIndex={activeIndex}\n emptyLabel={emptyLabel}\n onHover={setActiveIndex}\n scrollRef={scrollRef}\n />\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\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\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 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(createBrowserStorage),\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 { Button, Editable, Flex, Icon, Menu, Table } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Check, ChevronDown, GripVertical, Trash2 } from \"lucide-react\";\n\nimport { IconColorPicker } from \"../icon-color-picker\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { StatusOptionEditorAction, StatusOptionEditorItem } from \"./status-option-editor.types\";\n\ninterface StatusOptionRowProps {\n actionOptions?: StatusOptionEditorAction[];\n item: StatusOptionEditorItem;\n isSaving?: boolean;\n showDefault?: boolean;\n showIcons?: boolean;\n onActionsChange: (actions: string[]) => void;\n onColorChange: (color: string) => void;\n onDelete: () => void;\n onIconChange: (icon: string | null) => void;\n onNameChange: (name: string) => void;\n onSetDefault: () => void;\n}\n\nconst ActionDropdown = (props: {\n actions: string[];\n disabled?: boolean;\n options: StatusOptionEditorAction[];\n onChange: (actions: string[]) => void;\n}) => {\n const { actions, disabled, options, onChange } = props;\n\n const toggleAction = (action: string) => {\n onChange(actions.includes(action) ? actions.filter((item) => item !== action) : [...actions, action]);\n };\n\n return (\n <Menu.Root closeOnSelect={false}>\n <Menu.Trigger asChild>\n <Button size=\"2xs\" variant=\"outline\" gap=\"xs\" disabled={disabled}>\n {actions.length} action{actions.length !== 1 ? \"s\" : \"\"}\n <Icon as={ChevronDown} boxSize=\"12px\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {options.map((option) => (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={option.value}\n label={option.label}\n isSelected={actions.includes(option.value)}\n onActivate={() => toggleAction(option.value)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const StatusOptionRow = (props: StatusOptionRowProps) => {\n const {\n actionOptions,\n item,\n isSaving,\n showDefault,\n showIcons,\n onActionsChange,\n onColorChange,\n onDelete,\n onIconChange,\n onNameChange,\n onSetDefault,\n } = props;\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: item.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <Table.Row ref={setNodeRef} style={style}>\n <Table.Cell width=\"40px\">\n <Flex cursor=\"grab\" {...attributes} {...listeners}>\n <GripVertical size={14} color=\"var(--chakra-colors-fg-muted)\" />\n </Flex>\n </Table.Cell>\n <Table.Cell>\n <Editable.Root\n defaultValue={item.name}\n onValueCommit={(details) => {\n const trimmed = details.value.trim();\n if (trimmed && trimmed !== item.name) onNameChange(trimmed);\n }}\n >\n <Editable.Preview />\n <Editable.Input />\n </Editable.Root>\n </Table.Cell>\n <Table.Cell width=\"54px\">\n <IconColorPicker\n color={item.color}\n icon={item.icon}\n showIcons={showIcons}\n onColorChange={onColorChange}\n onIconChange={onIconChange}\n disabled={isSaving}\n />\n </Table.Cell>\n {showDefault ? (\n <Table.Cell width=\"80px\">\n <Button\n size=\"2xs\"\n variant={item.isDefault ? \"solid\" : \"ghost\"}\n onClick={onSetDefault}\n disabled={isSaving || item.isDefault}\n aria-label={`Set ${item.name} as default`}\n >\n <Check size={14} />\n </Button>\n </Table.Cell>\n ) : null}\n {actionOptions ? (\n <Table.Cell width=\"140px\">\n <ActionDropdown\n actions={item.actions ?? []}\n disabled={isSaving}\n options={actionOptions}\n onChange={onActionsChange}\n />\n </Table.Cell>\n ) : null}\n <Table.Cell width=\"40px\">\n <Button\n size=\"2xs\"\n variant=\"ghost\"\n colorPalette=\"red\"\n onClick={onDelete}\n disabled={isSaving || item.isDefault}\n aria-label={`Delete ${item.name}`}\n >\n <Trash2 size={14} />\n </Button>\n </Table.Cell>\n </Table.Row>\n );\n};\n","import { Button, Flex, HStack, Input, Stack, Table, Text } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { Plus, X } from \"lucide-react\";\nimport type { KeyboardEvent } from \"react\";\nimport { useState } from \"react\";\n\nimport { DeleteConfirmationModal } from \"../delete-confirmation-modal\";\nimport { IconColorPicker } from \"../icon-color-picker\";\nimport type { StatusOptionEditorItem, StatusOptionEditorProps } from \"./status-option-editor.types\";\nimport { StatusOptionRow } from \"./status-option-row\";\n\ninterface AddFormState {\n name: string;\n color: string;\n icon: string | null;\n}\n\nconst buildDraftItem = (form: AddFormState, sortOrder: number) => ({\n id: `new-${crypto.randomUUID()}`,\n name: form.name.trim(),\n color: form.color,\n icon: form.icon,\n sortOrder,\n isNew: true,\n});\n\nexport const StatusOptionEditor = (props: StatusOptionEditorProps) => {\n const {\n title,\n description,\n items,\n onItemsChange,\n onSave,\n onCancel,\n onDeleteItem,\n onSetDefault,\n hasChanges,\n isSaving,\n addLabel = \"Add status\",\n addPlaceholder = \"Status name\",\n actionOptions,\n actionsColumnLabel = \"Actions\",\n cancelLabel = \"Cancel\",\n defaultAddColor = \"blue\",\n defaultColumnLabel = \"Default\",\n deleteButtonText = \"Delete status\",\n deleteHeadline = \"Delete status?\",\n deleteNotificationText = (item) => `This will delete status \"${item.name}\".`,\n saveLabel = \"Save\",\n showDefault,\n showIcons = true,\n } = props;\n const [isAdding, setIsAdding] = useState(false);\n const [addForm, setAddForm] = useState<AddFormState>({ name: \"\", color: defaultAddColor, icon: null });\n const [itemToDelete, setItemToDelete] = useState<StatusOptionEditorItem | null>(null);\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n const resetAddForm = () => {\n setIsAdding(false);\n setAddForm({ name: \"\", color: defaultAddColor, icon: null });\n };\n\n const updateItem = (index: number, patch: Partial<StatusOptionEditorItem>) => {\n const next = [...items];\n next[index] = { ...next[index], ...patch };\n onItemsChange(next);\n };\n\n const handleAddOption = () => {\n if (!addForm.name.trim()) return;\n const maxOrder = items.length > 0 ? Math.max(...items.map((item) => item.sortOrder)) : 0;\n onItemsChange([...items, buildDraftItem(addForm, maxOrder + 1)]);\n resetAddForm();\n };\n\n const handleDeleteOption = () => {\n if (!itemToDelete) return;\n if (onDeleteItem) {\n onDeleteItem(itemToDelete);\n } else {\n onItemsChange(items.filter((item) => item.id !== itemToDelete.id));\n }\n setItemToDelete(null);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = items.findIndex((item) => item.id === active.id);\n const newIndex = items.findIndex((item) => item.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return;\n\n onItemsChange(arrayMove(items, oldIndex, newIndex).map((item, index) => ({ ...item, sortOrder: index })));\n };\n\n const handleAddKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") handleAddOption();\n if (event.key === \"Escape\") resetAddForm();\n };\n\n return (\n <>\n <Stack gap=\"md\" height=\"100%\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"sm\" flexWrap=\"wrap\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"heading/S\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsAdding(true)} disabled={isAdding || isSaving}>\n <Plus size={16} />\n {addLabel}\n </Button>\n </Flex>\n\n <Table.Root size=\"sm\" variant=\"outline\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader width=\"40px\" />\n <Table.ColumnHeader>Name</Table.ColumnHeader>\n <Table.ColumnHeader width=\"54px\" />\n {showDefault ? <Table.ColumnHeader width=\"80px\">{defaultColumnLabel}</Table.ColumnHeader> : null}\n {actionOptions ? <Table.ColumnHeader width=\"140px\">{actionsColumnLabel}</Table.ColumnHeader> : null}\n <Table.ColumnHeader width=\"40px\" />\n </Table.Row>\n </Table.Header>\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={items.map((item) => item.id)} strategy={verticalListSortingStrategy}>\n <Table.Body>\n {items.map((item, index) => (\n <StatusOptionRow\n key={item.id}\n item={item}\n isSaving={isSaving}\n showDefault={showDefault}\n showIcons={showIcons}\n actionOptions={actionOptions}\n onNameChange={(name) => updateItem(index, { name })}\n onColorChange={(color) => updateItem(index, { color })}\n onIconChange={(icon) => updateItem(index, { icon })}\n onActionsChange={(actions) => updateItem(index, { actions })}\n onSetDefault={() => onSetDefault?.(item)}\n onDelete={() => setItemToDelete(item)}\n />\n ))}\n {isAdding ? (\n <Table.Row>\n <Table.Cell />\n <Table.Cell>\n <Input\n size=\"sm\"\n placeholder={addPlaceholder}\n value={addForm.name}\n onChange={(event) => setAddForm({ ...addForm, name: event.target.value })}\n onKeyDown={handleAddKeyDown}\n autoFocus\n />\n </Table.Cell>\n <Table.Cell>\n <IconColorPicker\n color={addForm.color}\n icon={addForm.icon}\n showIcons={showIcons}\n onColorChange={(color) => setAddForm({ ...addForm, color })}\n onIconChange={(icon) => setAddForm({ ...addForm, icon })}\n />\n </Table.Cell>\n {showDefault ? <Table.Cell /> : null}\n {actionOptions ? <Table.Cell /> : null}\n <Table.Cell>\n <HStack gap=\"2xs\">\n <Button size=\"2xs\" variant=\"primary\" onClick={handleAddOption} disabled={!addForm.name.trim()}>\n Add\n </Button>\n <Button size=\"2xs\" variant=\"ghost\" onClick={resetAddForm} aria-label=\"Cancel add status\">\n <X size={14} />\n </Button>\n </HStack>\n </Table.Cell>\n </Table.Row>\n ) : null}\n </Table.Body>\n </SortableContext>\n </DndContext>\n </Table.Root>\n\n <Flex justifyContent=\"flex-end\">\n <HStack gap=\"xs\">\n <Button size=\"sm\" variant=\"outline\" onClick={onCancel} disabled={!hasChanges || isSaving}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" variant=\"primary\" onClick={onSave} loading={isSaving} disabled={!hasChanges}>\n {saveLabel}\n </Button>\n </HStack>\n </Flex>\n </Stack>\n\n <DeleteConfirmationModal\n open={Boolean(itemToDelete)}\n onClose={() => setItemToDelete(null)}\n onDelete={handleDeleteOption}\n headline={deleteHeadline}\n notificationText={itemToDelete ? deleteNotificationText(itemToDelete) : \"\"}\n buttonText={deleteButtonText}\n />\n </>\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","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\n\ninterface TabVisibilitySnapshot {\n tabOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TabVisibilityState extends TabVisibilitySnapshot {\n setTab: (key: string, value: VisibilityOverride | undefined) => void;\n toggleTab: (key: string, hiddenByDefault: boolean) => void;\n clearTab: (key: string) => void;\n reset: () => void;\n}\n\ninterface CreateTabVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TabVisibilitySnapshot = { tabOverrides: {} };\n\nconst STORE_NAMESPACE = \"pstdio/ui/tab-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n key: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(key in overrides)) return overrides;\n const { [key]: _removed, ...rest } = overrides;\n return rest;\n }\n if (overrides[key] === value) return overrides;\n return { ...overrides, [key]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, key: string, hiddenByDefault: boolean) => {\n const current = resolveEffective(overrides[key], hiddenByDefault);\n return setOverride(overrides, key, current === \"hidden\" ? \"shown\" : \"hidden\");\n};\n\nconst getPersistedSnapshot = (state: TabVisibilityState) => ({ tabOverrides: state.tabOverrides });\n\nexport const createTabVisibilityStore = (options: CreateTabVisibilityStoreOptions) =>\n createStore<TabVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setTab: (key, value) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, value) })),\n toggleTab: (key, hiddenByDefault) =>\n set((state) => ({ ...state, tabOverrides: toggleOverride(state.tabOverrides, key, hiddenByDefault) })),\n clearTab: (key) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTabVisibilityStore>>();\n\nexport const getTabVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n const store = createTabVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTabVisibilityStore = <T>(storageKey: string, selector: (state: TabVisibilityState) => T) => {\n const store = getTabVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TabVisibilitySnapshot, TabVisibilityState };\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport type { VisibilityOverride } from \"./tree-list-visibility.store\";\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nexport const resolveVisibility = (\n override: VisibilityOverride | undefined,\n hiddenByDefault: boolean | undefined,\n): VisibilityOverride => override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst isNodeVisible = (node: TreeListNode, nodeOverrides: Record<string, VisibilityOverride>) =>\n resolveVisibility(nodeOverrides[node.id], node.hiddenByDefault) === \"shown\";\n\nconst filterNodes = (nodes: TreeListNode[], nodeOverrides: Record<string, VisibilityOverride>): TreeListNode[] => {\n let changed = false;\n const next: TreeListNode[] = [];\n for (const node of nodes) {\n if (!isNodeVisible(node, nodeOverrides)) {\n changed = true;\n continue;\n }\n if (node.children && node.children.length > 0) {\n const filteredChildren = filterNodes(node.children, nodeOverrides);\n if (filteredChildren !== node.children) {\n changed = true;\n next.push({ ...node, children: filteredChildren });\n continue;\n }\n }\n next.push(node);\n }\n return changed ? next : nodes;\n};\n\nexport const filterVisibleSections = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n): TreeListSection[] => {\n let changed = false;\n const next: TreeListSection[] = [];\n for (const section of sections) {\n if (resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault) === \"hidden\") {\n changed = true;\n continue;\n }\n const filteredNodes = filterNodes(section.nodes, nodeOverrides);\n if (filteredNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: filteredNodes });\n continue;\n }\n next.push(section);\n }\n return changed ? next : sections;\n};\n\nexport interface TreeVisibilityMenuActions {\n onToggleSection: (id: string, hiddenByDefault: boolean) => void;\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n onResetOrder?: () => void;\n}\n\ninterface BuildMenuOptions {\n checkmark: ReactNode;\n}\n\nconst buildSectionAction = (\n section: TreeListSection,\n sectionOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = section.hiddenByDefault === true;\n const effective = resolveVisibility(sectionOverrides[section.id], hiddenByDefault);\n return {\n key: `section:${section.id}`,\n label: section.label ?? section.id,\n onClick: () => actions.onToggleSection(section.id, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n };\n};\n\nconst buildNodeAction = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n return {\n key: `node:${node.id}`,\n label: toStringLabel(node.label, node.id),\n onClick: () => actions.onToggleNode(node.id, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n };\n};\n\nexport const buildTreeVisibilityMenuActions = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n\n for (const section of sections) {\n result.push(buildSectionAction(section, sectionOverrides, actions, options));\n const sectionEffective = resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault);\n if (sectionEffective === \"hidden\") continue;\n for (const node of section.nodes) {\n result.push(buildNodeAction(node, nodeOverrides, actions, options));\n }\n }\n\n result.push({ key: \"__reset-visibility\", label: \"Reset to default\", onClick: actions.onResetAll });\n if (actions.onResetOrder) {\n result.push({ key: \"__reset-order\", label: \"Reset order\", onClick: actions.onResetOrder });\n }\n\n return result;\n};\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\nimport { resolveVisibility } from \"../tree-list/tree-list-visibility-filter\";\n\nexport interface TabVisibilityPlacement {\n closable?: boolean;\n hiddenByDefault?: boolean;\n title?: string;\n contributionId: string;\n}\n\nexport const filterVisibleTabs = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n getKey: (placement: T) => string,\n): T[] => {\n let changed = false;\n const next: T[] = [];\n for (const placement of placements) {\n if (placement.closable === true) {\n next.push(placement);\n continue;\n }\n const effective = resolveVisibility(tabOverrides[getKey(placement)], placement.hiddenByDefault);\n if (effective === \"hidden\") {\n changed = true;\n continue;\n }\n next.push(placement);\n }\n return changed ? next : placements;\n};\n\nexport interface TabVisibilityMenuActions {\n onToggleTab: (key: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n}\n\ninterface BuildTabMenuOptions {\n checkmark: ReactNode;\n}\n\nexport const buildTabVisibilityMenuActions = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n actions: TabVisibilityMenuActions,\n getKey: (placement: T) => string,\n options: BuildTabMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n let nonCloseableCount = 0;\n\n for (const placement of placements) {\n if (placement.closable === true) continue;\n nonCloseableCount += 1;\n const key = getKey(placement);\n const hiddenByDefault = placement.hiddenByDefault === true;\n const effective = resolveVisibility(tabOverrides[key], hiddenByDefault);\n result.push({\n key: `tab:${key}`,\n label: placement.title ?? placement.contributionId,\n onClick: () => actions.onToggleTab(key, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n });\n }\n\n if (nonCloseableCount === 0) return result;\n\n result.push({ key: \"__reset-tabs\", label: \"Reset to default\", onClick: actions.onResetAll });\n return result;\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface TreeListOrderSnapshot {\n sectionOrder: string[];\n nodeOrderBySection: Record<string, string[]>;\n}\n\ninterface TreeListOrderState extends TreeListOrderSnapshot {\n setSectionOrder: (nextSectionIds: string[]) => void;\n setNodeOrder: (sectionId: string, nextNodeIds: string[]) => void;\n resetSectionOrder: () => void;\n resetNodeOrder: (sectionId: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListOrderStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListOrderSnapshot = {\n sectionOrder: [],\n nodeOrderBySection: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-order\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst dedupe = (ids: string[]) => {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const id of ids) {\n if (seen.has(id)) continue;\n seen.add(id);\n result.push(id);\n }\n return result;\n};\n\nconst getPersistedSnapshot = (state: TreeListOrderState) => ({\n sectionOrder: state.sectionOrder,\n nodeOrderBySection: state.nodeOrderBySection,\n});\n\nexport const createTreeListOrderStore = (options: CreateTreeListOrderStoreOptions) =>\n createStore<TreeListOrderState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSectionOrder: (nextSectionIds) => set((state) => ({ ...state, sectionOrder: dedupe(nextSectionIds) })),\n setNodeOrder: (sectionId, nextNodeIds) =>\n set((state) => ({\n ...state,\n nodeOrderBySection: { ...state.nodeOrderBySection, [sectionId]: dedupe(nextNodeIds) },\n })),\n resetSectionOrder: () => set((state) => ({ ...state, sectionOrder: [] })),\n resetNodeOrder: (sectionId) =>\n set((state) => {\n if (!(sectionId in state.nodeOrderBySection)) return state;\n const { [sectionId]: _removed, ...rest } = state.nodeOrderBySection;\n return { ...state, nodeOrderBySection: rest };\n }),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListOrderStore>>();\n\nexport const getTreeListOrderStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListOrderStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListOrderStore = <T>(storageKey: string, selector: (state: TreeListOrderState) => T) => {\n const store = getTreeListOrderStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListOrderSnapshot, TreeListOrderState };\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nconst reorderBy = <T extends { id: string }>(items: T[], order: string[]): T[] => {\n if (order.length === 0) return items;\n\n const indexById = new Map(items.map((item, index) => [item.id, index]));\n const placed = new Set<number>();\n const next: T[] = [];\n\n for (const id of order) {\n const index = indexById.get(id);\n if (index === undefined || placed.has(index)) continue;\n placed.add(index);\n next.push(items[index]);\n }\n\n let changed = next.length > 0 && next.length !== items.length;\n for (let i = 0; i < items.length; i += 1) {\n if (placed.has(i)) continue;\n if (next.length !== i && !changed) changed = true;\n next.push(items[i]);\n }\n\n if (!changed) {\n for (let i = 0; i < items.length; i += 1) {\n if (items[i] !== next[i]) {\n changed = true;\n break;\n }\n }\n }\n\n return changed ? next : items;\n};\n\nexport const applyTreeListOrder = (\n sections: TreeListSection[],\n sectionOrder: string[],\n nodeOrderBySection: Record<string, string[]>,\n): TreeListSection[] => {\n let changed = false;\n const reorderedSections = reorderBy(sections, sectionOrder);\n if (reorderedSections !== sections) changed = true;\n\n const next: TreeListSection[] = [];\n for (const section of reorderedSections) {\n const nodeOrder = nodeOrderBySection[section.id];\n if (!nodeOrder || nodeOrder.length === 0) {\n next.push(section);\n continue;\n }\n const reorderedNodes = reorderBy(section.nodes, nodeOrder);\n if (reorderedNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: reorderedNodes });\n } else {\n next.push(section);\n }\n }\n\n return changed ? next : sections;\n};\n\nexport const reorderNodesById = (nodes: TreeListNode[], order: string[]) => reorderBy(nodes, order);\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\nexport type VisibilityOverride = \"hidden\" | \"shown\";\n\ninterface TreeListVisibilitySnapshot {\n sectionOverrides: Record<string, VisibilityOverride>;\n nodeOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TreeListVisibilityState extends TreeListVisibilitySnapshot {\n setSection: (id: string, value: VisibilityOverride | undefined) => void;\n setNode: (id: string, value: VisibilityOverride | undefined) => void;\n toggleSection: (id: string, hiddenByDefault: boolean) => void;\n toggleNode: (id: string, hiddenByDefault: boolean) => void;\n clearSection: (id: string) => void;\n clearNode: (id: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListVisibilitySnapshot = {\n sectionOverrides: {},\n nodeOverrides: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst flipOverride = (current: VisibilityOverride): VisibilityOverride => (current === \"hidden\" ? \"shown\" : \"hidden\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n id: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(id in overrides)) return overrides;\n const { [id]: _removed, ...rest } = overrides;\n return rest;\n }\n\n if (overrides[id] === value) return overrides;\n return { ...overrides, [id]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, id: string, hiddenByDefault: boolean) => {\n const next = flipOverride(resolveEffective(overrides[id], hiddenByDefault));\n return setOverride(overrides, id, next);\n};\n\nconst getPersistedSnapshot = (state: TreeListVisibilityState) => ({\n sectionOverrides: state.sectionOverrides,\n nodeOverrides: state.nodeOverrides,\n});\n\nexport const createTreeListVisibilityStore = (options: CreateTreeListVisibilityStoreOptions) =>\n createStore<TreeListVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSection: (id, value) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, value) })),\n setNode: (id, value) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, value) })),\n toggleSection: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n sectionOverrides: toggleOverride(state.sectionOverrides, id, hiddenByDefault),\n })),\n toggleNode: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n nodeOverrides: toggleOverride(state.nodeOverrides, id, hiddenByDefault),\n })),\n clearSection: (id) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, undefined) })),\n clearNode: (id) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListVisibilityStore>>();\n\nexport const getTreeListVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListVisibilityStore = <T>(storageKey: string, selector: (state: TreeListVisibilityState) => T) => {\n const store = getTreeListVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListVisibilitySnapshot, TreeListVisibilityState };\n","const readDefaultExport = (module: { default?: unknown }) => module.default ?? module;\n\nexport const installPrismGlobal = async () => {\n const globalScope = globalThis as typeof globalThis & { Prism?: unknown };\n if (globalScope.Prism) return;\n\n const prismModule = await import(\"prismjs\");\n globalScope.Prism = readDefaultExport(prismModule);\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","readOnly","endContent","RowContent","isExpanded","showChevron","tone","isDenseVariant","labelTextStyle","descriptionTextStyle","descriptionMarginLeft","bb0","labelColor","descriptionColor","ChevronRight","height","indicator","ListRowContent","nodeId","ListRowMenuItemIcon","ListRowMenu","placement","mainAxis","offset","cursor","computePaddingLeft","depth","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","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","isInteractiveItem","url","BreadcrumbItemLink","isCurrent","linkComponent","LinkComponent","ChakraBreadcrumb","BreadcrumbItemContent","contextMenuActions","BreadcrumbSeparator","separator","Breadcrumb","separatorGap","index","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","noopStorage","getItem","removeItem","setItem","readLocalStorage","globalThis","localStorage","createBrowserStorage","storage","STORAGE_KEY","ThemePreferenceContext","createContext","getDefaultThemePreference","getInitialThemePreference","window","stored","prefersDark","matchMedia","matches","ThemePreferenceProvider","initialPreference","themePreference","setThemePreference","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","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","DataRendererCard","badges","customSlots","workspaceBadge","hasBadges","Wrap","badge","Badge","attributeId","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","createLabel","Plus","MoreHorizontal","setData","effectAllowed","v","NO_GROUPING","MANUAL_ORDERING","isEnumOptionsSource","Array","isArray","isAttributesSource","attributes","DEFAULT_DATA_RENDERER_SETTINGS","viewMode","columnGrouping","rowGrouping","ordering","direction","displayProperties","findAttribute","attribute","getEnumOptions","type","kind","getSnapshot","toTitleCase","chunk","toUpperCase","slice","getAttributeValue","row","descriptor","raw","getAttributeStringValues","String","findEnumOption","enumOptionLabel","formatDateValue","date","Date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","formatStringValue","formatUserValue","summarizeMultiEnum","values","renderEnumBadge","stringValue","renderMultiEnumBadge","summary","firstColor","isRenderableNode","renderAttributeBadge","render","formatted","collectDisplayBadges","displayable","push","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","buildFilterCategories","categories","filterable","declared","auto","declaredValues","undeclared","sort","a","b","localeCompare","numeric","buildGroupingOptions","groupable","buildOrderingOptions","sortable","buildDisplayPropertyOptions","resolveSubGroupingOptions","resolveListDropTargetColumnKey","columnKey","resolveKnownColumnKeys","filters","active","omitFilterCategory","next","sanitizeSettings","settings","knownIds","validGroupingId","validOrderingId","orderingId","sanitizeFilters","UNASSIGNED_LABEL","fallbackLabel","labelForGroupKey","getGroupingKey","first","compareGroupKey","compareGroupKeyForDescriptor","ordered","compareEnumValues","orderByDirection","left","right","toIndex","findIndex","compareForDescriptor","compare","leftTime","rightTime","leftNum","rightNum","leftValue","rightValue","leftString","rightString","orderRows","groupRows","knownColumnKeys","columnDescriptor","rowDescriptor","groupedByColumn","Map","set","get","columnRows","subgroups","groupedByRow","rowKey","rowRows","matchesFilter","filterRows","activeFilters","every","countFilterValues","counts","createDefaultExpandedState","expandedState","visit","forEach","getDropTargetBoxShadow","isGroup","getRowIsExpanded","rowId","renderLabel","countBadge","countColorPalette","renderEndContent","buildListRowItem","statusIcon","statusColor","DataRendererList","onItemClick","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","table","useReactTable","data","state","onExpandedChange","getSubRows","getCoreRowModel","getExpandedRowModel","getRowId","getRowModel","DataRendererListRow","onDraggedItemChange","onDropTargetChange","canExpand","rowItem","toggleExpanded","getCanExpand","canDropHere","onDropRow","draggedId","SectionLabel","viewModeOptions","List","KanbanSquare","Dropdown","hasNoneFirst","Button","option_0","DisplayMenu","groupingOptions","orderingOptions","displayPropertyOptions","onViewModeChange","onColumnGroupingChange","onRowGroupingChange","onOrderingAttributeIdChange","onSortDirectionToggle","onDisplayPropertyToggle","triggerRef","contentRef","setOpen","closeOnOutsidePointerDown","Node","addEventListener","removeEventListener","Settings2","ViewModeIcon","Separator","ArrowDownUp","isActive","Popover","getActiveFilterCount","reduce","sum","FilterMenu","countsByCategory","onToggleFilterValue","onClearFilter","onClearAll","activeCategoryId","setActiveCategoryId","category","activeCategory","activeFilterCount","Filter","category_0","selectedValues","checked","Check","WORKSPACE_STORE_NAMESPACE","toStorageName","storageKey","DEFAULT_SNAPSHOT","createSnapshot","initialState","toggleValue","stripTagPrefix","migrateSettings","orderingRaw","field","orderingDirection","migrateFilters","stringValues","createDataRendererStore","snapshot","createStore","persist","setViewMode","setColumnGrouping","setRowGrouping","setOrdering","setOrderingAttributeId","setDisplayProperties","toggleSortDirection","toggleDisplayProperty","property","setFilter","toggleFilterValue","currentValues","nextValues","nextFilters","clearFilter","clearAllFilters","reset","version","migrate","persisted","createJSONStorage","partialize","workspaceStoreRegistry","getDataRendererStore","existingStore","store","useDataRendererStore","selector","useStore","collectSources","sources","resolveAttributeOptions","useResolvedAttributes","forceRender","useReducer","unsubscribes","source","subscribe","dispose","tick","DataRendererToolbar","rawAttributes","defaultSettings","defaultFilters","leading","align","_temp5","_temp6","_temp7","_temp8","_temp9","_temp0","_temp1","categoryOptions","fromEntries","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","state_8","state_9","buildListItems","visibleRows","grouped","onRowClick","onAttributeChange","onReorder","supportsManualReorder","getGroupColorPalette","toListItem","targetColumnKey","toSubgroupListItem","subgroup","parent","DataRenderer","selectedRowId","emptyTitle","emptyDescription","onCreateRow","getBoardColumnConfig","hideToolbar","toolbarLeading","listItems","boardRows","toBoardItems","columnGroupingDescriptor","columnConfig","orderedRows","enumColor","boardColumns","targetColumnId","handleBoardMoveItem","rowId_0","targetGroupKey","handleBoardMoveToGroup","EmptyState","DeleteConfirmationModal","isDeleting","setIsDeleting","headline","buttonText","notificationText","onDelete","handleDelete","Dialog","CloseButton","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","binaryDiffExtensions","imageDiffExtensions","getExtension","path","ext","pop","getDiffLineCount","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","fileName","endsWith","isBinaryDiffPath","isImageDiffPath","createDiffCardBodyModel","diff","filePath","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","isImage","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","DiffCardBody","model","BinaryDiffPlaceholder","LargeDiffPlaceholder","DeferredDiffLoad","actionLabel","isLoadingDiff","LoadingDiffContent","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isBinaryDiff","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","behavior","expansionState","allExpanded","size","allCollapsed","reportedExpansionState","p","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","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","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","node","dedupePaths","paths","from","buildFlatTree","buildChangedFilesTree","treeById","rootNodes","segments","parentPath","parentNode","currentPath","isFile","existingNode","nextNode","collectExpandedFolderIds","folderIds","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","isInList","isActiveNode","activeNodeId","isNavigableNode","getNodeChildren","hasExpandableChildren","appendVisibleNodeRows","sectionId","expandedNodeIds","level","parentNodeId","buildVirtualRows","sections","expandedSectionIds","section","getRowFocusId","isFocusableRow","getFocusableRows","resolveTreeListFocusRowId","focusedRowId","focusableRows","focusableIds","activeId","firstRow","resolveSectionHeaderNavigation","currentIndex","nextRow","resolveNodeNavigation","expandable","resolveTreeListKeyboardNavigation","resolvedFocusRowId","currentRow","focusByIndex","clamped","TreeListNodeRow","rowVariant","nodeGap","tabIndex","onFocus","onNavigate","onToggleNode","canLink","intent","TreeListSectionActions","TreeListSectionHeader","focusId","onToggle","onContextMenu","transition","SECTION_PREFIX","toSectionDragId","isSectionDragId","fromSectionDragId","arrayMoveInPlace","to","removed","splice","computeReorderResult","overId","orderedIds","oldIndex","indexOf","newIndex","nextSectionIds","nodeIds","nextNodeIds","SortableHost","useSortable","isDragging","listeners","setNodeRef","CSS","Transform","toString","SortableSectionGroup","sectionRows","onToggleSection","onSectionContextMenu","headerRow","nodeRows","topLevelNodeIds","SortableContext","verticalListSortingStrategy","row_3","SortableOrPlainNodeRow","renderNodeRow","TreeListSortable","sectionGap","onReorderSections","onReorderNodes","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","over","result","DndContext","T2","section_0","row_0","row_1","row_2","findRowElement","querySelectorAll","dataset","treeListFocusId","findFocusedRowId","HTMLElement","closest","isTextEditingTarget","isContentEditable","tagName","getRowIndex","useTreeListKeyboardNavigation","scrollToRow","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusRowId","focusableRowIds","frame","element_0","rowIndex","focusRow","altKey","ctrlKey","metaKey","shiftKey","navigation","handleKeyDown","onRowFocus","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","renderVirtualRow","VirtualTreeList","keyboard","StackTreeList","virtualize","TreeList","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","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","fallback","ErrorFallback","message","AbsoluteCenter","AlertMessage","HorizontalMenuStack","borderBottomWidth","optionColors","optionIcons","Circle","Bug","Sparkles","BookOpen","Wrench","Gauge","AlertTriangle","Star","Flag","Flame","Lightbulb","Shield","Eye","Clock","CheckCircle","Tag","Code","ChartColumnIncreasing","CircleQuestionMark","ShieldAlert","getIconComponent","IconColorPicker","onColorChange","onIconChange","showIcons","IconComponent","selectedIconName","optionColor","GridItem","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","paddingEnd","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","paletteInputStateProps","Palette","initialQuery","initialActiveIndex","resetKey","inputIcon","footerStart","footerEnd","filterEntries","onActiveEntryChange","onEscape","setQueryState","setActiveIndex","setupRef","activeEntry","resolvedInputIcon","activeMode","resolvedPlaceholder","nextQuery","runActiveEntry","closePalette","previousSetup","setSelectionRange","entryCount","handleEscape","hasFooter","splitShortcutStep","step","part","getShortcutDisplayParts","binding","PaletteShortcut","steps","stepIndex","part_0","partIndex","Kbd","ParamEditorLabel","CircleHelp","ColorInput","hideLabel","fullWidth","setValue","timeoutRef","nextColor","scheduleChange","newColor","parseColor","onValueChange","ColorPicker","picker","DateInput","newValue","e_1","e_0","blur","e_2","NumberInputRoot","ChakraNumberInput","NumberInputField","Scrubber","Slider","ChakraSlider","NumberInput","hideSlider","showSlider","useFullWidthLayout","valueAsNumber","next_0","details_1","details_2","SelectionInput","multiSelect","optionId","selectedOptions","id_0","o","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","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","ActionDropdown","toggleAction","StatusOptionRow","actionOptions","isSaving","showDefault","onActionsChange","onNameChange","onSetDefault","GripVertical","Table","trimmed","Editable","isDefault","Trash2","buildDraftItem","form","sortOrder","crypto","randomUUID","isNew","StatusOptionEditor","onItemsChange","onSave","onCancel","onDeleteItem","hasChanges","addLabel","addPlaceholder","actionsColumnLabel","cancelLabel","defaultAddColor","defaultColumnLabel","deleteButtonText","deleteHeadline","deleteNotificationText","saveLabel","isAdding","setIsAdding","addForm","setAddForm","itemToDelete","setItemToDelete","resetAddForm","updateItem","patch","handleAddOption","maxOrder","handleDeleteOption","arrayMove","handleAddKeyDown","closestCenter","X","Switch","inputProps","thumbLabel","trackLabel","interactiveCursor","ChakraSwitch","off","on","tabOverrides","STORE_NAMESPACE","resolveEffective","override","hiddenByDefault","setOverride","overrides","_removed","toggleOverride","createTabVisibilityStore","setTab","toggleTab","clearTab","storeRegistry","getTabVisibilityStore","existing","useTabVisibilityStore","toStringLabel","resolveVisibility","isNodeVisible","nodeOverrides","filterNodes","changed","filteredChildren","filterVisibleSections","sectionOverrides","filteredNodes","buildSectionAction","effective","checkmark","buildNodeAction","buildTreeVisibilityMenuActions","onResetAll","onResetOrder","filterVisibleTabs","placements","getKey","buildTabVisibilityMenuActions","nonCloseableCount","contributionId","onToggleTab","sectionOrder","nodeOrderBySection","dedupe","ids","seen","createTreeListOrderStore","setSectionOrder","setNodeOrder","resetSectionOrder","resetNodeOrder","getTreeListOrderStore","useTreeListOrderStore","reorderBy","order","indexById","placed","applyTreeListOrder","reorderedSections","nodeOrder","reorderedNodes","flipOverride","createTreeListVisibilityStore","setSection","setNode","clearSection","clearNode","getTreeListVisibilityStore","useTreeListVisibilityStore","readDefaultExport","module","default","installPrismGlobal","globalScope","Prism","prismModule"],"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-content.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/browser-storage.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/data-renderer-card.tsx","../src/components/data-renderer/data-renderer-board.tsx","../src/components/data-renderer/data-renderer-list.tsx","../src/components/data-renderer/data-renderer-content.tsx","../src/components/data-renderer/types.ts","../src/components/data-renderer/data-renderer-helpers.ts","../src/components/data-renderer/data-renderer-grouping.ts","../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/use-resolved-attributes.ts","../src/components/data-renderer/data-renderer-toolbar.tsx","../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-empty-state.tsx","../src/components/diff-viewer/diff-drawer-height.ts","../src/components/diff-viewer/diff-drawer-scroll.ts","../src/components/diff-viewer/use-selected-diff-scroll.ts","../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-model.ts","../src/components/tree-list/tree-list-node-row.tsx","../src/components/tree-list/tree-list-section-header.tsx","../src/components/tree-list/tree-list-reorder.ts","../src/components/tree-list/tree-list-sortable.tsx","../src/components/tree-list/use-tree-list-keyboard-navigation.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/icon-color-picker.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/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/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","../src/components/tab-strip/tab-visibility.store.ts","../src/components/tree-list/tree-list-visibility-filter.ts","../src/components/tab-strip/tab-visibility-filter.ts","../src/components/tag-editor/tag-editor-row.tsx","../src/components/tag-editor/tag-editor.tsx","../src/components/tag-editor/tag-settings-panel.tsx","../src/components/tree-list/tree-list-order.store.ts","../src/components/tree-list/tree-list-order-filter.ts","../src/components/tree-list/tree-list-visibility.store.ts","../src/utils/prism.ts"],"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\n value={item.id}\n disabled={item.disabled || item.readOnly}\n onClick={() => {\n if (!item.readOnly) item.onAction?.();\n }}\n >\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, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowItem, ListRowProps, RowContentProps } from \"./list-row.types\";\nimport { RowActions } from \"./list-row-actions\";\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 <Icon\n as={ChevronRight}\n boxSize=\"12px\"\n transform={isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 120ms ease\"\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\" color={labelColor}>\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\nexport const 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","import { Box, HStack, Icon, Menu, Portal, Stack, 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\n key={item.id}\n value={item.id}\n disabled={item.disabled || item.readOnly}\n _disabled={item.readOnly ? { opacity: 1, cursor: \"default\" } : undefined}\n onClick={() => {\n if (!item.readOnly) onSelect(item);\n }}\n >\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\" alignItems=\"center\">\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" alignItems={item.description ? \"flex-start\" : \"center\"}>\n <ListRowMenuItemIcon item={item} />\n <Stack gap=\"0\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" truncate>\n {item.label}\n </Text>\n {item.description ? (\n <Text textStyle=\"label/XS\" color=\"fg.menu-item.secondary\" truncate>\n {item.description}\n </Text>\n ) : null}\n </Stack>\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 { chakra, Icon } from \"@chakra-ui/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 } from \"./list-row.types\";\nimport { ListRowContent } from \"./list-row-content\";\nimport { ListRowMenu } from \"./list-row-menu\";\n\nconst computePaddingLeft = (depth: number) => {\n if (depth <= 0) return undefined;\n return `calc(var(--chakra-spacing-1) + ${depth} * 12px)`;\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\nconst createRowBackgroundProps = (input: {\n isSelected: boolean;\n selectedBg: ListRowProps[\"selectedBg\"];\n hoverBg: ListRowProps[\"hoverBg\"];\n tone: NonNullable<ListRowProps[\"tone\"]>;\n}) => ({\n bg: input.isSelected ? input.selectedBg : \"transparent\",\n _hover:\n input.tone === \"danger\" ? { boxShadow: \"inset 0 0 0 1px var(--chakra-colors-red-500)\" } : { bg: input.hoverBg },\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 selectedBg = \"bg.menu-item.selected\",\n hoverBg = \"bg.menu-item.hover\",\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 \"aria-expanded\": showChevron ? isExpanded : undefined,\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 ...createRowBackgroundProps({ isSelected, selectedBg, hoverBg, tone }),\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\nconst staticProps = {\n ...linkProps,\n color: \"fg\",\n cursor: \"default\",\n textDecoration: \"none\",\n _hover: { textDecoration: \"none\" },\n} as const;\n\ninterface BreadcrumbItemContentProps {\n item: BreadcrumbItem;\n isCurrent: boolean;\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\ninterface BreadcrumbSeparatorProps {\n separator?: React.ReactNode;\n}\n\nconst isInteractiveItem = (item: BreadcrumbItem) => Boolean(item.url || item.onClick);\n\nconst BreadcrumbItemLink = (props: BreadcrumbItemContentProps) => {\n const { item, isCurrent, linkComponent: LinkComponent } = props;\n\n if (isCurrent && !isInteractiveItem(item)) {\n return <ChakraBreadcrumb.CurrentLink {...staticProps}>{item.title}</ChakraBreadcrumb.CurrentLink>;\n }\n\n if (item.url && LinkComponent) {\n return (\n <ChakraBreadcrumb.Link asChild {...linkProps}>\n <LinkComponent to={item.url}>{item.title}</LinkComponent>\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.url) {\n return (\n <ChakraBreadcrumb.Link href={item.url} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.onClick) {\n return (\n <ChakraBreadcrumb.Link as=\"button\" type=\"button\" onClick={item.onClick} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n return (\n <ChakraBreadcrumb.Link as=\"span\" {...staticProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n};\n\nconst BreadcrumbItemContent = (props: BreadcrumbItemContentProps) => {\n const { item } = props;\n const content = <BreadcrumbItemLink {...props} />;\n\n if (!item.contextMenuActions?.length) return content;\n\n return (\n <ResourceContextMenu actions={item.contextMenuActions} positioning={{ placement: \"bottom-start\" }}>\n {content}\n </ResourceContextMenu>\n );\n};\n\nconst BreadcrumbSeparator = (props: BreadcrumbSeparatorProps) => {\n const { separator } = props;\n\n if (separator === undefined) {\n return <ChakraBreadcrumb.Separator flexShrink={0} />;\n }\n\n return <ChakraBreadcrumb.Separator flexShrink={0}>{separator}</ChakraBreadcrumb.Separator>;\n};\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 isCurrent = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n <ChakraBreadcrumb.Item minW=\"0\" flexShrink={isCurrent ? 1 : 0} overflow=\"hidden\">\n <BreadcrumbItemContent item={item} isCurrent={isCurrent} linkComponent={LinkComponent} />\n </ChakraBreadcrumb.Item>\n {isCurrent ? null : <BreadcrumbSeparator separator={separator} />}\n </React.Fragment>\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","interface BrowserStorage {\n getItem: (key: string) => string | null;\n removeItem: (key: string) => void;\n setItem: (key: string, value: string) => void;\n}\n\nconst noopStorage = {\n getItem: () => null,\n removeItem: () => {},\n setItem: () => {},\n} satisfies BrowserStorage;\n\nconst readLocalStorage = () => {\n try {\n return globalThis.localStorage;\n } catch {\n return undefined;\n }\n};\n\nexport const createBrowserStorage = (): BrowserStorage => {\n const storage = readLocalStorage();\n if (!storage) return noopStorage;\n\n return {\n getItem(key) {\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n },\n removeItem(key) {\n try {\n storage.removeItem(key);\n } catch {}\n },\n setItem(key, value) {\n try {\n storage.setItem(key, value);\n } catch {}\n },\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\";\nimport { createBrowserStorage } from \"./browser-storage\";\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 = createBrowserStorage().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\") createBrowserStorage().setItem(STORAGE_KEY, themePreference);\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 { Badge, HStack, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler, ReactNode } from \"react\";\nimport type { WorkspaceBadgeProps } from \"@/components/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/workspace-badge\";\nimport type { AttributeBadge } from \"./data-renderer-helpers\";\n\nexport interface DataRendererCardProps {\n title: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n}\n\nexport const DataRendererCard = (props: DataRendererCardProps) => {\n const {\n title,\n badges = [],\n customSlots = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onDragStart,\n onDragEnd,\n onClick,\n } = props;\n\n const hasBadges = badges.length > 0 || customSlots.length > 0;\n const cursor = draggable ? \"grab\" : onClick ? \"pointer\" : \"default\";\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={{ borderColor: \"border.blue\", boxShadow: \"mid\" }}\n cursor={cursor}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"renderer-card\"\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 {workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}\n </HStack>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <Badge\n key={badge.attributeId}\n variant=\"subtle\"\n colorPalette={badge.color ?? \"gray\"}\n textStyle=\"label/XS/medium\"\n >\n {badge.label}\n </Badge>\n ))}\n {customSlots}\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 createLabel?: 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 size=\"xs\"\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 size=\"xs\"\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={column.createLabel ?? \"Create new row\"}>\n <IconButton\n size=\"2xs\"\n variant=\"outline\"\n onClick={() => onCreateStart(column.id)}\n aria-label={column.createLabel ?? \"Create row\"}\n >\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 { type ComponentType, type DragEvent, 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 { AttributeBadge } from \"./data-renderer-helpers\";\n\nexport interface DataRendererListItem {\n id: string;\n title: string;\n countBadge?: number;\n countColorPalette?: string;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n children?: DataRendererListItem[];\n onClick?: () => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropRow?: (rowId: 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\ntype DataRendererListExpandedState = true | Record<string, boolean>;\n\ninterface FlattenedDataRendererListItem {\n id: string;\n item: DataRendererListItem;\n depth: number;\n canExpand: boolean;\n}\n\nexport const getDataRendererListIndentation = (depth: number) => {\n if (depth <= 0) return undefined;\n return `${depth * INDENT_STEP_PX}px`;\n};\n\nconst createDefaultExpandedState = (items: DataRendererListItem[]) => {\n const expandedState: Record<string, boolean> = {};\n const visit = (item: DataRendererListItem) => {\n if ((item.children?.length ?? 0) === 0) return;\n expandedState[item.id] = true;\n item.children?.forEach(visit);\n };\n\n items.forEach(visit);\n return expandedState;\n};\n\nexport const flattenDataRendererListItems = (\n items: DataRendererListItem[],\n expanded: DataRendererListExpandedState,\n depth = 0,\n) => {\n const rows: FlattenedDataRendererListItem[] = [];\n\n for (const item of items) {\n const canExpand = (item.children?.length ?? 0) > 0;\n rows.push({ id: item.id, item, depth, canExpand });\n\n if (canExpand && getRowIsExpanded(expanded, item.id)) {\n rows.push(...flattenDataRendererListItems(item.children ?? [], expanded, depth + 1));\n }\n }\n\n return rows;\n};\n\nconst getDropTargetBoxShadow = (isDropTarget: boolean, isGroup: boolean) => {\n if (!isDropTarget) return undefined;\n if (isGroup) return \"inset 3px 0 0 var(--chakra-colors-border-accent)\";\n return \"inset 0 2px 0 var(--chakra-colors-border-accent)\";\n};\n\nconst getRowIsExpanded = (expandedState: DataRendererListExpandedState, rowId: string) => {\n if (expandedState === true) return true;\n return expandedState[rowId] === true;\n};\n\nconst updateExpandedState = (\n expandedState: DataRendererListExpandedState,\n items: DataRendererListItem[],\n rowId: string,\n isExpanded: boolean,\n) => {\n const next = expandedState === true ? createDefaultExpandedState(items) : { ...expandedState };\n next[rowId] = isExpanded;\n return next;\n};\n\nconst renderLabel = (item: DataRendererListItem) => (\n <HStack gap=\"xs\" minW=\"0\" maxW=\"full\" flex=\"1\">\n <Text textStyle=\"label/S/regular\" minW=\"0\" truncate>\n {item.title}\n </Text>\n {typeof item.countBadge === \"number\" ? (\n <Badge variant=\"subtle\" size=\"sm\" colorPalette={item.countColorPalette ?? \"gray\"} flexShrink={0}>\n {item.countBadge}\n </Badge>\n ) : null}\n </HStack>\n);\n\nconst renderEndContent = (item: DataRendererListItem) => {\n const hasBadges = (item.badges?.length ?? 0) > 0 || (item.customSlots?.length ?? 0) > 0;\n\n if (!hasBadges) return null;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <Badge\n key={badge.attributeId}\n variant=\"subtle\"\n colorPalette={badge.color ?? \"gray\"}\n textStyle=\"label/XS/medium\"\n >\n {badge.label}\n </Badge>\n ))}\n {item.customSlots}\n </Wrap>\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<DataRendererListExpandedState>(() => createDefaultExpandedState(items));\n const [activeDropTargetId, setActiveDropTargetId] = useState<string | null>(null);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n const rows = flattenDataRendererListItems(items, expanded);\n\n const handleExpandedChange = (rowId: string, isExpanded: boolean) => {\n setExpanded((current) => updateExpandedState(current, items, rowId, isExpanded));\n };\n\n return (\n <Box>\n {rows.map((row) => (\n <DataRendererListRow\n key={row.id}\n row={row}\n isExpanded={getRowIsExpanded(expanded, row.id)}\n selectedItemId={selectedItemId}\n activeDropTargetId={activeDropTargetId}\n draggedItemId={draggedItemId}\n onDraggedItemChange={setDraggedItemId}\n onDropTargetChange={setActiveDropTargetId}\n onItemClick={onItemClick}\n onExpandedChange={handleExpandedChange}\n />\n ))}\n </Box>\n );\n};\n\ninterface DataRendererListRowProps {\n row: FlattenedDataRendererListItem;\n isExpanded: boolean;\n selectedItemId: string | null;\n activeDropTargetId: string | null;\n draggedItemId: string | null;\n onDraggedItemChange: (itemId: string | null) => void;\n onDropTargetChange: (itemId: string | null) => void;\n onExpandedChange: (rowId: string, isExpanded: boolean) => void;\n onItemClick?: (item: DataRendererListItem) => void;\n}\n\nconst DataRendererListRow = (props: DataRendererListRowProps) => {\n const {\n row,\n isExpanded,\n selectedItemId,\n activeDropTargetId,\n draggedItemId,\n onDraggedItemChange,\n onDropTargetChange,\n onItemClick,\n onExpandedChange,\n } = props;\n const { item, canExpand } = row;\n const isSelected = item.id === selectedItemId;\n const canDropHere = Boolean(item.onDropRow) && item.id !== draggedItemId;\n const isDropTarget = canDropHere && item.id === activeDropTargetId;\n const rowItem = buildListRowItem(item, canExpand);\n const toggleExpanded = () => onExpandedChange(row.id, !isExpanded);\n\n const handleActivate = () => {\n if (canExpand) {\n toggleExpanded();\n return;\n }\n item.onClick?.();\n onItemClick?.(item);\n };\n\n const handleDragStart = (event: DragEvent<HTMLDivElement>) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n onDraggedItemChange(item.id);\n onDropTargetChange(null);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n onDropTargetChange(item.id);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n onDropTargetChange(null);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere || !item.onDropRow) return;\n event.preventDefault();\n event.stopPropagation();\n onDropTargetChange(null);\n onDraggedItemChange(null);\n const draggedId = event.dataTransfer.getData(\"text/plain\");\n if (!draggedId || draggedId === item.id) return;\n item.onDropRow(draggedId);\n };\n\n const handleDragEnd = () => {\n onDropTargetChange(null);\n onDraggedItemChange(null);\n };\n\n return (\n <Box\n data-drop-target={isDropTarget ? \"true\" : undefined}\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n bg={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n boxShadow={getDropTargetBoxShadow(isDropTarget, canExpand)}\n draggable={item.draggable}\n transition=\"background 120ms ease, box-shadow 120ms ease\"\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragLeave={item.onDropRow ? handleDragLeave : undefined}\n onDragEnd={handleDragEnd}\n onDrop={handleDrop}\n >\n <ListRow\n {...rowItem}\n variant=\"tree\"\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={isExpanded}\n showExpandToggle={canExpand}\n onActivate={handleActivate}\n onToggleExpand={toggleExpanded}\n />\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { EmptyState } from \"@/components/empty-state\";\nimport { DataRendererBoard, type DataRendererBoardColumn } from \"./data-renderer-board\";\nimport { DataRendererList, type DataRendererListItem } from \"./data-renderer-list\";\nimport type { DataRendererSettings } from \"./types\";\n\ninterface DataRendererEmptyStateProps {\n emptyState?: ReactNode;\n title: string;\n description?: string;\n height?: string;\n}\n\ninterface DataRendererContentProps {\n viewMode: DataRendererSettings[\"viewMode\"];\n boardColumns: DataRendererBoardColumn[];\n listItems: DataRendererListItem[];\n selectedRowId: string | null;\n emptyState?: ReactNode;\n emptyTitle: string;\n emptyDescription?: string;\n onBoardMoveItem: (rowId: string, targetColumnId: string) => void;\n onBoardMoveToGroup: (rowId: string, targetGroupKey: string) => void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n listKey: string;\n}\n\nconst DataRendererEmptyState = (props: DataRendererEmptyStateProps) => {\n const { emptyState, title, description, height } = props;\n\n if (emptyState !== undefined) {\n return height ? <Box height={height}>{emptyState}</Box> : emptyState;\n }\n\n return <EmptyState title={title} description={description} height={height} />;\n};\n\nexport const DataRendererContent = (props: DataRendererContentProps) => {\n const {\n viewMode,\n boardColumns,\n listItems,\n selectedRowId,\n emptyState,\n emptyTitle,\n emptyDescription,\n onBoardMoveItem,\n onBoardMoveToGroup,\n onCreateRow,\n onColumnAction,\n listKey,\n } = props;\n\n if (viewMode === \"board\") {\n return (\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <DataRendererBoard\n columns={boardColumns}\n selectedItemId={selectedRowId}\n onMoveItem={onBoardMoveItem}\n onMoveToGroup={onBoardMoveToGroup}\n onCreateStart={onCreateRow}\n onColumnAction={onColumnAction}\n />\n ) : (\n <DataRendererEmptyState\n emptyState={emptyState}\n title={emptyTitle}\n description={emptyDescription}\n height=\"100%\"\n />\n )}\n </Box>\n );\n }\n\n if (listItems.length > 0) {\n return <DataRendererList key={listKey} items={listItems} selectedItemId={selectedRowId} />;\n }\n\n return <DataRendererEmptyState emptyState={emptyState} title={emptyTitle} description={emptyDescription} />;\n};\n","import type { ReactNode } from \"react\";\n\nexport type ViewMode = \"board\" | \"list\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport const NO_GROUPING = \"none\";\nexport const MANUAL_ORDERING = \"manual\";\n\nexport interface EnumOption {\n value: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\n/**\n * Reactive options source for enum / enum-multi attributes. Mirrors React's\n * useSyncExternalStore contract so a contribution can hand its options off as\n * a live collection (e.g. a project-scoped resource) instead of a frozen\n * array, and the renderer subscribes to it the same way it subscribes to rows.\n */\nexport interface EnumOptionsSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => EnumOption[];\n}\n\nexport type EnumOptions = EnumOption[] | EnumOptionsSource;\n\nexport type AttributeType =\n | { kind: \"enum\"; options: EnumOptions }\n | { kind: \"enum-multi\"; options: EnumOptions }\n | { kind: \"string\" }\n | { kind: \"date\" }\n | { kind: \"number\" }\n | { kind: \"user\" };\n\nexport const isEnumOptionsSource = (options: EnumOptions): options is EnumOptionsSource => !Array.isArray(options);\n\nexport type AttributeKind = AttributeType[\"kind\"];\n\nexport interface AttributeDescriptor {\n id: string;\n label: string;\n type: AttributeType;\n filterable?: boolean;\n groupable?: boolean;\n sortable?: boolean;\n displayable?: boolean;\n editable?: boolean;\n render?: (value: unknown, row: DataRendererRow) => ReactNode;\n compare?: (a: unknown, b: unknown) => number;\n}\n\n/**\n * Reactive source for an entire attribute schema. Mirrors React's\n * useSyncExternalStore contract so consumers (e.g. the workbench's\n * data-renderer bridge) can subscribe and re-resolve when the schema changes\n * — letting a contribution add/remove/edit attributes at runtime without\n * re-registering.\n */\nexport interface AttributesSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => AttributeDescriptor[];\n}\n\nexport const isAttributesSource = (\n attributes: AttributeDescriptor[] | AttributesSource,\n): attributes is AttributesSource => !Array.isArray(attributes);\n\nexport interface DataRendererRow {\n id: string;\n title: string;\n /**\n * Optional navigation handle. When set, the renderer's default click handler\n * routes through the contribution's onRowClick (which typically opens the\n * resource via the workbench).\n */\n resource?: unknown;\n attributes: Record<string, unknown>;\n}\n\nexport interface DataRendererOrdering {\n attributeId: string | typeof MANUAL_ORDERING;\n direction: SortDirection;\n}\n\nexport interface DataRendererSettings {\n viewMode: ViewMode;\n columnGrouping: string | typeof NO_GROUPING;\n rowGrouping: string | typeof NO_GROUPING;\n ordering: DataRendererOrdering;\n displayProperties: string[];\n}\n\nexport type DataRendererFilterState = Record<string, string[]>;\n\nexport const DEFAULT_DATA_RENDERER_SETTINGS: DataRendererSettings = {\n viewMode: \"board\",\n columnGrouping: NO_GROUPING,\n rowGrouping: NO_GROUPING,\n ordering: { attributeId: MANUAL_ORDERING, direction: \"asc\" },\n displayProperties: [],\n};\n\nexport const isEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum\" }> =>\n type.kind === \"enum\";\nexport const isMultiEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum-multi\" }> =>\n type.kind === \"enum-multi\";\n\n/**\n * Look up an attribute by id from a contribution-provided descriptor list.\n * Returns undefined for sentinels (\"none\", \"manual\") or unknown ids.\n */\nexport const findAttribute = (attributes: AttributeDescriptor[], id: string | undefined) => {\n if (!id || id === NO_GROUPING || id === MANUAL_ORDERING) return undefined;\n return attributes.find((attribute) => attribute.id === id);\n};\n","import type { ReactNode } from \"react\";\nimport type {\n AttributeDescriptor,\n AttributeType,\n DataRendererFilterState,\n DataRendererRow,\n DataRendererSettings,\n EnumOption,\n} from \"./types\";\nimport { findAttribute, isEnumOptionsSource, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\n/**\n * Normalize an enum / enum-multi attribute's `options` to a plain `EnumOption[]`.\n * Sources resolve via `getSnapshot()` on every call, so callers naturally see\n * the latest values — pair with `useResolvedAttributes` to also rerender on\n * source change.\n */\nexport const getEnumOptions = (type: AttributeType): EnumOption[] => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return [];\n return isEnumOptionsSource(type.options) ? type.options.getSnapshot() : type.options;\n};\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\n/**\n * Read a typed attribute value out of a row. enum-multi normalizes to an array;\n * single-valued kinds normalize to undefined when missing.\n */\nexport const getAttributeValue = (row: DataRendererRow, descriptor: AttributeDescriptor) => {\n const raw = row.attributes[descriptor.id];\n if (descriptor.type.kind === \"enum-multi\") {\n if (Array.isArray(raw)) return raw.filter((entry): entry is string => typeof entry === \"string\");\n return [] as string[];\n }\n return raw;\n};\n\nexport const getAttributeStringValues = (row: DataRendererRow, descriptor: AttributeDescriptor): string[] => {\n const value = getAttributeValue(row, descriptor);\n if (descriptor.type.kind === \"enum-multi\") return value as string[];\n if (value === null || value === undefined) return [];\n if (typeof value === \"string\") return value === \"\" ? [] : [value];\n if (typeof value === \"number\") return [String(value)];\n return [];\n};\n\nexport const findEnumOption = (type: AttributeType, value: string): EnumOption | undefined => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return undefined;\n return getEnumOptions(type).find((option) => option.value === value);\n};\n\nexport const enumOptionLabel = (type: AttributeType, value: string) => {\n const option = findEnumOption(type, value);\n return option?.label ?? toTitleCase(value);\n};\n\nconst formatDateValue = (value: unknown) => {\n if (typeof value !== \"string\" || value === \"\") return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleDateString();\n};\n\nconst formatNumberValue = (value: unknown) => {\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n if (typeof value === \"string\" && value !== \"\" && !Number.isNaN(Number(value))) return value;\n return null;\n};\n\nconst formatStringValue = (value: unknown) => {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return value === \"\" ? null : value;\n return String(value);\n};\n\nconst formatUserValue = (value: unknown) => formatStringValue(value);\n\nconst summarizeMultiEnum = (values: string[], type: AttributeType) => {\n if (values.length === 0) return null;\n if (values.length <= 2) return values.map((value) => enumOptionLabel(type, value)).join(\", \");\n return `${enumOptionLabel(type, values[0]!)}, ${enumOptionLabel(type, values[1]!)} +${values.length - 2}`;\n};\n\nexport interface AttributeBadge {\n attributeId: string;\n label: string;\n color?: string;\n}\n\nconst renderEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum\") return null;\n const stringValue = typeof value === \"string\" ? value : null;\n if (!stringValue) return null;\n const option = findEnumOption(type, stringValue);\n return { attributeId: descriptor.id, label: option?.label ?? toTitleCase(stringValue), color: option?.color };\n};\n\nconst renderMultiEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum-multi\") return null;\n const values = value as string[];\n const summary = summarizeMultiEnum(values, type);\n if (!summary) return null;\n const firstColor = values[0] ? findEnumOption(type, values[0])?.color : undefined;\n return { attributeId: descriptor.id, label: summary, color: firstColor };\n};\n\nconst isRenderableNode = (value: unknown) => value !== null && value !== undefined && value !== false;\n\n/**\n * Per-type default cell summary used by the card / list end-content. Returns\n * null when the attribute has no displayable value.\n */\nexport const renderAttributeBadge = (descriptor: AttributeDescriptor, row: DataRendererRow): AttributeBadge | null => {\n const type = descriptor.type;\n const value = getAttributeValue(row, descriptor);\n\n if (descriptor.render) return null;\n\n if (type.kind === \"enum\") return renderEnumBadge(descriptor, type, value);\n if (type.kind === \"enum-multi\") return renderMultiEnumBadge(descriptor, type, value);\n\n if (type.kind === \"date\") {\n const formatted = formatDateValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"number\") {\n const formatted = formatNumberValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"user\") {\n const formatted = formatUserValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted, color: \"blue\" } : null;\n }\n\n const formatted = formatStringValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n};\n\nexport const collectDisplayBadges = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): AttributeBadge[] => {\n const badges: AttributeBadge[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n const badge = renderAttributeBadge(descriptor, row);\n if (badge) badges.push(badge);\n }\n return badges;\n};\n\nexport const collectDisplayCustomSlots = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): ReactNode[] => {\n const slots: ReactNode[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor?.render || descriptor.displayable === false) continue;\n\n const slot = descriptor.render(getAttributeValue(row, descriptor), row);\n if (isRenderableNode(slot)) slots.push(slot);\n }\n return slots;\n};\n\nconst collectValuesFromRows = (rows: DataRendererRow[], descriptor: AttributeDescriptor) => {\n const values = new Set<string>();\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) values.add(value);\n }\n return values;\n};\n\nexport interface FilterCategoryView {\n id: string;\n label: string;\n options: { value: string; label: string; color?: string }[];\n}\n\n/**\n * Build the filter menu's category list from the declared attributes. Enum\n * descriptors expose their declared options first; auto-derived values from\n * the data fill in the gaps for string / date / number / user attributes (so\n * filter chips for free-form fields don't require declaring every option).\n */\nexport const buildFilterCategories = (\n attributes: AttributeDescriptor[],\n rows: DataRendererRow[],\n): FilterCategoryView[] => {\n const categories: FilterCategoryView[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.filterable) continue;\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const declared = getEnumOptions(descriptor.type);\n const auto = collectValuesFromRows(rows, descriptor);\n const declaredValues = new Set(declared.map((option) => option.value));\n const undeclared = [...auto]\n .filter((value) => !declaredValues.has(value))\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n\n categories.push({\n id: descriptor.id,\n label: descriptor.label,\n options: [\n ...declared.map((option) => ({ value: option.value, label: option.label, color: option.color })),\n ...undeclared,\n ],\n });\n continue;\n }\n\n const auto = [...collectValuesFromRows(rows, descriptor)]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n categories.push({ id: descriptor.id, label: descriptor.label, options: auto });\n }\n return categories;\n};\n\nexport interface MenuOption {\n value: string;\n label: string;\n}\n\nexport const buildGroupingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: NO_GROUPING, label: \"None\" }];\n for (const descriptor of attributes) {\n if (!descriptor.groupable) continue;\n // enum-multi is intentionally not offered for grouping (one row can hold\n // multiple values; we don't double-render).\n if (descriptor.type.kind === \"enum-multi\") continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildOrderingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: MANUAL_ORDERING, label: \"Manual\" }];\n options.push({ value: \"title\", label: \"Title\" });\n for (const descriptor of attributes) {\n if (!descriptor.sortable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildDisplayPropertyOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.displayable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const resolveSubGroupingOptions = (options: MenuOption[], columnGrouping: string) => {\n if (columnGrouping === NO_GROUPING) return options.filter((option) => option.value === NO_GROUPING);\n return options.filter((option) => option.value === NO_GROUPING || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: string, placement?: { columnKey?: string }) => {\n if (columnGrouping === NO_GROUPING) return \"all\";\n return placement?.columnKey;\n};\n\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filters?: DataRendererFilterState,\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const active = filters?.[columnGrouping];\n if (active && active.length > 0) return active;\n const descriptor = findAttribute(attributes, columnGrouping);\n if (!descriptor) return undefined;\n if (descriptor.type.kind === \"enum\") return getEnumOptions(descriptor.type).map((option) => option.value);\n return undefined;\n};\n\nexport const omitFilterCategory = (filters: DataRendererFilterState, id: string): DataRendererFilterState => {\n const next = { ...filters };\n delete next[id];\n return next;\n};\n\n/**\n * Drop persisted settings entries that reference attribute ids no longer\n * declared by the contribution. Falls back to defaults for missing grouping\n * and ordering attributes so a stale saved view still loads cleanly.\n */\nexport const sanitizeSettings = (\n settings: DataRendererSettings,\n attributes: AttributeDescriptor[],\n): DataRendererSettings => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const validGroupingId = (id: string) => id === NO_GROUPING || knownIds.has(id);\n const validOrderingId = (id: string) => id === MANUAL_ORDERING || id === \"title\" || knownIds.has(id);\n\n const columnGrouping = validGroupingId(settings.columnGrouping) ? settings.columnGrouping : NO_GROUPING;\n const rowGrouping = validGroupingId(settings.rowGrouping) ? settings.rowGrouping : NO_GROUPING;\n const orderingId = validOrderingId(settings.ordering.attributeId) ? settings.ordering.attributeId : MANUAL_ORDERING;\n const displayProperties = settings.displayProperties.filter(validGroupingId);\n\n return {\n viewMode: settings.viewMode,\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId, direction: settings.ordering.direction },\n displayProperties,\n };\n};\n\nexport const sanitizeFilters = (filters: DataRendererFilterState, attributes: AttributeDescriptor[]) => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!knownIds.has(id)) continue;\n if (!values || values.length === 0) continue;\n next[id] = values;\n }\n return next;\n};\n","import {\n enumOptionLabel,\n getAttributeStringValues,\n getAttributeValue,\n getEnumOptions,\n toTitleCase,\n} from \"./data-renderer-helpers\";\nimport {\n type AttributeDescriptor,\n type AttributeType,\n type DataRendererFilterState,\n type DataRendererOrdering,\n type DataRendererRow,\n findAttribute,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface GroupingOptions {\n attributes: AttributeDescriptor[];\n columnGrouping: string;\n rowGrouping: string;\n knownColumnKeys?: string[];\n}\n\ninterface DataRendererRowGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n}\n\ninterface DataRendererColumnGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n subgroups: DataRendererRowGroup[];\n}\n\nconst UNASSIGNED_LABEL = \"Unassigned\";\n\nconst fallbackLabel = (descriptor: AttributeDescriptor) => `No ${descriptor.label.toLowerCase()}`;\n\nconst labelForGroupKey = (key: string, descriptor: AttributeDescriptor | undefined) => {\n if (!descriptor) return key === NO_GROUPING ? \"All\" : key;\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")\n return enumOptionLabel(descriptor.type, key);\n return key;\n};\n\nconst getGroupingKey = (row: DataRendererRow, descriptor: AttributeDescriptor | undefined, columnId: string) => {\n if (columnId === NO_GROUPING) return \"all\";\n if (!descriptor) return \"all\";\n // Grouping by an enum-multi is intentionally rejected at the renderer level\n // (the contribution lists it as non-groupable). Defensive fallback: treat\n // each row as a single bucket using its first value, else fallback.\n if (descriptor.type.kind === \"enum-multi\") {\n const [first] = getAttributeStringValues(row, descriptor);\n return first ?? fallbackLabel(descriptor);\n }\n const [value] = getAttributeStringValues(row, descriptor);\n return value ?? fallbackLabel(descriptor);\n};\n\nconst compareGroupKey = (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true });\n\nconst compareGroupKeyForDescriptor = (a: string, b: string, descriptor: AttributeDescriptor | undefined) => {\n if (descriptor && (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")) {\n const ordered = compareEnumValues(a, b, descriptor.type);\n if (ordered !== 0) return ordered;\n }\n return compareGroupKey(a, b);\n};\n\nconst orderByDirection = (value: number, direction: DataRendererOrdering[\"direction\"]) =>\n direction === \"asc\" ? value : value * -1;\n\nconst compareEnumValues = (left: string | undefined, right: string | undefined, type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return 0;\n const options = getEnumOptions(type);\n const toIndex = (value: string | undefined) => {\n if (value === undefined) return options.length;\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? options.length + 1 : index;\n };\n return toIndex(left) - toIndex(right);\n};\n\nconst compareForDescriptor = (a: DataRendererRow, b: DataRendererRow, descriptor: AttributeDescriptor) => {\n if (descriptor.compare) return descriptor.compare(getAttributeValue(a, descriptor), getAttributeValue(b, descriptor));\n\n const left = getAttributeValue(a, descriptor);\n const right = getAttributeValue(b, descriptor);\n\n if (descriptor.type.kind === \"date\") {\n const leftTime = typeof left === \"string\" ? new Date(left).getTime() : 0;\n const rightTime = typeof right === \"string\" ? new Date(right).getTime() : 0;\n return leftTime - rightTime;\n }\n\n if (descriptor.type.kind === \"number\") {\n const leftNum = typeof left === \"number\" ? left : Number(left ?? 0);\n const rightNum = typeof right === \"number\" ? right : Number(right ?? 0);\n return leftNum - rightNum;\n }\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const [leftValue] = getAttributeStringValues(a, descriptor);\n const [rightValue] = getAttributeStringValues(b, descriptor);\n return compareEnumValues(leftValue, rightValue, descriptor.type);\n }\n\n const leftString = typeof left === \"string\" ? left : String(left ?? \"\");\n const rightString = typeof right === \"string\" ? right : String(right ?? \"\");\n return leftString.localeCompare(rightString, undefined, { numeric: true });\n};\n\nexport const orderRows = (\n rows: DataRendererRow[],\n ordering: DataRendererOrdering,\n attributes: AttributeDescriptor[],\n) => {\n if (ordering.attributeId === MANUAL_ORDERING) return rows;\n\n if (ordering.attributeId === \"title\") {\n return [...rows].sort((a, b) => orderByDirection(a.title.localeCompare(b.title), ordering.direction));\n }\n\n const descriptor = findAttribute(attributes, ordering.attributeId);\n if (!descriptor) return rows;\n\n return [...rows].sort((a, b) => orderByDirection(compareForDescriptor(a, b, descriptor), ordering.direction));\n};\n\nexport const groupRows = (rows: DataRendererRow[], options: GroupingOptions): DataRendererColumnGroup[] => {\n const { attributes, columnGrouping, rowGrouping, knownColumnKeys } = options;\n const columnDescriptor = findAttribute(attributes, columnGrouping);\n const rowDescriptor = findAttribute(attributes, rowGrouping);\n const groupedByColumn = new Map<string, DataRendererRow[]>();\n\n if (knownColumnKeys) {\n for (const key of knownColumnKeys) groupedByColumn.set(key, []);\n }\n\n for (const row of rows) {\n const key = getGroupingKey(row, columnDescriptor, columnGrouping);\n groupedByColumn.set(key, [...(groupedByColumn.get(key) ?? []), row]);\n }\n\n const columnEntries = [...groupedByColumn.entries()].sort(([left], [right]) =>\n compareGroupKeyForDescriptor(left, right, columnDescriptor),\n );\n\n return columnEntries.map(([columnKey, columnRows]) => {\n const label = labelForGroupKey(columnKey, columnDescriptor);\n\n if (rowGrouping === NO_GROUPING) {\n return { key: columnKey, label, rows: columnRows, subgroups: [] };\n }\n\n const groupedByRow = new Map<string, DataRendererRow[]>();\n for (const row of columnRows) {\n const rowKey = getGroupingKey(row, rowDescriptor, rowGrouping);\n groupedByRow.set(rowKey, [...(groupedByRow.get(rowKey) ?? []), row]);\n }\n\n const subgroups = [...groupedByRow.entries()]\n .sort(([left], [right]) => compareGroupKeyForDescriptor(left, right, rowDescriptor))\n .map(([rowKey, rowRows]) => ({\n key: rowKey,\n label: labelForGroupKey(rowKey, rowDescriptor) || toTitleCase(rowKey || UNASSIGNED_LABEL),\n rows: rowRows,\n }));\n\n return { key: columnKey, label, rows: columnRows, subgroups };\n });\n};\n\nconst matchesFilter = (row: DataRendererRow, descriptor: AttributeDescriptor, values: string[]) => {\n const rowValues = getAttributeStringValues(row, descriptor);\n return rowValues.some((value) => values.includes(value));\n};\n\nexport const filterRows = (\n rows: DataRendererRow[],\n filters: DataRendererFilterState,\n attributes: AttributeDescriptor[],\n) => {\n const activeFilters = Object.entries(filters).filter(\n (entry): entry is [string, string[]] => Array.isArray(entry[1]) && entry[1].length > 0,\n );\n if (activeFilters.length === 0) return rows;\n\n return rows.filter((row) =>\n activeFilters.every(([id, values]) => {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor) return true;\n return matchesFilter(row, descriptor, values);\n }),\n );\n};\n\nexport const countFilterValues = (rows: DataRendererRow[], attributeId: string, attributes: AttributeDescriptor[]) => {\n const counts: Record<string, number> = {};\n const descriptor = findAttribute(attributes, attributeId);\n if (!descriptor) return counts;\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) {\n counts[value] = (counts[value] ?? 0) + 1;\n }\n }\n return counts;\n};\n\nexport type { DataRendererColumnGroup, DataRendererRowGroup };\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 { type MenuOption, resolveSubGroupingOptions } from \"./data-renderer-helpers\";\nimport type { DataRendererSettings } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: DataRendererSettings;\n groupingOptions: MenuOption[];\n orderingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: DataRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onOrderingAttributeIdChange: (value: string) => void;\n onSortDirectionToggle: () => void;\n onDisplayPropertyToggle: (property: string) => 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 = (props: {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n}) => {\n const selectedLabel = props.options.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoneFirst = props.options[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 {props.options.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoneFirst && 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 onOrderingAttributeIdChange,\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) onRowGroupingChange(\"none\");\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.attributeId}\n options={orderingOptions}\n onSelect={onOrderingAttributeIdChange}\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 { FilterCategoryView } from \"./data-renderer-helpers\";\nimport type { DataRendererFilterState } from \"./types\";\n\ninterface FilterMenuProps {\n categories: FilterCategoryView[];\n filters: DataRendererFilterState;\n countsByCategory: Record<string, Record<string, number>>;\n onToggleFilterValue: (attributeId: string, value: string) => void;\n onClearFilter: (attributeId: string) => 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<string>(categories[0]?.id ?? \"\");\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 ref={triggerRef} aria-label=\"Filter rows\" variant=\"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 ref={contentRef} width=\"420px\" p=\"0\" bg=\"bg\" overflow=\"hidden\">\n <HStack align=\"stretch\" gap=\"0\" minH=\"320px\">\n <Stack minWidth=\"180px\" 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 { createBrowserStorage } from \"../../utils/browser-storage\";\nimport { omitFilterCategory } from \"./data-renderer-helpers\";\nimport {\n type DataRendererFilterState,\n type DataRendererSettings,\n DEFAULT_DATA_RENDERER_SETTINGS,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface DataRendererSnapshot {\n settings: DataRendererSettings;\n filters: DataRendererFilterState;\n}\n\ninterface DataRendererStoreInitialState {\n settings?: Partial<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 setOrderingAttributeId: (attributeId: DataRendererSettings[\"ordering\"][\"attributeId\"]) => void;\n setDisplayProperties: (displayProperties: string[]) => void;\n toggleSortDirection: () => void;\n toggleDisplayProperty: (property: string) => void;\n setFilter: (attributeId: string, values: string[]) => void;\n toggleFilterValue: (attributeId: string, value: string) => void;\n clearFilter: (attributeId: string) => void;\n clearAllFilters: () => void;\n reset: () => void;\n}\n\ninterface CreateDataRendererStoreOptions {\n storageKey: string;\n initialState?: DataRendererStoreInitialState;\n}\n\nconst WORKSPACE_STORE_NAMESPACE = \"pstdio/ui/data-renderer\";\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 createSnapshot = (initialState?: DataRendererStoreInitialState): DataRendererSnapshot => ({\n settings: { ...DEFAULT_SNAPSHOT.settings, ...(initialState?.settings ?? {}) },\n filters: initialState?.filters ?? DEFAULT_SNAPSHOT.filters,\n});\n\nconst toggleValue = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\n// Strip the legacy \"tag:\" prefix used before attributes became first-class.\nconst stripTagPrefix = (id: string) => (id.startsWith(\"tag:\") ? id.slice(4) : id);\n\nconst migrateSettings = (settings: Record<string, unknown>): DataRendererSettings => {\n const orderingRaw = settings.ordering as Record<string, unknown> | undefined;\n const orderingId =\n typeof orderingRaw?.attributeId === \"string\"\n ? (orderingRaw.attributeId as string)\n : typeof orderingRaw?.field === \"string\"\n ? stripTagPrefix(orderingRaw.field as string)\n : MANUAL_ORDERING;\n const orderingDirection = (\n orderingRaw?.direction === \"desc\" ? \"desc\" : \"asc\"\n ) as DataRendererSettings[\"ordering\"][\"direction\"];\n\n const columnGrouping =\n typeof settings.columnGrouping === \"string\" ? stripTagPrefix(settings.columnGrouping) : NO_GROUPING;\n const rowGrouping = typeof settings.rowGrouping === \"string\" ? stripTagPrefix(settings.rowGrouping) : NO_GROUPING;\n const displayProperties = Array.isArray(settings.displayProperties)\n ? (settings.displayProperties as unknown[])\n .filter((entry): entry is string => typeof entry === \"string\")\n .map(stripTagPrefix)\n : [];\n\n return {\n viewMode: settings.viewMode === \"list\" ? \"list\" : \"board\",\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId === \"manual\" ? MANUAL_ORDERING : orderingId, direction: orderingDirection },\n displayProperties,\n };\n};\n\nconst migrateFilters = (filters: Record<string, unknown>): DataRendererFilterState => {\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!Array.isArray(values)) continue;\n const stringValues = values.filter((value): value is string => typeof value === \"string\");\n if (stringValues.length === 0) continue;\n next[stripTagPrefix(id)] = stringValues;\n }\n return next;\n};\n\nexport const createDataRendererStore = (options: CreateDataRendererStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = createSnapshot(initialState);\n\n return createStore<DataRendererState>()(\n persist(\n (set) => ({\n ...snapshot,\n setViewMode: (viewMode) => set((state) => ({ ...state, settings: { ...state.settings, viewMode } })),\n setColumnGrouping: (columnGrouping) =>\n set((state) => ({ ...state, settings: { ...state.settings, columnGrouping } })),\n setRowGrouping: (rowGrouping) => set((state) => ({ ...state, settings: { ...state.settings, rowGrouping } })),\n setOrdering: (ordering) => set((state) => ({ ...state, settings: { ...state.settings, ordering } })),\n setOrderingAttributeId: (attributeId) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, ordering: { ...state.settings.ordering, attributeId } },\n })),\n setDisplayProperties: (displayProperties) =>\n set((state) => ({ ...state, settings: { ...state.settings, displayProperties } })),\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 return { ...state, settings: { ...state.settings, displayProperties } };\n }),\n setFilter: (attributeId, values) =>\n set((state) => ({ ...state, filters: { ...state.filters, [attributeId]: values } })),\n toggleFilterValue: (attributeId, value) =>\n set((state) => {\n const currentValues = state.filters[attributeId] ?? [];\n const nextValues = toggleValue(currentValues, value);\n const nextFilters =\n nextValues.length === 0\n ? omitFilterCategory(state.filters, attributeId)\n : { ...state.filters, [attributeId]: nextValues };\n return { ...state, filters: nextFilters };\n }),\n clearFilter: (attributeId) =>\n set((state) => ({ ...state, filters: omitFilterCategory(state.filters, attributeId) })),\n clearAllFilters: () => set((state) => ({ ...state, filters: {} })),\n reset: () => set(snapshot),\n }),\n {\n name: toStorageName(storageKey),\n version: 2,\n migrate: (persisted, version) => {\n if (!persisted || typeof persisted !== \"object\") return persisted as DataRendererSnapshot;\n const state = persisted as { settings?: Record<string, unknown>; filters?: Record<string, unknown> };\n if (version >= 2) return state as unknown as DataRendererSnapshot;\n return {\n settings: migrateSettings(state.settings ?? {}),\n filters: migrateFilters(state.filters ?? {}),\n };\n },\n storage: createJSONStorage(createBrowserStorage),\n partialize: (state) => ({ settings: state.settings, filters: state.filters }),\n },\n ),\n );\n};\n\nconst workspaceStoreRegistry = new Map<string, ReturnType<typeof createDataRendererStore>>();\n\nexport const getDataRendererStore = (storageKey: string, initialState?: DataRendererStoreInitialState) => {\n const existingStore = workspaceStoreRegistry.get(storageKey);\n if (existingStore) return existingStore;\n\n const store = createDataRendererStore({ storageKey, initialState });\n workspaceStoreRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useDataRendererStore = <T>(\n storageKey: string,\n selector: (state: DataRendererState) => T,\n initialState?: DataRendererStoreInitialState,\n) => {\n const store = getDataRendererStore(storageKey, initialState);\n return useStore(store, selector);\n};\n\nexport type { DataRendererSnapshot, DataRendererState, DataRendererStoreInitialState };\n","import { useEffect, useReducer } from \"react\";\n\nimport type { AttributeDescriptor, EnumOptionsSource } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\nconst collectSources = (attributes: AttributeDescriptor[]): EnumOptionsSource[] => {\n const sources: EnumOptionsSource[] = [];\n for (const attribute of attributes) {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") continue;\n if (isEnumOptionsSource(attribute.type.options)) sources.push(attribute.type.options);\n }\n return sources;\n};\n\n/**\n * Returns the same descriptors with every source-backed enum's options\n * replaced by a fresh `getSnapshot()` array. Pure — call from anywhere that\n * needs a normalized view of the schema.\n */\nexport const resolveAttributeOptions = (attributes: AttributeDescriptor[]): AttributeDescriptor[] =>\n attributes.map((attribute) => {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") return attribute;\n if (!isEnumOptionsSource(attribute.type.options)) return attribute;\n return { ...attribute, type: { ...attribute.type, options: attribute.type.options.getSnapshot() } };\n });\n\n/**\n * Subscribes to every source-backed enum in `attributes` and returns the\n * resolved descriptors (options materialized to plain arrays). When any\n * source's listener fires the component rerenders, so downstream renders see\n * the new snapshot automatically.\n */\nexport const useResolvedAttributes = (attributes: AttributeDescriptor[]) => {\n const [, forceRender] = useReducer((tick: number) => tick + 1, 0);\n\n useEffect(() => {\n const sources = collectSources(attributes);\n if (sources.length === 0) return;\n const refresh = () => forceRender();\n const unsubscribes = sources.map((source) => source.subscribe(refresh));\n return () => {\n for (const dispose of unsubscribes) dispose();\n };\n }, [attributes]);\n\n return resolveAttributeOptions(attributes);\n};\n","import { Box, HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { countFilterValues } from \"./data-renderer-grouping\";\nimport {\n buildDisplayPropertyOptions,\n buildFilterCategories,\n buildGroupingOptions,\n buildOrderingOptions,\n} from \"./data-renderer-helpers\";\nimport { DisplayMenu } from \"./display-menu\";\nimport { FilterMenu } from \"./filter-menu\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\nexport interface DataRendererToolbarProps<TRow extends DataRendererRow = DataRendererRow> {\n rows: TRow[];\n storageKey: string;\n attributes: AttributeDescriptor[];\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n leading?: ReactNode;\n align?: \"split\" | \"end\";\n}\n\nexport const DataRendererToolbar = <TRow extends DataRendererRow>(props: DataRendererToolbarProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n defaultSettings,\n defaultFilters,\n leading,\n align = \"split\",\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const groupingOptions = buildGroupingOptions(attributes);\n const orderingOptions = buildOrderingOptions(attributes);\n const displayPropertyOptions = buildDisplayPropertyOptions(attributes);\n\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n const setViewMode = useDataRendererStore(storageKey, (state) => state.setViewMode, initialState);\n const setColumnGrouping = useDataRendererStore(storageKey, (state) => state.setColumnGrouping, initialState);\n const setRowGrouping = useDataRendererStore(storageKey, (state) => state.setRowGrouping, initialState);\n const setOrderingAttributeId = useDataRendererStore(\n storageKey,\n (state) => state.setOrderingAttributeId,\n initialState,\n );\n const toggleSortDirection = useDataRendererStore(storageKey, (state) => state.toggleSortDirection, initialState);\n const toggleDisplayProperty = useDataRendererStore(storageKey, (state) => state.toggleDisplayProperty, initialState);\n const toggleFilterValue = useDataRendererStore(storageKey, (state) => state.toggleFilterValue, initialState);\n const clearFilter = useDataRendererStore(storageKey, (state) => state.clearFilter, initialState);\n const clearAllFilters = useDataRendererStore(storageKey, (state) => state.clearAllFilters, initialState);\n\n const categoryOptions = buildFilterCategories(attributes, rows);\n const countsByCategory = Object.fromEntries(\n categoryOptions.map((category) => [category.id, countFilterValues(rows, category.id, attributes)]),\n );\n\n return (\n <HStack\n gap=\"2xs\"\n minW=\"0\"\n w={align === \"split\" ? \"full\" : undefined}\n flexShrink={0}\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n padding=\"2xs\"\n >\n {leading}\n {align === \"split\" ? <Box flex=\"1\" /> : null}\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 onOrderingAttributeIdChange={setOrderingAttributeId}\n onSortDirectionToggle={toggleSortDirection}\n onDisplayPropertyToggle={toggleDisplayProperty}\n />\n </HStack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type {\n DataRendererBoardColumn,\n DataRendererBoardColumnAction,\n DataRendererBoardGroup,\n} from \"./data-renderer-board\";\nimport { DataRendererContent } from \"./data-renderer-content\";\nimport { type DataRendererColumnGroup, filterRows, groupRows, orderRows } from \"./data-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveKnownColumnKeys,\n resolveListDropTargetColumnKey,\n} from \"./data-renderer-helpers\";\nimport type { DataRendererListItem } from \"./data-renderer-list\";\nimport { DataRendererToolbar } from \"./data-renderer-toolbar\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\nexport interface BoardColumnConfig {\n color?: string;\n canDragIn?: boolean;\n canDragOut?: boolean;\n canCreate?: boolean;\n actions?: DataRendererBoardColumnAction[];\n}\n\nexport interface DataRendererProps<TRow extends DataRendererRow = DataRendererRow> {\n rows: TRow[];\n storageKey: string;\n attributes: AttributeDescriptor[];\n selectedRowId?: string | null;\n emptyState?: ReactNode;\n emptyTitle?: string;\n emptyDescription?: string;\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n hideToolbar?: boolean;\n toolbarLeading?: ReactNode;\n onRowClick?: (row: TRow) => void;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => void;\n onReorder?: (rowId: string, beforeRowId?: string) => void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\ninterface BuildListItemsInput<TRow extends DataRendererRow> {\n settings: DataRendererSettings;\n visibleRows: TRow[];\n grouped: DataRendererColumnGroup[];\n attributes: AttributeDescriptor[];\n onRowClick?: (row: TRow) => void;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => void;\n onReorder?: (rowId: string, beforeRowId?: string) => void;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nconst buildListItems = <TRow extends DataRendererRow>(input: BuildListItemsInput<TRow>): DataRendererListItem[] => {\n const {\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n } = input;\n\n const supportsManualReorder = settings.ordering.attributeId === MANUAL_ORDERING;\n const getGroupColorPalette = (attributeId: string, key: string) => {\n const descriptor = findAttribute(attributes, attributeId);\n return descriptor ? findEnumOption(descriptor.type, key)?.color : undefined;\n };\n\n const toListItem = (row: TRow, placement?: { columnKey?: string; rowKey?: string }): DataRendererListItem => ({\n id: row.id,\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n contextMenuActions: getRowContextMenuActions?.(row),\n onClick: () => onRowClick?.(row),\n draggable: Boolean(onAttributeChange || onReorder),\n onDropRow:\n supportsManualReorder && (onAttributeChange || onReorder)\n ? (draggedId) => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (targetColumnKey && settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n onAttributeChange(draggedId, settings.columnGrouping, targetColumnKey);\n }\n if (settings.rowGrouping !== NO_GROUPING && placement?.rowKey && onAttributeChange) {\n onAttributeChange(draggedId, settings.rowGrouping, placement.rowKey);\n }\n onReorder?.(draggedId, row.id);\n }\n : undefined,\n });\n\n const toSubgroupListItem = (\n subgroup: { key: string; label: string; rows: DataRendererRow[] },\n parent?: { columnKey: string },\n ): DataRendererListItem => ({\n id: parent ? `group::${parent.columnKey}::${subgroup.key}` : `group::${subgroup.key}`,\n title: subgroup.label,\n countBadge: subgroup.rows.length,\n countColorPalette: getGroupColorPalette(parent ? settings.rowGrouping : settings.columnGrouping, subgroup.key),\n onDropRow:\n onAttributeChange && settings.columnGrouping !== NO_GROUPING\n ? (draggedId) => {\n const columnKey = parent?.columnKey ?? subgroup.key;\n onAttributeChange(draggedId, settings.columnGrouping, columnKey);\n if (settings.rowGrouping !== NO_GROUPING && parent) {\n onAttributeChange(draggedId, settings.rowGrouping, subgroup.key);\n }\n }\n : undefined,\n children: orderRows(subgroup.rows, settings.ordering, attributes).map((row) =>\n toListItem(row as TRow, {\n columnKey: parent?.columnKey ?? subgroup.key,\n rowKey: parent ? subgroup.key : undefined,\n }),\n ),\n });\n\n if (settings.columnGrouping === NO_GROUPING) {\n return orderRows(visibleRows, settings.ordering, attributes).map((row) => toListItem(row as TRow));\n }\n\n return grouped.map((column) => {\n if (column.subgroups.length > 0) {\n return {\n id: `group::${column.key}`,\n title: column.label,\n countBadge: column.rows.length,\n countColorPalette: getGroupColorPalette(settings.columnGrouping, column.key),\n onDropRow: onAttributeChange\n ? (draggedId: string) => onAttributeChange(draggedId, settings.columnGrouping, column.key)\n : undefined,\n children: column.subgroups.map((subgroup) => toSubgroupListItem(subgroup, { columnKey: column.key })),\n } satisfies DataRendererListItem;\n }\n\n return toSubgroupListItem(column);\n });\n};\n\nexport const DataRenderer = <TRow extends DataRendererRow>(props: DataRendererProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n selectedRowId = null,\n emptyState,\n emptyTitle = \"No rows found\",\n emptyDescription = \"Try changing filters or display settings.\",\n defaultSettings,\n defaultFilters,\n onRowClick,\n onAttributeChange,\n onReorder,\n onCreateRow,\n onColumnAction,\n getBoardColumnConfig,\n getRowContextMenuActions,\n hideToolbar = false,\n toolbarLeading,\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n\n const visibleRows = filterRows(rows, filters, attributes) as TRow[];\n\n const knownColumnKeys = resolveKnownColumnKeys(settings.columnGrouping, attributes, filters);\n\n const grouped = groupRows(visibleRows, {\n attributes,\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys,\n });\n\n const listItems = buildListItems({\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n });\n\n const toBoardItems = (boardRows: DataRendererRow[]) =>\n boardRows.map((row) => ({\n id: row.id,\n contextMenuActions: getRowContextMenuActions?.(row as TRow),\n cardProps: {\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n onClick: () => onRowClick?.(row as TRow),\n },\n }));\n\n const columnGroupingDescriptor = findAttribute(attributes, settings.columnGrouping);\n\n const boardColumns: DataRendererBoardColumn[] = grouped.map((column) => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n const orderedRows = orderRows(column.rows, settings.ordering, attributes);\n // Fall back to the enum option's declared color when the contribution\n // doesn't provide one — keeps the board in sync with the schema by\n // default (matches how card / list badges already pick up enum colors).\n const enumColor = columnGroupingDescriptor\n ? findEnumOption(columnGroupingDescriptor.type, column.key)?.color\n : undefined;\n\n const groups: DataRendererBoardGroup[] | undefined =\n column.subgroups.length > 0\n ? column.subgroups.map((subgroup) => ({\n key: subgroup.key,\n label: subgroup.label,\n items: toBoardItems(orderRows(subgroup.rows, settings.ordering, attributes)),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color ?? enumColor,\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(orderedRows),\n groups,\n } satisfies DataRendererBoardColumn;\n });\n\n const handleBoardMoveItem = (rowId: string, targetColumnId: string) => {\n if (settings.columnGrouping === NO_GROUPING || !onAttributeChange) return;\n onAttributeChange(rowId, settings.columnGrouping, targetColumnId);\n };\n\n const handleBoardMoveToGroup = (rowId: string, targetGroupKey: string) => {\n if (settings.rowGrouping === NO_GROUPING || !onAttributeChange) return;\n onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n };\n\n return (\n <Stack height=\"100%\" minH=\"0\" gap=\"0\">\n {hideToolbar ? null : (\n <DataRendererToolbar\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={defaultSettings}\n defaultFilters={defaultFilters}\n leading={toolbarLeading}\n />\n )}\n\n <DataRendererContent\n viewMode={settings.viewMode}\n boardColumns={boardColumns}\n listItems={listItems}\n selectedRowId={selectedRowId}\n emptyState={emptyState}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n onBoardMoveItem={handleBoardMoveItem}\n onBoardMoveToGroup={handleBoardMoveToGroup}\n onCreateRow={onCreateRow}\n onColumnAction={onColumnAction}\n listKey={`${settings.columnGrouping}:${settings.rowGrouping}`}\n />\n </Stack>\n );\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\n// Extensions whose byte content cannot be meaningfully shown as a unified diff.\n// SVG is intentionally excluded — it is text-based XML and benefits from a line diff.\nconst binaryDiffExtensions = new Set([\n \"avif\",\n \"bmp\",\n \"gif\",\n \"heic\",\n \"ico\",\n \"jpeg\",\n \"jpg\",\n \"png\",\n \"tif\",\n \"tiff\",\n \"webp\",\n \"pdf\",\n \"zip\",\n \"tar\",\n \"gz\",\n \"tgz\",\n \"rar\",\n \"7z\",\n \"exe\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"wasm\",\n \"class\",\n \"jar\",\n \"mp3\",\n \"mp4\",\n \"mov\",\n \"ogg\",\n \"wav\",\n \"webm\",\n \"flac\",\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n]);\n\nconst imageDiffExtensions = new Set([\"avif\", \"bmp\", \"gif\", \"heic\", \"ico\", \"jpeg\", \"jpg\", \"png\", \"tif\", \"tiff\", \"webp\"]);\n\nconst getExtension = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n const ext = fileName.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\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\nexport const isBinaryDiffPath = (path: string) => {\n const ext = getExtension(path);\n return ext.length > 0 && binaryDiffExtensions.has(ext);\n};\n\nexport const isImageDiffPath = (path: string) => {\n const ext = getExtension(path);\n return ext.length > 0 && imageDiffExtensions.has(ext);\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, isBinaryDiffPath, isImageDiffPath } 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 (isBinaryDiffPath(filePath)) {\n return {\n kind: \"binary\" as const,\n filePath,\n isImage: isImageDiffPath(filePath),\n };\n }\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 ) : model.kind === \"binary\" ? (\n <BinaryDiffPlaceholder isImage={model.isImage} />\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\ninterface BinaryDiffPlaceholderProps {\n isImage: boolean;\n}\n\nconst BinaryDiffPlaceholder = (props: BinaryDiffPlaceholderProps) => {\n const { isImage } = props;\n const title = isImage ? \"Image diffs are not shown\" : \"Binary diffs are not shown\";\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title={title} paddingY=\"sm\" />\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Skeleton, Stack } 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\nconst loadingDiffContentRows = [\"first\", \"second\", \"third\"] as const;\n\nexport const LoadingDiffContent = () => (\n <Stack\n h=\"280px\"\n bg=\"bg\"\n borderTop=\"1px solid\"\n borderColor=\"border.muted\"\n p=\"xs\"\n gap=\"2xs\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading diff\"\n >\n {loadingDiffContentRows.map((row) => (\n <Skeleton key={row} h=\"20px\" w=\"full\" borderRadius=\"xs\" />\n ))}\n </Stack>\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 isBinaryDiff: 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 isBinaryDiff,\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 (isBinaryDiff) {\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={false}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n }\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 { isBinaryDiffPath, 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 isBinaryDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const { isExpanded, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, requestedPath, filePath } = input;\n\n return (\n isExpanded && !hasDiffContent && !isLargeDiff && !isGeneratedDiff && !isBinaryDiff && requestedPath !== filePath\n );\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 isBinaryDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, onLoadDiff } =\n 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 isBinaryDiff,\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 isBinaryDiff = isBinaryDiffPath(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 isBinaryDiff,\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 isBinaryDiff={isBinaryDiff}\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 { Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\nimport { ScrollArea } from \"../scroll-area\";\n\nexport const DiffDrawerEmptyState = () => (\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","import type { Diff } from \"./diff-card\";\nimport { isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\nconst CARD_HEADER_HEIGHT = 34;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 34;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst ITEM_GAP_HEIGHT = 8;\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","import type { Diff } from \"./diff-card\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface EstimateDiffRangeHeightInput {\n diffs: Diff[];\n collapsedPaths: Set<string>;\n largeDiffOptInPaths: Set<string>;\n diffViewMode: DiffViewMode;\n startIndex: number;\n endIndex: number;\n}\n\ninterface SelectedExpansionCommand {\n action: string;\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\ninterface ResolveSelectedScrollStateInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: SelectedExpansionCommand | null;\n completedScrollCommandId: number | null;\n}\n\nexport interface RenderedDiffItem {\n element: HTMLElement;\n index: number;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst PINNED_DIFF_LOOKBEHIND_COUNT = 24;\n\nexport const estimateDiffRangeHeight = (input: EstimateDiffRangeHeightInput) => {\n const { diffs, collapsedPaths, largeDiffOptInPaths, diffViewMode, startIndex, endIndex } = input;\n let offset = 0;\n for (let diffIndex = startIndex; diffIndex < endIndex; diffIndex += 1) {\n const diff = diffs[diffIndex];\n const path = getDiffPath(diff);\n offset += estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n }\n return offset;\n};\n\nexport const resolveSelectedScrollState = (input: ResolveSelectedScrollStateInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, expansionCommand, completedScrollCommandId } = input;\n let selectedScrollPath = selectedDiffPath;\n let selectedScrollSourceKey = selectedDiffPath ? `selected:${selectedDiffPath}` : null;\n const selectedScrollCommandId = expansionCommand?.action === \"expand-selected\" ? expansionCommand.id : null;\n const hasCompletedSelectedScroll =\n selectedScrollCommandId !== null && completedScrollCommandId === selectedScrollCommandId;\n\n if (expansionCommand?.action === \"expand-selected\" && expansionCommand.path) {\n selectedScrollPath = expansionCommand.path;\n selectedScrollSourceKey = `command:${expansionCommand.id}:${expansionCommand.path}`;\n }\n\n let selectedScrollKey = selectedScrollSourceKey;\n if (selectedScrollPath && selectedScrollSourceKey) {\n const selectedScrollExpansionState = collapsedPaths.has(selectedScrollPath) ? \"collapsed\" : \"expanded\";\n selectedScrollKey = `${selectedScrollSourceKey}:${selectedScrollExpansionState}`;\n }\n\n const selectedScrollIndex = selectedScrollPath\n ? diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath)\n : -1;\n const shouldPinSelectedScrollIndex =\n selectedScrollIndex >= 0 &&\n expansionCommand?.action === \"expand-selected\" &&\n expansionCommand.direction === \"up\" &&\n !hasCompletedSelectedScroll;\n\n return {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n };\n};\n\nexport const includePinnedDiffIndexes = (input: {\n indexes: number[];\n selectedScrollIndex: number;\n shouldPinSelectedScrollIndex: boolean;\n}) => {\n const { indexes, selectedScrollIndex, shouldPinSelectedScrollIndex } = input;\n if (!shouldPinSelectedScrollIndex || indexes.includes(selectedScrollIndex)) return indexes;\n\n const pinnedStartIndex = Math.max(0, selectedScrollIndex - PINNED_DIFF_LOOKBEHIND_COUNT);\n const pinnedIndexes = Array.from(\n { length: selectedScrollIndex - pinnedStartIndex + 1 },\n (_, index) => pinnedStartIndex + index,\n );\n\n return Array.from(new Set([...indexes, ...pinnedIndexes])).sort((a, b) => a - b);\n};\n\nexport const getRenderedDiffItems = (scrollElement: HTMLElement | null) =>\n Array.from(scrollElement?.querySelectorAll<HTMLElement>(\"[data-index]\") ?? [])\n .filter((element) => element.querySelector('[data-testid=\"diff-card\"]'))\n .map((element) => ({ element, index: Number(element.dataset.index) }))\n .filter((item): item is RenderedDiffItem => Number.isInteger(item.index))\n .sort((a, b) => a.index - b.index);\n\nexport const getElementScrollOffset = (input: { element: HTMLElement; scrollElement: HTMLElement | null }) => {\n const { element, scrollElement } = input;\n if (!scrollElement) return element.offsetTop;\n\n const elementRect = element.getBoundingClientRect();\n const scrollRect = scrollElement.getBoundingClientRect();\n return scrollElement.scrollTop + elementRect.top - scrollRect.top;\n};\n","import { useLayoutEffect, useState } from \"react\";\nimport type { Diff } from \"./diff-card\";\nimport type { DiffExpansionCommand } from \"./diff-drawer\";\nimport {\n estimateDiffRangeHeight,\n getElementScrollOffset,\n getRenderedDiffItems,\n resolveSelectedScrollState,\n} from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface UseSelectedDiffScrollInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n largeDiffOptInPaths: Set<string>;\n expansionCommand: DiffExpansionCommand | null;\n diffViewMode: DiffViewMode;\n scrollRef: { current: HTMLDivElement | null };\n}\n\nconst SELECTED_ALIGNMENT_THRESHOLD = 72;\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nexport const useSelectedDiffScroll = (input: UseSelectedDiffScrollInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, largeDiffOptInPaths, expansionCommand, diffViewMode, scrollRef } =\n input;\n const [completedScrollCommandId, setCompletedScrollCommandId] = useState<number | null>(null);\n const {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n } = resolveSelectedScrollState({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n completedScrollCommandId,\n });\n\n useLayoutEffect(() => {\n if (!selectedScrollPath || !selectedScrollKey) return;\n if (hasCompletedSelectedScroll) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath);\n if (index < 0) return;\n\n const frameIds: number[] = [];\n let cancelledByUserScroll = false;\n const scrollElement = scrollRef.current;\n const cancelSelectedScroll = () => {\n cancelledByUserScroll = true;\n if (selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n }\n };\n const estimateRangeHeight = (startIndex: number, endIndex: number) => {\n return estimateDiffRangeHeight({\n diffs,\n collapsedPaths,\n largeDiffOptInPaths,\n diffViewMode,\n startIndex,\n endIndex,\n });\n };\n const scrollToOffset = (offset: number) => {\n if (cancelledByUserScroll) return;\n scrollRef.current?.scrollTo({ top: Math.max(0, offset), behavior: \"auto\" });\n };\n const scrollToSelectedDiff = () => scrollToOffset(estimateRangeHeight(0, index));\n const alignRenderedSelectedDiff = () => {\n const renderedItems = getRenderedDiffItems(scrollRef.current);\n const selectedItem = renderedItems.find((item) => item.index === index);\n if (selectedItem) {\n const selectedOffset = getElementScrollOffset({ element: selectedItem.element, scrollElement });\n const currentOffset = selectedOffset - (scrollElement?.scrollTop ?? 0);\n if (Math.abs(currentOffset) >= SELECTED_ALIGNMENT_THRESHOLD) {\n scrollToOffset(selectedOffset);\n }\n return Math.abs(currentOffset) < SELECTED_ALIGNMENT_THRESHOLD;\n }\n\n const firstItem = renderedItems[0];\n const lastItem = renderedItems.at(-1);\n if (firstItem && firstItem.index > index) {\n scrollToOffset(\n getElementScrollOffset({ element: firstItem.element, scrollElement }) -\n estimateRangeHeight(index, firstItem.index),\n );\n return false;\n }\n if (lastItem && lastItem.index < index) {\n scrollToOffset(\n getElementScrollOffset({ element: lastItem.element, scrollElement }) +\n estimateRangeHeight(lastItem.index, index),\n );\n return false;\n }\n if (!firstItem || !lastItem) {\n scrollToSelectedDiff();\n }\n return false;\n };\n let alignmentAttempts = 0;\n const reconcileSelectedDiff = () => {\n if (cancelledByUserScroll) return;\n const isAligned = alignRenderedSelectedDiff();\n alignmentAttempts += 1;\n const hasSettled = alignmentAttempts >= 3;\n if (isAligned && hasSettled && !collapsedPaths.has(selectedScrollPath) && selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n return;\n }\n if ((!isAligned || !hasSettled) && alignmentAttempts < 10) {\n frameIds.push(requestAnimationFrame(reconcileSelectedDiff));\n }\n };\n\n scrollElement?.addEventListener(\"wheel\", cancelSelectedScroll, { passive: true });\n scrollElement?.addEventListener(\"touchmove\", cancelSelectedScroll, { passive: true });\n const isInitiallyAligned = alignRenderedSelectedDiff();\n if (!shouldPinSelectedScrollIndex && !isInitiallyAligned) {\n scrollToSelectedDiff();\n }\n\n frameIds.push(requestAnimationFrame(reconcileSelectedDiff));\n\n return () => {\n scrollElement?.removeEventListener(\"wheel\", cancelSelectedScroll);\n scrollElement?.removeEventListener(\"touchmove\", cancelSelectedScroll);\n for (const frameId of frameIds) {\n cancelAnimationFrame(frameId);\n }\n };\n }, [\n selectedScrollKey,\n selectedScrollPath,\n selectedScrollCommandId,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n diffs,\n collapsedPaths,\n largeDiffOptInPaths,\n diffViewMode,\n scrollRef,\n ]);\n\n return { selectedScrollIndex, shouldPinSelectedScrollIndex };\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { defaultRangeExtractor, useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { DiffDrawerEmptyState } from \"./diff-drawer-empty-state\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport { includePinnedDiffIndexes } from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\nimport { useSelectedDiffScroll } from \"./use-selected-diff-scroll\";\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 direction?: \"up\" | \"down\";\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\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 const { selectedScrollIndex, shouldPinSelectedScrollIndex } = useSelectedDiffScroll({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n largeDiffOptInPaths,\n expansionCommand,\n diffViewMode,\n scrollRef,\n });\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 rangeExtractor: (range) => {\n const indexes = defaultRangeExtractor(range);\n return includePinnedDiffIndexes({ indexes, selectedScrollIndex, shouldPinSelectedScrollIndex });\n },\n });\n virtualizer.shouldAdjustScrollPositionOnItemSizeChange = (_item, _delta, instance) => !instance.isScrolling;\n\n useLayoutEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useLayoutEffect(() => {\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) return <DiffDrawerEmptyState />;\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}px` }}\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 type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nexport const isInList = (id: string, values: string[]) => values.includes(id);\n\nexport const isActiveNode = (id: string, activeNodeId?: string | string[] | null) =>\n Array.isArray(activeNodeId) ? activeNodeId.includes(id) : activeNodeId === id;\n\nexport const isNavigableNode = (node: TreeListNode) => node.isNavigable || node.navigationIntent !== undefined;\n\nexport const getNodeChildren = (node: TreeListNode) => (node.children as TreeListNode[] | undefined) ?? [];\n\nexport const hasExpandableChildren = (node: TreeListNode) =>\n getNodeChildren(node).length > 0 || node.isContainer === true;\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; parentNodeId?: string }\n | { kind: \"section-empty\"; key: string; sectionId: string; emptyState: TreeListSection[\"emptyState\"] };\n\nexport type VirtualNodeRow = Extract<VirtualRow, { kind: \"node\" }>;\nexport type VirtualSectionHeaderRow = Extract<VirtualRow, { kind: \"section-header\" }>;\n\n/** Rows the keyboard can land on: enabled nodes and collapsible section headers. */\nexport type FocusableRow = VirtualNodeRow | VirtualSectionHeaderRow;\n\nconst appendVisibleNodeRows = (input: {\n rows: VirtualRow[];\n sectionId: string;\n nodes: TreeListNode[];\n expandedNodeIds: string[];\n level: number;\n parentNodeId?: string;\n}) => {\n const { rows, sectionId, nodes, expandedNodeIds, level, parentNodeId } = input;\n\n for (const node of nodes) {\n rows.push({ kind: \"node\", key: `${sectionId}:${node.id}`, sectionId, node, level, parentNodeId });\n\n const children = getNodeChildren(node);\n if (children.length === 0 || !isInList(node.id, expandedNodeIds)) continue;\n\n appendVisibleNodeRows({\n rows,\n sectionId,\n nodes: children,\n expandedNodeIds,\n level: level + 1,\n parentNodeId: node.id,\n });\n }\n};\n\nexport const buildVirtualRows = (\n sections: TreeListSection[],\n expandedSectionIds: string[],\n expandedNodeIds: string[],\n) => {\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\n/** Stable id used to track keyboard focus across renders. */\nexport const getRowFocusId = (row: FocusableRow) => (row.kind === \"node\" ? row.node.id : row.key);\n\nexport const isFocusableRow = (row: VirtualRow): row is FocusableRow => {\n if (row.kind === \"node\") return row.node.disabled !== true;\n return row.kind === \"section-header\" && row.collapsible;\n};\n\nexport const getFocusableRows = (rows: VirtualRow[]) => rows.filter(isFocusableRow);\n\nexport const resolveTreeListFocusRowId = (\n focusedRowId: string | undefined,\n activeNodeId: string | string[] | null | undefined,\n rows: VirtualRow[],\n) => {\n const focusableRows = getFocusableRows(rows);\n const focusableIds = new Set(focusableRows.map(getRowFocusId));\n if (focusedRowId && focusableIds.has(focusedRowId)) return focusedRowId;\n\n const activeIds = Array.isArray(activeNodeId) ? activeNodeId : activeNodeId ? [activeNodeId] : [];\n const activeId = activeIds.find((id) => focusableIds.has(id));\n if (activeId) return activeId;\n\n const firstRow = focusableRows[0];\n return firstRow ? getRowFocusId(firstRow) : undefined;\n};\n\nconst resolveSectionHeaderNavigation = (input: {\n row: VirtualSectionHeaderRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, key } = input;\n\n if (key === \"Enter\" || key === \" \") return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n if (key === \"ArrowRight\") {\n if (!row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.sectionId === row.sectionId) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\" && row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n return null;\n};\n\nconst resolveNodeNavigation = (input: {\n row: VirtualNodeRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, expandedNodeIds, key } = input;\n const expanded = isInList(row.node.id, expandedNodeIds);\n const expandable = hasExpandableChildren(row.node);\n\n if (key === \"ArrowRight\") {\n if (!expandable) return null;\n if (!expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.parentNodeId === row.node.id) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\") {\n if (expandable && expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n if (row.parentNodeId) return { type: \"focus\" as const, rowId: row.parentNodeId };\n }\n\n return null;\n};\n\nexport const resolveTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n focusedRowId: string | undefined;\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { rows, focusedRowId, activeNodeId, expandedNodeIds, key } = input;\n const focusableRows = getFocusableRows(rows);\n if (focusableRows.length === 0) return null;\n\n const resolvedFocusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const currentIndex = Math.max(\n 0,\n focusableRows.findIndex((row) => getRowFocusId(row) === resolvedFocusRowId),\n );\n const currentRow = focusableRows[currentIndex];\n if (!currentRow) return null;\n\n const focusByIndex = (index: number) => {\n const clamped = Math.min(Math.max(index, 0), focusableRows.length - 1);\n return { type: \"focus\" as const, rowId: getRowFocusId(focusableRows[clamped]!) };\n };\n\n if (key === \"ArrowDown\") return focusByIndex(currentIndex + 1);\n if (key === \"ArrowUp\") return focusByIndex(currentIndex - 1);\n if (key === \"Home\") return focusByIndex(0);\n if (key === \"End\") return focusByIndex(focusableRows.length - 1);\n\n if (currentRow.kind === \"section-header\") {\n return resolveSectionHeaderNavigation({ row: currentRow, focusableRows, currentIndex, key });\n }\n\n return resolveNodeNavigation({ row: currentRow, focusableRows, currentIndex, expandedNodeIds, key });\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FocusEventHandler } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode } from \"./tree-list.types\";\nimport { hasExpandableChildren, isActiveNode, isInList, isNavigableNode } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\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 tabIndex?: number;\n onFocus?: FocusEventHandler<HTMLElement>;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nexport const TreeListNodeRow = (props: TreeListNodeRowProps) => {\n const {\n sectionId,\n node,\n level,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent: LinkComponent,\n tabIndex,\n onFocus,\n onNavigate,\n onToggleNode,\n } = props;\n\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 rowProps = {\n ...rowItem,\n depth: level,\n variant: rowVariant,\n isSelected: isActive,\n isExpanded: expanded,\n showExpandToggle: hasChildren,\n tabIndex,\n \"data-tree-list-focus-id\": node.id,\n \"aria-level\": level + 1,\n \"aria-expanded\": hasChildren ? expanded : undefined,\n onFocus,\n onActivate: handleActivate,\n onToggleExpand: () => onToggleNode?.(node.id),\n };\n\n const row =\n canLink && LinkComponent && node.href ? (\n <LinkComponent to={node.href}>\n <ListRow {...rowProps} asChild />\n </LinkComponent>\n ) : (\n <ListRow {...rowProps} />\n );\n\n return (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {row}\n </Stack>\n );\n};\n","import { Box, HStack, IconButton, Menu, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { FocusEventHandler, MouseEvent as ReactMouseEvent } from \"react\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport type { TreeListAction, TreeListSection } from \"./tree-list.types\";\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 focusId: string;\n tabIndex: number;\n onFocus: FocusEventHandler<HTMLElement>;\n onToggle: () => void;\n onContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nexport const TreeListSectionHeader = (props: TreeListSectionHeaderProps) => {\n const { section, collapsible, expanded, focusId, tabIndex, onFocus, onToggle, onContextMenu } = 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 tabIndex={collapsible ? tabIndex : undefined}\n data-tree-list-focus-id={collapsible ? focusId : undefined}\n aria-expanded={collapsible ? expanded : undefined}\n _hover={collapsible ? { bg: \"bg.hover\" } : undefined}\n _focusVisible={collapsible ? { bg: \"bg.hover\" } : undefined}\n onFocus={collapsible ? onFocus : undefined}\n onClick={collapsible ? onToggle : undefined}\n onContextMenu={\n onContextMenu\n ? (event) => {\n event.preventDefault();\n onContextMenu(event, section.id);\n }\n : undefined\n }\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","import type { TreeListSection } from \"./tree-list.types\";\n\nconst SECTION_PREFIX = \"section:\";\n\nexport const toSectionDragId = (sectionId: string) => `${SECTION_PREFIX}${sectionId}`;\nexport const isSectionDragId = (id: string) => id.startsWith(SECTION_PREFIX);\nexport const fromSectionDragId = (id: string) => id.slice(SECTION_PREFIX.length);\n\nconst arrayMoveInPlace = <T>(items: T[], from: number, to: number) => {\n const next = items.slice();\n const [removed] = next.splice(from, 1);\n next.splice(to, 0, removed);\n return next;\n};\n\nexport type ReorderResult =\n | { kind: \"section\"; nextSectionIds: string[] }\n | { kind: \"node\"; sectionId: string; nextNodeIds: string[] };\n\nexport const computeReorderResult = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n): ReorderResult | null => {\n if (activeId === overId) return null;\n\n if (isSectionDragId(activeId) && isSectionDragId(overId)) {\n const orderedIds = sections.map((section) => section.id);\n const oldIndex = orderedIds.indexOf(fromSectionDragId(activeId));\n const newIndex = orderedIds.indexOf(fromSectionDragId(overId));\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) return null;\n return { kind: \"section\", nextSectionIds: arrayMoveInPlace(orderedIds, oldIndex, newIndex) };\n }\n\n for (const section of sections) {\n const nodeIds = section.nodes.map((node) => node.id);\n const oldIndex = nodeIds.indexOf(activeId);\n const newIndex = nodeIds.indexOf(overId);\n if (oldIndex < 0 || newIndex < 0) continue;\n if (oldIndex === newIndex) return null;\n return {\n kind: \"node\",\n sectionId: section.id,\n nextNodeIds: arrayMoveInPlace(nodeIds, oldIndex, newIndex),\n };\n }\n\n return null;\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { computeReorderResult, toSectionDragId } from \"./tree-list-reorder\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface SortableHostProps {\n id: string;\n children: (input: {\n setNodeRef: (element: HTMLElement | null) => void;\n attributes: ReturnType<typeof useSortable>[\"attributes\"];\n listeners: ReturnType<typeof useSortable>[\"listeners\"];\n style: { transform?: string; transition?: string; opacity?: number };\n }) => React.ReactNode;\n}\n\n// Render-prop sortable host. The child decides which DOM node receives the\n// drag listeners so we never paint a visible grip glyph — the row or section\n// header is itself the drag handle. Clicks pass through because the pointer\n// sensor activates only after the cursor moves 4px (configured below).\nconst SortableHost = (props: SortableHostProps) => {\n const sortable = useSortable({ id: props.id });\n const style = {\n transform: CSS.Transform.toString(sortable.transform),\n transition: sortable.transition,\n opacity: sortable.isDragging ? 0.5 : 1,\n };\n return (\n <>\n {props.children({\n setNodeRef: sortable.setNodeRef,\n attributes: sortable.attributes,\n listeners: sortable.listeners,\n style,\n })}\n </>\n );\n};\n\ninterface SortableSectionGroupProps {\n section: TreeListSection;\n sectionRows: VirtualRow[];\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst SortableSectionGroup = (props: SortableSectionGroupProps) => {\n const {\n section,\n sectionRows,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = props;\n\n const headerRow = sectionRows.find((row) => row.kind === \"section-header\");\n const nodeRows = sectionRows.filter((row) => row.kind === \"node\");\n const topLevelNodeIds = nodeRows\n .filter((row) => row.kind === \"node\" && row.level === 0)\n .map((row) => (row.kind === \"node\" ? row.node.id : \"\"));\n\n return (\n <SortableHost id={toSectionDragId(section.id)}>\n {({ setNodeRef, attributes, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\">\n {headerRow && headerRow.kind === \"section-header\" ? (\n // Drag listeners live on the header so dragging the section moves\n // it, while click-to-collapse still works via the activation\n // distance on the pointer sensor.\n <Box {...attributes} {...listeners}>\n <TreeListSectionHeader\n section={headerRow.section}\n collapsible={headerRow.collapsible}\n expanded={headerRow.expanded}\n focusId={headerRow.key}\n tabIndex={-1}\n onFocus={() => {}}\n onToggle={() => onToggleSection?.(headerRow.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n </Box>\n ) : null}\n <SortableContext items={topLevelNodeIds} strategy={verticalListSortingStrategy}>\n <Stack gap={nodeGap} w=\"full\" minW=\"0\">\n {nodeRows.map((row) =>\n row.kind === \"node\" ? (\n <SortableOrPlainNodeRow\n key={row.key}\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ) : null,\n )}\n </Stack>\n </SortableContext>\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface SortableOrPlainNodeRowProps {\n row: Extract<VirtualRow, { kind: \"node\" }>;\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}\n\nconst renderNodeRow = (input: {\n node: TreeListNode;\n sectionId: string;\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}) => (\n <TreeListNodeRow\n sectionId={input.sectionId}\n node={input.node}\n level={input.level}\n expandedNodeIds={input.expandedNodeIds}\n activeNodeId={input.activeNodeId}\n rowVariant={input.rowVariant}\n nodeGap={input.nodeGap}\n linkComponent={input.linkComponent}\n onNavigate={input.onNavigate}\n onToggleNode={input.onToggleNode}\n />\n);\n\n// Top-level nodes participate in their section's SortableContext; nested rows\n// inherit position from their parent and render plain (cross-section moves are\n// out of scope per the ADR).\nconst SortableOrPlainNodeRow = (props: SortableOrPlainNodeRowProps) => {\n const { row, ...rest } = props;\n if (row.level > 0) {\n return renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest });\n }\n return (\n <SortableHost id={row.node.id}>\n {({ setNodeRef, attributes, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\" {...attributes} {...listeners}>\n {renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest })}\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface TreeListSortableProps {\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 onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nexport const TreeListSortable = (props: TreeListSortableProps) => {\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 onSectionContextMenu,\n onReorderSections,\n onReorderNodes,\n } = props;\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }));\n\n const handleDragEnd = (event: DragEndEvent) => {\n if (!event.over) return;\n const result = computeReorderResult(sections, String(event.active.id), String(event.over.id));\n if (!result) return;\n if (result.kind === \"section\") {\n onReorderSections?.(result.nextSectionIds);\n } else {\n onReorderNodes?.(result.sectionId, result.nextNodeIds);\n }\n };\n\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n\n return (\n <DndContext sensors={sensors} onDragEnd={handleDragEnd}>\n <SortableContext\n items={sections.map((section) => toSectionDragId(section.id))}\n strategy={verticalListSortingStrategy}\n >\n <Stack gap={sectionGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {sections.map((section) => (\n <SortableSectionGroup\n key={section.id}\n section={section}\n sectionRows={rows.filter((row) => row.sectionId === section.id)}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n />\n ))}\n </Stack>\n </SortableContext>\n </DndContext>\n );\n};\n","import { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport {\n getFocusableRows,\n getRowFocusId,\n isFocusableRow,\n resolveTreeListFocusRowId,\n resolveTreeListKeyboardNavigation,\n type VirtualRow,\n} from \"./tree-list-model\";\n\nconst findRowElement = (root: HTMLElement | null, focusId: string) => {\n if (!root) return null;\n const elements = root.querySelectorAll<HTMLElement>(\"[data-tree-list-focus-id]\");\n return [...elements].find((element) => element.dataset.treeListFocusId === focusId) ?? null;\n};\n\nconst findFocusedRowId = (root: HTMLElement | null, target: EventTarget | null) => {\n if (!root || !(target instanceof HTMLElement) || !root.contains(target)) return undefined;\n return target.closest<HTMLElement>(\"[data-tree-list-focus-id]\")?.dataset.treeListFocusId;\n};\n\nconst isTextEditingTarget = (target: EventTarget | null) => {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n return [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName);\n};\n\nconst getRowIndex = (rows: VirtualRow[], focusId: string) =>\n rows.findIndex((row) => isFocusableRow(row) && getRowFocusId(row) === focusId);\n\nexport const useTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n onToggleNode?: (nodeId: string) => void;\n onToggleSection?: (sectionId: string) => void;\n scrollToRow?: (index: number) => void;\n}) => {\n const { rows, activeNodeId, expandedNodeIds, onToggleNode, onToggleSection, scrollToRow } = input;\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [focusedRowId, setFocusedRowId] = useState<string>();\n const [pendingFocusRowId, setPendingFocusRowId] = useState<string>();\n const focusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const focusableRowIds = getFocusableRows(rows).map(getRowFocusId).join(\"\\0\");\n\n useEffect(() => {\n if (!focusedRowId) return;\n if (focusableRowIds.split(\"\\0\").includes(focusedRowId)) return;\n setFocusedRowId(undefined);\n }, [focusedRowId, focusableRowIds]);\n\n useEffect(() => {\n if (!pendingFocusRowId) return;\n const frame = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const element = findRowElement(rootRef.current, pendingFocusRowId);\n if (!element) return;\n element.focus();\n setPendingFocusRowId(undefined);\n });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [pendingFocusRowId]);\n\n const focusRow = (rowId: string) => {\n setFocusedRowId(rowId);\n const element = findRowElement(rootRef.current, rowId);\n if (element) {\n element.focus();\n return;\n }\n\n const rowIndex = getRowIndex(rows, rowId);\n if (rowIndex === -1) return;\n scrollToRow?.(rowIndex);\n setPendingFocusRowId(rowId);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (isTextEditingTarget(event.target)) return;\n\n const navigation = resolveTreeListKeyboardNavigation({\n rows,\n focusedRowId: findFocusedRowId(rootRef.current, event.target) ?? focusRowId,\n activeNodeId,\n expandedNodeIds,\n key: event.key,\n });\n if (!navigation) return;\n\n event.preventDefault();\n if (navigation.type === \"toggle-node\") {\n onToggleNode?.(navigation.nodeId);\n return;\n }\n if (navigation.type === \"toggle-section\") {\n onToggleSection?.(navigation.sectionId);\n return;\n }\n\n focusRow(navigation.rowId);\n };\n\n return {\n focusRowId,\n rootRef,\n handleKeyDown,\n onRowFocus: (rowId: string) => setFocusedRowId(rowId),\n };\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { MouseEvent as ReactMouseEvent, RefObject } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\nimport { TreeListSortable } from \"./tree-list-sortable\";\nimport { useTreeListKeyboardNavigation } from \"./use-tree-list-keyboard-navigation\";\n\nexport { buildVirtualRows } from \"./tree-list-model\";\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 onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n virtualize?: boolean;\n scrollRef?: RefObject<HTMLDivElement | null>;\n // When true, sections and items render with drag handles. Virtualization is\n // bypassed (per the ADR) — customizable trees are typically small. Hosts\n // must supply onReorderSections / onReorderNodes to persist the new order.\n draggable?: boolean;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface RenderVirtualRowInput {\n row: VirtualRow;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n focusRowId?: string;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onRowFocus: (rowId: string) => void;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst renderVirtualRow = (input: RenderVirtualRowInput) => {\n const {\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = input;\n\n if (row.kind === \"section-header\") {\n return (\n <TreeListSectionHeader\n section={row.section}\n collapsible={row.collapsible}\n expanded={row.expanded}\n focusId={row.key}\n tabIndex={row.key === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.key)}\n onToggle={() => onToggleSection?.(row.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n );\n }\n\n if (row.kind === \"section-empty\") return row.emptyState ?? null;\n\n return (\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 tabIndex={row.node.id === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.node.id)}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n );\n};\n\ninterface VirtualTreeListProps extends TreeListProps {\n rows: VirtualRow[];\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nconst VirtualTreeList = (props: VirtualTreeListProps) => {\n const {\n rows,\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n scrollRef,\n } = props;\n\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 const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n scrollToRow: (index) => virtualizer.scrollToIndex(index, { align: \"auto\" }),\n });\n\n return (\n <Box\n ref={keyboard.rootRef}\n role=\"listbox\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n style={{ height: virtualizer.getTotalSize() }}\n onKeyDown={keyboard.handleKeyDown}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = rows[virtualItem.index];\n if (!row) return null;\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 {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n );\n })}\n </Box>\n );\n};\n\nconst StackTreeList = (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 onSectionContextMenu,\n virtualize,\n scrollRef,\n } = props;\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n });\n\n if (virtualize && scrollRef) {\n return <VirtualTreeList {...props} rows={rows} scrollRef={scrollRef} />;\n }\n\n return (\n <Stack\n ref={keyboard.rootRef}\n role=\"listbox\"\n gap={sectionGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n overflowX=\"hidden\"\n onKeyDown={keyboard.handleKeyDown}\n >\n {sections.map((section) => {\n const sectionRows = rows.filter((row) => row.sectionId === section.id);\n\n return (\n <Stack\n key={section.id}\n gap={nodeGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n data-testid={`tree-list-section-${section.id}`}\n >\n {sectionRows.map((row) => (\n <Box key={row.key} w=\"full\" minW=\"0\">\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n ))}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n\nexport const TreeList = (props: TreeListProps) => {\n if (props.draggable) {\n return (\n <TreeListSortable\n sections={props.sections}\n expandedSectionIds={props.expandedSectionIds}\n expandedNodeIds={props.expandedNodeIds}\n activeNodeId={props.activeNodeId}\n rowVariant={props.rowVariant}\n sectionGap={props.sectionGap}\n nodeGap={props.nodeGap}\n linkComponent={props.linkComponent}\n onNavigate={props.onNavigate}\n onToggleSection={props.onToggleSection}\n onToggleNode={props.onToggleNode}\n onSectionContextMenu={props.onSectionContextMenu}\n onReorderSections={props.onReorderSections}\n onReorderNodes={props.onReorderNodes}\n />\n );\n }\n\n return <StackTreeList {...props} />;\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 const emptyTitle = searchQuery.trim() ? \"No matching files\" : \"No changed files\";\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={emptyTitle} 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 loadingDiffItems = [\"first\", \"second\", \"third\"] as const;\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" bg=\"bg\" p=\"xs\" gap=\"xs\" role=\"status\" aria-busy=\"true\" aria-label=\"Loading diff panel\">\n {loadingDiffItems.map((item) => (\n <Skeleton key={item} h=\"72px\" w=\"full\" flexShrink=\"0\" borderRadius=\"xs\" />\n ))}\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 hasDiffs = filteredDiffs.length > 0;\n const emptyDiffTitle = normalizedSearchQuery ? \"No matching diffs\" : \"No changes\";\n const showDiffEmptyState = !loading && !hasDiffs;\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 const currentIndex = resolvedSelectedPath ? filteredDiffPaths.indexOf(resolvedSelectedPath) : -1;\n const nextIndex = filteredDiffPaths.indexOf(path);\n const direction = currentIndex >= 0 && nextIndex >= 0 && nextIndex < currentIndex ? \"up\" : \"down\";\n\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", direction, 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\" minW=\"0\">\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 <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 {filePaths.length > 0 ? (\n <>\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 {showDiffEmptyState ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {emptyDiffTitle}\n </Text>\n ) : null}\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={emptyDiffTitle} />\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 <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 </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 { Grid, GridItem, Icon, IconButton, Popover, Text } from \"@chakra-ui/react\";\nimport {\n AlertTriangle,\n BookOpen,\n Bug,\n ChartColumnIncreasing,\n CheckCircle,\n Circle,\n CircleQuestionMark,\n Clock,\n Code,\n Eye,\n Flag,\n Flame,\n Gauge,\n Lightbulb,\n Shield,\n ShieldAlert,\n Sparkles,\n Star,\n Tag,\n Wrench,\n} from \"lucide-react\";\nimport type { ComponentType } from \"react\";\n\nexport interface IconColorPickerIconOption {\n value: string | null;\n label: string;\n icon: ComponentType;\n}\n\nexport const optionColors = [\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n] as const;\n\nexport const optionIcons = [\n { value: null, label: \"circle\", icon: Circle },\n { value: \"bug\", label: \"bug\", icon: Bug },\n { value: \"sparkles\", label: \"sparkles\", icon: Sparkles },\n { value: \"book-open\", label: \"book open\", icon: BookOpen },\n { value: \"wrench\", label: \"wrench\", icon: Wrench },\n { value: \"gauge\", label: \"gauge\", icon: Gauge },\n { value: \"alert-triangle\", label: \"alert triangle\", icon: AlertTriangle },\n { value: \"star\", label: \"star\", icon: Star },\n { value: \"flag\", label: \"flag\", icon: Flag },\n { value: \"flame\", label: \"flame\", icon: Flame },\n { value: \"lightbulb\", label: \"lightbulb\", icon: Lightbulb },\n { value: \"shield\", label: \"shield\", icon: Shield },\n { value: \"eye\", label: \"eye\", icon: Eye },\n { value: \"clock\", label: \"clock\", icon: Clock },\n { value: \"check-circle\", label: \"check circle\", icon: CheckCircle },\n { value: \"tag\", label: \"tag\", icon: Tag },\n { value: \"code\", label: \"code\", icon: Code },\n { value: \"chart-column-increasing\", label: \"chart column increasing\", icon: ChartColumnIncreasing },\n { value: \"circle-question-mark\", label: \"circle question mark\", icon: CircleQuestionMark },\n { value: \"shield-alert\", label: \"shield alert\", icon: ShieldAlert },\n] satisfies IconColorPickerIconOption[];\n\nexport const getIconComponent = (\n name: string | null | undefined,\n iconOptions: readonly IconColorPickerIconOption[] = optionIcons,\n): ComponentType => {\n const entry = iconOptions.find((icon) => icon.value === (name ?? null));\n return entry?.icon ?? Circle;\n};\n\nexport interface IconColorPickerProps {\n color: string;\n colorOptions?: readonly string[];\n icon?: string | null;\n iconOptions?: readonly IconColorPickerIconOption[];\n onColorChange: (color: string) => void;\n onIconChange?: (icon: string | null) => void;\n disabled?: boolean;\n showIcons?: boolean;\n \"aria-label\"?: string;\n}\n\nexport const IconColorPicker = (props: IconColorPickerProps) => {\n const {\n color,\n colorOptions = optionColors,\n icon,\n iconOptions = optionIcons,\n onColorChange,\n onIconChange,\n disabled,\n showIcons = true,\n \"aria-label\": ariaLabel = \"Pick color and icon\",\n } = props;\n const IconComponent = showIcons ? getIconComponent(icon, iconOptions) : Circle;\n const selectedIcon = icon ?? null;\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" disabled={disabled} aria-label={ariaLabel}>\n <Icon\n as={IconComponent}\n boxSize=\"14px\"\n color={`${color}.500`}\n fill={showIcons ? undefined : `${color}.500`}\n />\n </IconButton>\n </Popover.Trigger>\n <Popover.Positioner>\n <Popover.Content w={showIcons ? \"320px\" : \"220px\"} p=\"sm\" bg=\"bg\">\n <Text textStyle=\"label/S\" mb=\"xs\">\n Color\n </Text>\n <Grid\n templateColumns={showIcons ? \"repeat(10, 1fr)\" : \"repeat(5, 1fr)\"}\n gap=\"2xs\"\n mb={showIcons ? \"md\" : \"0\"}\n >\n {colorOptions.map((optionColor) => (\n <GridItem key={optionColor}>\n <IconButton\n size=\"2xs\"\n variant={optionColor === color ? \"solid\" : \"ghost\"}\n colorPalette={optionColor}\n onClick={() => onColorChange(optionColor)}\n aria-label={optionColor}\n >\n <Icon as={Circle} boxSize=\"14px\" fill={`${optionColor}.500`} color={`${optionColor}.500`} />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n {showIcons ? (\n <>\n <Text textStyle=\"label/S\" mb=\"xs\">\n Icon\n </Text>\n <Grid templateColumns=\"repeat(5, 1fr)\" gap=\"2xs\">\n {iconOptions.map((entry) => (\n <GridItem key={entry.value ?? \"none\"}>\n <IconButton\n size=\"2xs\"\n variant={entry.value === selectedIcon ? \"solid\" : \"ghost\"}\n onClick={() => onIconChange?.(entry.value)}\n aria-label={entry.label}\n >\n <Icon as={entry.icon} boxSize=\"14px\" />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n </>\n ) : null}\n </Popover.Content>\n </Popover.Positioner>\n </Popover.Root>\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\";\nimport { ScrollArea } from \"@/components/scroll-area\";\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 <ScrollArea maxHeight=\"12rem\" contentProps={{ paddingEnd: \"1\" }}>\n <Toast.Description whiteSpace=\"pre-wrap\" wordBreak=\"break-word\">\n {toast.description}\n </Toast.Description>\n </ScrollArea>\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, 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;\nconst ACTIVE_ROW_BG = \"bg.menu-item.hover\";\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 role=\"listbox\" 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 <ListRow\n variant=\"compact\"\n {...buildEntryItem(row.entry)}\n isSelected={row.entryIndex === activeIndex}\n selectedBg={ACTIVE_ROW_BG}\n hoverBg={row.entryIndex === activeIndex ? ACTIVE_ROW_BG : \"transparent\"}\n tabIndex={-1}\n onPointerMove={() => onHover(row.entryIndex)}\n />\n )}\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { CloseButton, Dialog, Input, InputGroup } 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 onQueryChange?: (query: string) => 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\nconst paletteInputStateProps = {\n borderColor: \"transparent\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\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 onQueryChange,\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 onQueryChange?.(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 borderColor=\"transparent\"\n borderRadius=\"0\"\n h=\"3rem\"\n _hover={paletteInputStateProps}\n _active={paletteInputStateProps}\n _focus={paletteInputStateProps}\n _focusVisible={paletteInputStateProps}\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 <PaletteList\n entries={filteredEntries}\n activeIndex={activeIndex}\n emptyLabel={emptyLabel}\n onHover={setActiveIndex}\n scrollRef={scrollRef}\n />\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 { Slider } from \"../slider\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\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 { ColorInput } from \"./color-input\";\nimport { DateInput } from \"./date-input\";\nimport { NumberInput } from \"./number-input\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { SelectionInput } from \"./selection-input\";\nimport { TextInput } from \"./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 { ColorInput } from \"./color-input\";\nimport { DateInput } from \"./date-input\";\nimport { InputGroupComponent } from \"./input-group\";\nimport { NumberInput } from \"./number-input\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { SelectionInput } from \"./selection-input\";\nimport { TextInput } from \"./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=\"sm\">\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\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\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 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(createBrowserStorage),\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","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\n\ninterface TabVisibilitySnapshot {\n tabOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TabVisibilityState extends TabVisibilitySnapshot {\n setTab: (key: string, value: VisibilityOverride | undefined) => void;\n toggleTab: (key: string, hiddenByDefault: boolean) => void;\n clearTab: (key: string) => void;\n reset: () => void;\n}\n\ninterface CreateTabVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TabVisibilitySnapshot = { tabOverrides: {} };\n\nconst STORE_NAMESPACE = \"pstdio/ui/tab-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n key: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(key in overrides)) return overrides;\n const { [key]: _removed, ...rest } = overrides;\n return rest;\n }\n if (overrides[key] === value) return overrides;\n return { ...overrides, [key]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, key: string, hiddenByDefault: boolean) => {\n const current = resolveEffective(overrides[key], hiddenByDefault);\n return setOverride(overrides, key, current === \"hidden\" ? \"shown\" : \"hidden\");\n};\n\nconst getPersistedSnapshot = (state: TabVisibilityState) => ({ tabOverrides: state.tabOverrides });\n\nexport const createTabVisibilityStore = (options: CreateTabVisibilityStoreOptions) =>\n createStore<TabVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setTab: (key, value) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, value) })),\n toggleTab: (key, hiddenByDefault) =>\n set((state) => ({ ...state, tabOverrides: toggleOverride(state.tabOverrides, key, hiddenByDefault) })),\n clearTab: (key) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTabVisibilityStore>>();\n\nexport const getTabVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n const store = createTabVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTabVisibilityStore = <T>(storageKey: string, selector: (state: TabVisibilityState) => T) => {\n const store = getTabVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TabVisibilitySnapshot, TabVisibilityState };\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport type { VisibilityOverride } from \"./tree-list-visibility.store\";\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nexport const resolveVisibility = (\n override: VisibilityOverride | undefined,\n hiddenByDefault: boolean | undefined,\n): VisibilityOverride => override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst isNodeVisible = (node: TreeListNode, nodeOverrides: Record<string, VisibilityOverride>) =>\n resolveVisibility(nodeOverrides[node.id], node.hiddenByDefault) === \"shown\";\n\nconst filterNodes = (nodes: TreeListNode[], nodeOverrides: Record<string, VisibilityOverride>): TreeListNode[] => {\n let changed = false;\n const next: TreeListNode[] = [];\n for (const node of nodes) {\n if (!isNodeVisible(node, nodeOverrides)) {\n changed = true;\n continue;\n }\n if (node.children && node.children.length > 0) {\n const filteredChildren = filterNodes(node.children, nodeOverrides);\n if (filteredChildren !== node.children) {\n changed = true;\n next.push({ ...node, children: filteredChildren });\n continue;\n }\n }\n next.push(node);\n }\n return changed ? next : nodes;\n};\n\nexport const filterVisibleSections = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n): TreeListSection[] => {\n let changed = false;\n const next: TreeListSection[] = [];\n for (const section of sections) {\n if (resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault) === \"hidden\") {\n changed = true;\n continue;\n }\n const filteredNodes = filterNodes(section.nodes, nodeOverrides);\n if (filteredNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: filteredNodes });\n continue;\n }\n next.push(section);\n }\n return changed ? next : sections;\n};\n\nexport interface TreeVisibilityMenuActions {\n onToggleSection: (id: string, hiddenByDefault: boolean) => void;\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n onResetOrder?: () => void;\n}\n\ninterface BuildMenuOptions {\n checkmark: ReactNode;\n}\n\nconst buildSectionAction = (\n section: TreeListSection,\n sectionOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = section.hiddenByDefault === true;\n const effective = resolveVisibility(sectionOverrides[section.id], hiddenByDefault);\n return {\n key: `section:${section.id}`,\n label: section.label ?? section.id,\n onClick: () => actions.onToggleSection(section.id, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n };\n};\n\nconst buildNodeAction = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n return {\n key: `node:${node.id}`,\n label: toStringLabel(node.label, node.id),\n onClick: () => actions.onToggleNode(node.id, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n };\n};\n\nexport const buildTreeVisibilityMenuActions = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n\n for (const section of sections) {\n result.push(buildSectionAction(section, sectionOverrides, actions, options));\n const sectionEffective = resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault);\n if (sectionEffective === \"hidden\") continue;\n for (const node of section.nodes) {\n result.push(buildNodeAction(node, nodeOverrides, actions, options));\n }\n }\n\n result.push({ key: \"__reset-visibility\", label: \"Reset to default\", onClick: actions.onResetAll });\n if (actions.onResetOrder) {\n result.push({ key: \"__reset-order\", label: \"Reset order\", onClick: actions.onResetOrder });\n }\n\n return result;\n};\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\nimport { resolveVisibility } from \"../tree-list/tree-list-visibility-filter\";\n\nexport interface TabVisibilityPlacement {\n closable?: boolean;\n hiddenByDefault?: boolean;\n title?: string;\n contributionId: string;\n}\n\nexport const filterVisibleTabs = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n getKey: (placement: T) => string,\n): T[] => {\n let changed = false;\n const next: T[] = [];\n for (const placement of placements) {\n if (placement.closable === true) {\n next.push(placement);\n continue;\n }\n const effective = resolveVisibility(tabOverrides[getKey(placement)], placement.hiddenByDefault);\n if (effective === \"hidden\") {\n changed = true;\n continue;\n }\n next.push(placement);\n }\n return changed ? next : placements;\n};\n\nexport interface TabVisibilityMenuActions {\n onToggleTab: (key: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n}\n\ninterface BuildTabMenuOptions {\n checkmark: ReactNode;\n}\n\nexport const buildTabVisibilityMenuActions = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n actions: TabVisibilityMenuActions,\n getKey: (placement: T) => string,\n options: BuildTabMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n let nonCloseableCount = 0;\n\n for (const placement of placements) {\n if (placement.closable === true) continue;\n nonCloseableCount += 1;\n const key = getKey(placement);\n const hiddenByDefault = placement.hiddenByDefault === true;\n const effective = resolveVisibility(tabOverrides[key], hiddenByDefault);\n result.push({\n key: `tab:${key}`,\n label: placement.title ?? placement.contributionId,\n onClick: () => actions.onToggleTab(key, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n });\n }\n\n if (nonCloseableCount === 0) return result;\n\n result.push({ key: \"__reset-tabs\", label: \"Reset to default\", onClick: actions.onResetAll });\n return result;\n};\n","import { Button, Editable, Flex, Icon, Menu, Table } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Check, ChevronDown, GripVertical, Trash2 } from \"lucide-react\";\n\nimport { IconColorPicker, type IconColorPickerIconOption } from \"../icon-color-picker\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TagEditorAction, TagEditorValue } from \"./tag-editor.types\";\n\ninterface TagEditorRowProps {\n actionOptions?: TagEditorAction[];\n colorOptions?: readonly string[];\n iconOptions?: readonly IconColorPickerIconOption[];\n value: TagEditorValue;\n isSaving?: boolean;\n showDefault?: boolean;\n showIcons?: boolean;\n onActionsChange: (actions: string[]) => void;\n onColorChange: (color: string) => void;\n onDelete: () => void;\n onIconChange: (icon: string | null) => void;\n onNameChange: (name: string) => void;\n onSetDefault: () => void;\n}\n\nconst ActionDropdown = (props: {\n actions: string[];\n disabled?: boolean;\n options: TagEditorAction[];\n onChange: (actions: string[]) => void;\n}) => {\n const { actions, disabled, options, onChange } = props;\n\n const toggleAction = (action: string) => {\n onChange(actions.includes(action) ? actions.filter((item) => item !== action) : [...actions, action]);\n };\n\n return (\n <Menu.Root closeOnSelect={false}>\n <Menu.Trigger asChild>\n <Button size=\"2xs\" variant=\"outline\" gap=\"xs\" disabled={disabled}>\n {actions.length} action{actions.length !== 1 ? \"s\" : \"\"}\n <Icon as={ChevronDown} boxSize=\"12px\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {options.map((option) => (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={option.value}\n label={option.label}\n isSelected={actions.includes(option.value)}\n endContent={actions.includes(option.value) ? <Check size={14} /> : undefined}\n onActivate={() => toggleAction(option.value)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const TagEditorRow = (props: TagEditorRowProps) => {\n const {\n actionOptions,\n colorOptions,\n iconOptions,\n value,\n isSaving,\n showDefault,\n showIcons,\n onActionsChange,\n onColorChange,\n onDelete,\n onIconChange,\n onNameChange,\n onSetDefault,\n } = props;\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: value.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <Table.Row ref={setNodeRef} style={style}>\n <Table.Cell width=\"40px\">\n <Flex cursor=\"grab\" {...attributes} {...listeners}>\n <GripVertical size={14} color=\"var(--chakra-colors-fg-muted)\" />\n </Flex>\n </Table.Cell>\n <Table.Cell>\n <Editable.Root\n defaultValue={value.name}\n onValueCommit={(details) => {\n const trimmed = details.value.trim();\n if (trimmed && trimmed !== value.name) onNameChange(trimmed);\n }}\n >\n <Editable.Preview />\n <Editable.Input />\n </Editable.Root>\n </Table.Cell>\n <Table.Cell width=\"54px\">\n <IconColorPicker\n color={value.color}\n colorOptions={colorOptions}\n icon={value.icon}\n iconOptions={iconOptions}\n showIcons={showIcons}\n onColorChange={onColorChange}\n onIconChange={onIconChange}\n disabled={isSaving}\n />\n </Table.Cell>\n {showDefault ? (\n <Table.Cell width=\"80px\">\n <Button\n size=\"2xs\"\n variant={value.isDefault ? \"solid\" : \"ghost\"}\n onClick={onSetDefault}\n disabled={isSaving || value.isDefault}\n aria-label={`Set ${value.name} as default`}\n >\n <Check size={14} />\n </Button>\n </Table.Cell>\n ) : null}\n {actionOptions ? (\n <Table.Cell width=\"140px\">\n <ActionDropdown\n actions={value.actions ?? []}\n disabled={isSaving}\n options={actionOptions}\n onChange={onActionsChange}\n />\n </Table.Cell>\n ) : null}\n <Table.Cell width=\"40px\">\n <Button\n size=\"2xs\"\n variant=\"ghost\"\n colorPalette=\"red\"\n onClick={onDelete}\n disabled={isSaving || value.isDefault}\n aria-label={`Delete ${value.name}`}\n >\n <Trash2 size={14} />\n </Button>\n </Table.Cell>\n </Table.Row>\n );\n};\n","import { Button, Flex, HStack, Input, Stack, Table, Text } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { Plus, X } from \"lucide-react\";\nimport type { KeyboardEvent } from \"react\";\nimport { useState } from \"react\";\n\nimport { DeleteConfirmationModal } from \"../delete-confirmation-modal\";\nimport { IconColorPicker } from \"../icon-color-picker\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\nimport { TagEditorRow } from \"./tag-editor-row\";\n\ninterface AddFormState {\n name: string;\n color: string;\n icon: string | null;\n}\n\nconst buildDraftItem = (form: AddFormState, sortOrder: number) => ({\n id: `new-${crypto.randomUUID()}`,\n name: form.name.trim(),\n color: form.color,\n icon: form.icon,\n sortOrder,\n isNew: true,\n});\n\nexport const TagEditor = (props: TagEditorProps) => {\n const {\n title,\n description,\n values,\n onValuesChange,\n onSave,\n onCancel,\n onDeleteValue,\n onSetDefault,\n hasChanges,\n isSaving,\n addLabel = \"Add tag\",\n addPlaceholder = \"Tag name\",\n actionOptions,\n actionsColumnLabel = \"Actions\",\n cancelLabel = \"Cancel\",\n colorOptions,\n defaultAddColor = \"blue\",\n defaultAddIcon = null,\n defaultColumnLabel = \"Default\",\n deleteButtonText = \"Delete tag\",\n deleteHeadline = \"Delete tag?\",\n deleteNotificationText = (value) => `This will delete \"${value.name}\".`,\n iconOptions,\n saveLabel = \"Save\",\n showDefault,\n showIcons = true,\n valueColumnLabel = \"Name\",\n } = props;\n const [isAdding, setIsAdding] = useState(false);\n const [addForm, setAddForm] = useState<AddFormState>({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n const [valueToDelete, setValueToDelete] = useState<TagEditorValue | null>(null);\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n const resetAddForm = () => {\n setIsAdding(false);\n setAddForm({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n };\n\n const updateValue = (index: number, patch: Partial<TagEditorValue>) => {\n const next = [...values];\n next[index] = { ...next[index], ...patch };\n onValuesChange(next);\n };\n\n const handleAddOption = () => {\n if (!addForm.name.trim()) return;\n const maxOrder = values.length > 0 ? Math.max(...values.map((value) => value.sortOrder)) : 0;\n onValuesChange([...values, buildDraftItem(addForm, maxOrder + 1)]);\n resetAddForm();\n };\n\n const handleDeleteOption = () => {\n if (!valueToDelete) return;\n if (onDeleteValue) {\n onDeleteValue(valueToDelete);\n } else {\n onValuesChange(values.filter((value) => value.id !== valueToDelete.id));\n }\n setValueToDelete(null);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = values.findIndex((value) => value.id === active.id);\n const newIndex = values.findIndex((value) => value.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return;\n\n onValuesChange(arrayMove(values, oldIndex, newIndex).map((value, index) => ({ ...value, sortOrder: index })));\n };\n\n const handleAddKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") handleAddOption();\n if (event.key === \"Escape\") resetAddForm();\n };\n\n return (\n <>\n <Stack gap=\"md\" height=\"100%\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"sm\" flexWrap=\"wrap\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"heading/S\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsAdding(true)} disabled={isAdding || isSaving}>\n <Plus size={16} />\n {addLabel}\n </Button>\n </Flex>\n\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={values.map((value) => value.id)} strategy={verticalListSortingStrategy}>\n <Table.Root size=\"sm\" variant=\"outline\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader width=\"40px\" />\n <Table.ColumnHeader>{valueColumnLabel}</Table.ColumnHeader>\n <Table.ColumnHeader width=\"54px\" />\n {showDefault ? <Table.ColumnHeader width=\"80px\">{defaultColumnLabel}</Table.ColumnHeader> : null}\n {actionOptions ? <Table.ColumnHeader width=\"140px\">{actionsColumnLabel}</Table.ColumnHeader> : null}\n <Table.ColumnHeader width=\"40px\" />\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {values.map((value, index) => (\n <TagEditorRow\n key={value.id}\n value={value}\n isSaving={isSaving}\n showDefault={showDefault}\n showIcons={showIcons}\n actionOptions={actionOptions}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onNameChange={(name) => updateValue(index, { name })}\n onColorChange={(color) => updateValue(index, { color })}\n onIconChange={(icon) => updateValue(index, { icon })}\n onActionsChange={(actions) => updateValue(index, { actions })}\n onSetDefault={() => onSetDefault?.(value)}\n onDelete={() => setValueToDelete(value)}\n />\n ))}\n {isAdding ? (\n <Table.Row>\n <Table.Cell />\n <Table.Cell>\n <Input\n size=\"xs\"\n placeholder={addPlaceholder}\n value={addForm.name}\n onChange={(event) => setAddForm({ ...addForm, name: event.target.value })}\n onKeyDown={handleAddKeyDown}\n autoFocus\n />\n </Table.Cell>\n <Table.Cell>\n <IconColorPicker\n color={addForm.color}\n icon={addForm.icon}\n showIcons={showIcons}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onColorChange={(color) => setAddForm({ ...addForm, color })}\n onIconChange={(icon) => setAddForm({ ...addForm, icon })}\n />\n </Table.Cell>\n {showDefault ? <Table.Cell /> : null}\n {actionOptions ? <Table.Cell /> : null}\n <Table.Cell>\n <HStack gap=\"2xs\">\n <Button size=\"2xs\" variant=\"primary\" onClick={handleAddOption} disabled={!addForm.name.trim()}>\n Add\n </Button>\n <Button size=\"2xs\" variant=\"ghost\" onClick={resetAddForm} aria-label=\"Cancel add value\">\n <X size={14} />\n </Button>\n </HStack>\n </Table.Cell>\n </Table.Row>\n ) : null}\n </Table.Body>\n </Table.Root>\n </SortableContext>\n </DndContext>\n\n <Flex justifyContent=\"flex-end\">\n <HStack gap=\"xs\">\n <Button size=\"sm\" variant=\"outline\" onClick={onCancel} disabled={!hasChanges || isSaving}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" variant=\"primary\" onClick={onSave} loading={isSaving} disabled={!hasChanges}>\n {saveLabel}\n </Button>\n </HStack>\n </Flex>\n </Stack>\n\n <DeleteConfirmationModal\n open={Boolean(valueToDelete)}\n onClose={() => setValueToDelete(null)}\n onDelete={handleDeleteOption}\n headline={deleteHeadline}\n notificationText={valueToDelete ? deleteNotificationText(valueToDelete) : \"\"}\n buttonText={deleteButtonText}\n />\n </>\n );\n};\n","import { HStack, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { type QueryKey, useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useEffect, useState } from \"react\";\nimport { AlertMessage } from \"../alert\";\nimport { TagEditor } from \"./tag-editor\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\n\nexport interface SaveTagSettingsInput<TValue> {\n deletedIds: Set<string>;\n drafts: TagEditorValue[];\n values: TValue[];\n}\n\ntype EditorLabels = Pick<\n TagEditorProps,\n | \"actionOptions\"\n | \"actionsColumnLabel\"\n | \"addLabel\"\n | \"addPlaceholder\"\n | \"colorOptions\"\n | \"deleteButtonText\"\n | \"deleteHeadline\"\n | \"deleteNotificationText\"\n | \"description\"\n | \"iconOptions\"\n | \"showIcons\"\n | \"title\"\n | \"valueColumnLabel\"\n>;\n\ntype SortableValue = { id: string; sortOrder: number };\n\nexport interface TagSettingsPanelProps<TValue extends SortableValue, TSource> extends EditorLabels {\n errorTitle: string;\n loadingText?: string;\n queryKey: QueryKey;\n readValues: (source: TSource) => Promise<TValue[]>;\n saveValues: (source: TSource, input: SaveTagSettingsInput<TValue>) => Promise<void>;\n source: TSource;\n toEditorValue: (value: TValue) => TagEditorValue;\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean;\n}\n\nconst bySortOrder = (left: TagEditorValue, right: TagEditorValue) =>\n left.sortOrder - right.sortOrder || left.name.localeCompare(right.name);\n\nconst toEditorValues = <TValue extends SortableValue>(\n values: TValue[],\n toEditorValue: (value: TValue) => TagEditorValue,\n) => values.map(toEditorValue).sort(bySortOrder);\n\nconst findOriginalValue = <TValue extends SortableValue>(values: TValue[], draft: TagEditorValue) =>\n values.find((value) => value.id === draft.id);\n\nconst hasTagValueChanges = <TValue extends SortableValue>(\n values: TValue[],\n drafts: TagEditorValue[],\n deletedIds: Set<string>,\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean,\n) => {\n if (deletedIds.size > 0) return true;\n\n return drafts.some((draft) => {\n if (draft.isNew) return true;\n const original = findOriginalValue(values, draft);\n if (!original) return true;\n return valueNeedsUpdate(original, draft) || draft.sortOrder !== original.sortOrder;\n });\n};\n\nconst errorMessage = (error: unknown) => (error instanceof Error ? error.message : error ? String(error) : null);\n\nexport const TagSettingsPanel = <TValue extends SortableValue, TSource>(\n props: TagSettingsPanelProps<TValue, TSource>,\n) => {\n const {\n errorTitle,\n loadingText = \"Loading...\",\n queryKey,\n readValues,\n saveValues,\n source,\n toEditorValue,\n valueNeedsUpdate,\n ...editorProps\n } = props;\n const queryClient = useQueryClient();\n const [drafts, setDrafts] = useState<TagEditorValue[]>([]);\n const [deletedIds, setDeletedIds] = useState<Set<string>>(new Set());\n\n // Edits never refetch in the background, so loaded values only change on initial\n // load and after a save invalidates the query — keeping local drafts in sync.\n const valuesQuery = useQuery({ queryKey, queryFn: () => readValues(source), staleTime: Infinity });\n const values = valuesQuery.data ?? [];\n\n useEffect(() => {\n if (valuesQuery.data) setDrafts(toEditorValues(valuesQuery.data, toEditorValue));\n }, [valuesQuery.data, toEditorValue]);\n\n const saveMutation = useMutation({\n mutationFn: () => saveValues(source, { deletedIds, drafts, values }),\n onSuccess: () => {\n setDeletedIds(new Set());\n return queryClient.invalidateQueries({ queryKey });\n },\n });\n\n const hasChanges = hasTagValueChanges(values, drafts, deletedIds, valueNeedsUpdate);\n const error = errorMessage(valuesQuery.error) ?? errorMessage(saveMutation.error);\n\n const handleDeleteValue = (value: TagEditorValue) => {\n if (!value.isNew) setDeletedIds(new Set([...deletedIds, value.id]));\n setDrafts(drafts.filter((draft) => draft.id !== value.id));\n };\n\n const handleCancel = () => {\n setDrafts(toEditorValues(values, toEditorValue));\n setDeletedIds(new Set());\n saveMutation.reset();\n };\n\n return (\n <Stack boxSizing=\"border-box\" minH=\"100%\" p=\"lg\" gap=\"lg\" bg=\"bg\" color=\"fg\">\n {error ? (\n <AlertMessage status=\"error\" colorPalette=\"red\" title={errorTitle} size=\"sm\">\n {error}\n </AlertMessage>\n ) : null}\n {valuesQuery.isPending ? (\n <HStack gap=\"sm\" color=\"fg.muted\">\n <Spinner size=\"sm\" />\n <Text textStyle=\"paragraph/S/regular\">{loadingText}</Text>\n </HStack>\n ) : (\n <TagEditor\n {...editorProps}\n values={drafts}\n onValuesChange={setDrafts}\n onDeleteValue={handleDeleteValue}\n hasChanges={hasChanges}\n isSaving={saveMutation.isPending}\n onSave={() => saveMutation.mutate()}\n onCancel={handleCancel}\n />\n )}\n </Stack>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface TreeListOrderSnapshot {\n sectionOrder: string[];\n nodeOrderBySection: Record<string, string[]>;\n}\n\ninterface TreeListOrderState extends TreeListOrderSnapshot {\n setSectionOrder: (nextSectionIds: string[]) => void;\n setNodeOrder: (sectionId: string, nextNodeIds: string[]) => void;\n resetSectionOrder: () => void;\n resetNodeOrder: (sectionId: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListOrderStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListOrderSnapshot = {\n sectionOrder: [],\n nodeOrderBySection: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-order\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst dedupe = (ids: string[]) => {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const id of ids) {\n if (seen.has(id)) continue;\n seen.add(id);\n result.push(id);\n }\n return result;\n};\n\nconst getPersistedSnapshot = (state: TreeListOrderState) => ({\n sectionOrder: state.sectionOrder,\n nodeOrderBySection: state.nodeOrderBySection,\n});\n\nexport const createTreeListOrderStore = (options: CreateTreeListOrderStoreOptions) =>\n createStore<TreeListOrderState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSectionOrder: (nextSectionIds) => set((state) => ({ ...state, sectionOrder: dedupe(nextSectionIds) })),\n setNodeOrder: (sectionId, nextNodeIds) =>\n set((state) => ({\n ...state,\n nodeOrderBySection: { ...state.nodeOrderBySection, [sectionId]: dedupe(nextNodeIds) },\n })),\n resetSectionOrder: () => set((state) => ({ ...state, sectionOrder: [] })),\n resetNodeOrder: (sectionId) =>\n set((state) => {\n if (!(sectionId in state.nodeOrderBySection)) return state;\n const { [sectionId]: _removed, ...rest } = state.nodeOrderBySection;\n return { ...state, nodeOrderBySection: rest };\n }),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListOrderStore>>();\n\nexport const getTreeListOrderStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListOrderStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListOrderStore = <T>(storageKey: string, selector: (state: TreeListOrderState) => T) => {\n const store = getTreeListOrderStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListOrderSnapshot, TreeListOrderState };\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nconst reorderBy = <T extends { id: string }>(items: T[], order: string[]): T[] => {\n if (order.length === 0) return items;\n\n const indexById = new Map(items.map((item, index) => [item.id, index]));\n const placed = new Set<number>();\n const next: T[] = [];\n\n for (const id of order) {\n const index = indexById.get(id);\n if (index === undefined || placed.has(index)) continue;\n placed.add(index);\n next.push(items[index]);\n }\n\n let changed = next.length > 0 && next.length !== items.length;\n for (let i = 0; i < items.length; i += 1) {\n if (placed.has(i)) continue;\n if (next.length !== i && !changed) changed = true;\n next.push(items[i]);\n }\n\n if (!changed) {\n for (let i = 0; i < items.length; i += 1) {\n if (items[i] !== next[i]) {\n changed = true;\n break;\n }\n }\n }\n\n return changed ? next : items;\n};\n\nexport const applyTreeListOrder = (\n sections: TreeListSection[],\n sectionOrder: string[],\n nodeOrderBySection: Record<string, string[]>,\n): TreeListSection[] => {\n let changed = false;\n const reorderedSections = reorderBy(sections, sectionOrder);\n if (reorderedSections !== sections) changed = true;\n\n const next: TreeListSection[] = [];\n for (const section of reorderedSections) {\n const nodeOrder = nodeOrderBySection[section.id];\n if (!nodeOrder || nodeOrder.length === 0) {\n next.push(section);\n continue;\n }\n const reorderedNodes = reorderBy(section.nodes, nodeOrder);\n if (reorderedNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: reorderedNodes });\n } else {\n next.push(section);\n }\n }\n\n return changed ? next : sections;\n};\n\nexport const reorderNodesById = (nodes: TreeListNode[], order: string[]) => reorderBy(nodes, order);\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\nexport type VisibilityOverride = \"hidden\" | \"shown\";\n\ninterface TreeListVisibilitySnapshot {\n sectionOverrides: Record<string, VisibilityOverride>;\n nodeOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TreeListVisibilityState extends TreeListVisibilitySnapshot {\n setSection: (id: string, value: VisibilityOverride | undefined) => void;\n setNode: (id: string, value: VisibilityOverride | undefined) => void;\n toggleSection: (id: string, hiddenByDefault: boolean) => void;\n toggleNode: (id: string, hiddenByDefault: boolean) => void;\n clearSection: (id: string) => void;\n clearNode: (id: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListVisibilitySnapshot = {\n sectionOverrides: {},\n nodeOverrides: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst flipOverride = (current: VisibilityOverride): VisibilityOverride => (current === \"hidden\" ? \"shown\" : \"hidden\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n id: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(id in overrides)) return overrides;\n const { [id]: _removed, ...rest } = overrides;\n return rest;\n }\n\n if (overrides[id] === value) return overrides;\n return { ...overrides, [id]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, id: string, hiddenByDefault: boolean) => {\n const next = flipOverride(resolveEffective(overrides[id], hiddenByDefault));\n return setOverride(overrides, id, next);\n};\n\nconst getPersistedSnapshot = (state: TreeListVisibilityState) => ({\n sectionOverrides: state.sectionOverrides,\n nodeOverrides: state.nodeOverrides,\n});\n\nexport const createTreeListVisibilityStore = (options: CreateTreeListVisibilityStoreOptions) =>\n createStore<TreeListVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSection: (id, value) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, value) })),\n setNode: (id, value) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, value) })),\n toggleSection: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n sectionOverrides: toggleOverride(state.sectionOverrides, id, hiddenByDefault),\n })),\n toggleNode: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n nodeOverrides: toggleOverride(state.nodeOverrides, id, hiddenByDefault),\n })),\n clearSection: (id) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, undefined) })),\n clearNode: (id) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListVisibilityStore>>();\n\nexport const getTreeListVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListVisibilityStore = <T>(storageKey: string, selector: (state: TreeListVisibilityState) => T) => {\n const store = getTreeListVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListVisibilitySnapshot, TreeListVisibilityState };\n","const readDefaultExport = (module: { default?: unknown }) => module.default ?? module;\n\nexport const installPrismGlobal = async () => {\n const globalScope = globalThis as typeof globalThis & { Prism?: unknown };\n if (globalScope.Prism) return;\n\n const prismModule = await import(\"prismjs\");\n globalScope.Prism = readDefaultExport(prismModule);\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","readOnly","endContent","RowContent","isExpanded","showChevron","tone","isDenseVariant","labelTextStyle","descriptionTextStyle","descriptionMarginLeft","bb0","labelColor","descriptionColor","ChevronRight","height","indicator","ListRowContent","nodeId","ListRowMenuItemIcon","ListRowMenu","placement","mainAxis","offset","cursor","computePaddingLeft","depth","resolveListRowSizing","hasDescription","rowHeight","minHeight","createRowBackgroundProps","selectedBg","_hover","hoverBg","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","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","staticProps","isInteractiveItem","url","BreadcrumbItemLink","isCurrent","linkComponent","LinkComponent","ChakraBreadcrumb","BreadcrumbItemContent","contextMenuActions","BreadcrumbSeparator","separator","Breadcrumb","separatorGap","index","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","noopStorage","getItem","removeItem","setItem","readLocalStorage","globalThis","localStorage","createBrowserStorage","storage","STORAGE_KEY","ThemePreferenceContext","createContext","getDefaultThemePreference","getInitialThemePreference","window","stored","prefersDark","matchMedia","matches","ThemePreferenceProvider","initialPreference","themePreference","setThemePreference","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","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","DataRendererCard","badges","customSlots","workspaceBadge","hasBadges","Wrap","badge","Badge","attributeId","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","createLabel","Plus","MoreHorizontal","setData","effectAllowed","v","createDefaultExpandedState","expandedState","visit","forEach","flattenDataRendererListItems","rows","canExpand","push","getRowIsExpanded","getDropTargetBoxShadow","isGroup","rowId","updateExpandedState","next","renderLabel","countBadge","countColorPalette","renderEndContent","buildListRowItem","statusIcon","statusColor","DataRendererList","onItemClick","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","handleExpandedChange","row","DataRendererListRow","onDraggedItemChange","onDropTargetChange","onExpandedChange","canDropHere","onDropRow","rowItem","toggleExpanded","draggedId","DataRendererEmptyState","EmptyState","DataRendererContent","viewMode","boardColumns","listItems","selectedRowId","emptyTitle","emptyDescription","onBoardMoveItem","onBoardMoveToGroup","onCreateRow","listKey","NO_GROUPING","MANUAL_ORDERING","isEnumOptionsSource","Array","isArray","isAttributesSource","attributes","DEFAULT_DATA_RENDERER_SETTINGS","columnGrouping","rowGrouping","ordering","direction","displayProperties","findAttribute","attribute","getEnumOptions","type","kind","getSnapshot","toTitleCase","chunk","toUpperCase","slice","getAttributeValue","descriptor","raw","getAttributeStringValues","String","findEnumOption","enumOptionLabel","formatDateValue","date","Date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","formatStringValue","formatUserValue","summarizeMultiEnum","values","renderEnumBadge","stringValue","renderMultiEnumBadge","summary","firstColor","isRenderableNode","renderAttributeBadge","render","formatted","collectDisplayBadges","displayable","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","buildFilterCategories","categories","filterable","declared","auto","declaredValues","undeclared","sort","a","b","localeCompare","numeric","buildGroupingOptions","groupable","buildOrderingOptions","sortable","buildDisplayPropertyOptions","resolveSubGroupingOptions","resolveListDropTargetColumnKey","columnKey","resolveKnownColumnKeys","filters","active","omitFilterCategory","sanitizeSettings","settings","knownIds","validGroupingId","validOrderingId","orderingId","sanitizeFilters","UNASSIGNED_LABEL","fallbackLabel","labelForGroupKey","getGroupingKey","first","compareGroupKey","compareGroupKeyForDescriptor","ordered","compareEnumValues","orderByDirection","left","right","toIndex","findIndex","compareForDescriptor","compare","leftTime","rightTime","leftNum","rightNum","leftValue","rightValue","leftString","rightString","orderRows","groupRows","knownColumnKeys","columnDescriptor","rowDescriptor","groupedByColumn","Map","set","get","columnRows","subgroups","groupedByRow","rowKey","rowRows","matchesFilter","filterRows","activeFilters","every","countFilterValues","counts","SectionLabel","viewModeOptions","List","KanbanSquare","Dropdown","hasNoneFirst","Button","option_0","DisplayMenu","groupingOptions","orderingOptions","displayPropertyOptions","onViewModeChange","onColumnGroupingChange","onRowGroupingChange","onOrderingAttributeIdChange","onSortDirectionToggle","onDisplayPropertyToggle","triggerRef","contentRef","setOpen","closeOnOutsidePointerDown","Node","addEventListener","removeEventListener","Settings2","ViewModeIcon","Separator","ArrowDownUp","isActive","Popover","getActiveFilterCount","reduce","sum","FilterMenu","countsByCategory","onToggleFilterValue","onClearFilter","onClearAll","activeCategoryId","setActiveCategoryId","category","activeCategory","activeFilterCount","Filter","category_0","selectedValues","checked","Check","WORKSPACE_STORE_NAMESPACE","toStorageName","storageKey","DEFAULT_SNAPSHOT","createSnapshot","initialState","toggleValue","stripTagPrefix","migrateSettings","orderingRaw","field","orderingDirection","migrateFilters","stringValues","createDataRendererStore","snapshot","createStore","persist","setViewMode","state","setColumnGrouping","setRowGrouping","setOrdering","setOrderingAttributeId","setDisplayProperties","toggleSortDirection","toggleDisplayProperty","property","setFilter","toggleFilterValue","currentValues","nextValues","nextFilters","clearFilter","clearAllFilters","reset","version","migrate","persisted","createJSONStorage","partialize","workspaceStoreRegistry","getDataRendererStore","existingStore","store","useDataRendererStore","selector","useStore","collectSources","sources","resolveAttributeOptions","useResolvedAttributes","forceRender","useReducer","refresh","unsubscribes","source","subscribe","dispose","tick","DataRendererToolbar","rawAttributes","defaultSettings","defaultFilters","leading","align","_temp5","_temp6","_temp7","_temp8","_temp9","_temp0","_temp1","categoryOptions","fromEntries","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","state_8","state_9","buildListItems","visibleRows","grouped","onRowClick","onAttributeChange","onReorder","getRowContextMenuActions","supportsManualReorder","getGroupColorPalette","toListItem","targetColumnKey","toSubgroupListItem","subgroup","parent","DataRenderer","getBoardColumnConfig","hideToolbar","toolbarLeading","boardRows","toBoardItems","columnGroupingDescriptor","columnConfig","orderedRows","enumColor","targetColumnId","handleBoardMoveItem","rowId_0","targetGroupKey","handleBoardMoveToGroup","DeleteConfirmationModal","isDeleting","setIsDeleting","headline","buttonText","notificationText","onDelete","handleDelete","Dialog","CloseButton","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","binaryDiffExtensions","imageDiffExtensions","getExtension","path","ext","pop","getDiffLineCount","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","fileName","endsWith","isBinaryDiffPath","isImageDiffPath","createDiffCardBodyModel","diff","filePath","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","isImage","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","DiffCardBody","model","BinaryDiffPlaceholder","LargeDiffPlaceholder","DeferredDiffLoad","actionLabel","isLoadingDiff","loadingDiffContentRows","LoadingDiffContent","Skeleton","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isBinaryDiff","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","requestedPath","resolveRequestedDiffPath","useDiffContentLoader","setLoadingDiff","setRequestedPath","setLoadError","loadDiff","DiffCard","onToggleExpanded","DiffCardHeader","change","Grid","DiffDrawerEmptyState","p","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","ITEM_GAP_HEIGHT","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","getDiffPath","PINNED_DIFF_LOOKBEHIND_COUNT","estimateDiffRangeHeight","diffs","collapsedPaths","largeDiffOptInPaths","startIndex","endIndex","diffIndex","resolveSelectedScrollState","selectedDiffPath","expansionCommand","completedScrollCommandId","selectedScrollPath","selectedScrollSourceKey","selectedScrollCommandId","hasCompletedSelectedScroll","selectedScrollKey","selectedScrollExpansionState","selectedScrollIndex","shouldPinSelectedScrollIndex","includePinnedDiffIndexes","indexes","pinnedStartIndex","Math","max","pinnedIndexes","from","getRenderedDiffItems","scrollElement","querySelectorAll","element","querySelector","dataset","isInteger","getElementScrollOffset","offsetTop","elementRect","getBoundingClientRect","scrollRect","scrollTop","top","SELECTED_ALIGNMENT_THRESHOLD","useSelectedDiffScroll","scrollRef","setCompletedScrollCommandId","frameIds","cancelledByUserScroll","cancelSelectedScroll","estimateRangeHeight","scrollToOffset","scrollTo","behavior","scrollToSelectedDiff","alignRenderedSelectedDiff","renderedItems","selectedItem","selectedOffset","currentOffset","abs","firstItem","lastItem","at","alignmentAttempts","reconcileSelectedDiff","isAligned","hasSettled","requestAnimationFrame","passive","isInitiallyAligned","frameId","cancelAnimationFrame","useLayoutEffect","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","delete","resolveCollapsedPathsForSelectedDiff","DiffDrawer","onSelectDiffPath","onExpansionStateChange","reportedExpansionStateRef","setCollapsedPaths","setLargeDiffOptInPaths","virtualizer","useVirtualizer","getScrollElement","estimateSize","getItemKey","overscan","rangeExtractor","range","defaultRangeExtractor","shouldAdjustScrollPositionOnItemSizeChange","_item","_delta","instance","isScrolling","expansionState","allExpanded","size","allCollapsed","reportedExpansionState","showFullDiff","virtualItems","getVirtualItems","overflowAnchor","getTotalSize","virtualItem","measureElement","start","RESIZE_SEPARATOR_HOVER_STYLE","_before","RESIZE_HANDLE_WIDTH","ResizeHandle","bounds","contentPanelId","resizablePanelId","resizeLabel","resolvedPanelWidth","showResizeSeparator","onResizeKeyDown","onResizeStart","maxSize","round","position","bottom","insetInlineStart","w","transform","FALLBACK_ROOT_WIDTH","KEYBOARD_RESIZE_STEP","MIN_COLLAPSE_THRESHOLD_PX","MAX_COLLAPSE_THRESHOLD_PX","clamp","min","resolveRootWidth","rootWidth","resolveCollapseThreshold","minSizePx","resolveResizableBoundsPx","maxFromContent","contentMinSizePx","configuredMax","maxSizePx","minSize","getElementWidth","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","handlePointerMove","moveEvent","rawWidth","cleanup","hasPointerCapture","pointerId","releasePointerCapture","setPointerCapture","once","handleResizeStart","direction_0","width_1","handleResizeKeyDown","resizablePanelNode","contentPanelNode","resizeTrigger","normalizeChangedFilePath","segment","sortNodes","nodes","node","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","treeById","rootNodes","segments","parentPath","parentNode","currentPath","isFile","existingNode","nextNode","collectExpandedFolderIds","folderIds","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","isInList","isActiveNode","activeNodeId","isNavigableNode","getNodeChildren","hasExpandableChildren","appendVisibleNodeRows","sectionId","expandedNodeIds","level","parentNodeId","buildVirtualRows","sections","expandedSectionIds","section","getRowFocusId","isFocusableRow","getFocusableRows","resolveTreeListFocusRowId","focusedRowId","focusableRows","focusableIds","activeId","firstRow","resolveSectionHeaderNavigation","currentIndex","nextRow","resolveNodeNavigation","expandable","resolveTreeListKeyboardNavigation","resolvedFocusRowId","currentRow","focusByIndex","clamped","TreeListNodeRow","rowVariant","nodeGap","tabIndex","onFocus","onNavigate","onToggleNode","canLink","intent","TreeListSectionActions","TreeListSectionHeader","focusId","onToggle","onContextMenu","transition","SECTION_PREFIX","toSectionDragId","isSectionDragId","fromSectionDragId","arrayMoveInPlace","to","removed","splice","computeReorderResult","overId","orderedIds","oldIndex","indexOf","newIndex","nextSectionIds","nodeIds","nextNodeIds","SortableHost","useSortable","isDragging","listeners","setNodeRef","CSS","Transform","toString","SortableSectionGroup","sectionRows","onToggleSection","onSectionContextMenu","headerRow","nodeRows","topLevelNodeIds","SortableContext","verticalListSortingStrategy","row_3","SortableOrPlainNodeRow","renderNodeRow","TreeListSortable","sectionGap","onReorderSections","onReorderNodes","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","over","result","DndContext","T2","section_0","row_0","row_1","row_2","findRowElement","treeListFocusId","findFocusedRowId","HTMLElement","closest","isTextEditingTarget","isContentEditable","tagName","getRowIndex","useTreeListKeyboardNavigation","scrollToRow","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusRowId","focusableRowIds","frame","element_0","rowIndex","focusRow","altKey","ctrlKey","metaKey","shiftKey","navigation","handleKeyDown","onRowFocus","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","renderVirtualRow","VirtualTreeList","keyboard","scrollToIndex","StackTreeList","virtualize","TreeList","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","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","MenuItemContent","loadingDiffItems","DiffViewerLoading","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","diffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","isExpandAllDisabled","isCollapseAllDisabled","filePaths_0","tree","diffPaths_0","filePaths_1","expandAllFilesAndDiffs","collapseAllFilesAndDiffs","path_0","nextIndex","current_1","selectChangedFilePath","PanelLeftClose","PanelLeftOpen","ListTree","Rows2","SquareSplitHorizontal","ChevronsUpDown","t32","ChevronsDownUp","t33","t34","t35","t36","t37","t38","t39","t40","diffPanel","t41","t42","t43","t44","current_0","ErrorBoundary","Component","error","getDerivedStateFromError","componentDidCatch","info","console","handleReset","setState","onReset","fallback","ErrorFallback","message","AbsoluteCenter","AlertMessage","HorizontalMenuStack","borderBottomWidth","optionColors","optionIcons","Circle","Bug","Sparkles","BookOpen","Wrench","Gauge","AlertTriangle","Star","Flag","Flame","Lightbulb","Shield","Eye","Clock","CheckCircle","Tag","Code","ChartColumnIncreasing","CircleQuestionMark","ShieldAlert","getIconComponent","iconOptions","IconColorPicker","colorOptions","onColorChange","onIconChange","showIcons","IconComponent","optionColor","GridItem","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","paddingEnd","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","ACTIVE_ROW_BG","buildEntryItem","shortcut","buildRows","previousEntry","entryIndex","getActiveRowIndex","activeIndex","PaletteList","emptyLabel","onHover","activeRowIndex","initialRect","virtualRow","resolveStateValue","paletteInputStateProps","Palette","initialQuery","initialActiveIndex","resetKey","inputIcon","footerStart","footerEnd","filterEntries","onActiveEntryChange","onQueryChange","onEscape","setQueryState","setActiveIndex","setupRef","activeEntry","resolvedInputIcon","activeMode","resolvedPlaceholder","nextQuery","runActiveEntry","closePalette","previousSetup","setSelectionRange","entryCount","handleEscape","hasFooter","splitShortcutStep","step","part","getShortcutDisplayParts","binding","PaletteShortcut","steps","stepIndex","part_0","partIndex","Kbd","ParamEditorLabel","CircleHelp","ColorInput","hideLabel","fullWidth","setValue","timeoutRef","nextColor","scheduleChange","newColor","parseColor","onValueChange","ColorPicker","picker","DateInput","newValue","e_1","e_0","blur","e_2","NumberInputRoot","ChakraNumberInput","NumberInputField","Scrubber","Slider","ChakraSlider","NumberInput","hideSlider","showSlider","useFullWidthLayout","valueAsNumber","next_0","details_1","details_2","SelectionInput","multiSelect","optionId","selectedOptions","id_0","o","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","activeElement","RepoPickerDialog","selectedPaths","isLoading","isSelectDisabled","onSelectHomeDirectory","onSelectParentDirectory","searchScope","Home","ChevronUp","padding","Body","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","tabOverrides","STORE_NAMESPACE","resolveEffective","override","hiddenByDefault","setOverride","overrides","_removed","toggleOverride","createTabVisibilityStore","setTab","toggleTab","clearTab","storeRegistry","getTabVisibilityStore","existing","useTabVisibilityStore","toStringLabel","resolveVisibility","isNodeVisible","nodeOverrides","filterNodes","changed","filteredChildren","filterVisibleSections","sectionOverrides","filteredNodes","buildSectionAction","effective","checkmark","buildNodeAction","buildTreeVisibilityMenuActions","onResetAll","onResetOrder","filterVisibleTabs","placements","getKey","buildTabVisibilityMenuActions","nonCloseableCount","contributionId","onToggleTab","ActionDropdown","toggleAction","TagEditorRow","actionOptions","isSaving","showDefault","onActionsChange","onNameChange","onSetDefault","GripVertical","Table","trimmed","Editable","isDefault","Trash2","buildDraftItem","form","sortOrder","crypto","randomUUID","isNew","TagEditor","onValuesChange","onSave","onCancel","onDeleteValue","hasChanges","addLabel","addPlaceholder","actionsColumnLabel","cancelLabel","defaultAddColor","defaultAddIcon","defaultColumnLabel","deleteButtonText","deleteHeadline","deleteNotificationText","saveLabel","valueColumnLabel","isAdding","setIsAdding","addForm","setAddForm","valueToDelete","setValueToDelete","resetAddForm","updateValue","patch","handleAddOption","maxOrder","handleDeleteOption","arrayMove","handleAddKeyDown","closestCenter","X","bySortOrder","toEditorValues","toEditorValue","findOriginalValue","draft","hasTagValueChanges","drafts","deletedIds","valueNeedsUpdate","errorMessage","TagSettingsPanel","editorProps","errorTitle","queryKey","readValues","saveValues","loadingText","queryClient","useQueryClient","setDrafts","setDeletedIds","queryFn","staleTime","Infinity","valuesQuery","useQuery","data","invalidateQueries","mutationFn","onSuccess","saveMutation","useMutation","handleDeleteValue","handleCancel","isPending","mutate","sectionOrder","nodeOrderBySection","dedupe","ids","seen","createTreeListOrderStore","setSectionOrder","setNodeOrder","resetSectionOrder","resetNodeOrder","getTreeListOrderStore","useTreeListOrderStore","reorderBy","order","indexById","placed","applyTreeListOrder","reorderedSections","nodeOrder","reorderedNodes","flipOverride","createTreeListVisibilityStore","setSection","setNode","clearSection","clearNode","getTreeListVisibilityStore","useTreeListVisibilityStore","readDefaultExport","module","default","installPrismGlobal","globalScope","Prism","prismModule"],"mappings":"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"}
|