@vizejs/fresco 0.77.0 → 0.81.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.
@@ -1,2 +1,2 @@
1
- import { $ as FormProps, A as TableColumn, At as Box, B as TimerProps, C as Menu, Ct as GridProps, D as TreeNode, Dt as VStack, E as Tree, Et as StackProps, F as Tooltip, G as AlertProps, H as BadgeProps, I as TooltipPosition, J as ProgressBarProps, K as AlertType, L as TooltipProps, M as List, N as ListItem, O as TreeProps, Ot as Divider, P as ListProps, Q as FormField, R as Timer, S as TabsProps, St as Grid, T as MenuProps, Tt as Stack, U as BadgeVariant, V as Badge, W as Alert, X as SpinnerProps, Y as Spinner, Z as Form, _ as Breadcrumb, _t as CodeProps, a as KeyHintProps, at as Checkbox, b as Tab, bt as Card, c as StatusBar, ct as SelectOption, d as Modal, dt as TextAreaProps, et as Confirm, f as ModalProps, ft as TextInput, g as StepperProps, gt as Code, h as Stepper, ht as LinkProps, i as KeyHint, it as RadioOption, j as TableProps, jt as BoxProps, k as Table, kt as DividerProps, l as StatusBarItem, lt as SelectProps, m as StepStatus, mt as Link, n as AvatarProps, nt as RadioGroup, o as Header, ot as CheckboxProps, p as Step, pt as TextInputProps, q as ProgressBar, r as KeyBinding, rt as RadioGroupProps, s as HeaderProps, st as Select, t as Avatar, tt as ConfirmProps, u as StatusBarProps, ut as TextArea, v as BreadcrumbItem, vt as Text, w as MenuItem, wt as HStack, x as Tabs, xt as CardProps, y as BreadcrumbProps, yt as TextProps, z as TimerMode } from "../index-B8a-5fM6.mjs";
1
+ import { $ as FormProps, A as TableColumn, At as Box, B as TimerProps, C as Menu, Ct as GridProps, D as TreeNode, Dt as VStack, E as Tree, Et as StackProps, F as Tooltip, G as AlertProps, H as BadgeProps, I as TooltipPosition, J as ProgressBarProps, K as AlertType, L as TooltipProps, M as List, N as ListItem, O as TreeProps, Ot as Divider, P as ListProps, Q as FormField, R as Timer, S as TabsProps, St as Grid, T as MenuProps, Tt as Stack, U as BadgeVariant, V as Badge, W as Alert, X as SpinnerProps, Y as Spinner, Z as Form, _ as Breadcrumb, _t as CodeProps, a as KeyHintProps, at as Checkbox, b as Tab, bt as Card, c as StatusBar, ct as SelectOption, d as Modal, dt as TextAreaProps, et as Confirm, f as ModalProps, ft as TextInput, g as StepperProps, gt as Code, h as Stepper, ht as LinkProps, i as KeyHint, it as RadioOption, j as TableProps, jt as BoxProps, k as Table, kt as DividerProps, l as StatusBarItem, lt as SelectProps, m as StepStatus, mt as Link, n as AvatarProps, nt as RadioGroup, o as Header, ot as CheckboxProps, p as Step, pt as TextInputProps, q as ProgressBar, r as KeyBinding, rt as RadioGroupProps, s as HeaderProps, st as Select, t as Avatar, tt as ConfirmProps, u as StatusBarProps, ut as TextArea, v as BreadcrumbItem, vt as Text, w as MenuItem, wt as HStack, x as Tabs, xt as CardProps, y as BreadcrumbProps, yt as TextProps, z as TimerMode } from "../index-dQ_vSjoe.mjs";
2
2
  export { Alert, AlertProps, AlertType, Avatar, AvatarProps, Badge, BadgeProps, BadgeVariant, Box, BoxProps, Breadcrumb, BreadcrumbItem, BreadcrumbProps, Card, CardProps, Checkbox, CheckboxProps, Code, CodeProps, Confirm, ConfirmProps, Divider, DividerProps, Form, FormField, FormProps, Grid, GridProps, HStack, Header, HeaderProps, KeyBinding, KeyHint, KeyHintProps, Link, LinkProps, List, ListItem, ListProps, Menu, MenuItem, MenuProps, Modal, ModalProps, ProgressBar, ProgressBarProps, RadioGroup, RadioGroupProps, RadioOption, Select, SelectOption, SelectProps, Spinner, SpinnerProps, Stack, StackProps, StatusBar, StatusBarItem, StatusBarProps, Step, StepStatus, Stepper, StepperProps, Tab, Table, TableColumn, TableProps, Tabs, TabsProps, Text, TextArea, TextAreaProps, TextInput, TextInputProps, TextProps, Timer, TimerMode, TimerProps, Tooltip, TooltipPosition, TooltipProps, Tree, TreeNode, TreeProps, VStack };
@@ -1 +1 @@
1
- {"version":3,"file":"components-B5VXjX9s.mjs","names":[],"sources":["../src/components/Box.ts","../src/components/Divider.ts","../src/components/Stack.ts","../src/components/Grid.ts","../src/components/Card.ts","../src/components/Text.ts","../src/components/Code.ts","../src/components/Link.ts","../src/components/TextInput.ts","../src/components/TextArea.ts","../src/components/Select.ts","../src/components/Checkbox.ts","../src/components/RadioGroup.ts","../src/components/Confirm.ts","../src/components/Form.ts","../src/components/Spinner.ts","../src/components/ProgressBar.ts","../src/components/Alert.ts","../src/components/Badge.ts","../src/components/Timer.ts","../src/components/Tooltip.ts","../src/components/List.ts","../src/components/Table.ts","../src/components/Tree.ts","../src/components/Menu.ts","../src/components/Tabs.ts","../src/components/Breadcrumb.ts","../src/components/Stepper.ts","../src/components/Modal.ts","../src/components/StatusBar.ts","../src/components/Header.ts","../src/components/KeyHint.ts","../src/components/Avatar.ts"],"sourcesContent":["/**\n * Box Component - Container with flexbox layout\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface BoxProps {\n /** Flex direction */\n flexDirection?: \"row\" | \"column\" | \"row-reverse\" | \"column-reverse\";\n /** Flex wrap */\n flexWrap?: \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n /** Justify content */\n justifyContent?:\n | \"flex-start\"\n | \"flex-end\"\n | \"center\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\";\n /** Align items */\n alignItems?: \"flex-start\" | \"flex-end\" | \"center\" | \"stretch\" | \"baseline\";\n /** Align self */\n alignSelf?: \"auto\" | \"flex-start\" | \"flex-end\" | \"center\" | \"stretch\" | \"baseline\";\n /** Flex grow */\n flexGrow?: number;\n /** Flex shrink */\n flexShrink?: number;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number | string;\n /** Min width */\n minWidth?: number | string;\n /** Min height */\n minHeight?: number | string;\n /** Max width */\n maxWidth?: number | string;\n /** Max height */\n maxHeight?: number | string;\n /** Padding (all sides) */\n padding?: number;\n /** Padding X (left and right) */\n paddingX?: number;\n /** Padding Y (top and bottom) */\n paddingY?: number;\n /** Padding top */\n paddingTop?: number;\n /** Padding right */\n paddingRight?: number;\n /** Padding bottom */\n paddingBottom?: number;\n /** Padding left */\n paddingLeft?: number;\n /** Margin (all sides) */\n margin?: number;\n /** Margin X (left and right) */\n marginX?: number;\n /** Margin Y (top and bottom) */\n marginY?: number;\n /** Margin top */\n marginTop?: number;\n /** Margin right */\n marginRight?: number;\n /** Margin bottom */\n marginBottom?: number;\n /** Margin left */\n marginLeft?: number;\n /** Gap between children */\n gap?: number;\n /** Border style */\n border?: \"none\" | \"single\" | \"double\" | \"rounded\" | \"heavy\" | \"dashed\";\n /** Foreground color */\n fg?: string;\n /** Background color */\n bg?: string;\n}\n\nexport const Box = defineComponent({\n name: \"Box\",\n props: {\n flexDirection: String as PropType<BoxProps[\"flexDirection\"]>,\n flexWrap: String as PropType<BoxProps[\"flexWrap\"]>,\n justifyContent: String as PropType<BoxProps[\"justifyContent\"]>,\n alignItems: String as PropType<BoxProps[\"alignItems\"]>,\n alignSelf: String as PropType<BoxProps[\"alignSelf\"]>,\n flexGrow: Number,\n flexShrink: Number,\n width: [Number, String] as PropType<number | string>,\n height: [Number, String] as PropType<number | string>,\n minWidth: [Number, String] as PropType<number | string>,\n minHeight: [Number, String] as PropType<number | string>,\n maxWidth: [Number, String] as PropType<number | string>,\n maxHeight: [Number, String] as PropType<number | string>,\n padding: Number,\n paddingX: Number,\n paddingY: Number,\n paddingTop: Number,\n paddingRight: Number,\n paddingBottom: Number,\n paddingLeft: Number,\n margin: Number,\n marginX: Number,\n marginY: Number,\n marginTop: Number,\n marginRight: Number,\n marginBottom: Number,\n marginLeft: Number,\n gap: Number,\n border: String as PropType<BoxProps[\"border\"]>,\n fg: String,\n bg: String,\n },\n setup(props, { slots }) {\n return () => {\n const style: Record<string, unknown> = {};\n\n // Layout props\n if (props.flexDirection) style.flex_direction = props.flexDirection;\n if (props.flexWrap) style.flex_wrap = props.flexWrap;\n if (props.justifyContent) style.justify_content = props.justifyContent;\n if (props.alignItems) style.align_items = props.alignItems;\n if (props.flexGrow !== undefined) style.flex_grow = props.flexGrow;\n if (props.flexShrink !== undefined) style.flex_shrink = props.flexShrink;\n\n // Dimensions\n if (props.width !== undefined) style.width = String(props.width);\n if (props.height !== undefined) style.height = String(props.height);\n if (props.minWidth !== undefined) style.min_width = String(props.minWidth);\n if (props.minHeight !== undefined) style.min_height = String(props.minHeight);\n if (props.maxWidth !== undefined) style.max_width = String(props.maxWidth);\n if (props.maxHeight !== undefined) style.max_height = String(props.maxHeight);\n\n // Padding\n if (props.padding !== undefined) style.padding = props.padding;\n if (props.paddingTop !== undefined || props.paddingY !== undefined) {\n style.padding_top = props.paddingTop ?? props.paddingY ?? props.padding;\n }\n if (props.paddingRight !== undefined || props.paddingX !== undefined) {\n style.padding_right = props.paddingRight ?? props.paddingX ?? props.padding;\n }\n if (props.paddingBottom !== undefined || props.paddingY !== undefined) {\n style.padding_bottom = props.paddingBottom ?? props.paddingY ?? props.padding;\n }\n if (props.paddingLeft !== undefined || props.paddingX !== undefined) {\n style.padding_left = props.paddingLeft ?? props.paddingX ?? props.padding;\n }\n\n // Margin\n if (props.margin !== undefined) style.margin = props.margin;\n if (props.marginTop !== undefined || props.marginY !== undefined) {\n style.margin_top = props.marginTop ?? props.marginY ?? props.margin;\n }\n if (props.marginRight !== undefined || props.marginX !== undefined) {\n style.margin_right = props.marginRight ?? props.marginX ?? props.margin;\n }\n if (props.marginBottom !== undefined || props.marginY !== undefined) {\n style.margin_bottom = props.marginBottom ?? props.marginY ?? props.margin;\n }\n if (props.marginLeft !== undefined || props.marginX !== undefined) {\n style.margin_left = props.marginLeft ?? props.marginX ?? props.margin;\n }\n\n // Gap\n if (props.gap !== undefined) style.gap = props.gap;\n\n return h(\n \"box\",\n {\n style,\n border: props.border,\n fg: props.fg,\n bg: props.bg,\n },\n slots.default?.(),\n );\n };\n },\n});\n","/**\n * Divider Component - Horizontal or vertical divider line\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface DividerProps {\n /** Divider direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Divider character */\n char?: string;\n /** Title in the middle of the divider */\n title?: string;\n /** Foreground color */\n fg?: string;\n /** Title foreground color */\n titleFg?: string;\n}\n\nexport const Divider = defineComponent({\n name: \"Divider\",\n props: {\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"horizontal\",\n },\n char: String,\n title: String,\n fg: {\n type: String,\n default: \"gray\",\n },\n titleFg: String,\n },\n setup(props) {\n return () => {\n const dividerChar = props.char ?? (props.direction === \"horizontal\" ? \"─\" : \"│\");\n\n if (props.direction === \"vertical\") {\n return h(\n \"text\",\n {\n fg: props.fg,\n },\n dividerChar,\n );\n }\n\n // Horizontal divider\n if (props.title) {\n return h(\n \"box\",\n {\n style: { flex_direction: \"row\", align_items: \"center\" },\n },\n [\n h(\"text\", { fg: props.fg }, dividerChar.repeat(3)),\n h(\n \"text\",\n {\n fg: props.titleFg ?? props.fg,\n bold: true,\n },\n ` ${props.title} `,\n ),\n h(\"text\", { fg: props.fg }, dividerChar.repeat(3)),\n ],\n );\n }\n\n // Simple divider - width is handled by parent container\n return h(\n \"text\",\n {\n fg: props.fg,\n },\n dividerChar.repeat(40),\n );\n };\n },\n});\n","/**\n * Stack Component - Horizontal/Vertical stack layout helper\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface StackProps {\n /** Stack direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Gap between children */\n gap?: number;\n /** Align items */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n /** Justify content */\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n /** Wrap children */\n wrap?: boolean;\n}\n\nconst ALIGN_MAP: Record<string, string> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n stretch: \"stretch\",\n};\n\nconst JUSTIFY_MAP: Record<string, string> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n between: \"space-between\",\n around: \"space-around\",\n evenly: \"space-evenly\",\n};\n\nexport const Stack = defineComponent({\n name: \"Stack\",\n props: {\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"vertical\",\n },\n gap: {\n type: Number,\n default: 0,\n },\n align: {\n type: String as PropType<StackProps[\"align\"]>,\n default: \"stretch\",\n },\n justify: {\n type: String as PropType<StackProps[\"justify\"]>,\n default: \"start\",\n },\n wrap: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n return () => {\n return h(\n \"box\",\n {\n style: {\n flex_direction: props.direction === \"horizontal\" ? \"row\" : \"column\",\n gap: props.gap,\n align_items: ALIGN_MAP[props.align ?? \"stretch\"],\n justify_content: JUSTIFY_MAP[props.justify ?? \"start\"],\n flex_wrap: props.wrap ? \"wrap\" : \"nowrap\",\n },\n },\n slots.default?.(),\n );\n };\n },\n});\n\n// Convenience components\nexport const HStack = defineComponent({\n name: \"HStack\",\n props: {\n gap: { type: Number, default: 1 },\n align: String as PropType<StackProps[\"align\"]>,\n justify: String as PropType<StackProps[\"justify\"]>,\n },\n setup(props, { slots }) {\n return () => h(Stack, { direction: \"horizontal\", ...props }, slots.default);\n },\n});\n\nexport const VStack = defineComponent({\n name: \"VStack\",\n props: {\n gap: { type: Number, default: 0 },\n align: String as PropType<StackProps[\"align\"]>,\n justify: String as PropType<StackProps[\"justify\"]>,\n },\n setup(props, { slots }) {\n return () => h(Stack, { direction: \"vertical\", ...props }, slots.default);\n },\n});\n","/**\n * Grid Component - Grid layout helper\n */\n\nimport { defineComponent, h, type VNode } from \"@vue/runtime-core\";\n\nexport interface GridProps {\n /** Number of columns */\n columns?: number;\n /** Gap between cells */\n gap?: number;\n /** Row gap */\n rowGap?: number;\n /** Column gap */\n columnGap?: number;\n}\n\nexport const Grid = defineComponent({\n name: \"Grid\",\n props: {\n columns: {\n type: Number,\n default: 2,\n },\n gap: {\n type: Number,\n default: 1,\n },\n rowGap: Number,\n columnGap: Number,\n },\n setup(props, { slots }) {\n return () => {\n const children = slots.default?.() ?? [];\n const flatChildren = Array.isArray(children) ? children.flat() : [children];\n\n const rows: VNode[][] = [];\n let currentRow: VNode[] = [];\n\n flatChildren.forEach((child, index) => {\n currentRow.push(child);\n if (currentRow.length === props.columns || index === flatChildren.length - 1) {\n rows.push([...currentRow]);\n currentRow = [];\n }\n });\n\n const rowGap = props.rowGap ?? props.gap;\n const columnGap = props.columnGap ?? props.gap;\n\n return h(\n \"box\",\n {\n style: {\n flex_direction: \"column\",\n gap: rowGap,\n },\n },\n rows.map((row, rowIndex) =>\n h(\n \"box\",\n {\n key: `row-${rowIndex}`,\n style: {\n flex_direction: \"row\",\n gap: columnGap,\n },\n },\n row.map((cell, cellIndex) =>\n h(\n \"box\",\n {\n key: `cell-${rowIndex}-${cellIndex}`,\n style: { flex_grow: 1 },\n },\n [cell],\n ),\n ),\n ),\n ),\n );\n };\n },\n});\n","/**\n * Card Component - Container card with optional header and footer\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface CardProps {\n /** Card title */\n title?: string;\n /** Card subtitle */\n subtitle?: string;\n /** Footer text */\n footer?: string;\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"heavy\" | \"none\";\n /** Padding */\n padding?: number;\n /** Title foreground color */\n titleFg?: string;\n /** Border foreground color */\n borderFg?: string;\n /** Background color */\n bg?: string;\n}\n\nexport const Card = defineComponent({\n name: \"Card\",\n props: {\n title: String,\n subtitle: String,\n footer: String,\n border: {\n type: String as PropType<CardProps[\"border\"]>,\n default: \"rounded\",\n },\n padding: {\n type: Number,\n default: 1,\n },\n titleFg: {\n type: String,\n default: \"white\",\n },\n borderFg: String,\n bg: String,\n },\n setup(props, { slots }) {\n return () => {\n const children: VNode[] = [];\n\n // Header\n if (props.title || props.subtitle) {\n const headerContent: VNode[] = [];\n\n if (props.title) {\n headerContent.push(h(\"text\", { fg: props.titleFg, bold: true }, props.title));\n }\n\n if (props.subtitle) {\n headerContent.push(\n h(\"text\", { dim: true }, props.title ? ` - ${props.subtitle}` : props.subtitle),\n );\n }\n\n children.push(\n h(\n \"box\",\n {\n key: \"header\",\n style: {\n flex_direction: \"row\",\n margin_bottom: 1,\n },\n },\n headerContent,\n ),\n );\n }\n\n // Content\n children.push(\n h(\n \"box\",\n {\n key: \"content\",\n style: { flex_grow: 1 },\n },\n slots.default?.(),\n ),\n );\n\n // Footer\n if (props.footer || slots.footer) {\n children.push(\n h(\n \"box\",\n {\n key: \"footer\",\n style: { margin_top: 1 },\n },\n slots.footer?.() ?? [h(\"text\", { dim: true }, props.footer)],\n ),\n );\n }\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n fg: props.borderFg,\n bg: props.bg,\n style: {\n flex_direction: \"column\",\n padding: props.padding,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Text Component - Text display\n */\n\nimport { defineComponent, h } from \"@vue/runtime-core\";\n\nexport interface TextProps {\n /** Text content (alternative to slot) */\n content?: string;\n /** Enable text wrapping */\n wrap?: boolean;\n /** Foreground color */\n fg?: string;\n /** Background color */\n bg?: string;\n /** Bold text */\n bold?: boolean;\n /** Dim text */\n dim?: boolean;\n /** Italic text */\n italic?: boolean;\n /** Underlined text */\n underline?: boolean;\n /** Strikethrough text */\n strikethrough?: boolean;\n}\n\nexport const Text = defineComponent({\n name: \"Text\",\n props: {\n content: String,\n wrap: Boolean,\n fg: String,\n bg: String,\n bold: Boolean,\n dim: Boolean,\n italic: Boolean,\n underline: Boolean,\n strikethrough: Boolean,\n },\n setup(props, { slots }) {\n return () => {\n // Get text from content prop or slot\n const text =\n props.content ??\n slots\n .default?.()\n ?.map((vnode) => {\n if (typeof vnode.children === \"string\") {\n return vnode.children;\n }\n return \"\";\n })\n .join(\"\") ??\n \"\";\n\n return h(\"text\", {\n text,\n wrap: props.wrap,\n fg: props.fg,\n bg: props.bg,\n bold: props.bold,\n dim: props.dim,\n italic: props.italic,\n underline: props.underline,\n strikethrough: props.strikethrough,\n });\n };\n },\n});\n\n/**\n * Convenience components for common text styles\n */\n\nexport const ErrorText = defineComponent({\n name: \"ErrorText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { fg: \"red\", ...props }, slots);\n },\n});\n\nexport const WarningText = defineComponent({\n name: \"WarningText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { fg: \"yellow\", ...props }, slots);\n },\n});\n\nexport const SuccessText = defineComponent({\n name: \"SuccessText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { fg: \"green\", ...props }, slots);\n },\n});\n\nexport const InfoText = defineComponent({\n name: \"InfoText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { fg: \"blue\", ...props }, slots);\n },\n});\n\nexport const MutedText = defineComponent({\n name: \"MutedText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { dim: true, ...props }, slots);\n },\n});\n","/**\n * Code Component - Code block display\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface CodeProps {\n /** Code content */\n code: string;\n /** Language (for future syntax highlighting) */\n language?: string;\n /** Show line numbers */\n lineNumbers?: boolean;\n /** Starting line number */\n startLine?: number;\n /** Highlight specific lines */\n highlightLines?: number[];\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"none\";\n /** Code foreground color */\n fg?: string;\n /** Line number foreground color */\n lineNumberFg?: string;\n /** Highlight line background */\n highlightBg?: string;\n}\n\nexport const Code = defineComponent({\n name: \"Code\",\n props: {\n code: {\n type: String,\n required: true,\n },\n language: String,\n lineNumbers: {\n type: Boolean,\n default: true,\n },\n startLine: {\n type: Number,\n default: 1,\n },\n highlightLines: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n border: {\n type: String as PropType<CodeProps[\"border\"]>,\n default: \"single\",\n },\n fg: {\n type: String,\n default: \"white\",\n },\n lineNumberFg: {\n type: String,\n default: \"gray\",\n },\n highlightBg: {\n type: String,\n default: \"blue\",\n },\n },\n setup(props) {\n return () => {\n const lines = props.code.split(\"\\n\");\n const maxLineNum = props.startLine + lines.length - 1;\n const lineNumWidth = String(maxLineNum).length;\n\n const children = lines.map((line, index) => {\n const lineNum = props.startLine + index;\n const isHighlighted = props.highlightLines?.includes(lineNum);\n\n const parts = [];\n\n if (props.lineNumbers) {\n parts.push(\n h(\n \"text\",\n {\n key: `ln-${lineNum}`,\n fg: props.lineNumberFg,\n },\n `${String(lineNum).padStart(lineNumWidth)} │ `,\n ),\n );\n }\n\n parts.push(\n h(\n \"text\",\n {\n key: `code-${lineNum}`,\n fg: props.fg,\n bg: isHighlighted ? props.highlightBg : undefined,\n },\n line || \" \",\n ),\n );\n\n return h(\n \"box\",\n {\n key: `line-${lineNum}`,\n style: { flex_direction: \"row\" },\n },\n parts,\n );\n });\n\n // Add language label if provided\n if (props.language) {\n children.unshift(\n h(\n \"text\",\n {\n key: \"lang\",\n dim: true,\n style: { margin_bottom: 1 },\n },\n `// ${props.language}`,\n ),\n );\n }\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n style: {\n flex_direction: \"column\",\n padding: props.border !== \"none\" ? 1 : 0,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Link Component - Clickable/styled link\n */\n\nimport { defineComponent, h } from \"@vue/runtime-core\";\n\nexport interface LinkProps {\n /** Link text */\n text: string;\n /** URL (for display, actual navigation not supported in TUI) */\n url?: string;\n /** Foreground color */\n fg?: string;\n /** Show underline */\n underline?: boolean;\n /** Show URL in parentheses */\n showUrl?: boolean;\n}\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n text: {\n type: String,\n required: true,\n },\n url: String,\n fg: {\n type: String,\n default: \"blue\",\n },\n underline: {\n type: Boolean,\n default: true,\n },\n showUrl: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\"click\"],\n setup(props, { emit: _emit }) {\n return () => {\n const parts = [\n h(\n \"text\",\n {\n fg: props.fg,\n underline: props.underline,\n },\n props.text,\n ),\n ];\n\n if (props.showUrl && props.url) {\n parts.push(h(\"text\", { dim: true }, ` (${props.url})`));\n }\n\n return h(\"box\", { style: { flex_direction: \"row\" } }, parts);\n };\n },\n});\n","/**\n * TextInput Component - Text input with builtin cursor management and IME support\n */\n\nimport { defineComponent, h, ref, watch, computed, type PropType } from \"@vue/runtime-core\";\nimport { useInput } from \"../composables/useInput.js\";\n\nexport interface TextInputProps {\n /** Input value (v-model) */\n modelValue?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Whether input is focused */\n focus?: boolean;\n /** Password mode (mask input) */\n mask?: boolean;\n /** Mask character */\n maskChar?: string;\n /** Input width */\n width?: number | string;\n /** Foreground color */\n fg?: string;\n /** Background color */\n bg?: string;\n /** Called when value changes */\n \"onUpdate:modelValue\"?: (value: string) => void;\n /** Called when submitted (Enter) */\n onSubmit?: (value: string) => void;\n /** Called when escape is pressed */\n onCancel?: () => void;\n}\n\nexport const TextInput = defineComponent({\n name: \"TextInput\",\n props: {\n modelValue: {\n type: String,\n default: \"\",\n },\n placeholder: {\n type: String,\n default: \"\",\n },\n focus: {\n type: Boolean,\n default: false,\n },\n mask: {\n type: Boolean,\n default: false,\n },\n maskChar: {\n type: String,\n default: \"*\",\n },\n width: [Number, String] as PropType<number | string>,\n fg: String,\n bg: String,\n },\n emits: [\"update:modelValue\", \"submit\", \"cancel\"],\n setup(props, { emit }) {\n const internalValue = ref(props.modelValue);\n const cursorPos = ref(props.modelValue.length);\n\n // Sync with v-model\n watch(\n () => props.modelValue,\n (newValue) => {\n internalValue.value = newValue;\n // Keep cursor at end if value changes externally\n if (cursorPos.value > newValue.length) {\n cursorPos.value = newValue.length;\n }\n },\n );\n\n // Update value and emit\n const updateValue = (value: string) => {\n internalValue.value = value;\n emit(\"update:modelValue\", value);\n };\n\n // Insert text at cursor position\n const insertText = (text: string) => {\n const before = internalValue.value.slice(0, cursorPos.value);\n const after = internalValue.value.slice(cursorPos.value);\n updateValue(before + text + after);\n cursorPos.value += text.length;\n };\n\n // Delete character before cursor (Backspace)\n const deleteBack = () => {\n if (cursorPos.value > 0) {\n const before = internalValue.value.slice(0, cursorPos.value - 1);\n const after = internalValue.value.slice(cursorPos.value);\n updateValue(before + after);\n cursorPos.value--;\n }\n };\n\n // Delete character at cursor (Delete)\n const deleteForward = () => {\n if (cursorPos.value < internalValue.value.length) {\n const before = internalValue.value.slice(0, cursorPos.value);\n const after = internalValue.value.slice(cursorPos.value + 1);\n updateValue(before + after);\n }\n };\n\n // Move cursor left\n const moveLeft = () => {\n if (cursorPos.value > 0) {\n cursorPos.value--;\n }\n };\n\n // Move cursor right\n const moveRight = () => {\n if (cursorPos.value < internalValue.value.length) {\n cursorPos.value++;\n }\n };\n\n // Move cursor to start\n const moveToStart = () => {\n cursorPos.value = 0;\n };\n\n // Move cursor to end\n const moveToEnd = () => {\n cursorPos.value = internalValue.value.length;\n };\n\n // Use focus prop to control input handling\n const isActive = computed(() => props.focus);\n\n // Handle keyboard input when focused\n useInput({\n isActive,\n onChar: (char) => {\n insertText(char);\n },\n onArrow: (direction) => {\n if (direction === \"left\") moveLeft();\n if (direction === \"right\") moveRight();\n },\n onKey: (key, modifiers) => {\n if (key === \"backspace\") {\n deleteBack();\n } else if (key === \"delete\") {\n deleteForward();\n } else if (key === \"home\") {\n moveToStart();\n } else if (key === \"end\") {\n moveToEnd();\n } else if (key === \"a\" && modifiers.ctrl) {\n // Ctrl+A - select all (move to end for now)\n moveToEnd();\n }\n },\n onSubmit: () => {\n emit(\"submit\", internalValue.value);\n },\n onEscape: () => {\n emit(\"cancel\");\n },\n });\n\n return () => {\n const style: Record<string, unknown> = {};\n if (props.width !== undefined) {\n style.width = String(props.width);\n }\n\n return h(\"input\", {\n value: internalValue.value,\n placeholder: props.placeholder,\n focused: props.focus,\n cursor: cursorPos.value,\n mask: props.mask,\n \"mask-char\": props.maskChar,\n style,\n fg: props.fg,\n bg: props.bg,\n });\n };\n },\n});\n\n/**\n * Password input variant\n */\nexport const PasswordInput = defineComponent({\n name: \"PasswordInput\",\n props: {\n modelValue: {\n type: String,\n default: \"\",\n },\n placeholder: {\n type: String,\n default: \"Enter password...\",\n },\n focus: Boolean,\n width: [Number, String] as PropType<number | string>,\n fg: String,\n bg: String,\n },\n emits: [\"update:modelValue\", \"submit\", \"cancel\"],\n setup(props, { emit }) {\n return () =>\n h(TextInput, {\n ...props,\n mask: true,\n \"onUpdate:modelValue\": (v: string) => emit(\"update:modelValue\", v),\n onSubmit: (v: string) => emit(\"submit\", v),\n onCancel: () => emit(\"cancel\"),\n });\n },\n});\n","/**\n * TextArea Component - Multiline text input\n */\n\nimport { defineComponent, h, type PropType, computed } from \"@vue/runtime-core\";\n\nexport interface TextAreaProps {\n /** Text value */\n modelValue?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Number of visible rows */\n rows?: number;\n /** Whether the textarea is focused */\n focused?: boolean;\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Show line numbers */\n lineNumbers?: boolean;\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"none\";\n /** Foreground color */\n fg?: string;\n /** Placeholder foreground color */\n placeholderFg?: string;\n /** Line number foreground color */\n lineNumberFg?: string;\n /** Cursor line */\n cursorLine?: number;\n /** Cursor column */\n cursorColumn?: number;\n}\n\nexport const TextArea = defineComponent({\n name: \"TextArea\",\n props: {\n modelValue: {\n type: String,\n default: \"\",\n },\n placeholder: String,\n rows: {\n type: Number,\n default: 5,\n },\n focused: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n lineNumbers: {\n type: Boolean,\n default: false,\n },\n border: {\n type: String as PropType<TextAreaProps[\"border\"]>,\n default: \"single\",\n },\n fg: String,\n placeholderFg: {\n type: String,\n default: \"gray\",\n },\n lineNumberFg: {\n type: String,\n default: \"gray\",\n },\n cursorLine: {\n type: Number,\n default: 0,\n },\n cursorColumn: {\n type: Number,\n default: 0,\n },\n },\n emits: [\"update:modelValue\"],\n setup(props) {\n const lines = computed(() => {\n const text = props.modelValue || \"\";\n const textLines = text.split(\"\\n\");\n\n // Pad to minimum rows\n while (textLines.length < props.rows) {\n textLines.push(\"\");\n }\n\n return textLines.slice(0, props.rows);\n });\n\n const showPlaceholder = computed(\n () => !props.modelValue && props.placeholder && !props.focused,\n );\n\n return () => {\n const lineNumWidth = String(lines.value.length).length;\n\n const children = lines.value.map((line, index) => {\n const isCursorLine = props.focused && index === props.cursorLine;\n const parts = [];\n\n // Line number\n if (props.lineNumbers) {\n parts.push(\n h(\n \"text\",\n {\n key: `ln-${index}`,\n fg: props.lineNumberFg,\n dim: !isCursorLine,\n },\n `${String(index + 1).padStart(lineNumWidth)} │ `,\n ),\n );\n }\n\n // Line content\n let content = line || (showPlaceholder.value && index === 0 ? props.placeholder : \" \");\n\n parts.push(\n h(\n \"text\",\n {\n key: `content-${index}`,\n fg: showPlaceholder.value && index === 0 ? props.placeholderFg : props.fg,\n dim: props.disabled,\n bold: isCursorLine,\n },\n content,\n ),\n );\n\n return h(\n \"box\",\n {\n key: `line-${index}`,\n style: { flex_direction: \"row\" },\n bg: isCursorLine ? \"gray\" : undefined,\n },\n parts,\n );\n });\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n style: {\n flex_direction: \"column\",\n padding: props.border !== \"none\" ? 1 : 0,\n height: String(props.rows + (props.border !== \"none\" ? 2 : 0)),\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Select Component - Dropdown/menu selection\n */\n\nimport { defineComponent, h, ref, type PropType, watch } from \"@vue/runtime-core\";\n\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n /** Options to display */\n options: SelectOption[];\n /** Currently selected value */\n modelValue?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is focused */\n focused?: boolean;\n /** Indicator for selected item */\n indicator?: string;\n /** Indicator for unselected item */\n indicatorEmpty?: string;\n /** Foreground color */\n fg?: string;\n /** Background color */\n bg?: string;\n /** Selected item foreground color */\n selectedFg?: string;\n /** Selected item background color */\n selectedBg?: string;\n}\n\nexport const Select = defineComponent({\n name: \"Select\",\n props: {\n options: {\n type: Array as PropType<SelectOption[]>,\n required: true,\n },\n modelValue: String,\n placeholder: {\n type: String,\n default: \"Select an option\",\n },\n focused: {\n type: Boolean,\n default: false,\n },\n indicator: {\n type: String,\n default: \"> \",\n },\n indicatorEmpty: {\n type: String,\n default: \" \",\n },\n fg: String,\n bg: String,\n selectedFg: {\n type: String,\n default: \"cyan\",\n },\n selectedBg: String,\n },\n emits: [\"update:modelValue\", \"select\"],\n setup(props, { emit: _emit }) {\n const highlightedIndex = ref(0);\n\n // Find initial index based on modelValue\n watch(\n () => props.modelValue,\n (value) => {\n if (value) {\n const index = props.options.findIndex((opt) => opt.value === value);\n if (index !== -1) {\n highlightedIndex.value = index;\n }\n }\n },\n { immediate: true },\n );\n\n // Note: selectOption, moveUp, moveDown are designed for keyboard event handlers\n // They are currently not wired up but kept for future use\n\n return () => {\n const children = props.options.map((option, index) => {\n const isHighlighted = index === highlightedIndex.value;\n const isSelected = option.value === props.modelValue;\n const indicator = isHighlighted ? props.indicator : props.indicatorEmpty;\n\n return h(\n \"box\",\n {\n key: option.value,\n style: { flex_direction: \"row\" },\n },\n [\n h(\n \"text\",\n {\n fg: isHighlighted ? props.selectedFg : props.fg,\n bg: isHighlighted ? props.selectedBg : props.bg,\n dim: option.disabled,\n },\n `${indicator}${option.label}${isSelected ? \" (selected)\" : \"\"}`,\n ),\n ],\n );\n });\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\" },\n fg: props.fg,\n bg: props.bg,\n },\n children,\n );\n };\n },\n});\n","/**\n * Checkbox Component - Toggle checkbox\n */\n\nimport { defineComponent, h } from \"@vue/runtime-core\";\n\nexport interface CheckboxProps {\n /** Whether the checkbox is checked */\n modelValue?: boolean;\n /** Label text */\n label?: string;\n /** Whether the checkbox is focused */\n focused?: boolean;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Checked indicator */\n checked?: string;\n /** Unchecked indicator */\n unchecked?: string;\n /** Foreground color */\n fg?: string;\n /** Checked foreground color */\n checkedFg?: string;\n}\n\nexport const Checkbox = defineComponent({\n name: \"Checkbox\",\n props: {\n modelValue: {\n type: Boolean,\n default: false,\n },\n label: String,\n focused: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n checked: {\n type: String,\n default: \"[x]\",\n },\n unchecked: {\n type: String,\n default: \"[ ]\",\n },\n fg: String,\n checkedFg: {\n type: String,\n default: \"green\",\n },\n },\n emits: [\"update:modelValue\", \"change\"],\n setup(props, { emit: _emit }) {\n // Note: toggle is designed for keyboard event handlers\n // It is currently not wired up but kept for future use\n\n return () => {\n const indicator = props.modelValue ? props.checked : props.unchecked;\n const color = props.modelValue ? props.checkedFg : props.fg;\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"row\" },\n },\n [\n h(\n \"text\",\n {\n fg: color,\n dim: props.disabled,\n bold: props.focused,\n },\n `${indicator} ${props.label ?? \"\"}`,\n ),\n ],\n );\n };\n },\n});\n","/**\n * RadioGroup Component - Radio button group selection\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface RadioOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n /** Radio options */\n options: RadioOption[];\n /** Currently selected value */\n modelValue?: string;\n /** Layout direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Focused option index */\n focusedIndex?: number;\n /** Selected indicator */\n selected?: string;\n /** Unselected indicator */\n unselected?: string;\n /** Foreground color */\n fg?: string;\n /** Selected foreground color */\n selectedFg?: string;\n}\n\nexport const RadioGroup = defineComponent({\n name: \"RadioGroup\",\n props: {\n options: {\n type: Array as PropType<RadioOption[]>,\n required: true,\n },\n modelValue: String,\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"vertical\",\n },\n focusedIndex: Number,\n selected: {\n type: String,\n default: \"◉\",\n },\n unselected: {\n type: String,\n default: \"○\",\n },\n fg: String,\n selectedFg: {\n type: String,\n default: \"green\",\n },\n },\n emits: [\"update:modelValue\", \"change\"],\n setup(props, { emit: _emit }) {\n return () => {\n const children = props.options.map((option, index) => {\n const isSelected = option.value === props.modelValue;\n const isFocused = index === props.focusedIndex;\n const indicator = isSelected ? props.selected : props.unselected;\n\n return h(\n \"text\",\n {\n key: option.value,\n fg: isSelected ? props.selectedFg : props.fg,\n bold: isFocused,\n dim: option.disabled,\n },\n `${indicator} ${option.label}`,\n );\n });\n\n return h(\n \"box\",\n {\n style: {\n flex_direction: props.direction === \"horizontal\" ? \"row\" : \"column\",\n gap: props.direction === \"horizontal\" ? 2 : 0,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Confirm Component - Confirmation dialog\n */\n\nimport { defineComponent, h, ref } from \"@vue/runtime-core\";\n\nexport interface ConfirmProps {\n /** Confirmation message */\n message: string;\n /** Confirm button text */\n confirmText?: string;\n /** Cancel button text */\n cancelText?: string;\n /** Whether confirm is initially selected */\n defaultConfirm?: boolean;\n /** Confirm button foreground color */\n confirmFg?: string;\n /** Cancel button foreground color */\n cancelFg?: string;\n /** Selected button foreground color */\n selectedFg?: string;\n}\n\nexport const Confirm = defineComponent({\n name: \"Confirm\",\n props: {\n message: {\n type: String,\n required: true,\n },\n confirmText: {\n type: String,\n default: \"Yes\",\n },\n cancelText: {\n type: String,\n default: \"No\",\n },\n defaultConfirm: {\n type: Boolean,\n default: true,\n },\n confirmFg: {\n type: String,\n default: \"green\",\n },\n cancelFg: {\n type: String,\n default: \"red\",\n },\n selectedFg: {\n type: String,\n default: \"cyan\",\n },\n },\n emits: [\"confirm\", \"cancel\", \"select\"],\n setup(props, { emit: _emit }) {\n const isConfirmSelected = ref(props.defaultConfirm);\n\n // Note: toggle and confirm are designed for keyboard event handlers\n // They are currently not wired up but kept for future use\n // const toggle = () => { isConfirmSelected.value = !isConfirmSelected.value; };\n // const confirm = () => { ... };\n\n return () => {\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\" },\n },\n [\n // Message\n h(\"text\", { key: \"message\" }, props.message),\n // Buttons\n h(\n \"box\",\n {\n key: \"buttons\",\n style: {\n flex_direction: \"row\",\n gap: 2,\n margin_top: 1,\n },\n },\n [\n h(\n \"text\",\n {\n key: \"confirm\",\n fg: isConfirmSelected.value ? props.selectedFg : props.confirmFg,\n bold: isConfirmSelected.value,\n },\n `[${props.confirmText}]`,\n ),\n h(\n \"text\",\n {\n key: \"cancel\",\n fg: !isConfirmSelected.value ? props.selectedFg : props.cancelFg,\n bold: !isConfirmSelected.value,\n },\n `[${props.cancelText}]`,\n ),\n ],\n ),\n ],\n );\n };\n },\n});\n","/**\n * Form Component - Form container with labels\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface FormField {\n key: string;\n label: string;\n required?: boolean;\n hint?: string;\n}\n\nexport interface FormProps {\n /** Form fields metadata */\n fields?: FormField[];\n /** Label width */\n labelWidth?: number;\n /** Gap between fields */\n gap?: number;\n /** Label position */\n labelPosition?: \"left\" | \"top\";\n /** Label foreground color */\n labelFg?: string;\n /** Required indicator */\n requiredIndicator?: string;\n /** Hint foreground color */\n hintFg?: string;\n}\n\nexport const Form = defineComponent({\n name: \"Form\",\n props: {\n fields: {\n type: Array as PropType<FormField[]>,\n default: () => [],\n },\n labelWidth: {\n type: Number,\n default: 15,\n },\n gap: {\n type: Number,\n default: 1,\n },\n labelPosition: {\n type: String as PropType<\"left\" | \"top\">,\n default: \"left\",\n },\n labelFg: String,\n requiredIndicator: {\n type: String,\n default: \"*\",\n },\n hintFg: {\n type: String,\n default: \"gray\",\n },\n },\n setup(props, { slots }) {\n return () => {\n const children: VNode[] = [];\n\n props.fields.forEach((field, _index) => {\n const labelContent = [\n h(\n \"text\",\n {\n fg: props.labelFg,\n },\n field.label.padEnd(props.labelWidth),\n ),\n ];\n\n if (field.required) {\n labelContent.push(h(\"text\", { fg: \"red\" }, props.requiredIndicator));\n }\n\n const fieldSlot = slots[field.key]?.();\n\n if (props.labelPosition === \"top\") {\n children.push(\n h(\n \"box\",\n {\n key: field.key,\n style: { flex_direction: \"column\", margin_bottom: props.gap },\n },\n [\n h(\"box\", { style: { flex_direction: \"row\" } }, labelContent),\n fieldSlot ? h(\"box\", { style: { margin_top: 0.5 } }, fieldSlot) : null,\n field.hint ? h(\"text\", { fg: props.hintFg, dim: true }, field.hint) : null,\n ].filter(Boolean),\n ),\n );\n } else {\n children.push(\n h(\n \"box\",\n {\n key: field.key,\n style: {\n flex_direction: \"row\",\n align_items: \"center\",\n margin_bottom: props.gap,\n },\n },\n [\n h(\n \"box\",\n { style: { width: String(props.labelWidth), flex_direction: \"row\" } },\n labelContent,\n ),\n h(\"box\", { style: { flex_grow: 1 } }, fieldSlot),\n ],\n ),\n );\n\n if (field.hint) {\n children.push(\n h(\n \"text\",\n {\n key: `hint-${field.key}`,\n fg: props.hintFg,\n dim: true,\n style: { margin_left: props.labelWidth, margin_bottom: props.gap },\n },\n field.hint,\n ),\n );\n }\n }\n });\n\n return h(\"box\", { style: { flex_direction: \"column\" } }, children);\n };\n },\n});\n","/**\n * Spinner Component - Loading indicator\n */\n\nimport { defineComponent, h, ref, onMounted, onUnmounted, type PropType } from \"@vue/runtime-core\";\nimport { Text } from \"./Text.js\";\n\n/**\n * Spinner frame sets\n */\nexport const spinnerTypes = {\n dots: [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"],\n dots2: [\"⣾\", \"⣽\", \"⣻\", \"⢿\", \"⡿\", \"⣟\", \"⣯\", \"⣷\"],\n line: [\"-\", \"\\\\\", \"|\", \"/\"],\n arc: [\"◜\", \"◠\", \"◝\", \"◞\", \"◡\", \"◟\"],\n circle: [\"◐\", \"◓\", \"◑\", \"◒\"],\n bounce: [\"⠁\", \"⠂\", \"⠄\", \"⡀\", \"⢀\", \"⠠\", \"⠐\", \"⠈\"],\n box: [\"▖\", \"▘\", \"▝\", \"▗\"],\n arrow: [\"←\", \"↖\", \"↑\", \"↗\", \"→\", \"↘\", \"↓\", \"↙\"],\n clock: [\"🕛\", \"🕐\", \"🕑\", \"🕒\", \"🕓\", \"🕔\", \"🕕\", \"🕖\", \"🕗\", \"🕘\", \"🕙\", \"🕚\"],\n moon: [\"🌑\", \"🌒\", \"🌓\", \"🌔\", \"🌕\", \"🌖\", \"🌗\", \"🌘\"],\n earth: [\"🌍\", \"🌎\", \"🌏\"],\n} as const;\n\nexport type SpinnerType = keyof typeof spinnerTypes;\n\nexport interface SpinnerProps {\n /** Spinner type */\n type?: SpinnerType;\n /** Custom frames */\n frames?: string[];\n /** Animation interval in ms */\n interval?: number;\n /** Label text */\n label?: string;\n /** Foreground color */\n fg?: string;\n}\n\nexport const Spinner = defineComponent({\n name: \"Spinner\",\n props: {\n type: {\n type: String as PropType<SpinnerType>,\n default: \"dots\",\n },\n frames: Array as PropType<string[]>,\n interval: {\n type: Number,\n default: 80,\n },\n label: String,\n fg: String,\n },\n setup(props) {\n const frameIndex = ref(0);\n let timer: ReturnType<typeof setInterval> | null = null;\n\n const frames = props.frames ?? spinnerTypes[props.type] ?? spinnerTypes.dots;\n\n onMounted(() => {\n timer = setInterval(() => {\n frameIndex.value = (frameIndex.value + 1) % frames.length;\n }, props.interval);\n });\n\n onUnmounted(() => {\n if (timer) {\n clearInterval(timer);\n }\n });\n\n return () => {\n const frame = frames[frameIndex.value];\n const content = props.label ? `${frame} ${props.label}` : frame;\n\n return h(Text, { fg: props.fg }, () => content);\n };\n },\n});\n","/**\n * ProgressBar Component - Progress indicator\n */\n\nimport { defineComponent, h, computed, type PropType } from \"@vue/runtime-core\";\nimport { Box } from \"./Box.js\";\nimport { Text } from \"./Text.js\";\n\nexport interface ProgressBarProps {\n /** Progress value (0-100) */\n value: number;\n /** Total width in characters */\n width?: number;\n /** Show percentage label */\n showLabel?: boolean;\n /** Label position */\n labelPosition?: \"left\" | \"right\" | \"inside\";\n /** Filled character */\n filledChar?: string;\n /** Empty character */\n emptyChar?: string;\n /** Left border character */\n leftBorder?: string;\n /** Right border character */\n rightBorder?: string;\n /** Filled color */\n filledFg?: string;\n /** Empty color */\n emptyFg?: string;\n}\n\nexport const ProgressBar = defineComponent({\n name: \"ProgressBar\",\n props: {\n value: {\n type: Number,\n required: true,\n validator: (v: number) => v >= 0 && v <= 100,\n },\n width: {\n type: Number,\n default: 20,\n },\n showLabel: {\n type: Boolean,\n default: true,\n },\n labelPosition: {\n type: String as PropType<\"left\" | \"right\" | \"inside\">,\n default: \"right\",\n },\n filledChar: {\n type: String,\n default: \"█\",\n },\n emptyChar: {\n type: String,\n default: \"░\",\n },\n leftBorder: {\n type: String,\n default: \"\",\n },\n rightBorder: {\n type: String,\n default: \"\",\n },\n filledFg: {\n type: String,\n default: \"green\",\n },\n emptyFg: {\n type: String,\n default: \"gray\",\n },\n },\n setup(props) {\n const normalizedValue = computed(() => Math.max(0, Math.min(100, props.value)));\n\n const filledWidth = computed(() => Math.round((normalizedValue.value / 100) * props.width));\n\n const emptyWidth = computed(() => props.width - filledWidth.value);\n\n const label = computed(() => `${Math.round(normalizedValue.value)}%`);\n\n return () => {\n const filled = props.filledChar.repeat(filledWidth.value);\n const empty = props.emptyChar.repeat(emptyWidth.value);\n\n const barContent = [\n props.leftBorder && h(Text, {}, () => props.leftBorder),\n h(Text, { fg: props.filledFg }, () => filled),\n h(Text, { fg: props.emptyFg }, () => empty),\n props.rightBorder && h(Text, {}, () => props.rightBorder),\n ].filter(Boolean);\n\n if (!props.showLabel) {\n return h(Box, { flexDirection: \"row\" }, () => barContent);\n }\n\n const labelElement = h(Text, { dim: true }, () => label.value);\n\n switch (props.labelPosition) {\n case \"left\":\n return h(Box, { flexDirection: \"row\", gap: 1 }, () => [labelElement, ...barContent]);\n case \"inside\":\n // For inside, we'd need more complex rendering\n // For now, show on right\n return h(Box, { flexDirection: \"row\", gap: 1 }, () => [...barContent, labelElement]);\n case \"right\":\n default:\n return h(Box, { flexDirection: \"row\", gap: 1 }, () => [...barContent, labelElement]);\n }\n };\n },\n});\n\n/**\n * Indeterminate progress bar (animated)\n */\nexport const IndeterminateProgressBar = defineComponent({\n name: \"IndeterminateProgressBar\",\n props: {\n width: {\n type: Number,\n default: 20,\n },\n fg: {\n type: String,\n default: \"cyan\",\n },\n },\n setup(props) {\n // This would need animation support\n // For now, show a static pattern\n return () => {\n const pattern = \"▓▒░░░░░░░░░░░░░░░░░░\";\n const display = pattern.slice(0, props.width);\n\n return h(Text, { fg: props.fg }, () => display);\n };\n },\n});\n","/**\n * Alert Component - Alert/notification box\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport type AlertType = \"info\" | \"success\" | \"warning\" | \"error\";\n\nexport interface AlertProps {\n /** Alert message */\n message: string;\n /** Alert type */\n type?: AlertType;\n /** Alert title */\n title?: string;\n /** Show icon */\n showIcon?: boolean;\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"none\";\n}\n\nconst ALERT_CONFIG: Record<AlertType, { icon: string; fg: string; title: string }> = {\n info: { icon: \"ℹ\", fg: \"cyan\", title: \"Info\" },\n success: { icon: \"✓\", fg: \"green\", title: \"Success\" },\n warning: { icon: \"⚠\", fg: \"yellow\", title: \"Warning\" },\n error: { icon: \"✗\", fg: \"red\", title: \"Error\" },\n};\n\nexport const Alert = defineComponent({\n name: \"Alert\",\n props: {\n message: {\n type: String,\n required: true,\n },\n type: {\n type: String as PropType<AlertType>,\n default: \"info\",\n },\n title: String,\n showIcon: {\n type: Boolean,\n default: true,\n },\n border: {\n type: String as PropType<AlertProps[\"border\"]>,\n default: \"rounded\",\n },\n },\n setup(props) {\n return () => {\n const config = ALERT_CONFIG[props.type];\n const title = props.title ?? config.title;\n\n const children = [];\n\n // Header with icon and title\n const headerParts = [];\n if (props.showIcon) {\n headerParts.push(h(\"text\", { fg: config.fg }, `${config.icon} `));\n }\n headerParts.push(h(\"text\", { fg: config.fg, bold: true }, title));\n\n children.push(h(\"box\", { key: \"header\", style: { flex_direction: \"row\" } }, headerParts));\n\n // Message\n children.push(h(\"text\", { key: \"message\", style: { margin_top: 1 } }, props.message));\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n fg: config.fg,\n style: {\n flex_direction: \"column\",\n padding: 1,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Badge Component - Status badge/tag\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport type BadgeVariant = \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n\nexport interface BadgeProps {\n /** Badge text */\n label: string;\n /** Badge variant */\n variant?: BadgeVariant;\n /** Custom foreground color (overrides variant) */\n fg?: string;\n /** Custom background color (overrides variant) */\n bg?: string;\n /** Show border */\n border?: boolean;\n}\n\nconst VARIANT_COLORS: Record<BadgeVariant, { fg: string; bg?: string }> = {\n default: { fg: \"white\" },\n success: { fg: \"green\" },\n warning: { fg: \"yellow\" },\n error: { fg: \"red\" },\n info: { fg: \"cyan\" },\n};\n\nexport const Badge = defineComponent({\n name: \"Badge\",\n props: {\n label: {\n type: String,\n required: true,\n },\n variant: {\n type: String as PropType<BadgeVariant>,\n default: \"default\",\n },\n fg: String,\n bg: String,\n border: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n return () => {\n const colors = VARIANT_COLORS[props.variant];\n const fg = props.fg ?? colors.fg;\n const bg = props.bg ?? colors.bg;\n\n if (props.border) {\n return h(\n \"box\",\n {\n border: \"single\",\n fg,\n bg,\n style: { padding_left: 1, padding_right: 1 },\n },\n [h(\"text\", { fg, bg }, props.label)],\n );\n }\n\n return h(\n \"text\",\n {\n fg,\n bg,\n bold: true,\n },\n `[${props.label}]`,\n );\n };\n },\n});\n","/**\n * Timer Component - Countdown/stopwatch timer\n */\n\nimport {\n defineComponent,\n h,\n ref,\n onMounted,\n onUnmounted,\n type PropType,\n computed,\n} from \"@vue/runtime-core\";\n\nexport type TimerMode = \"countdown\" | \"stopwatch\";\n\nexport interface TimerProps {\n /** Timer mode */\n mode?: TimerMode;\n /** Initial seconds (for countdown) */\n initialSeconds?: number;\n /** Auto start */\n autoStart?: boolean;\n /** Show hours */\n showHours?: boolean;\n /** Show milliseconds */\n showMilliseconds?: boolean;\n /** Foreground color */\n fg?: string;\n /** Warning color (when < 10 seconds in countdown) */\n warningFg?: string;\n /** Danger color (when < 5 seconds in countdown) */\n dangerFg?: string;\n}\n\nexport const Timer = defineComponent({\n name: \"Timer\",\n props: {\n mode: {\n type: String as PropType<TimerMode>,\n default: \"stopwatch\",\n },\n initialSeconds: {\n type: Number,\n default: 0,\n },\n autoStart: {\n type: Boolean,\n default: true,\n },\n showHours: {\n type: Boolean,\n default: false,\n },\n showMilliseconds: {\n type: Boolean,\n default: false,\n },\n fg: {\n type: String,\n default: \"white\",\n },\n warningFg: {\n type: String,\n default: \"yellow\",\n },\n dangerFg: {\n type: String,\n default: \"red\",\n },\n },\n emits: [\"tick\", \"complete\"],\n setup(props, { emit, expose }) {\n const elapsed = ref(0); // milliseconds\n const isRunning = ref(false);\n let intervalId: ReturnType<typeof setInterval> | null = null;\n\n const totalMs = computed(() => {\n if (props.mode === \"countdown\") {\n return Math.max(0, props.initialSeconds * 1000 - elapsed.value);\n }\n return elapsed.value;\n });\n\n const formatted = computed(() => {\n const ms = totalMs.value;\n const totalSeconds = Math.floor(ms / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n const milliseconds = Math.floor((ms % 1000) / 10);\n\n let result = \"\";\n if (props.showHours || hours > 0) {\n result += `${String(hours).padStart(2, \"0\")}:`;\n }\n result += `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n if (props.showMilliseconds) {\n result += `.${String(milliseconds).padStart(2, \"0\")}`;\n }\n return result;\n });\n\n const color = computed(() => {\n if (props.mode === \"countdown\") {\n const seconds = totalMs.value / 1000;\n if (seconds <= 5) return props.dangerFg;\n if (seconds <= 10) return props.warningFg;\n }\n return props.fg;\n });\n\n const start = () => {\n if (isRunning.value) return;\n isRunning.value = true;\n intervalId = setInterval(() => {\n elapsed.value += 100;\n emit(\"tick\", totalMs.value);\n\n if (props.mode === \"countdown\" && totalMs.value <= 0) {\n stop();\n emit(\"complete\");\n }\n }, 100);\n };\n\n const stop = () => {\n isRunning.value = false;\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n }\n };\n\n const reset = () => {\n elapsed.value = 0;\n };\n\n const toggle = () => {\n if (isRunning.value) {\n stop();\n } else {\n start();\n }\n };\n\n expose({ start, stop, reset, toggle, isRunning });\n\n onMounted(() => {\n if (props.autoStart) {\n start();\n }\n });\n\n onUnmounted(() => {\n stop();\n });\n\n return () => {\n return h(\n \"text\",\n {\n fg: color.value,\n bold: true,\n },\n formatted.value,\n );\n };\n },\n});\n","/**\n * Tooltip Component - Tooltip overlay\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport type TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface TooltipProps {\n /** Tooltip text */\n text: string;\n /** Whether tooltip is visible */\n visible?: boolean;\n /** Tooltip position */\n position?: TooltipPosition;\n /** Border style */\n border?: \"single\" | \"rounded\" | \"none\";\n /** Background color */\n bg?: string;\n /** Foreground color */\n fg?: string;\n}\n\nexport const Tooltip = defineComponent({\n name: \"Tooltip\",\n props: {\n text: {\n type: String,\n required: true,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n position: {\n type: String as PropType<TooltipPosition>,\n default: \"top\",\n },\n border: {\n type: String as PropType<TooltipProps[\"border\"]>,\n default: \"rounded\",\n },\n bg: {\n type: String,\n default: \"white\",\n },\n fg: {\n type: String,\n default: \"black\",\n },\n },\n setup(props, { slots }) {\n return () => {\n const content = slots.default?.();\n\n if (!props.visible) {\n return h(\"box\", {}, content);\n }\n\n const tooltip = h(\n \"box\",\n {\n key: \"tooltip\",\n border: props.border === \"none\" ? undefined : props.border,\n bg: props.bg,\n fg: props.fg,\n style: {\n padding_left: 1,\n padding_right: 1,\n },\n },\n [h(\"text\", { fg: props.fg, bg: props.bg }, props.text)],\n );\n\n const children: VNode[] = [];\n\n switch (props.position) {\n case \"top\":\n children.push(tooltip);\n children.push(h(\"box\", { key: \"content\" }, content));\n break;\n case \"bottom\":\n children.push(h(\"box\", { key: \"content\" }, content));\n children.push(tooltip);\n break;\n case \"left\":\n return h(\"box\", { style: { flex_direction: \"row\" } }, [\n tooltip,\n h(\"box\", { key: \"content\" }, content),\n ]);\n case \"right\":\n return h(\"box\", { style: { flex_direction: \"row\" } }, [\n h(\"box\", { key: \"content\" }, content),\n tooltip,\n ]);\n }\n\n return h(\"box\", { style: { flex_direction: \"column\" } }, children);\n };\n },\n});\n","/**\n * List Component - Scrollable list of items\n */\n\nimport { defineComponent, h, ref, computed, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface ListItem {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ListProps {\n /** List items */\n items: ListItem[];\n /** Currently selected key */\n modelValue?: string;\n /** Maximum visible items (enables scrolling) */\n maxHeight?: number;\n /** Whether the list is focused */\n focused?: boolean;\n /** Item indicator */\n indicator?: string;\n /** Empty indicator */\n indicatorEmpty?: string;\n /** Foreground color */\n fg?: string;\n /** Selected foreground color */\n selectedFg?: string;\n /** Selected background color */\n selectedBg?: string;\n}\n\nexport const List = defineComponent({\n name: \"List\",\n props: {\n items: {\n type: Array as PropType<ListItem[]>,\n required: true,\n },\n modelValue: String,\n maxHeight: Number,\n focused: {\n type: Boolean,\n default: false,\n },\n indicator: {\n type: String,\n default: \"> \",\n },\n indicatorEmpty: {\n type: String,\n default: \" \",\n },\n fg: String,\n selectedFg: {\n type: String,\n default: \"cyan\",\n },\n selectedBg: String,\n },\n emits: [\"update:modelValue\", \"select\"],\n setup(props, { emit: _emit }) {\n const scrollOffset = ref(0);\n const highlightedIndex = ref(0);\n\n const visibleItems = computed(() => {\n if (!props.maxHeight) {\n return props.items;\n }\n const start = scrollOffset.value;\n const end = start + props.maxHeight;\n return props.items.slice(start, end);\n });\n\n const scrollIndicator = computed(() => {\n if (!props.maxHeight || props.items.length <= props.maxHeight) {\n return { showUp: false, showDown: false };\n }\n return {\n showUp: scrollOffset.value > 0,\n showDown: scrollOffset.value + props.maxHeight < props.items.length,\n };\n });\n\n return () => {\n const children: VNode[] = [];\n\n // Scroll up indicator\n if (scrollIndicator.value.showUp) {\n children.push(h(\"text\", { key: \"scroll-up\", dim: true }, \" ...\"));\n }\n\n // Visible items\n visibleItems.value.forEach((item, visibleIndex) => {\n const actualIndex = scrollOffset.value + visibleIndex;\n const isHighlighted = actualIndex === highlightedIndex.value;\n const isSelected = item.key === props.modelValue;\n const indicator = isHighlighted ? props.indicator : props.indicatorEmpty;\n\n children.push(\n h(\n \"text\",\n {\n key: item.key,\n fg: isHighlighted ? props.selectedFg : props.fg,\n bg: isHighlighted ? props.selectedBg : undefined,\n dim: item.disabled,\n bold: isSelected,\n },\n `${indicator}${item.label}`,\n ),\n );\n });\n\n // Scroll down indicator\n if (scrollIndicator.value.showDown) {\n children.push(h(\"text\", { key: \"scroll-down\", dim: true }, \" ...\"));\n }\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\" },\n fg: props.fg,\n },\n children,\n );\n };\n },\n});\n","/**\n * Table Component - Display tabular data\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface TableColumn {\n /** Column key (maps to data property) */\n key: string;\n /** Column header text */\n header: string;\n /** Column width */\n width?: number | string;\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n}\n\nexport interface TableProps {\n /** Column definitions */\n columns: TableColumn[];\n /** Table data */\n data: Record<string, unknown>[];\n /** Show header row */\n showHeader?: boolean;\n /** Border style */\n border?: \"none\" | \"single\" | \"double\" | \"rounded\";\n /** Header foreground color */\n headerFg?: string;\n /** Header background color */\n headerBg?: string;\n /** Row foreground color */\n rowFg?: string;\n /** Alternate row background color */\n stripedBg?: string;\n /** Cell padding */\n cellPadding?: number;\n}\n\nexport const Table = defineComponent({\n name: \"Table\",\n props: {\n columns: {\n type: Array as PropType<TableColumn[]>,\n required: true,\n },\n data: {\n type: Array as PropType<Record<string, unknown>[]>,\n required: true,\n },\n showHeader: {\n type: Boolean,\n default: true,\n },\n border: {\n type: String as PropType<TableProps[\"border\"]>,\n default: \"single\",\n },\n headerFg: {\n type: String,\n default: \"white\",\n },\n headerBg: String,\n rowFg: String,\n stripedBg: String,\n cellPadding: {\n type: Number,\n default: 1,\n },\n },\n setup(props) {\n const formatCell = (value: unknown, width?: number | string): string => {\n const str =\n typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\"\n ? String(value)\n : value == null\n ? \"\"\n : JSON.stringify(value);\n if (typeof width === \"number\" && str.length < width) {\n return str.padEnd(width);\n }\n return str;\n };\n\n return () => {\n const rows: ReturnType<typeof h>[] = [];\n\n // Header row\n if (props.showHeader) {\n const headerCells = props.columns.map((col) =>\n h(\n \"text\",\n {\n key: col.key,\n bold: true,\n fg: props.headerFg,\n bg: props.headerBg,\n },\n formatCell(col.header, col.width),\n ),\n );\n\n rows.push(\n h(\n \"box\",\n {\n key: \"header\",\n style: {\n flex_direction: \"row\",\n gap: props.cellPadding,\n },\n },\n headerCells,\n ),\n );\n\n // Separator\n if (props.border !== \"none\") {\n const sepChar = props.border === \"double\" ? \"=\" : \"-\";\n const totalWidth = props.columns.reduce((acc, col) => {\n const w = typeof col.width === \"number\" ? col.width : 10;\n return acc + w + (props.cellPadding ?? 1);\n }, 0);\n\n rows.push(\n h(\n \"text\",\n {\n key: \"separator\",\n dim: true,\n },\n sepChar.repeat(totalWidth),\n ),\n );\n }\n }\n\n // Data rows\n props.data.forEach((row, rowIndex) => {\n const cells = props.columns.map((col) =>\n h(\n \"text\",\n {\n key: col.key,\n fg: props.rowFg,\n bg: rowIndex % 2 === 1 ? props.stripedBg : undefined,\n },\n formatCell(row[col.key], col.width),\n ),\n );\n\n rows.push(\n h(\n \"box\",\n {\n key: `row-${rowIndex}`,\n style: {\n flex_direction: \"row\",\n gap: props.cellPadding,\n },\n },\n cells,\n ),\n );\n });\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\" },\n border: props.border,\n },\n rows,\n );\n };\n },\n});\n","/**\n * Tree Component - Tree view for hierarchical data\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface TreeNode {\n key: string;\n label: string;\n children?: TreeNode[];\n icon?: string;\n disabled?: boolean;\n}\n\nexport interface TreeProps {\n /** Tree data */\n data: TreeNode[];\n /** Expanded node keys */\n expanded?: string[];\n /** Selected node key */\n selected?: string;\n /** Show lines */\n showLines?: boolean;\n /** Indent size */\n indent?: number;\n /** Expanded icon */\n expandedIcon?: string;\n /** Collapsed icon */\n collapsedIcon?: string;\n /** Leaf icon */\n leafIcon?: string;\n /** Foreground color */\n fg?: string;\n /** Selected foreground color */\n selectedFg?: string;\n}\n\nexport const Tree = defineComponent({\n name: \"Tree\",\n props: {\n data: {\n type: Array as PropType<TreeNode[]>,\n required: true,\n },\n expanded: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n selected: String,\n showLines: {\n type: Boolean,\n default: true,\n },\n indent: {\n type: Number,\n default: 2,\n },\n expandedIcon: {\n type: String,\n default: \"▼\",\n },\n collapsedIcon: {\n type: String,\n default: \"▶\",\n },\n leafIcon: {\n type: String,\n default: \"•\",\n },\n fg: String,\n selectedFg: {\n type: String,\n default: \"cyan\",\n },\n },\n emits: [\"select\", \"toggle\"],\n setup(props, { emit: _emit }) {\n const renderNode = (\n node: TreeNode,\n depth: number,\n isLast: boolean,\n prefix: string,\n ): VNode[] => {\n const nodes: VNode[] = [];\n const hasChildren = node.children && node.children.length > 0;\n const isExpanded = props.expanded?.includes(node.key);\n const isSelected = node.key === props.selected;\n\n // Build line prefix\n let linePrefix = prefix;\n if (props.showLines && depth > 0) {\n linePrefix += isLast ? \"└─\" : \"├─\";\n }\n\n // Icon\n let icon = props.leafIcon;\n if (hasChildren) {\n icon = isExpanded ? props.expandedIcon : props.collapsedIcon;\n }\n if (node.icon) {\n icon = node.icon;\n }\n\n // Node line\n nodes.push(\n h(\n \"text\",\n {\n key: node.key,\n fg: isSelected ? props.selectedFg : props.fg,\n bold: isSelected,\n dim: node.disabled,\n },\n `${linePrefix}${icon} ${node.label}`,\n ),\n );\n\n // Children\n if (hasChildren && isExpanded) {\n const childPrefix = prefix + (props.showLines && depth > 0 ? (isLast ? \" \" : \"│ \") : \"\");\n node.children!.forEach((child, index) => {\n const childIsLast = index === node.children!.length - 1;\n nodes.push(\n ...renderNode(child, depth + 1, childIsLast, childPrefix + \" \".repeat(props.indent)),\n );\n });\n }\n\n return nodes;\n };\n\n return () => {\n const children: VNode[] = [];\n\n props.data.forEach((node, index) => {\n const isLast = index === props.data.length - 1;\n children.push(...renderNode(node, 0, isLast, \"\"));\n });\n\n return h(\"box\", { style: { flex_direction: \"column\" } }, children);\n };\n },\n});\n","/**\n * Menu Component - Command menu/palette\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface MenuItem {\n key: string;\n label: string;\n shortcut?: string;\n icon?: string;\n disabled?: boolean;\n separator?: boolean;\n}\n\nexport interface MenuProps {\n /** Menu items */\n items: MenuItem[];\n /** Focused item index */\n focusedIndex?: number;\n /** Show border */\n border?: \"single\" | \"double\" | \"rounded\" | \"none\";\n /** Width */\n width?: number;\n /** Foreground color */\n fg?: string;\n /** Focused foreground color */\n focusedFg?: string;\n /** Focused background color */\n focusedBg?: string;\n /** Shortcut foreground color */\n shortcutFg?: string;\n}\n\nexport const Menu = defineComponent({\n name: \"Menu\",\n props: {\n items: {\n type: Array as PropType<MenuItem[]>,\n required: true,\n },\n focusedIndex: {\n type: Number,\n default: 0,\n },\n border: {\n type: String as PropType<MenuProps[\"border\"]>,\n default: \"single\",\n },\n width: Number,\n fg: String,\n focusedFg: {\n type: String,\n default: \"black\",\n },\n focusedBg: {\n type: String,\n default: \"cyan\",\n },\n shortcutFg: {\n type: String,\n default: \"gray\",\n },\n },\n emits: [\"select\"],\n setup(props, { emit: _emit }) {\n return () => {\n const children: VNode[] = [];\n\n props.items.forEach((item, index) => {\n if (item.separator) {\n children.push(\n h(\"text\", { key: `sep-${index}`, dim: true }, \"─\".repeat(props.width ?? 20)),\n );\n return;\n }\n\n const isFocused = index === props.focusedIndex;\n const itemContent: VNode[] = [];\n\n // Icon\n if (item.icon) {\n itemContent.push(h(\"text\", { key: \"icon\" }, `${item.icon} `));\n }\n\n // Label\n itemContent.push(\n h(\n \"text\",\n {\n key: \"label\",\n fg: isFocused ? props.focusedFg : props.fg,\n bg: isFocused ? props.focusedBg : undefined,\n dim: item.disabled,\n style: { flex_grow: 1 },\n },\n item.label,\n ),\n );\n\n // Shortcut\n if (item.shortcut) {\n itemContent.push(\n h(\n \"text\",\n {\n key: \"shortcut\",\n fg: props.shortcutFg,\n dim: true,\n },\n ` ${item.shortcut}`,\n ),\n );\n }\n\n children.push(\n h(\n \"box\",\n {\n key: item.key,\n style: {\n flex_direction: \"row\",\n padding_left: 1,\n padding_right: 1,\n },\n bg: isFocused ? props.focusedBg : undefined,\n },\n itemContent,\n ),\n );\n });\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n style: {\n flex_direction: \"column\",\n width: props.width ? String(props.width) : undefined,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Tabs Component - Tab navigation\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface Tab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n /** Tab definitions */\n tabs: Tab[];\n /** Currently active tab key */\n modelValue?: string;\n /** Tab bar position */\n position?: \"top\" | \"bottom\";\n /** Separator between tabs */\n separator?: string;\n /** Active tab foreground color */\n activeFg?: string;\n /** Active tab background color */\n activeBg?: string;\n /** Inactive tab foreground color */\n inactiveFg?: string;\n /** Show underline for active tab */\n underline?: boolean;\n}\n\nexport const Tabs = defineComponent({\n name: \"Tabs\",\n props: {\n tabs: {\n type: Array as PropType<Tab[]>,\n required: true,\n },\n modelValue: String,\n position: {\n type: String as PropType<\"top\" | \"bottom\">,\n default: \"top\",\n },\n separator: {\n type: String,\n default: \" | \",\n },\n activeFg: {\n type: String,\n default: \"cyan\",\n },\n activeBg: String,\n inactiveFg: String,\n underline: {\n type: Boolean,\n default: true,\n },\n },\n emits: [\"update:modelValue\", \"change\"],\n setup(props, { slots, emit: _emit }) {\n // Note: selectTab is designed for keyboard event handlers\n // It is currently not wired up but kept for future use\n\n return () => {\n // Tab bar\n const tabItems: VNode[] = [];\n\n props.tabs.forEach((tab, index) => {\n if (index > 0) {\n tabItems.push(h(\"text\", { key: `sep-${index}`, dim: true }, props.separator));\n }\n\n const isActive = tab.key === props.modelValue;\n\n tabItems.push(\n h(\n \"text\",\n {\n key: tab.key,\n fg: isActive ? props.activeFg : props.inactiveFg,\n bg: isActive ? props.activeBg : undefined,\n bold: isActive,\n underline: isActive && props.underline,\n dim: tab.disabled,\n },\n tab.label,\n ),\n );\n });\n\n const tabBar = h(\n \"box\",\n {\n key: \"tab-bar\",\n style: {\n flex_direction: \"row\",\n padding_bottom: props.position === \"top\" ? 1 : 0,\n padding_top: props.position === \"bottom\" ? 1 : 0,\n },\n },\n tabItems,\n );\n\n // Content area\n const content = h(\n \"box\",\n {\n key: \"content\",\n style: { flex_grow: 1 },\n },\n slots.default?.(),\n );\n\n // Arrange based on position\n const children = props.position === \"top\" ? [tabBar, content] : [content, tabBar];\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\", flex_grow: 1 },\n },\n children,\n );\n };\n },\n});\n","/**\n * Breadcrumb Component - Navigation breadcrumb\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface BreadcrumbItem {\n key: string;\n label: string;\n icon?: string;\n}\n\nexport interface BreadcrumbProps {\n /** Breadcrumb items */\n items: BreadcrumbItem[];\n /** Separator */\n separator?: string;\n /** Foreground color */\n fg?: string;\n /** Active (last item) foreground color */\n activeFg?: string;\n /** Separator foreground color */\n separatorFg?: string;\n}\n\nexport const Breadcrumb = defineComponent({\n name: \"Breadcrumb\",\n props: {\n items: {\n type: Array as PropType<BreadcrumbItem[]>,\n required: true,\n },\n separator: {\n type: String,\n default: \" > \",\n },\n fg: {\n type: String,\n default: \"gray\",\n },\n activeFg: {\n type: String,\n default: \"white\",\n },\n separatorFg: {\n type: String,\n default: \"gray\",\n },\n },\n emits: [\"select\"],\n setup(props, { emit: _emit }) {\n return () => {\n const children = props.items.flatMap((item, index) => {\n const isLast = index === props.items.length - 1;\n const result = [];\n\n // Icon\n if (item.icon) {\n result.push(\n h(\n \"text\",\n {\n key: `icon-${item.key}`,\n fg: isLast ? props.activeFg : props.fg,\n },\n `${item.icon} `,\n ),\n );\n }\n\n // Label\n result.push(\n h(\n \"text\",\n {\n key: item.key,\n fg: isLast ? props.activeFg : props.fg,\n bold: isLast,\n underline: !isLast,\n },\n item.label,\n ),\n );\n\n // Separator\n if (!isLast) {\n result.push(\n h(\n \"text\",\n {\n key: `sep-${item.key}`,\n fg: props.separatorFg,\n },\n props.separator,\n ),\n );\n }\n\n return result;\n });\n\n return h(\"box\", { style: { flex_direction: \"row\" } }, children);\n };\n },\n});\n","/**\n * Stepper Component - Step indicator for wizards\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface Step {\n key: string;\n label: string;\n description?: string;\n}\n\nexport type StepStatus = \"pending\" | \"current\" | \"completed\" | \"error\";\n\nexport interface StepperProps {\n /** Steps */\n steps: Step[];\n /** Current step index */\n current?: number;\n /** Completed steps (indices) */\n completed?: number[];\n /** Error steps (indices) */\n errors?: number[];\n /** Direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Show step numbers */\n showNumbers?: boolean;\n /** Completed icon */\n completedIcon?: string;\n /** Error icon */\n errorIcon?: string;\n /** Current icon */\n currentIcon?: string;\n /** Pending icon */\n pendingIcon?: string;\n}\n\nexport const Stepper = defineComponent({\n name: \"Stepper\",\n props: {\n steps: {\n type: Array as PropType<Step[]>,\n required: true,\n },\n current: {\n type: Number,\n default: 0,\n },\n completed: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n errors: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"horizontal\",\n },\n showNumbers: {\n type: Boolean,\n default: true,\n },\n completedIcon: {\n type: String,\n default: \"✓\",\n },\n errorIcon: {\n type: String,\n default: \"✗\",\n },\n currentIcon: {\n type: String,\n default: \"●\",\n },\n pendingIcon: {\n type: String,\n default: \"○\",\n },\n },\n setup(props) {\n const getStatus = (index: number): StepStatus => {\n if (props.errors?.includes(index)) return \"error\";\n if (props.completed?.includes(index)) return \"completed\";\n if (index === props.current) return \"current\";\n return \"pending\";\n };\n\n const getIcon = (index: number, status: StepStatus): string => {\n if (props.showNumbers && status === \"pending\") {\n return String(index + 1);\n }\n switch (status) {\n case \"completed\":\n return props.completedIcon;\n case \"error\":\n return props.errorIcon;\n case \"current\":\n return props.currentIcon;\n default:\n return props.pendingIcon;\n }\n };\n\n const getColor = (status: StepStatus): string => {\n switch (status) {\n case \"completed\":\n return \"green\";\n case \"error\":\n return \"red\";\n case \"current\":\n return \"cyan\";\n default:\n return \"gray\";\n }\n };\n\n return () => {\n const isHorizontal = props.direction === \"horizontal\";\n const connector = isHorizontal ? \"───\" : \"│\";\n\n const children = props.steps.flatMap((step, index) => {\n const status = getStatus(index);\n const icon = getIcon(index, status);\n const color = getColor(status);\n const isLast = index === props.steps.length - 1;\n\n const stepContent = [\n h(\n \"box\",\n {\n key: `step-${step.key}`,\n style: {\n flex_direction: isHorizontal ? \"column\" : \"row\",\n align_items: \"center\",\n },\n },\n [\n h(\n \"text\",\n {\n fg: color,\n bold: status === \"current\",\n },\n `[${icon}]`,\n ),\n h(\n \"text\",\n {\n fg: status === \"current\" ? \"white\" : \"gray\",\n bold: status === \"current\",\n style: isHorizontal ? { margin_top: 0.5 } : { margin_left: 1 },\n },\n step.label,\n ),\n ],\n ),\n ];\n\n if (!isLast) {\n stepContent.push(\n h(\n \"text\",\n {\n key: `connector-${index}`,\n dim: true,\n style: isHorizontal\n ? { margin_left: 1, margin_right: 1 }\n : { margin_top: 0.5, margin_bottom: 0.5, margin_left: 1 },\n },\n connector,\n ),\n );\n }\n\n return stepContent;\n });\n\n return h(\n \"box\",\n {\n style: {\n flex_direction: isHorizontal ? \"row\" : \"column\",\n align_items: isHorizontal ? \"flex-start\" : \"stretch\",\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Modal Component - Overlay dialog\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface ModalProps {\n /** Whether the modal is visible */\n visible?: boolean;\n /** Modal title */\n title?: string;\n /** Modal width */\n width?: number | string;\n /** Modal height */\n height?: number | string;\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"heavy\";\n /** Title foreground color */\n titleFg?: string;\n /** Border foreground color */\n borderFg?: string;\n /** Background color */\n bg?: string;\n}\n\nexport const Modal = defineComponent({\n name: \"Modal\",\n props: {\n visible: {\n type: Boolean,\n default: true,\n },\n title: String,\n width: {\n type: [Number, String] as PropType<number | string>,\n default: \"50%\",\n },\n height: {\n type: [Number, String] as PropType<number | string>,\n default: \"auto\",\n },\n border: {\n type: String as PropType<ModalProps[\"border\"]>,\n default: \"rounded\",\n },\n titleFg: {\n type: String,\n default: \"white\",\n },\n borderFg: String,\n bg: String,\n },\n emits: [\"close\"],\n setup(props, { slots, emit: _emit }) {\n return () => {\n if (!props.visible) {\n return null;\n }\n\n const children: VNode[] = [];\n\n // Title bar\n if (props.title) {\n children.push(\n h(\n \"box\",\n {\n key: \"title\",\n style: {\n flex_direction: \"row\",\n justify_content: \"center\",\n padding_bottom: 1,\n },\n },\n [\n h(\n \"text\",\n {\n bold: true,\n fg: props.titleFg,\n },\n props.title,\n ),\n ],\n ),\n );\n }\n\n // Content\n children.push(\n h(\n \"box\",\n {\n key: \"content\",\n style: { flex_grow: 1 },\n },\n slots.default?.(),\n ),\n );\n\n // Modal container with centering\n return h(\n \"box\",\n {\n style: {\n justify_content: \"center\",\n align_items: \"center\",\n width: \"100%\",\n height: \"100%\",\n },\n },\n [\n h(\n \"box\",\n {\n style: {\n flex_direction: \"column\",\n width: String(props.width),\n height: String(props.height),\n padding: 1,\n },\n border: props.border,\n fg: props.borderFg,\n bg: props.bg,\n },\n children,\n ),\n ],\n );\n };\n },\n});\n","/**\n * StatusBar Component - Status bar (typically at bottom of screen)\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface StatusBarItem {\n key: string;\n content: string;\n fg?: string;\n bg?: string;\n bold?: boolean;\n align?: \"left\" | \"right\";\n}\n\nexport interface StatusBarProps {\n /** Status bar items */\n items: StatusBarItem[];\n /** Background color */\n bg?: string;\n /** Foreground color */\n fg?: string;\n /** Separator between items */\n separator?: string;\n}\n\nexport const StatusBar = defineComponent({\n name: \"StatusBar\",\n props: {\n items: {\n type: Array as PropType<StatusBarItem[]>,\n required: true,\n },\n bg: {\n type: String,\n default: \"blue\",\n },\n fg: {\n type: String,\n default: \"white\",\n },\n separator: {\n type: String,\n default: \" │ \",\n },\n },\n setup(props) {\n return () => {\n const leftItems = props.items.filter((item) => item.align !== \"right\");\n const rightItems = props.items.filter((item) => item.align === \"right\");\n\n const renderItems = (items: StatusBarItem[]): VNode[] => {\n const result: VNode[] = [];\n items.forEach((item, index) => {\n if (index > 0) {\n result.push(\n h(\n \"text\",\n { key: `sep-${item.key}`, fg: props.fg, bg: props.bg, dim: true },\n props.separator,\n ),\n );\n }\n result.push(\n h(\n \"text\",\n {\n key: item.key,\n fg: item.fg ?? props.fg,\n bg: item.bg ?? props.bg,\n bold: item.bold,\n },\n item.content,\n ),\n );\n });\n return result;\n };\n\n return h(\n \"box\",\n {\n bg: props.bg,\n style: {\n flex_direction: \"row\",\n justify_content: \"space-between\",\n width: \"100%\",\n padding_left: 1,\n padding_right: 1,\n },\n },\n [\n h(\"box\", { key: \"left\", style: { flex_direction: \"row\" } }, renderItems(leftItems)),\n h(\"box\", { key: \"right\", style: { flex_direction: \"row\" } }, renderItems(rightItems)),\n ],\n );\n };\n },\n});\n","/**\n * Header Component - Application header\n */\n\nimport { defineComponent, h, type VNode } from \"@vue/runtime-core\";\n\nexport interface HeaderProps {\n /** Header title */\n title: string;\n /** Subtitle */\n subtitle?: string;\n /** Left content */\n left?: string;\n /** Right content */\n right?: string;\n /** Background color */\n bg?: string;\n /** Title foreground color */\n titleFg?: string;\n /** Subtitle foreground color */\n subtitleFg?: string;\n /** Border bottom */\n borderBottom?: boolean;\n}\n\nexport const Header = defineComponent({\n name: \"Header\",\n props: {\n title: {\n type: String,\n required: true,\n },\n subtitle: String,\n left: String,\n right: String,\n bg: String,\n titleFg: {\n type: String,\n default: \"white\",\n },\n subtitleFg: {\n type: String,\n default: \"gray\",\n },\n borderBottom: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n return () => {\n const leftContent = slots.left?.() ?? (props.left ? [h(\"text\", {}, props.left)] : []);\n const rightContent = slots.right?.() ?? (props.right ? [h(\"text\", {}, props.right)] : []);\n\n const centerContent = [\n h(\n \"text\",\n {\n fg: props.titleFg,\n bold: true,\n },\n props.title,\n ),\n ];\n\n if (props.subtitle) {\n centerContent.push(\n h(\n \"text\",\n {\n fg: props.subtitleFg,\n dim: true,\n },\n ` - ${props.subtitle}`,\n ),\n );\n }\n\n const children: VNode[] = [\n h(\n \"box\",\n {\n key: \"header-content\",\n bg: props.bg,\n style: {\n flex_direction: \"row\",\n justify_content: \"space-between\",\n align_items: \"center\",\n width: \"100%\",\n padding: 1,\n },\n },\n [\n h(\"box\", { key: \"left\", style: { flex_direction: \"row\" } }, leftContent),\n h(\"box\", { key: \"center\", style: { flex_direction: \"row\" } }, centerContent),\n h(\"box\", { key: \"right\", style: { flex_direction: \"row\" } }, rightContent),\n ],\n ),\n ];\n\n if (props.borderBottom) {\n children.push(h(\"text\", { key: \"border\", dim: true }, \"─\".repeat(80)));\n }\n\n return h(\"box\", { style: { flex_direction: \"column\" } }, children);\n };\n },\n});\n","/**\n * KeyHint Component - Display keyboard shortcut hints\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface KeyBinding {\n keys: string[];\n description: string;\n}\n\nexport interface KeyHintProps {\n /** Key bindings to display */\n bindings: KeyBinding[];\n /** Layout direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Key foreground color */\n keyFg?: string;\n /** Key background color */\n keyBg?: string;\n /** Description foreground color */\n descFg?: string;\n /** Separator between key and description */\n separator?: string;\n}\n\nexport const KeyHint = defineComponent({\n name: \"KeyHint\",\n props: {\n bindings: {\n type: Array as PropType<KeyBinding[]>,\n required: true,\n },\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"horizontal\",\n },\n keyFg: {\n type: String,\n default: \"black\",\n },\n keyBg: {\n type: String,\n default: \"white\",\n },\n descFg: {\n type: String,\n default: \"gray\",\n },\n separator: {\n type: String,\n default: \" \",\n },\n },\n setup(props) {\n return () => {\n const children = props.bindings.map((binding, index) => {\n const keyParts = binding.keys\n .map((key, keyIndex) => [\n h(\n \"text\",\n {\n key: `key-${keyIndex}`,\n fg: props.keyFg,\n bg: props.keyBg,\n bold: true,\n },\n ` ${key} `,\n ),\n keyIndex < binding.keys.length - 1 ? h(\"text\", { key: `plus-${keyIndex}` }, \"+\") : null,\n ])\n .flat()\n .filter(Boolean);\n\n return h(\n \"box\",\n {\n key: `binding-${index}`,\n style: {\n flex_direction: \"row\",\n margin_right: props.direction === \"horizontal\" ? 2 : 0,\n },\n },\n [\n ...keyParts,\n h(\"text\", {}, props.separator),\n h(\"text\", { fg: props.descFg }, binding.description),\n ],\n );\n });\n\n return h(\n \"box\",\n {\n style: {\n flex_direction: props.direction === \"horizontal\" ? \"row\" : \"column\",\n flex_wrap: \"wrap\",\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Avatar Component - User avatar display\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface AvatarProps {\n /** User name (used to generate initials) */\n name?: string;\n /** Custom initials */\n initials?: string;\n /** Avatar size */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Background color */\n bg?: string;\n /** Foreground color */\n fg?: string;\n /** Show border */\n border?: boolean;\n /** Status indicator */\n status?: \"online\" | \"offline\" | \"away\" | \"busy\";\n}\n\nconst STATUS_COLORS: Record<string, string> = {\n online: \"green\",\n offline: \"gray\",\n away: \"yellow\",\n busy: \"red\",\n};\n\nconst STATUS_ICONS: Record<string, string> = {\n online: \"●\",\n offline: \"○\",\n away: \"◐\",\n busy: \"⊘\",\n};\n\nexport const Avatar = defineComponent({\n name: \"Avatar\",\n props: {\n name: String,\n initials: String,\n size: {\n type: String as PropType<\"sm\" | \"md\" | \"lg\">,\n default: \"md\",\n },\n bg: {\n type: String,\n default: \"blue\",\n },\n fg: {\n type: String,\n default: \"white\",\n },\n border: {\n type: Boolean,\n default: true,\n },\n status: {\n type: String as PropType<AvatarProps[\"status\"]>,\n },\n },\n setup(props) {\n return () => {\n // Generate initials from name\n let displayInitials = props.initials;\n if (!displayInitials && props.name) {\n const parts = props.name.split(\" \").filter(Boolean);\n if (parts.length >= 2) {\n displayInitials = `${parts[0][0]}${parts[1][0]}`.toUpperCase();\n } else if (parts.length === 1) {\n displayInitials = parts[0].slice(0, 2).toUpperCase();\n }\n }\n displayInitials = displayInitials || \"??\";\n\n // Size-based padding\n const padding = props.size === \"sm\" ? 0 : props.size === \"lg\" ? 1 : 0;\n\n const children = [\n h(\n \"text\",\n {\n fg: props.fg,\n bg: props.bg,\n bold: true,\n },\n displayInitials,\n ),\n ];\n\n // Status indicator\n if (props.status) {\n children.push(\n h(\n \"text\",\n {\n fg: STATUS_COLORS[props.status],\n },\n STATUS_ICONS[props.status],\n ),\n );\n }\n\n if (props.border) {\n return h(\n \"box\",\n {\n border: \"rounded\",\n bg: props.bg,\n style: {\n flex_direction: \"row\",\n padding_left: padding,\n padding_right: padding,\n },\n },\n children,\n );\n }\n\n return h(\n \"box\",\n {\n bg: props.bg,\n style: {\n flex_direction: \"row\",\n padding_left: padding,\n padding_right: padding,\n },\n },\n children,\n );\n };\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"components-B5VXjX9s.mjs","names":[],"sources":["../src/components/Box.ts","../src/components/Divider.ts","../src/components/Stack.ts","../src/components/Grid.ts","../src/components/Card.ts","../src/components/Text.ts","../src/components/Code.ts","../src/components/Link.ts","../src/components/TextInput.ts","../src/components/TextArea.ts","../src/components/Select.ts","../src/components/Checkbox.ts","../src/components/RadioGroup.ts","../src/components/Confirm.ts","../src/components/Form.ts","../src/components/Spinner.ts","../src/components/ProgressBar.ts","../src/components/Alert.ts","../src/components/Badge.ts","../src/components/Timer.ts","../src/components/Tooltip.ts","../src/components/List.ts","../src/components/Table.ts","../src/components/Tree.ts","../src/components/Menu.ts","../src/components/Tabs.ts","../src/components/Breadcrumb.ts","../src/components/Stepper.ts","../src/components/Modal.ts","../src/components/StatusBar.ts","../src/components/Header.ts","../src/components/KeyHint.ts","../src/components/Avatar.ts"],"sourcesContent":["/**\n * Box Component - Container with flexbox layout\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface BoxProps {\n /** Flex direction */\n flexDirection?: \"row\" | \"column\" | \"row-reverse\" | \"column-reverse\";\n /** Flex wrap */\n flexWrap?: \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n /** Justify content */\n justifyContent?:\n | \"flex-start\"\n | \"flex-end\"\n | \"center\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\";\n /** Align items */\n alignItems?: \"flex-start\" | \"flex-end\" | \"center\" | \"stretch\" | \"baseline\";\n /** Align self */\n alignSelf?: \"auto\" | \"flex-start\" | \"flex-end\" | \"center\" | \"stretch\" | \"baseline\";\n /** Flex grow */\n flexGrow?: number;\n /** Flex shrink */\n flexShrink?: number;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number | string;\n /** Min width */\n minWidth?: number | string;\n /** Min height */\n minHeight?: number | string;\n /** Max width */\n maxWidth?: number | string;\n /** Max height */\n maxHeight?: number | string;\n /** Padding (all sides) */\n padding?: number;\n /** Padding X (left and right) */\n paddingX?: number;\n /** Padding Y (top and bottom) */\n paddingY?: number;\n /** Padding top */\n paddingTop?: number;\n /** Padding right */\n paddingRight?: number;\n /** Padding bottom */\n paddingBottom?: number;\n /** Padding left */\n paddingLeft?: number;\n /** Margin (all sides) */\n margin?: number;\n /** Margin X (left and right) */\n marginX?: number;\n /** Margin Y (top and bottom) */\n marginY?: number;\n /** Margin top */\n marginTop?: number;\n /** Margin right */\n marginRight?: number;\n /** Margin bottom */\n marginBottom?: number;\n /** Margin left */\n marginLeft?: number;\n /** Gap between children */\n gap?: number;\n /** Border style */\n border?: \"none\" | \"single\" | \"double\" | \"rounded\" | \"heavy\" | \"dashed\";\n /** Foreground color */\n fg?: string;\n /** Background color */\n bg?: string;\n}\n\nexport const Box = defineComponent({\n name: \"Box\",\n props: {\n flexDirection: String as PropType<BoxProps[\"flexDirection\"]>,\n flexWrap: String as PropType<BoxProps[\"flexWrap\"]>,\n justifyContent: String as PropType<BoxProps[\"justifyContent\"]>,\n alignItems: String as PropType<BoxProps[\"alignItems\"]>,\n alignSelf: String as PropType<BoxProps[\"alignSelf\"]>,\n flexGrow: Number,\n flexShrink: Number,\n width: [Number, String] as PropType<number | string>,\n height: [Number, String] as PropType<number | string>,\n minWidth: [Number, String] as PropType<number | string>,\n minHeight: [Number, String] as PropType<number | string>,\n maxWidth: [Number, String] as PropType<number | string>,\n maxHeight: [Number, String] as PropType<number | string>,\n padding: Number,\n paddingX: Number,\n paddingY: Number,\n paddingTop: Number,\n paddingRight: Number,\n paddingBottom: Number,\n paddingLeft: Number,\n margin: Number,\n marginX: Number,\n marginY: Number,\n marginTop: Number,\n marginRight: Number,\n marginBottom: Number,\n marginLeft: Number,\n gap: Number,\n border: String as PropType<BoxProps[\"border\"]>,\n fg: String,\n bg: String,\n },\n setup(props, { slots }) {\n return () => {\n const style: Record<string, unknown> = {};\n\n // Layout props\n if (props.flexDirection) style.flex_direction = props.flexDirection;\n if (props.flexWrap) style.flex_wrap = props.flexWrap;\n if (props.justifyContent) style.justify_content = props.justifyContent;\n if (props.alignItems) style.align_items = props.alignItems;\n if (props.flexGrow !== undefined) style.flex_grow = props.flexGrow;\n if (props.flexShrink !== undefined) style.flex_shrink = props.flexShrink;\n\n // Dimensions\n if (props.width !== undefined) style.width = String(props.width);\n if (props.height !== undefined) style.height = String(props.height);\n if (props.minWidth !== undefined) style.min_width = String(props.minWidth);\n if (props.minHeight !== undefined) style.min_height = String(props.minHeight);\n if (props.maxWidth !== undefined) style.max_width = String(props.maxWidth);\n if (props.maxHeight !== undefined) style.max_height = String(props.maxHeight);\n\n // Padding\n if (props.padding !== undefined) style.padding = props.padding;\n if (props.paddingTop !== undefined || props.paddingY !== undefined) {\n style.padding_top = props.paddingTop ?? props.paddingY ?? props.padding;\n }\n if (props.paddingRight !== undefined || props.paddingX !== undefined) {\n style.padding_right = props.paddingRight ?? props.paddingX ?? props.padding;\n }\n if (props.paddingBottom !== undefined || props.paddingY !== undefined) {\n style.padding_bottom = props.paddingBottom ?? props.paddingY ?? props.padding;\n }\n if (props.paddingLeft !== undefined || props.paddingX !== undefined) {\n style.padding_left = props.paddingLeft ?? props.paddingX ?? props.padding;\n }\n\n // Margin\n if (props.margin !== undefined) style.margin = props.margin;\n if (props.marginTop !== undefined || props.marginY !== undefined) {\n style.margin_top = props.marginTop ?? props.marginY ?? props.margin;\n }\n if (props.marginRight !== undefined || props.marginX !== undefined) {\n style.margin_right = props.marginRight ?? props.marginX ?? props.margin;\n }\n if (props.marginBottom !== undefined || props.marginY !== undefined) {\n style.margin_bottom = props.marginBottom ?? props.marginY ?? props.margin;\n }\n if (props.marginLeft !== undefined || props.marginX !== undefined) {\n style.margin_left = props.marginLeft ?? props.marginX ?? props.margin;\n }\n\n // Gap\n if (props.gap !== undefined) style.gap = props.gap;\n\n return h(\n \"box\",\n {\n style,\n border: props.border,\n fg: props.fg,\n bg: props.bg,\n },\n slots.default?.(),\n );\n };\n },\n});\n","/**\n * Divider Component - Horizontal or vertical divider line\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface DividerProps {\n /** Divider direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Divider character */\n char?: string;\n /** Title in the middle of the divider */\n title?: string;\n /** Foreground color */\n fg?: string;\n /** Title foreground color */\n titleFg?: string;\n}\n\nexport const Divider = defineComponent({\n name: \"Divider\",\n props: {\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"horizontal\",\n },\n char: String,\n title: String,\n fg: {\n type: String,\n default: \"gray\",\n },\n titleFg: String,\n },\n setup(props) {\n return () => {\n const dividerChar = props.char ?? (props.direction === \"horizontal\" ? \"─\" : \"│\");\n\n if (props.direction === \"vertical\") {\n return h(\n \"text\",\n {\n fg: props.fg,\n },\n dividerChar,\n );\n }\n\n // Horizontal divider\n if (props.title) {\n return h(\n \"box\",\n {\n style: { flex_direction: \"row\", align_items: \"center\" },\n },\n [\n h(\"text\", { fg: props.fg }, dividerChar.repeat(3)),\n h(\n \"text\",\n {\n fg: props.titleFg ?? props.fg,\n bold: true,\n },\n ` ${props.title} `,\n ),\n h(\"text\", { fg: props.fg }, dividerChar.repeat(3)),\n ],\n );\n }\n\n // Simple divider - width is handled by parent container\n return h(\n \"text\",\n {\n fg: props.fg,\n },\n dividerChar.repeat(40),\n );\n };\n },\n});\n","/**\n * Stack Component - Horizontal/Vertical stack layout helper\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface StackProps {\n /** Stack direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Gap between children */\n gap?: number;\n /** Align items */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n /** Justify content */\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n /** Wrap children */\n wrap?: boolean;\n}\n\nconst ALIGN_MAP: Record<string, string> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n stretch: \"stretch\",\n};\n\nconst JUSTIFY_MAP: Record<string, string> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n between: \"space-between\",\n around: \"space-around\",\n evenly: \"space-evenly\",\n};\n\nexport const Stack = defineComponent({\n name: \"Stack\",\n props: {\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"vertical\",\n },\n gap: {\n type: Number,\n default: 0,\n },\n align: {\n type: String as PropType<StackProps[\"align\"]>,\n default: \"stretch\",\n },\n justify: {\n type: String as PropType<StackProps[\"justify\"]>,\n default: \"start\",\n },\n wrap: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n return () => {\n return h(\n \"box\",\n {\n style: {\n flex_direction: props.direction === \"horizontal\" ? \"row\" : \"column\",\n gap: props.gap,\n align_items: ALIGN_MAP[props.align ?? \"stretch\"],\n justify_content: JUSTIFY_MAP[props.justify ?? \"start\"],\n flex_wrap: props.wrap ? \"wrap\" : \"nowrap\",\n },\n },\n slots.default?.(),\n );\n };\n },\n});\n\n// Convenience components\nexport const HStack = defineComponent({\n name: \"HStack\",\n props: {\n gap: { type: Number, default: 1 },\n align: String as PropType<StackProps[\"align\"]>,\n justify: String as PropType<StackProps[\"justify\"]>,\n },\n setup(props, { slots }) {\n return () => h(Stack, { direction: \"horizontal\", ...props }, slots.default);\n },\n});\n\nexport const VStack = defineComponent({\n name: \"VStack\",\n props: {\n gap: { type: Number, default: 0 },\n align: String as PropType<StackProps[\"align\"]>,\n justify: String as PropType<StackProps[\"justify\"]>,\n },\n setup(props, { slots }) {\n return () => h(Stack, { direction: \"vertical\", ...props }, slots.default);\n },\n});\n","/**\n * Grid Component - Grid layout helper\n */\n\nimport { defineComponent, h, type VNode } from \"@vue/runtime-core\";\n\nexport interface GridProps {\n /** Number of columns */\n columns?: number;\n /** Gap between cells */\n gap?: number;\n /** Row gap */\n rowGap?: number;\n /** Column gap */\n columnGap?: number;\n}\n\nexport const Grid = defineComponent({\n name: \"Grid\",\n props: {\n columns: {\n type: Number,\n default: 2,\n },\n gap: {\n type: Number,\n default: 1,\n },\n rowGap: Number,\n columnGap: Number,\n },\n setup(props, { slots }) {\n return () => {\n const children = slots.default?.() ?? [];\n const flatChildren = Array.isArray(children) ? children.flat() : [children];\n\n const rows: VNode[][] = [];\n let currentRow: VNode[] = [];\n\n flatChildren.forEach((child, index) => {\n currentRow.push(child);\n if (currentRow.length === props.columns || index === flatChildren.length - 1) {\n rows.push([...currentRow]);\n currentRow = [];\n }\n });\n\n const rowGap = props.rowGap ?? props.gap;\n const columnGap = props.columnGap ?? props.gap;\n\n return h(\n \"box\",\n {\n style: {\n flex_direction: \"column\",\n gap: rowGap,\n },\n },\n rows.map((row, rowIndex) =>\n h(\n \"box\",\n {\n key: `row-${rowIndex}`,\n style: {\n flex_direction: \"row\",\n gap: columnGap,\n },\n },\n row.map((cell, cellIndex) =>\n h(\n \"box\",\n {\n key: `cell-${rowIndex}-${cellIndex}`,\n style: { flex_grow: 1 },\n },\n [cell],\n ),\n ),\n ),\n ),\n );\n };\n },\n});\n","/**\n * Card Component - Container card with optional header and footer\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface CardProps {\n /** Card title */\n title?: string;\n /** Card subtitle */\n subtitle?: string;\n /** Footer text */\n footer?: string;\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"heavy\" | \"none\";\n /** Padding */\n padding?: number;\n /** Title foreground color */\n titleFg?: string;\n /** Border foreground color */\n borderFg?: string;\n /** Background color */\n bg?: string;\n}\n\nexport const Card = defineComponent({\n name: \"Card\",\n props: {\n title: String,\n subtitle: String,\n footer: String,\n border: {\n type: String as PropType<CardProps[\"border\"]>,\n default: \"rounded\",\n },\n padding: {\n type: Number,\n default: 1,\n },\n titleFg: {\n type: String,\n default: \"white\",\n },\n borderFg: String,\n bg: String,\n },\n setup(props, { slots }) {\n return () => {\n const children: VNode[] = [];\n\n // Header\n if (props.title || props.subtitle) {\n const headerContent: VNode[] = [];\n\n if (props.title) {\n headerContent.push(h(\"text\", { fg: props.titleFg, bold: true }, props.title));\n }\n\n if (props.subtitle) {\n headerContent.push(\n h(\"text\", { dim: true }, props.title ? ` - ${props.subtitle}` : props.subtitle),\n );\n }\n\n children.push(\n h(\n \"box\",\n {\n key: \"header\",\n style: {\n flex_direction: \"row\",\n margin_bottom: 1,\n },\n },\n headerContent,\n ),\n );\n }\n\n // Content\n children.push(\n h(\n \"box\",\n {\n key: \"content\",\n style: { flex_grow: 1 },\n },\n slots.default?.(),\n ),\n );\n\n // Footer\n if (props.footer || slots.footer) {\n children.push(\n h(\n \"box\",\n {\n key: \"footer\",\n style: { margin_top: 1 },\n },\n slots.footer?.() ?? [h(\"text\", { dim: true }, props.footer)],\n ),\n );\n }\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n fg: props.borderFg,\n bg: props.bg,\n style: {\n flex_direction: \"column\",\n padding: props.padding,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Text Component - Text display\n */\n\nimport { defineComponent, h } from \"@vue/runtime-core\";\n\nexport interface TextProps {\n /** Text content (alternative to slot) */\n content?: string;\n /** Enable text wrapping */\n wrap?: boolean;\n /** Foreground color */\n fg?: string;\n /** Background color */\n bg?: string;\n /** Bold text */\n bold?: boolean;\n /** Dim text */\n dim?: boolean;\n /** Italic text */\n italic?: boolean;\n /** Underlined text */\n underline?: boolean;\n /** Strikethrough text */\n strikethrough?: boolean;\n}\n\nexport const Text = defineComponent({\n name: \"Text\",\n props: {\n content: String,\n wrap: Boolean,\n fg: String,\n bg: String,\n bold: Boolean,\n dim: Boolean,\n italic: Boolean,\n underline: Boolean,\n strikethrough: Boolean,\n },\n setup(props, { slots }) {\n return () => {\n // Get text from content prop or slot\n const text =\n props.content ??\n slots\n .default?.()\n ?.map((vnode) => {\n if (typeof vnode.children === \"string\") {\n return vnode.children;\n }\n return \"\";\n })\n .join(\"\") ??\n \"\";\n\n return h(\"text\", {\n text,\n wrap: props.wrap,\n fg: props.fg,\n bg: props.bg,\n bold: props.bold,\n dim: props.dim,\n italic: props.italic,\n underline: props.underline,\n strikethrough: props.strikethrough,\n });\n };\n },\n});\n\n/**\n * Convenience components for common text styles\n */\n\nexport const ErrorText = defineComponent({\n name: \"ErrorText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { fg: \"red\", ...props }, slots);\n },\n});\n\nexport const WarningText = defineComponent({\n name: \"WarningText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { fg: \"yellow\", ...props }, slots);\n },\n});\n\nexport const SuccessText = defineComponent({\n name: \"SuccessText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { fg: \"green\", ...props }, slots);\n },\n});\n\nexport const InfoText = defineComponent({\n name: \"InfoText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { fg: \"blue\", ...props }, slots);\n },\n});\n\nexport const MutedText = defineComponent({\n name: \"MutedText\",\n props: {\n content: String,\n },\n setup(props, { slots }) {\n return () => h(Text, { dim: true, ...props }, slots);\n },\n});\n","/**\n * Code Component - Code block display\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface CodeProps {\n /** Code content */\n code: string;\n /** Language (for future syntax highlighting) */\n language?: string;\n /** Show line numbers */\n lineNumbers?: boolean;\n /** Starting line number */\n startLine?: number;\n /** Highlight specific lines */\n highlightLines?: number[];\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"none\";\n /** Code foreground color */\n fg?: string;\n /** Line number foreground color */\n lineNumberFg?: string;\n /** Highlight line background */\n highlightBg?: string;\n}\n\nexport const Code = defineComponent({\n name: \"Code\",\n props: {\n code: {\n type: String,\n required: true,\n },\n language: String,\n lineNumbers: {\n type: Boolean,\n default: true,\n },\n startLine: {\n type: Number,\n default: 1,\n },\n highlightLines: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n border: {\n type: String as PropType<CodeProps[\"border\"]>,\n default: \"single\",\n },\n fg: {\n type: String,\n default: \"white\",\n },\n lineNumberFg: {\n type: String,\n default: \"gray\",\n },\n highlightBg: {\n type: String,\n default: \"blue\",\n },\n },\n setup(props) {\n return () => {\n const lines = props.code.split(\"\\n\");\n const maxLineNum = props.startLine + lines.length - 1;\n const lineNumWidth = String(maxLineNum).length;\n\n const children = lines.map((line, index) => {\n const lineNum = props.startLine + index;\n const isHighlighted = props.highlightLines?.includes(lineNum);\n\n const parts = [];\n\n if (props.lineNumbers) {\n parts.push(\n h(\n \"text\",\n {\n key: `ln-${lineNum}`,\n fg: props.lineNumberFg,\n },\n `${String(lineNum).padStart(lineNumWidth)} │ `,\n ),\n );\n }\n\n parts.push(\n h(\n \"text\",\n {\n key: `code-${lineNum}`,\n fg: props.fg,\n bg: isHighlighted ? props.highlightBg : undefined,\n },\n line || \" \",\n ),\n );\n\n return h(\n \"box\",\n {\n key: `line-${lineNum}`,\n style: { flex_direction: \"row\" },\n },\n parts,\n );\n });\n\n // Add language label if provided\n if (props.language) {\n children.unshift(\n h(\n \"text\",\n {\n key: \"lang\",\n dim: true,\n style: { margin_bottom: 1 },\n },\n `// ${props.language}`,\n ),\n );\n }\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n style: {\n flex_direction: \"column\",\n padding: props.border !== \"none\" ? 1 : 0,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Link Component - Clickable/styled link\n */\n\nimport { defineComponent, h } from \"@vue/runtime-core\";\n\nexport interface LinkProps {\n /** Link text */\n text: string;\n /** URL (for display, actual navigation not supported in TUI) */\n url?: string;\n /** Foreground color */\n fg?: string;\n /** Show underline */\n underline?: boolean;\n /** Show URL in parentheses */\n showUrl?: boolean;\n}\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n text: {\n type: String,\n required: true,\n },\n url: String,\n fg: {\n type: String,\n default: \"blue\",\n },\n underline: {\n type: Boolean,\n default: true,\n },\n showUrl: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\"click\"],\n setup(props, { emit: _emit }) {\n return () => {\n const parts = [\n h(\n \"text\",\n {\n fg: props.fg,\n underline: props.underline,\n },\n props.text,\n ),\n ];\n\n if (props.showUrl && props.url) {\n parts.push(h(\"text\", { dim: true }, ` (${props.url})`));\n }\n\n return h(\"box\", { style: { flex_direction: \"row\" } }, parts);\n };\n },\n});\n","/**\n * TextInput Component - Text input with builtin cursor management and IME support\n */\n\nimport { defineComponent, h, ref, watch, computed, type PropType } from \"@vue/runtime-core\";\nimport { useInput } from \"../composables/useInput.js\";\n\nexport interface TextInputProps {\n /** Input value (v-model) */\n modelValue?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Whether input is focused */\n focus?: boolean;\n /** Password mode (mask input) */\n mask?: boolean;\n /** Mask character */\n maskChar?: string;\n /** Input width */\n width?: number | string;\n /** Foreground color */\n fg?: string;\n /** Background color */\n bg?: string;\n /** Called when value changes */\n \"onUpdate:modelValue\"?: (value: string) => void;\n /** Called when submitted (Enter) */\n onSubmit?: (value: string) => void;\n /** Called when escape is pressed */\n onCancel?: () => void;\n}\n\nexport const TextInput = defineComponent({\n name: \"TextInput\",\n props: {\n modelValue: {\n type: String,\n default: \"\",\n },\n placeholder: {\n type: String,\n default: \"\",\n },\n focus: {\n type: Boolean,\n default: false,\n },\n mask: {\n type: Boolean,\n default: false,\n },\n maskChar: {\n type: String,\n default: \"*\",\n },\n width: [Number, String] as PropType<number | string>,\n fg: String,\n bg: String,\n },\n emits: [\"update:modelValue\", \"submit\", \"cancel\"],\n setup(props, { emit }) {\n const internalValue = ref(props.modelValue);\n const cursorPos = ref(props.modelValue.length);\n\n // Sync with v-model\n watch(\n () => props.modelValue,\n (newValue) => {\n internalValue.value = newValue;\n // Keep cursor at end if value changes externally\n if (cursorPos.value > newValue.length) {\n cursorPos.value = newValue.length;\n }\n },\n );\n\n // Update value and emit\n const updateValue = (value: string) => {\n internalValue.value = value;\n emit(\"update:modelValue\", value);\n };\n\n // Insert text at cursor position\n const insertText = (text: string) => {\n const before = internalValue.value.slice(0, cursorPos.value);\n const after = internalValue.value.slice(cursorPos.value);\n updateValue(before + text + after);\n cursorPos.value += text.length;\n };\n\n // Delete character before cursor (Backspace)\n const deleteBack = () => {\n if (cursorPos.value > 0) {\n const before = internalValue.value.slice(0, cursorPos.value - 1);\n const after = internalValue.value.slice(cursorPos.value);\n updateValue(before + after);\n cursorPos.value--;\n }\n };\n\n // Delete character at cursor (Delete)\n const deleteForward = () => {\n if (cursorPos.value < internalValue.value.length) {\n const before = internalValue.value.slice(0, cursorPos.value);\n const after = internalValue.value.slice(cursorPos.value + 1);\n updateValue(before + after);\n }\n };\n\n // Move cursor left\n const moveLeft = () => {\n if (cursorPos.value > 0) {\n cursorPos.value--;\n }\n };\n\n // Move cursor right\n const moveRight = () => {\n if (cursorPos.value < internalValue.value.length) {\n cursorPos.value++;\n }\n };\n\n // Move cursor to start\n const moveToStart = () => {\n cursorPos.value = 0;\n };\n\n // Move cursor to end\n const moveToEnd = () => {\n cursorPos.value = internalValue.value.length;\n };\n\n // Use focus prop to control input handling\n const isActive = computed(() => props.focus);\n\n // Handle keyboard input when focused\n useInput({\n isActive,\n onChar: (char) => {\n insertText(char);\n },\n onArrow: (direction) => {\n if (direction === \"left\") moveLeft();\n if (direction === \"right\") moveRight();\n },\n onKey: (key, modifiers) => {\n if (key === \"backspace\") {\n deleteBack();\n } else if (key === \"delete\") {\n deleteForward();\n } else if (key === \"home\") {\n moveToStart();\n } else if (key === \"end\") {\n moveToEnd();\n } else if (key === \"a\" && modifiers.ctrl) {\n // Ctrl+A - select all (move to end for now)\n moveToEnd();\n }\n },\n onSubmit: () => {\n emit(\"submit\", internalValue.value);\n },\n onEscape: () => {\n emit(\"cancel\");\n },\n });\n\n return () => {\n const style: Record<string, unknown> = {};\n if (props.width !== undefined) {\n style.width = String(props.width);\n }\n\n return h(\"input\", {\n value: internalValue.value,\n placeholder: props.placeholder,\n focused: props.focus,\n cursor: cursorPos.value,\n mask: props.mask,\n \"mask-char\": props.maskChar,\n style,\n fg: props.fg,\n bg: props.bg,\n });\n };\n },\n});\n\n/**\n * Password input variant\n */\nexport const PasswordInput = defineComponent({\n name: \"PasswordInput\",\n props: {\n modelValue: {\n type: String,\n default: \"\",\n },\n placeholder: {\n type: String,\n default: \"Enter password...\",\n },\n focus: Boolean,\n width: [Number, String] as PropType<number | string>,\n fg: String,\n bg: String,\n },\n emits: [\"update:modelValue\", \"submit\", \"cancel\"],\n setup(props, { emit }) {\n return () =>\n h(TextInput, {\n ...props,\n mask: true,\n \"onUpdate:modelValue\": (v: string) => emit(\"update:modelValue\", v),\n onSubmit: (v: string) => emit(\"submit\", v),\n onCancel: () => emit(\"cancel\"),\n });\n },\n});\n","/**\n * TextArea Component - Multiline text input\n */\n\nimport { defineComponent, h, type PropType, computed } from \"@vue/runtime-core\";\n\nexport interface TextAreaProps {\n /** Text value */\n modelValue?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Number of visible rows */\n rows?: number;\n /** Whether the textarea is focused */\n focused?: boolean;\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Show line numbers */\n lineNumbers?: boolean;\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"none\";\n /** Foreground color */\n fg?: string;\n /** Placeholder foreground color */\n placeholderFg?: string;\n /** Line number foreground color */\n lineNumberFg?: string;\n /** Cursor line */\n cursorLine?: number;\n /** Cursor column */\n cursorColumn?: number;\n}\n\nexport const TextArea = defineComponent({\n name: \"TextArea\",\n props: {\n modelValue: {\n type: String,\n default: \"\",\n },\n placeholder: String,\n rows: {\n type: Number,\n default: 5,\n },\n focused: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n lineNumbers: {\n type: Boolean,\n default: false,\n },\n border: {\n type: String as PropType<TextAreaProps[\"border\"]>,\n default: \"single\",\n },\n fg: String,\n placeholderFg: {\n type: String,\n default: \"gray\",\n },\n lineNumberFg: {\n type: String,\n default: \"gray\",\n },\n cursorLine: {\n type: Number,\n default: 0,\n },\n cursorColumn: {\n type: Number,\n default: 0,\n },\n },\n emits: [\"update:modelValue\"],\n setup(props) {\n const lines = computed(() => {\n const text = props.modelValue || \"\";\n const textLines = text.split(\"\\n\");\n\n // Pad to minimum rows\n while (textLines.length < props.rows) {\n textLines.push(\"\");\n }\n\n return textLines.slice(0, props.rows);\n });\n\n const showPlaceholder = computed(\n () => !props.modelValue && props.placeholder && !props.focused,\n );\n\n return () => {\n const lineNumWidth = String(lines.value.length).length;\n\n const children = lines.value.map((line, index) => {\n const isCursorLine = props.focused && index === props.cursorLine;\n const parts = [];\n\n // Line number\n if (props.lineNumbers) {\n parts.push(\n h(\n \"text\",\n {\n key: `ln-${index}`,\n fg: props.lineNumberFg,\n dim: !isCursorLine,\n },\n `${String(index + 1).padStart(lineNumWidth)} │ `,\n ),\n );\n }\n\n // Line content\n let content = line || (showPlaceholder.value && index === 0 ? props.placeholder : \" \");\n\n parts.push(\n h(\n \"text\",\n {\n key: `content-${index}`,\n fg: showPlaceholder.value && index === 0 ? props.placeholderFg : props.fg,\n dim: props.disabled,\n bold: isCursorLine,\n },\n content,\n ),\n );\n\n return h(\n \"box\",\n {\n key: `line-${index}`,\n style: { flex_direction: \"row\" },\n bg: isCursorLine ? \"gray\" : undefined,\n },\n parts,\n );\n });\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n style: {\n flex_direction: \"column\",\n padding: props.border !== \"none\" ? 1 : 0,\n height: String(props.rows + (props.border !== \"none\" ? 2 : 0)),\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Select Component - Dropdown/menu selection\n */\n\nimport { defineComponent, h, ref, type PropType, watch } from \"@vue/runtime-core\";\n\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n /** Options to display */\n options: SelectOption[];\n /** Currently selected value */\n modelValue?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is focused */\n focused?: boolean;\n /** Indicator for selected item */\n indicator?: string;\n /** Indicator for unselected item */\n indicatorEmpty?: string;\n /** Foreground color */\n fg?: string;\n /** Background color */\n bg?: string;\n /** Selected item foreground color */\n selectedFg?: string;\n /** Selected item background color */\n selectedBg?: string;\n}\n\nexport const Select = defineComponent({\n name: \"Select\",\n props: {\n options: {\n type: Array as PropType<SelectOption[]>,\n required: true,\n },\n modelValue: String,\n placeholder: {\n type: String,\n default: \"Select an option\",\n },\n focused: {\n type: Boolean,\n default: false,\n },\n indicator: {\n type: String,\n default: \"> \",\n },\n indicatorEmpty: {\n type: String,\n default: \" \",\n },\n fg: String,\n bg: String,\n selectedFg: {\n type: String,\n default: \"cyan\",\n },\n selectedBg: String,\n },\n emits: [\"update:modelValue\", \"select\"],\n setup(props, { emit: _emit }) {\n const highlightedIndex = ref(0);\n\n // Find initial index based on modelValue\n watch(\n () => props.modelValue,\n (value) => {\n if (value) {\n const index = props.options.findIndex((opt) => opt.value === value);\n if (index !== -1) {\n highlightedIndex.value = index;\n }\n }\n },\n { immediate: true },\n );\n\n // Note: selectOption, moveUp, moveDown are designed for keyboard event handlers\n // They are currently not wired up but kept for future use\n\n return () => {\n const children = props.options.map((option, index) => {\n const isHighlighted = index === highlightedIndex.value;\n const isSelected = option.value === props.modelValue;\n const indicator = isHighlighted ? props.indicator : props.indicatorEmpty;\n\n return h(\n \"box\",\n {\n key: option.value,\n style: { flex_direction: \"row\" },\n },\n [\n h(\n \"text\",\n {\n fg: isHighlighted ? props.selectedFg : props.fg,\n bg: isHighlighted ? props.selectedBg : props.bg,\n dim: option.disabled,\n },\n `${indicator}${option.label}${isSelected ? \" (selected)\" : \"\"}`,\n ),\n ],\n );\n });\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\" },\n fg: props.fg,\n bg: props.bg,\n },\n children,\n );\n };\n },\n});\n","/**\n * Checkbox Component - Toggle checkbox\n */\n\nimport { defineComponent, h } from \"@vue/runtime-core\";\n\nexport interface CheckboxProps {\n /** Whether the checkbox is checked */\n modelValue?: boolean;\n /** Label text */\n label?: string;\n /** Whether the checkbox is focused */\n focused?: boolean;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Checked indicator */\n checked?: string;\n /** Unchecked indicator */\n unchecked?: string;\n /** Foreground color */\n fg?: string;\n /** Checked foreground color */\n checkedFg?: string;\n}\n\nexport const Checkbox = defineComponent({\n name: \"Checkbox\",\n props: {\n modelValue: {\n type: Boolean,\n default: false,\n },\n label: String,\n focused: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n checked: {\n type: String,\n default: \"[x]\",\n },\n unchecked: {\n type: String,\n default: \"[ ]\",\n },\n fg: String,\n checkedFg: {\n type: String,\n default: \"green\",\n },\n },\n emits: [\"update:modelValue\", \"change\"],\n setup(props, { emit: _emit }) {\n // Note: toggle is designed for keyboard event handlers\n // It is currently not wired up but kept for future use\n\n return () => {\n const indicator = props.modelValue ? props.checked : props.unchecked;\n const color = props.modelValue ? props.checkedFg : props.fg;\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"row\" },\n },\n [\n h(\n \"text\",\n {\n fg: color,\n dim: props.disabled,\n bold: props.focused,\n },\n `${indicator} ${props.label ?? \"\"}`,\n ),\n ],\n );\n };\n },\n});\n","/**\n * RadioGroup Component - Radio button group selection\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface RadioOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n /** Radio options */\n options: RadioOption[];\n /** Currently selected value */\n modelValue?: string;\n /** Layout direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Focused option index */\n focusedIndex?: number;\n /** Selected indicator */\n selected?: string;\n /** Unselected indicator */\n unselected?: string;\n /** Foreground color */\n fg?: string;\n /** Selected foreground color */\n selectedFg?: string;\n}\n\nexport const RadioGroup = defineComponent({\n name: \"RadioGroup\",\n props: {\n options: {\n type: Array as PropType<RadioOption[]>,\n required: true,\n },\n modelValue: String,\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"vertical\",\n },\n focusedIndex: Number,\n selected: {\n type: String,\n default: \"◉\",\n },\n unselected: {\n type: String,\n default: \"○\",\n },\n fg: String,\n selectedFg: {\n type: String,\n default: \"green\",\n },\n },\n emits: [\"update:modelValue\", \"change\"],\n setup(props, { emit: _emit }) {\n return () => {\n const children = props.options.map((option, index) => {\n const isSelected = option.value === props.modelValue;\n const isFocused = index === props.focusedIndex;\n const indicator = isSelected ? props.selected : props.unselected;\n\n return h(\n \"text\",\n {\n key: option.value,\n fg: isSelected ? props.selectedFg : props.fg,\n bold: isFocused,\n dim: option.disabled,\n },\n `${indicator} ${option.label}`,\n );\n });\n\n return h(\n \"box\",\n {\n style: {\n flex_direction: props.direction === \"horizontal\" ? \"row\" : \"column\",\n gap: props.direction === \"horizontal\" ? 2 : 0,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Confirm Component - Confirmation dialog\n */\n\nimport { defineComponent, h, ref } from \"@vue/runtime-core\";\n\nexport interface ConfirmProps {\n /** Confirmation message */\n message: string;\n /** Confirm button text */\n confirmText?: string;\n /** Cancel button text */\n cancelText?: string;\n /** Whether confirm is initially selected */\n defaultConfirm?: boolean;\n /** Confirm button foreground color */\n confirmFg?: string;\n /** Cancel button foreground color */\n cancelFg?: string;\n /** Selected button foreground color */\n selectedFg?: string;\n}\n\nexport const Confirm = defineComponent({\n name: \"Confirm\",\n props: {\n message: {\n type: String,\n required: true,\n },\n confirmText: {\n type: String,\n default: \"Yes\",\n },\n cancelText: {\n type: String,\n default: \"No\",\n },\n defaultConfirm: {\n type: Boolean,\n default: true,\n },\n confirmFg: {\n type: String,\n default: \"green\",\n },\n cancelFg: {\n type: String,\n default: \"red\",\n },\n selectedFg: {\n type: String,\n default: \"cyan\",\n },\n },\n emits: [\"confirm\", \"cancel\", \"select\"],\n setup(props, { emit: _emit }) {\n const isConfirmSelected = ref(props.defaultConfirm);\n\n // Note: toggle and confirm are designed for keyboard event handlers\n // They are currently not wired up but kept for future use\n // const toggle = () => { isConfirmSelected.value = !isConfirmSelected.value; };\n // const confirm = () => { ... };\n\n return () => {\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\" },\n },\n [\n // Message\n h(\"text\", { key: \"message\" }, props.message),\n // Buttons\n h(\n \"box\",\n {\n key: \"buttons\",\n style: {\n flex_direction: \"row\",\n gap: 2,\n margin_top: 1,\n },\n },\n [\n h(\n \"text\",\n {\n key: \"confirm\",\n fg: isConfirmSelected.value ? props.selectedFg : props.confirmFg,\n bold: isConfirmSelected.value,\n },\n `[${props.confirmText}]`,\n ),\n h(\n \"text\",\n {\n key: \"cancel\",\n fg: !isConfirmSelected.value ? props.selectedFg : props.cancelFg,\n bold: !isConfirmSelected.value,\n },\n `[${props.cancelText}]`,\n ),\n ],\n ),\n ],\n );\n };\n },\n});\n","/**\n * Form Component - Form container with labels\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface FormField {\n key: string;\n label: string;\n required?: boolean;\n hint?: string;\n}\n\nexport interface FormProps {\n /** Form fields metadata */\n fields?: FormField[];\n /** Label width */\n labelWidth?: number;\n /** Gap between fields */\n gap?: number;\n /** Label position */\n labelPosition?: \"left\" | \"top\";\n /** Label foreground color */\n labelFg?: string;\n /** Required indicator */\n requiredIndicator?: string;\n /** Hint foreground color */\n hintFg?: string;\n}\n\nexport const Form = defineComponent({\n name: \"Form\",\n props: {\n fields: {\n type: Array as PropType<FormField[]>,\n default: () => [],\n },\n labelWidth: {\n type: Number,\n default: 15,\n },\n gap: {\n type: Number,\n default: 1,\n },\n labelPosition: {\n type: String as PropType<\"left\" | \"top\">,\n default: \"left\",\n },\n labelFg: String,\n requiredIndicator: {\n type: String,\n default: \"*\",\n },\n hintFg: {\n type: String,\n default: \"gray\",\n },\n },\n setup(props, { slots }) {\n return () => {\n const children: VNode[] = [];\n\n props.fields.forEach((field, _index) => {\n const labelContent = [\n h(\n \"text\",\n {\n fg: props.labelFg,\n },\n field.label.padEnd(props.labelWidth),\n ),\n ];\n\n if (field.required) {\n labelContent.push(h(\"text\", { fg: \"red\" }, props.requiredIndicator));\n }\n\n const fieldSlot = slots[field.key]?.();\n\n if (props.labelPosition === \"top\") {\n children.push(\n h(\n \"box\",\n {\n key: field.key,\n style: { flex_direction: \"column\", margin_bottom: props.gap },\n },\n [\n h(\"box\", { style: { flex_direction: \"row\" } }, labelContent),\n fieldSlot ? h(\"box\", { style: { margin_top: 0.5 } }, fieldSlot) : null,\n field.hint ? h(\"text\", { fg: props.hintFg, dim: true }, field.hint) : null,\n ].filter(Boolean),\n ),\n );\n } else {\n children.push(\n h(\n \"box\",\n {\n key: field.key,\n style: {\n flex_direction: \"row\",\n align_items: \"center\",\n margin_bottom: props.gap,\n },\n },\n [\n h(\n \"box\",\n { style: { width: String(props.labelWidth), flex_direction: \"row\" } },\n labelContent,\n ),\n h(\"box\", { style: { flex_grow: 1 } }, fieldSlot),\n ],\n ),\n );\n\n if (field.hint) {\n children.push(\n h(\n \"text\",\n {\n key: `hint-${field.key}`,\n fg: props.hintFg,\n dim: true,\n style: { margin_left: props.labelWidth, margin_bottom: props.gap },\n },\n field.hint,\n ),\n );\n }\n }\n });\n\n return h(\"box\", { style: { flex_direction: \"column\" } }, children);\n };\n },\n});\n","/**\n * Spinner Component - Loading indicator\n */\n\nimport { defineComponent, h, ref, onMounted, onUnmounted, type PropType } from \"@vue/runtime-core\";\nimport { Text } from \"./Text.js\";\n\n/**\n * Spinner frame sets\n */\nexport const spinnerTypes = {\n dots: [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"],\n dots2: [\"⣾\", \"⣽\", \"⣻\", \"⢿\", \"⡿\", \"⣟\", \"⣯\", \"⣷\"],\n line: [\"-\", \"\\\\\", \"|\", \"/\"],\n arc: [\"◜\", \"◠\", \"◝\", \"◞\", \"◡\", \"◟\"],\n circle: [\"◐\", \"◓\", \"◑\", \"◒\"],\n bounce: [\"⠁\", \"⠂\", \"⠄\", \"⡀\", \"⢀\", \"⠠\", \"⠐\", \"⠈\"],\n box: [\"▖\", \"▘\", \"▝\", \"▗\"],\n arrow: [\"←\", \"↖\", \"↑\", \"↗\", \"→\", \"↘\", \"↓\", \"↙\"],\n clock: [\"🕛\", \"🕐\", \"🕑\", \"🕒\", \"🕓\", \"🕔\", \"🕕\", \"🕖\", \"🕗\", \"🕘\", \"🕙\", \"🕚\"],\n moon: [\"🌑\", \"🌒\", \"🌓\", \"🌔\", \"🌕\", \"🌖\", \"🌗\", \"🌘\"],\n earth: [\"🌍\", \"🌎\", \"🌏\"],\n} as const;\n\nexport type SpinnerType = keyof typeof spinnerTypes;\n\nexport interface SpinnerProps {\n /** Spinner type */\n type?: SpinnerType;\n /** Custom frames */\n frames?: string[];\n /** Animation interval in ms */\n interval?: number;\n /** Label text */\n label?: string;\n /** Foreground color */\n fg?: string;\n}\n\nexport const Spinner = defineComponent({\n name: \"Spinner\",\n props: {\n type: {\n type: String as PropType<SpinnerType>,\n default: \"dots\",\n },\n frames: Array as PropType<string[]>,\n interval: {\n type: Number,\n default: 80,\n },\n label: String,\n fg: String,\n },\n setup(props) {\n const frameIndex = ref(0);\n let timer: ReturnType<typeof setInterval> | null = null;\n\n const frames = props.frames ?? spinnerTypes[props.type] ?? spinnerTypes.dots;\n\n onMounted(() => {\n timer = setInterval(() => {\n frameIndex.value = (frameIndex.value + 1) % frames.length;\n }, props.interval);\n });\n\n onUnmounted(() => {\n if (timer) {\n clearInterval(timer);\n }\n });\n\n return () => {\n const frame = frames[frameIndex.value];\n const content = props.label ? `${frame} ${props.label}` : frame;\n\n return h(Text, { fg: props.fg }, () => content);\n };\n },\n});\n","/**\n * ProgressBar Component - Progress indicator\n */\n\nimport { defineComponent, h, computed, type PropType } from \"@vue/runtime-core\";\nimport { Box } from \"./Box.js\";\nimport { Text } from \"./Text.js\";\n\nexport interface ProgressBarProps {\n /** Progress value (0-100) */\n value: number;\n /** Total width in characters */\n width?: number;\n /** Show percentage label */\n showLabel?: boolean;\n /** Label position */\n labelPosition?: \"left\" | \"right\" | \"inside\";\n /** Filled character */\n filledChar?: string;\n /** Empty character */\n emptyChar?: string;\n /** Left border character */\n leftBorder?: string;\n /** Right border character */\n rightBorder?: string;\n /** Filled color */\n filledFg?: string;\n /** Empty color */\n emptyFg?: string;\n}\n\nexport const ProgressBar = defineComponent({\n name: \"ProgressBar\",\n props: {\n value: {\n type: Number,\n required: true,\n validator: (v: number) => v >= 0 && v <= 100,\n },\n width: {\n type: Number,\n default: 20,\n },\n showLabel: {\n type: Boolean,\n default: true,\n },\n labelPosition: {\n type: String as PropType<\"left\" | \"right\" | \"inside\">,\n default: \"right\",\n },\n filledChar: {\n type: String,\n default: \"█\",\n },\n emptyChar: {\n type: String,\n default: \"░\",\n },\n leftBorder: {\n type: String,\n default: \"\",\n },\n rightBorder: {\n type: String,\n default: \"\",\n },\n filledFg: {\n type: String,\n default: \"green\",\n },\n emptyFg: {\n type: String,\n default: \"gray\",\n },\n },\n setup(props) {\n const normalizedValue = computed(() => Math.max(0, Math.min(100, props.value)));\n\n const filledWidth = computed(() => Math.round((normalizedValue.value / 100) * props.width));\n\n const emptyWidth = computed(() => props.width - filledWidth.value);\n\n const label = computed(() => `${Math.round(normalizedValue.value)}%`);\n\n return () => {\n const filled = props.filledChar.repeat(filledWidth.value);\n const empty = props.emptyChar.repeat(emptyWidth.value);\n\n const barContent = [\n props.leftBorder && h(Text, {}, () => props.leftBorder),\n h(Text, { fg: props.filledFg }, () => filled),\n h(Text, { fg: props.emptyFg }, () => empty),\n props.rightBorder && h(Text, {}, () => props.rightBorder),\n ].filter(Boolean);\n\n if (!props.showLabel) {\n return h(Box, { flexDirection: \"row\" }, () => barContent);\n }\n\n const labelElement = h(Text, { dim: true }, () => label.value);\n\n switch (props.labelPosition) {\n case \"left\":\n return h(Box, { flexDirection: \"row\", gap: 1 }, () => [labelElement, ...barContent]);\n case \"inside\":\n // For inside, we'd need more complex rendering\n // For now, show on right\n return h(Box, { flexDirection: \"row\", gap: 1 }, () => [...barContent, labelElement]);\n case \"right\":\n default:\n return h(Box, { flexDirection: \"row\", gap: 1 }, () => [...barContent, labelElement]);\n }\n };\n },\n});\n\n/**\n * Indeterminate progress bar (animated)\n */\nexport const IndeterminateProgressBar = defineComponent({\n name: \"IndeterminateProgressBar\",\n props: {\n width: {\n type: Number,\n default: 20,\n },\n fg: {\n type: String,\n default: \"cyan\",\n },\n },\n setup(props) {\n // This would need animation support\n // For now, show a static pattern\n return () => {\n const pattern = \"▓▒░░░░░░░░░░░░░░░░░░\";\n const display = pattern.slice(0, props.width);\n\n return h(Text, { fg: props.fg }, () => display);\n };\n },\n});\n","/**\n * Alert Component - Alert/notification box\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport type AlertType = \"info\" | \"success\" | \"warning\" | \"error\";\n\nexport interface AlertProps {\n /** Alert message */\n message: string;\n /** Alert type */\n type?: AlertType;\n /** Alert title */\n title?: string;\n /** Show icon */\n showIcon?: boolean;\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"none\";\n}\n\nconst ALERT_CONFIG: Record<AlertType, { icon: string; fg: string; title: string }> = {\n info: { icon: \"ℹ\", fg: \"cyan\", title: \"Info\" },\n success: { icon: \"✓\", fg: \"green\", title: \"Success\" },\n warning: { icon: \"⚠\", fg: \"yellow\", title: \"Warning\" },\n error: { icon: \"✗\", fg: \"red\", title: \"Error\" },\n};\n\nexport const Alert = defineComponent({\n name: \"Alert\",\n props: {\n message: {\n type: String,\n required: true,\n },\n type: {\n type: String as PropType<AlertType>,\n default: \"info\",\n },\n title: String,\n showIcon: {\n type: Boolean,\n default: true,\n },\n border: {\n type: String as PropType<AlertProps[\"border\"]>,\n default: \"rounded\",\n },\n },\n setup(props) {\n return () => {\n const config = ALERT_CONFIG[props.type];\n const title = props.title ?? config.title;\n\n const children = [];\n\n // Header with icon and title\n const headerParts = [];\n if (props.showIcon) {\n headerParts.push(h(\"text\", { fg: config.fg }, `${config.icon} `));\n }\n headerParts.push(h(\"text\", { fg: config.fg, bold: true }, title));\n\n children.push(h(\"box\", { key: \"header\", style: { flex_direction: \"row\" } }, headerParts));\n\n // Message\n children.push(h(\"text\", { key: \"message\", style: { margin_top: 1 } }, props.message));\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n fg: config.fg,\n style: {\n flex_direction: \"column\",\n padding: 1,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Badge Component - Status badge/tag\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport type BadgeVariant = \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n\nexport interface BadgeProps {\n /** Badge text */\n label: string;\n /** Badge variant */\n variant?: BadgeVariant;\n /** Custom foreground color (overrides variant) */\n fg?: string;\n /** Custom background color (overrides variant) */\n bg?: string;\n /** Show border */\n border?: boolean;\n}\n\nconst VARIANT_COLORS: Record<BadgeVariant, { fg: string; bg?: string }> = {\n default: { fg: \"white\" },\n success: { fg: \"green\" },\n warning: { fg: \"yellow\" },\n error: { fg: \"red\" },\n info: { fg: \"cyan\" },\n};\n\nexport const Badge = defineComponent({\n name: \"Badge\",\n props: {\n label: {\n type: String,\n required: true,\n },\n variant: {\n type: String as PropType<BadgeVariant>,\n default: \"default\",\n },\n fg: String,\n bg: String,\n border: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n return () => {\n const colors = VARIANT_COLORS[props.variant];\n const fg = props.fg ?? colors.fg;\n const bg = props.bg ?? colors.bg;\n\n if (props.border) {\n return h(\n \"box\",\n {\n border: \"single\",\n fg,\n bg,\n style: { padding_left: 1, padding_right: 1 },\n },\n [h(\"text\", { fg, bg }, props.label)],\n );\n }\n\n return h(\n \"text\",\n {\n fg,\n bg,\n bold: true,\n },\n `[${props.label}]`,\n );\n };\n },\n});\n","/**\n * Timer Component - Countdown/stopwatch timer\n */\n\nimport {\n defineComponent,\n h,\n ref,\n onMounted,\n onUnmounted,\n type PropType,\n computed,\n} from \"@vue/runtime-core\";\n\nexport type TimerMode = \"countdown\" | \"stopwatch\";\n\nexport interface TimerProps {\n /** Timer mode */\n mode?: TimerMode;\n /** Initial seconds (for countdown) */\n initialSeconds?: number;\n /** Auto start */\n autoStart?: boolean;\n /** Show hours */\n showHours?: boolean;\n /** Show milliseconds */\n showMilliseconds?: boolean;\n /** Foreground color */\n fg?: string;\n /** Warning color (when < 10 seconds in countdown) */\n warningFg?: string;\n /** Danger color (when < 5 seconds in countdown) */\n dangerFg?: string;\n}\n\nexport const Timer = defineComponent({\n name: \"Timer\",\n props: {\n mode: {\n type: String as PropType<TimerMode>,\n default: \"stopwatch\",\n },\n initialSeconds: {\n type: Number,\n default: 0,\n },\n autoStart: {\n type: Boolean,\n default: true,\n },\n showHours: {\n type: Boolean,\n default: false,\n },\n showMilliseconds: {\n type: Boolean,\n default: false,\n },\n fg: {\n type: String,\n default: \"white\",\n },\n warningFg: {\n type: String,\n default: \"yellow\",\n },\n dangerFg: {\n type: String,\n default: \"red\",\n },\n },\n emits: [\"tick\", \"complete\"],\n setup(props, { emit, expose }) {\n const elapsed = ref(0); // milliseconds\n const isRunning = ref(false);\n let intervalId: ReturnType<typeof setInterval> | null = null;\n\n const totalMs = computed(() => {\n if (props.mode === \"countdown\") {\n return Math.max(0, props.initialSeconds * 1000 - elapsed.value);\n }\n return elapsed.value;\n });\n\n const formatted = computed(() => {\n const ms = totalMs.value;\n const totalSeconds = Math.floor(ms / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n const milliseconds = Math.floor((ms % 1000) / 10);\n\n let result = \"\";\n if (props.showHours || hours > 0) {\n result += `${String(hours).padStart(2, \"0\")}:`;\n }\n result += `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n if (props.showMilliseconds) {\n result += `.${String(milliseconds).padStart(2, \"0\")}`;\n }\n return result;\n });\n\n const color = computed(() => {\n if (props.mode === \"countdown\") {\n const seconds = totalMs.value / 1000;\n if (seconds <= 5) return props.dangerFg;\n if (seconds <= 10) return props.warningFg;\n }\n return props.fg;\n });\n\n const start = () => {\n if (isRunning.value) return;\n isRunning.value = true;\n intervalId = setInterval(() => {\n elapsed.value += 100;\n emit(\"tick\", totalMs.value);\n\n if (props.mode === \"countdown\" && totalMs.value <= 0) {\n stop();\n emit(\"complete\");\n }\n }, 100);\n };\n\n const stop = () => {\n isRunning.value = false;\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n }\n };\n\n const reset = () => {\n elapsed.value = 0;\n };\n\n const toggle = () => {\n if (isRunning.value) {\n stop();\n } else {\n start();\n }\n };\n\n expose({ start, stop, reset, toggle, isRunning });\n\n onMounted(() => {\n if (props.autoStart) {\n start();\n }\n });\n\n onUnmounted(() => {\n stop();\n });\n\n return () => {\n return h(\n \"text\",\n {\n fg: color.value,\n bold: true,\n },\n formatted.value,\n );\n };\n },\n});\n","/**\n * Tooltip Component - Tooltip overlay\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport type TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface TooltipProps {\n /** Tooltip text */\n text: string;\n /** Whether tooltip is visible */\n visible?: boolean;\n /** Tooltip position */\n position?: TooltipPosition;\n /** Border style */\n border?: \"single\" | \"rounded\" | \"none\";\n /** Background color */\n bg?: string;\n /** Foreground color */\n fg?: string;\n}\n\nexport const Tooltip = defineComponent({\n name: \"Tooltip\",\n props: {\n text: {\n type: String,\n required: true,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n position: {\n type: String as PropType<TooltipPosition>,\n default: \"top\",\n },\n border: {\n type: String as PropType<TooltipProps[\"border\"]>,\n default: \"rounded\",\n },\n bg: {\n type: String,\n default: \"white\",\n },\n fg: {\n type: String,\n default: \"black\",\n },\n },\n setup(props, { slots }) {\n return () => {\n const content = slots.default?.();\n\n if (!props.visible) {\n return h(\"box\", {}, content);\n }\n\n const tooltip = h(\n \"box\",\n {\n key: \"tooltip\",\n border: props.border === \"none\" ? undefined : props.border,\n bg: props.bg,\n fg: props.fg,\n style: {\n padding_left: 1,\n padding_right: 1,\n },\n },\n [h(\"text\", { fg: props.fg, bg: props.bg }, props.text)],\n );\n\n const children: VNode[] = [];\n\n switch (props.position) {\n case \"top\":\n children.push(tooltip);\n children.push(h(\"box\", { key: \"content\" }, content));\n break;\n case \"bottom\":\n children.push(h(\"box\", { key: \"content\" }, content));\n children.push(tooltip);\n break;\n case \"left\":\n return h(\"box\", { style: { flex_direction: \"row\" } }, [\n tooltip,\n h(\"box\", { key: \"content\" }, content),\n ]);\n case \"right\":\n return h(\"box\", { style: { flex_direction: \"row\" } }, [\n h(\"box\", { key: \"content\" }, content),\n tooltip,\n ]);\n }\n\n return h(\"box\", { style: { flex_direction: \"column\" } }, children);\n };\n },\n});\n","/**\n * List Component - Scrollable list of items\n */\n\nimport { defineComponent, h, ref, computed, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface ListItem {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ListProps {\n /** List items */\n items: ListItem[];\n /** Currently selected key */\n modelValue?: string;\n /** Maximum visible items (enables scrolling) */\n maxHeight?: number;\n /** Whether the list is focused */\n focused?: boolean;\n /** Item indicator */\n indicator?: string;\n /** Empty indicator */\n indicatorEmpty?: string;\n /** Foreground color */\n fg?: string;\n /** Selected foreground color */\n selectedFg?: string;\n /** Selected background color */\n selectedBg?: string;\n}\n\nexport const List = defineComponent({\n name: \"List\",\n props: {\n items: {\n type: Array as PropType<ListItem[]>,\n required: true,\n },\n modelValue: String,\n maxHeight: Number,\n focused: {\n type: Boolean,\n default: false,\n },\n indicator: {\n type: String,\n default: \"> \",\n },\n indicatorEmpty: {\n type: String,\n default: \" \",\n },\n fg: String,\n selectedFg: {\n type: String,\n default: \"cyan\",\n },\n selectedBg: String,\n },\n emits: [\"update:modelValue\", \"select\"],\n setup(props, { emit: _emit }) {\n const scrollOffset = ref(0);\n const highlightedIndex = ref(0);\n\n const visibleItems = computed(() => {\n if (!props.maxHeight) {\n return props.items;\n }\n const start = scrollOffset.value;\n const end = start + props.maxHeight;\n return props.items.slice(start, end);\n });\n\n const scrollIndicator = computed(() => {\n if (!props.maxHeight || props.items.length <= props.maxHeight) {\n return { showUp: false, showDown: false };\n }\n return {\n showUp: scrollOffset.value > 0,\n showDown: scrollOffset.value + props.maxHeight < props.items.length,\n };\n });\n\n return () => {\n const children: VNode[] = [];\n\n // Scroll up indicator\n if (scrollIndicator.value.showUp) {\n children.push(h(\"text\", { key: \"scroll-up\", dim: true }, \" ...\"));\n }\n\n // Visible items\n visibleItems.value.forEach((item, visibleIndex) => {\n const actualIndex = scrollOffset.value + visibleIndex;\n const isHighlighted = actualIndex === highlightedIndex.value;\n const isSelected = item.key === props.modelValue;\n const indicator = isHighlighted ? props.indicator : props.indicatorEmpty;\n\n children.push(\n h(\n \"text\",\n {\n key: item.key,\n fg: isHighlighted ? props.selectedFg : props.fg,\n bg: isHighlighted ? props.selectedBg : undefined,\n dim: item.disabled,\n bold: isSelected,\n },\n `${indicator}${item.label}`,\n ),\n );\n });\n\n // Scroll down indicator\n if (scrollIndicator.value.showDown) {\n children.push(h(\"text\", { key: \"scroll-down\", dim: true }, \" ...\"));\n }\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\" },\n fg: props.fg,\n },\n children,\n );\n };\n },\n});\n","/**\n * Table Component - Display tabular data\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface TableColumn {\n /** Column key (maps to data property) */\n key: string;\n /** Column header text */\n header: string;\n /** Column width */\n width?: number | string;\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n}\n\nexport interface TableProps {\n /** Column definitions */\n columns: TableColumn[];\n /** Table data */\n data: Record<string, unknown>[];\n /** Show header row */\n showHeader?: boolean;\n /** Border style */\n border?: \"none\" | \"single\" | \"double\" | \"rounded\";\n /** Header foreground color */\n headerFg?: string;\n /** Header background color */\n headerBg?: string;\n /** Row foreground color */\n rowFg?: string;\n /** Alternate row background color */\n stripedBg?: string;\n /** Cell padding */\n cellPadding?: number;\n}\n\nexport const Table = defineComponent({\n name: \"Table\",\n props: {\n columns: {\n type: Array as PropType<TableColumn[]>,\n required: true,\n },\n data: {\n type: Array as PropType<Record<string, unknown>[]>,\n required: true,\n },\n showHeader: {\n type: Boolean,\n default: true,\n },\n border: {\n type: String as PropType<TableProps[\"border\"]>,\n default: \"single\",\n },\n headerFg: {\n type: String,\n default: \"white\",\n },\n headerBg: String,\n rowFg: String,\n stripedBg: String,\n cellPadding: {\n type: Number,\n default: 1,\n },\n },\n setup(props) {\n const formatCell = (value: unknown, width?: number | string): string => {\n const str =\n typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\"\n ? String(value)\n : value == null\n ? \"\"\n : JSON.stringify(value);\n if (typeof width === \"number\" && str.length < width) {\n return str.padEnd(width);\n }\n return str;\n };\n\n return () => {\n const rows: ReturnType<typeof h>[] = [];\n\n // Header row\n if (props.showHeader) {\n const headerCells = props.columns.map((col) =>\n h(\n \"text\",\n {\n key: col.key,\n bold: true,\n fg: props.headerFg,\n bg: props.headerBg,\n },\n formatCell(col.header, col.width),\n ),\n );\n\n rows.push(\n h(\n \"box\",\n {\n key: \"header\",\n style: {\n flex_direction: \"row\",\n gap: props.cellPadding,\n },\n },\n headerCells,\n ),\n );\n\n // Separator\n if (props.border !== \"none\") {\n const sepChar = props.border === \"double\" ? \"=\" : \"-\";\n const totalWidth = props.columns.reduce((acc, col) => {\n const w = typeof col.width === \"number\" ? col.width : 10;\n return acc + w + (props.cellPadding ?? 1);\n }, 0);\n\n rows.push(\n h(\n \"text\",\n {\n key: \"separator\",\n dim: true,\n },\n sepChar.repeat(totalWidth),\n ),\n );\n }\n }\n\n // Data rows\n props.data.forEach((row, rowIndex) => {\n const cells = props.columns.map((col) =>\n h(\n \"text\",\n {\n key: col.key,\n fg: props.rowFg,\n bg: rowIndex % 2 === 1 ? props.stripedBg : undefined,\n },\n formatCell(row[col.key], col.width),\n ),\n );\n\n rows.push(\n h(\n \"box\",\n {\n key: `row-${rowIndex}`,\n style: {\n flex_direction: \"row\",\n gap: props.cellPadding,\n },\n },\n cells,\n ),\n );\n });\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\" },\n border: props.border,\n },\n rows,\n );\n };\n },\n});\n","/**\n * Tree Component - Tree view for hierarchical data\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface TreeNode {\n key: string;\n label: string;\n children?: TreeNode[];\n icon?: string;\n disabled?: boolean;\n}\n\nexport interface TreeProps {\n /** Tree data */\n data: TreeNode[];\n /** Expanded node keys */\n expanded?: string[];\n /** Selected node key */\n selected?: string;\n /** Show lines */\n showLines?: boolean;\n /** Indent size */\n indent?: number;\n /** Expanded icon */\n expandedIcon?: string;\n /** Collapsed icon */\n collapsedIcon?: string;\n /** Leaf icon */\n leafIcon?: string;\n /** Foreground color */\n fg?: string;\n /** Selected foreground color */\n selectedFg?: string;\n}\n\nexport const Tree = defineComponent({\n name: \"Tree\",\n props: {\n data: {\n type: Array as PropType<TreeNode[]>,\n required: true,\n },\n expanded: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n selected: String,\n showLines: {\n type: Boolean,\n default: true,\n },\n indent: {\n type: Number,\n default: 2,\n },\n expandedIcon: {\n type: String,\n default: \"▼\",\n },\n collapsedIcon: {\n type: String,\n default: \"▶\",\n },\n leafIcon: {\n type: String,\n default: \"•\",\n },\n fg: String,\n selectedFg: {\n type: String,\n default: \"cyan\",\n },\n },\n emits: [\"select\", \"toggle\"],\n setup(props, { emit: _emit }) {\n const renderNode = (\n node: TreeNode,\n depth: number,\n isLast: boolean,\n prefix: string,\n ): VNode[] => {\n const nodes: VNode[] = [];\n const hasChildren = node.children && node.children.length > 0;\n const isExpanded = props.expanded?.includes(node.key);\n const isSelected = node.key === props.selected;\n\n // Build line prefix\n let linePrefix = prefix;\n if (props.showLines && depth > 0) {\n linePrefix += isLast ? \"└─\" : \"├─\";\n }\n\n // Icon\n let icon = props.leafIcon;\n if (hasChildren) {\n icon = isExpanded ? props.expandedIcon : props.collapsedIcon;\n }\n if (node.icon) {\n icon = node.icon;\n }\n\n // Node line\n nodes.push(\n h(\n \"text\",\n {\n key: node.key,\n fg: isSelected ? props.selectedFg : props.fg,\n bold: isSelected,\n dim: node.disabled,\n },\n `${linePrefix}${icon} ${node.label}`,\n ),\n );\n\n // Children\n if (hasChildren && isExpanded) {\n const childPrefix = prefix + (props.showLines && depth > 0 ? (isLast ? \" \" : \"│ \") : \"\");\n node.children!.forEach((child, index) => {\n const childIsLast = index === node.children!.length - 1;\n nodes.push(\n ...renderNode(child, depth + 1, childIsLast, childPrefix + \" \".repeat(props.indent)),\n );\n });\n }\n\n return nodes;\n };\n\n return () => {\n const children: VNode[] = [];\n\n props.data.forEach((node, index) => {\n const isLast = index === props.data.length - 1;\n children.push(...renderNode(node, 0, isLast, \"\"));\n });\n\n return h(\"box\", { style: { flex_direction: \"column\" } }, children);\n };\n },\n});\n","/**\n * Menu Component - Command menu/palette\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface MenuItem {\n key: string;\n label: string;\n shortcut?: string;\n icon?: string;\n disabled?: boolean;\n separator?: boolean;\n}\n\nexport interface MenuProps {\n /** Menu items */\n items: MenuItem[];\n /** Focused item index */\n focusedIndex?: number;\n /** Show border */\n border?: \"single\" | \"double\" | \"rounded\" | \"none\";\n /** Width */\n width?: number;\n /** Foreground color */\n fg?: string;\n /** Focused foreground color */\n focusedFg?: string;\n /** Focused background color */\n focusedBg?: string;\n /** Shortcut foreground color */\n shortcutFg?: string;\n}\n\nexport const Menu = defineComponent({\n name: \"Menu\",\n props: {\n items: {\n type: Array as PropType<MenuItem[]>,\n required: true,\n },\n focusedIndex: {\n type: Number,\n default: 0,\n },\n border: {\n type: String as PropType<MenuProps[\"border\"]>,\n default: \"single\",\n },\n width: Number,\n fg: String,\n focusedFg: {\n type: String,\n default: \"black\",\n },\n focusedBg: {\n type: String,\n default: \"cyan\",\n },\n shortcutFg: {\n type: String,\n default: \"gray\",\n },\n },\n emits: [\"select\"],\n setup(props, { emit: _emit }) {\n return () => {\n const children: VNode[] = [];\n\n props.items.forEach((item, index) => {\n if (item.separator) {\n children.push(\n h(\"text\", { key: `sep-${index}`, dim: true }, \"─\".repeat(props.width ?? 20)),\n );\n return;\n }\n\n const isFocused = index === props.focusedIndex;\n const itemContent: VNode[] = [];\n\n // Icon\n if (item.icon) {\n itemContent.push(h(\"text\", { key: \"icon\" }, `${item.icon} `));\n }\n\n // Label\n itemContent.push(\n h(\n \"text\",\n {\n key: \"label\",\n fg: isFocused ? props.focusedFg : props.fg,\n bg: isFocused ? props.focusedBg : undefined,\n dim: item.disabled,\n style: { flex_grow: 1 },\n },\n item.label,\n ),\n );\n\n // Shortcut\n if (item.shortcut) {\n itemContent.push(\n h(\n \"text\",\n {\n key: \"shortcut\",\n fg: props.shortcutFg,\n dim: true,\n },\n ` ${item.shortcut}`,\n ),\n );\n }\n\n children.push(\n h(\n \"box\",\n {\n key: item.key,\n style: {\n flex_direction: \"row\",\n padding_left: 1,\n padding_right: 1,\n },\n bg: isFocused ? props.focusedBg : undefined,\n },\n itemContent,\n ),\n );\n });\n\n return h(\n \"box\",\n {\n border: props.border === \"none\" ? undefined : props.border,\n style: {\n flex_direction: \"column\",\n width: props.width ? String(props.width) : undefined,\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Tabs Component - Tab navigation\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface Tab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n /** Tab definitions */\n tabs: Tab[];\n /** Currently active tab key */\n modelValue?: string;\n /** Tab bar position */\n position?: \"top\" | \"bottom\";\n /** Separator between tabs */\n separator?: string;\n /** Active tab foreground color */\n activeFg?: string;\n /** Active tab background color */\n activeBg?: string;\n /** Inactive tab foreground color */\n inactiveFg?: string;\n /** Show underline for active tab */\n underline?: boolean;\n}\n\nexport const Tabs = defineComponent({\n name: \"Tabs\",\n props: {\n tabs: {\n type: Array as PropType<Tab[]>,\n required: true,\n },\n modelValue: String,\n position: {\n type: String as PropType<\"top\" | \"bottom\">,\n default: \"top\",\n },\n separator: {\n type: String,\n default: \" | \",\n },\n activeFg: {\n type: String,\n default: \"cyan\",\n },\n activeBg: String,\n inactiveFg: String,\n underline: {\n type: Boolean,\n default: true,\n },\n },\n emits: [\"update:modelValue\", \"change\"],\n setup(props, { slots, emit: _emit }) {\n // Note: selectTab is designed for keyboard event handlers\n // It is currently not wired up but kept for future use\n\n return () => {\n // Tab bar\n const tabItems: VNode[] = [];\n\n props.tabs.forEach((tab, index) => {\n if (index > 0) {\n tabItems.push(h(\"text\", { key: `sep-${index}`, dim: true }, props.separator));\n }\n\n const isActive = tab.key === props.modelValue;\n\n tabItems.push(\n h(\n \"text\",\n {\n key: tab.key,\n fg: isActive ? props.activeFg : props.inactiveFg,\n bg: isActive ? props.activeBg : undefined,\n bold: isActive,\n underline: isActive && props.underline,\n dim: tab.disabled,\n },\n tab.label,\n ),\n );\n });\n\n const tabBar = h(\n \"box\",\n {\n key: \"tab-bar\",\n style: {\n flex_direction: \"row\",\n padding_bottom: props.position === \"top\" ? 1 : 0,\n padding_top: props.position === \"bottom\" ? 1 : 0,\n },\n },\n tabItems,\n );\n\n // Content area\n const content = h(\n \"box\",\n {\n key: \"content\",\n style: { flex_grow: 1 },\n },\n slots.default?.(),\n );\n\n // Arrange based on position\n const children = props.position === \"top\" ? [tabBar, content] : [content, tabBar];\n\n return h(\n \"box\",\n {\n style: { flex_direction: \"column\", flex_grow: 1 },\n },\n children,\n );\n };\n },\n});\n","/**\n * Breadcrumb Component - Navigation breadcrumb\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface BreadcrumbItem {\n key: string;\n label: string;\n icon?: string;\n}\n\nexport interface BreadcrumbProps {\n /** Breadcrumb items */\n items: BreadcrumbItem[];\n /** Separator */\n separator?: string;\n /** Foreground color */\n fg?: string;\n /** Active (last item) foreground color */\n activeFg?: string;\n /** Separator foreground color */\n separatorFg?: string;\n}\n\nexport const Breadcrumb = defineComponent({\n name: \"Breadcrumb\",\n props: {\n items: {\n type: Array as PropType<BreadcrumbItem[]>,\n required: true,\n },\n separator: {\n type: String,\n default: \" > \",\n },\n fg: {\n type: String,\n default: \"gray\",\n },\n activeFg: {\n type: String,\n default: \"white\",\n },\n separatorFg: {\n type: String,\n default: \"gray\",\n },\n },\n emits: [\"select\"],\n setup(props, { emit: _emit }) {\n return () => {\n const children = props.items.flatMap((item, index) => {\n const isLast = index === props.items.length - 1;\n const result = [];\n\n // Icon\n if (item.icon) {\n result.push(\n h(\n \"text\",\n {\n key: `icon-${item.key}`,\n fg: isLast ? props.activeFg : props.fg,\n },\n `${item.icon} `,\n ),\n );\n }\n\n // Label\n result.push(\n h(\n \"text\",\n {\n key: item.key,\n fg: isLast ? props.activeFg : props.fg,\n bold: isLast,\n underline: !isLast,\n },\n item.label,\n ),\n );\n\n // Separator\n if (!isLast) {\n result.push(\n h(\n \"text\",\n {\n key: `sep-${item.key}`,\n fg: props.separatorFg,\n },\n props.separator,\n ),\n );\n }\n\n return result;\n });\n\n return h(\"box\", { style: { flex_direction: \"row\" } }, children);\n };\n },\n});\n","/**\n * Stepper Component - Step indicator for wizards\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface Step {\n key: string;\n label: string;\n description?: string;\n}\n\nexport type StepStatus = \"pending\" | \"current\" | \"completed\" | \"error\";\n\nexport interface StepperProps {\n /** Steps */\n steps: Step[];\n /** Current step index */\n current?: number;\n /** Completed steps (indices) */\n completed?: number[];\n /** Error steps (indices) */\n errors?: number[];\n /** Direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Show step numbers */\n showNumbers?: boolean;\n /** Completed icon */\n completedIcon?: string;\n /** Error icon */\n errorIcon?: string;\n /** Current icon */\n currentIcon?: string;\n /** Pending icon */\n pendingIcon?: string;\n}\n\nexport const Stepper = defineComponent({\n name: \"Stepper\",\n props: {\n steps: {\n type: Array as PropType<Step[]>,\n required: true,\n },\n current: {\n type: Number,\n default: 0,\n },\n completed: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n errors: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"horizontal\",\n },\n showNumbers: {\n type: Boolean,\n default: true,\n },\n completedIcon: {\n type: String,\n default: \"✓\",\n },\n errorIcon: {\n type: String,\n default: \"✗\",\n },\n currentIcon: {\n type: String,\n default: \"●\",\n },\n pendingIcon: {\n type: String,\n default: \"○\",\n },\n },\n setup(props) {\n const getStatus = (index: number): StepStatus => {\n if (props.errors?.includes(index)) return \"error\";\n if (props.completed?.includes(index)) return \"completed\";\n if (index === props.current) return \"current\";\n return \"pending\";\n };\n\n const getIcon = (index: number, status: StepStatus): string => {\n if (props.showNumbers && status === \"pending\") {\n return String(index + 1);\n }\n switch (status) {\n case \"completed\":\n return props.completedIcon;\n case \"error\":\n return props.errorIcon;\n case \"current\":\n return props.currentIcon;\n default:\n return props.pendingIcon;\n }\n };\n\n const getColor = (status: StepStatus): string => {\n switch (status) {\n case \"completed\":\n return \"green\";\n case \"error\":\n return \"red\";\n case \"current\":\n return \"cyan\";\n default:\n return \"gray\";\n }\n };\n\n return () => {\n const isHorizontal = props.direction === \"horizontal\";\n const connector = isHorizontal ? \"───\" : \"│\";\n\n const children = props.steps.flatMap((step, index) => {\n const status = getStatus(index);\n const icon = getIcon(index, status);\n const color = getColor(status);\n const isLast = index === props.steps.length - 1;\n\n const stepContent = [\n h(\n \"box\",\n {\n key: `step-${step.key}`,\n style: {\n flex_direction: isHorizontal ? \"column\" : \"row\",\n align_items: \"center\",\n },\n },\n [\n h(\n \"text\",\n {\n fg: color,\n bold: status === \"current\",\n },\n `[${icon}]`,\n ),\n h(\n \"text\",\n {\n fg: status === \"current\" ? \"white\" : \"gray\",\n bold: status === \"current\",\n style: isHorizontal ? { margin_top: 0.5 } : { margin_left: 1 },\n },\n step.label,\n ),\n ],\n ),\n ];\n\n if (!isLast) {\n stepContent.push(\n h(\n \"text\",\n {\n key: `connector-${index}`,\n dim: true,\n style: isHorizontal\n ? { margin_left: 1, margin_right: 1 }\n : { margin_top: 0.5, margin_bottom: 0.5, margin_left: 1 },\n },\n connector,\n ),\n );\n }\n\n return stepContent;\n });\n\n return h(\n \"box\",\n {\n style: {\n flex_direction: isHorizontal ? \"row\" : \"column\",\n align_items: isHorizontal ? \"flex-start\" : \"stretch\",\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Modal Component - Overlay dialog\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface ModalProps {\n /** Whether the modal is visible */\n visible?: boolean;\n /** Modal title */\n title?: string;\n /** Modal width */\n width?: number | string;\n /** Modal height */\n height?: number | string;\n /** Border style */\n border?: \"single\" | \"double\" | \"rounded\" | \"heavy\";\n /** Title foreground color */\n titleFg?: string;\n /** Border foreground color */\n borderFg?: string;\n /** Background color */\n bg?: string;\n}\n\nexport const Modal = defineComponent({\n name: \"Modal\",\n props: {\n visible: {\n type: Boolean,\n default: true,\n },\n title: String,\n width: {\n type: [Number, String] as PropType<number | string>,\n default: \"50%\",\n },\n height: {\n type: [Number, String] as PropType<number | string>,\n default: \"auto\",\n },\n border: {\n type: String as PropType<ModalProps[\"border\"]>,\n default: \"rounded\",\n },\n titleFg: {\n type: String,\n default: \"white\",\n },\n borderFg: String,\n bg: String,\n },\n emits: [\"close\"],\n setup(props, { slots, emit: _emit }) {\n return () => {\n if (!props.visible) {\n return null;\n }\n\n const children: VNode[] = [];\n\n // Title bar\n if (props.title) {\n children.push(\n h(\n \"box\",\n {\n key: \"title\",\n style: {\n flex_direction: \"row\",\n justify_content: \"center\",\n padding_bottom: 1,\n },\n },\n [\n h(\n \"text\",\n {\n bold: true,\n fg: props.titleFg,\n },\n props.title,\n ),\n ],\n ),\n );\n }\n\n // Content\n children.push(\n h(\n \"box\",\n {\n key: \"content\",\n style: { flex_grow: 1 },\n },\n slots.default?.(),\n ),\n );\n\n // Modal container with centering\n return h(\n \"box\",\n {\n style: {\n justify_content: \"center\",\n align_items: \"center\",\n width: \"100%\",\n height: \"100%\",\n },\n },\n [\n h(\n \"box\",\n {\n style: {\n flex_direction: \"column\",\n width: String(props.width),\n height: String(props.height),\n padding: 1,\n },\n border: props.border,\n fg: props.borderFg,\n bg: props.bg,\n },\n children,\n ),\n ],\n );\n };\n },\n});\n","/**\n * StatusBar Component - Status bar (typically at bottom of screen)\n */\n\nimport { defineComponent, h, type PropType, type VNode } from \"@vue/runtime-core\";\n\nexport interface StatusBarItem {\n key: string;\n content: string;\n fg?: string;\n bg?: string;\n bold?: boolean;\n align?: \"left\" | \"right\";\n}\n\nexport interface StatusBarProps {\n /** Status bar items */\n items: StatusBarItem[];\n /** Background color */\n bg?: string;\n /** Foreground color */\n fg?: string;\n /** Separator between items */\n separator?: string;\n}\n\nexport const StatusBar = defineComponent({\n name: \"StatusBar\",\n props: {\n items: {\n type: Array as PropType<StatusBarItem[]>,\n required: true,\n },\n bg: {\n type: String,\n default: \"blue\",\n },\n fg: {\n type: String,\n default: \"white\",\n },\n separator: {\n type: String,\n default: \" │ \",\n },\n },\n setup(props) {\n return () => {\n const leftItems = props.items.filter((item) => item.align !== \"right\");\n const rightItems = props.items.filter((item) => item.align === \"right\");\n\n const renderItems = (items: StatusBarItem[]): VNode[] => {\n const result: VNode[] = [];\n items.forEach((item, index) => {\n if (index > 0) {\n result.push(\n h(\n \"text\",\n { key: `sep-${item.key}`, fg: props.fg, bg: props.bg, dim: true },\n props.separator,\n ),\n );\n }\n result.push(\n h(\n \"text\",\n {\n key: item.key,\n fg: item.fg ?? props.fg,\n bg: item.bg ?? props.bg,\n bold: item.bold,\n },\n item.content,\n ),\n );\n });\n return result;\n };\n\n return h(\n \"box\",\n {\n bg: props.bg,\n style: {\n flex_direction: \"row\",\n justify_content: \"space-between\",\n width: \"100%\",\n padding_left: 1,\n padding_right: 1,\n },\n },\n [\n h(\"box\", { key: \"left\", style: { flex_direction: \"row\" } }, renderItems(leftItems)),\n h(\"box\", { key: \"right\", style: { flex_direction: \"row\" } }, renderItems(rightItems)),\n ],\n );\n };\n },\n});\n","/**\n * Header Component - Application header\n */\n\nimport { defineComponent, h, type VNode } from \"@vue/runtime-core\";\n\nexport interface HeaderProps {\n /** Header title */\n title: string;\n /** Subtitle */\n subtitle?: string;\n /** Left content */\n left?: string;\n /** Right content */\n right?: string;\n /** Background color */\n bg?: string;\n /** Title foreground color */\n titleFg?: string;\n /** Subtitle foreground color */\n subtitleFg?: string;\n /** Border bottom */\n borderBottom?: boolean;\n}\n\nexport const Header = defineComponent({\n name: \"Header\",\n props: {\n title: {\n type: String,\n required: true,\n },\n subtitle: String,\n left: String,\n right: String,\n bg: String,\n titleFg: {\n type: String,\n default: \"white\",\n },\n subtitleFg: {\n type: String,\n default: \"gray\",\n },\n borderBottom: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n return () => {\n const leftContent = slots.left?.() ?? (props.left ? [h(\"text\", {}, props.left)] : []);\n const rightContent = slots.right?.() ?? (props.right ? [h(\"text\", {}, props.right)] : []);\n\n const centerContent = [\n h(\n \"text\",\n {\n fg: props.titleFg,\n bold: true,\n },\n props.title,\n ),\n ];\n\n if (props.subtitle) {\n centerContent.push(\n h(\n \"text\",\n {\n fg: props.subtitleFg,\n dim: true,\n },\n ` - ${props.subtitle}`,\n ),\n );\n }\n\n const children: VNode[] = [\n h(\n \"box\",\n {\n key: \"header-content\",\n bg: props.bg,\n style: {\n flex_direction: \"row\",\n justify_content: \"space-between\",\n align_items: \"center\",\n width: \"100%\",\n padding: 1,\n },\n },\n [\n h(\"box\", { key: \"left\", style: { flex_direction: \"row\" } }, leftContent),\n h(\"box\", { key: \"center\", style: { flex_direction: \"row\" } }, centerContent),\n h(\"box\", { key: \"right\", style: { flex_direction: \"row\" } }, rightContent),\n ],\n ),\n ];\n\n if (props.borderBottom) {\n children.push(h(\"text\", { key: \"border\", dim: true }, \"─\".repeat(80)));\n }\n\n return h(\"box\", { style: { flex_direction: \"column\" } }, children);\n };\n },\n});\n","/**\n * KeyHint Component - Display keyboard shortcut hints\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface KeyBinding {\n keys: string[];\n description: string;\n}\n\nexport interface KeyHintProps {\n /** Key bindings to display */\n bindings: KeyBinding[];\n /** Layout direction */\n direction?: \"horizontal\" | \"vertical\";\n /** Key foreground color */\n keyFg?: string;\n /** Key background color */\n keyBg?: string;\n /** Description foreground color */\n descFg?: string;\n /** Separator between key and description */\n separator?: string;\n}\n\nexport const KeyHint = defineComponent({\n name: \"KeyHint\",\n props: {\n bindings: {\n type: Array as PropType<KeyBinding[]>,\n required: true,\n },\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"horizontal\",\n },\n keyFg: {\n type: String,\n default: \"black\",\n },\n keyBg: {\n type: String,\n default: \"white\",\n },\n descFg: {\n type: String,\n default: \"gray\",\n },\n separator: {\n type: String,\n default: \" \",\n },\n },\n setup(props) {\n return () => {\n const children = props.bindings.map((binding, index) => {\n const keyParts = binding.keys\n .map((key, keyIndex) => [\n h(\n \"text\",\n {\n key: `key-${keyIndex}`,\n fg: props.keyFg,\n bg: props.keyBg,\n bold: true,\n },\n ` ${key} `,\n ),\n keyIndex < binding.keys.length - 1 ? h(\"text\", { key: `plus-${keyIndex}` }, \"+\") : null,\n ])\n .flat()\n .filter(Boolean);\n\n return h(\n \"box\",\n {\n key: `binding-${index}`,\n style: {\n flex_direction: \"row\",\n margin_right: props.direction === \"horizontal\" ? 2 : 0,\n },\n },\n [\n ...keyParts,\n h(\"text\", {}, props.separator),\n h(\"text\", { fg: props.descFg }, binding.description),\n ],\n );\n });\n\n return h(\n \"box\",\n {\n style: {\n flex_direction: props.direction === \"horizontal\" ? \"row\" : \"column\",\n flex_wrap: \"wrap\",\n },\n },\n children,\n );\n };\n },\n});\n","/**\n * Avatar Component - User avatar display\n */\n\nimport { defineComponent, h, type PropType } from \"@vue/runtime-core\";\n\nexport interface AvatarProps {\n /** User name (used to generate initials) */\n name?: string;\n /** Custom initials */\n initials?: string;\n /** Avatar size */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Background color */\n bg?: string;\n /** Foreground color */\n fg?: string;\n /** Show border */\n border?: boolean;\n /** Status indicator */\n status?: \"online\" | \"offline\" | \"away\" | \"busy\";\n}\n\nconst STATUS_COLORS: Record<string, string> = {\n online: \"green\",\n offline: \"gray\",\n away: \"yellow\",\n busy: \"red\",\n};\n\nconst STATUS_ICONS: Record<string, string> = {\n online: \"●\",\n offline: \"○\",\n away: \"◐\",\n busy: \"⊘\",\n};\n\nexport const Avatar = defineComponent({\n name: \"Avatar\",\n props: {\n name: String,\n initials: String,\n size: {\n type: String as PropType<\"sm\" | \"md\" | \"lg\">,\n default: \"md\",\n },\n bg: {\n type: String,\n default: \"blue\",\n },\n fg: {\n type: String,\n default: \"white\",\n },\n border: {\n type: Boolean,\n default: true,\n },\n status: {\n type: String as PropType<AvatarProps[\"status\"]>,\n },\n },\n setup(props) {\n return () => {\n // Generate initials from name\n let displayInitials = props.initials;\n if (!displayInitials && props.name) {\n const parts = props.name.split(\" \").filter(Boolean);\n if (parts.length >= 2) {\n displayInitials = `${parts[0][0]}${parts[1][0]}`.toUpperCase();\n } else if (parts.length === 1) {\n displayInitials = parts[0].slice(0, 2).toUpperCase();\n }\n }\n displayInitials = displayInitials || \"??\";\n\n // Size-based padding\n const padding = props.size === \"sm\" ? 0 : props.size === \"lg\" ? 1 : 0;\n\n const children = [\n h(\n \"text\",\n {\n fg: props.fg,\n bg: props.bg,\n bold: true,\n },\n displayInitials,\n ),\n ];\n\n // Status indicator\n if (props.status) {\n children.push(\n h(\n \"text\",\n {\n fg: STATUS_COLORS[props.status],\n },\n STATUS_ICONS[props.status],\n ),\n );\n }\n\n if (props.border) {\n return h(\n \"box\",\n {\n border: \"rounded\",\n bg: props.bg,\n style: {\n flex_direction: \"row\",\n padding_left: padding,\n padding_right: padding,\n },\n },\n children,\n );\n }\n\n return h(\n \"box\",\n {\n bg: props.bg,\n style: {\n flex_direction: \"row\",\n padding_left: padding,\n padding_right: padding,\n },\n },\n children,\n );\n };\n },\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"composables-ThPaZc16.mjs","names":[],"sources":["../src/composables/useFocus.ts","../src/composables/useApp.ts","../src/composables/useIme.ts"],"sourcesContent":["/**\n * useFocus - Focus management composable\n */\n\nimport { ref, computed, provide, inject, type InjectionKey, type Ref } from \"@vue/runtime-core\";\n\nconst FOCUS_KEY: InjectionKey<FocusManager> = Symbol(\"fresco-focus\");\n\nexport interface UseFocusOptions {\n /** Whether this element starts focused */\n autoFocus?: boolean;\n /** Focus ID for this element */\n id?: string;\n}\n\nexport interface FocusManager {\n /** Currently focused element ID */\n focusedId: Ref<string | null>;\n /** All focusable element IDs */\n focusableIds: Ref<string[]>;\n /** Focus a specific element */\n focus: (id: string) => void;\n /** Focus next element */\n focusNext: () => void;\n /** Focus previous element */\n focusPrevious: () => void;\n /** Register a focusable element */\n register: (id: string) => void;\n /** Unregister a focusable element */\n unregister: (id: string) => void;\n}\n\n/**\n * Create a focus manager (use at app root)\n */\nexport function createFocusManager(): FocusManager {\n const focusedId = ref<string | null>(null);\n const focusableIds = ref<string[]>([]);\n\n const focus = (id: string) => {\n if (focusableIds.value.includes(id)) {\n focusedId.value = id;\n }\n };\n\n const focusNext = () => {\n if (focusableIds.value.length === 0) return;\n\n const currentIndex = focusedId.value ? focusableIds.value.indexOf(focusedId.value) : -1;\n const nextIndex = (currentIndex + 1) % focusableIds.value.length;\n focusedId.value = focusableIds.value[nextIndex];\n };\n\n const focusPrevious = () => {\n if (focusableIds.value.length === 0) return;\n\n const currentIndex = focusedId.value\n ? focusableIds.value.indexOf(focusedId.value)\n : focusableIds.value.length;\n const prevIndex = (currentIndex - 1 + focusableIds.value.length) % focusableIds.value.length;\n focusedId.value = focusableIds.value[prevIndex];\n };\n\n const register = (id: string) => {\n if (!focusableIds.value.includes(id)) {\n focusableIds.value.push(id);\n }\n };\n\n const unregister = (id: string) => {\n const index = focusableIds.value.indexOf(id);\n if (index !== -1) {\n focusableIds.value.splice(index, 1);\n if (focusedId.value === id) {\n focusedId.value = focusableIds.value[0] ?? null;\n }\n }\n };\n\n return {\n focusedId,\n focusableIds,\n focus,\n focusNext,\n focusPrevious,\n register,\n unregister,\n };\n}\n\n/**\n * Provide focus manager to descendants\n */\nexport function provideFocusManager(manager: FocusManager) {\n provide(FOCUS_KEY, manager);\n}\n\n/**\n * Use focus management\n */\nexport function useFocus(options: UseFocusOptions = {}) {\n const { autoFocus = false, id = `focus-${Math.random().toString(36).slice(2)}` } = options;\n\n const manager = inject(FOCUS_KEY, null);\n const localFocused = ref(autoFocus);\n\n const isFocused = computed(() => {\n if (manager) {\n return manager.focusedId.value === id;\n }\n return localFocused.value;\n });\n\n const focus = () => {\n if (manager) {\n manager.focus(id);\n } else {\n localFocused.value = true;\n }\n };\n\n const blur = () => {\n if (manager) {\n if (manager.focusedId.value === id) {\n manager.focusedId.value = null;\n }\n } else {\n localFocused.value = false;\n }\n };\n\n // Register with manager\n if (manager) {\n manager.register(id);\n\n if (autoFocus && !manager.focusedId.value) {\n manager.focus(id);\n }\n }\n\n return {\n id,\n isFocused,\n focus,\n blur,\n };\n}\n","/**\n * useApp - App context composable\n */\n\nimport { ref, provide, inject, type InjectionKey, type Ref } from \"@vue/runtime-core\";\n\nconst APP_KEY: InjectionKey<UseAppReturn> = Symbol(\"fresco-app\");\n\nexport interface UseAppReturn {\n /** Terminal width */\n width: Ref<number>;\n /** Terminal height */\n height: Ref<number>;\n /** Whether app is running */\n isRunning: Ref<boolean>;\n /** Exit the app */\n exit: (code?: number) => void;\n /** Force re-render */\n render: () => void;\n /** Clear the screen */\n clear: () => void;\n}\n\n/**\n * Create app context (use at app root)\n */\nexport function createAppContext(): UseAppReturn {\n const width = ref(80);\n const height = ref(24);\n const isRunning = ref(true);\n\n // These would be connected to actual app instance\n const exit = (_code = 0) => {\n isRunning.value = false;\n // In real implementation, trigger app exit\n };\n\n const render = () => {\n // In real implementation, trigger re-render\n };\n\n const clear = () => {\n // In real implementation, clear screen\n };\n\n // Try to get terminal size\n if (typeof process !== \"undefined\" && process.stdout) {\n width.value = process.stdout.columns ?? 80;\n height.value = process.stdout.rows ?? 24;\n\n process.stdout.on?.(\"resize\", () => {\n width.value = process.stdout.columns ?? 80;\n height.value = process.stdout.rows ?? 24;\n });\n }\n\n return {\n width,\n height,\n isRunning,\n exit,\n render,\n clear,\n };\n}\n\n/**\n * Provide app context to descendants\n */\nexport function provideApp(context: UseAppReturn) {\n provide(APP_KEY, context);\n}\n\n/**\n * Use app context\n */\nexport function useApp(): UseAppReturn {\n const context = inject(APP_KEY);\n\n if (!context) {\n // Return defaults if not in app context\n return {\n width: ref(80),\n height: ref(24),\n isRunning: ref(false),\n exit: () => {},\n render: () => {},\n clear: () => {},\n };\n }\n\n return context;\n}\n\n/**\n * Use terminal dimensions\n */\nexport function useTerminalSize() {\n const { width, height } = useApp();\n return { width, height };\n}\n\n/**\n * Exit handler\n */\nexport function useExit() {\n const { exit } = useApp();\n return exit;\n}\n","/**\n * useIme - IME (Input Method Editor) composable\n */\n\nimport { ref, computed, type Ref } from \"@vue/runtime-core\";\n\nexport interface UseImeOptions {\n /** Initial IME mode */\n mode?: ImeMode;\n /** Called when IME mode changes */\n onModeChange?: (mode: ImeMode) => void;\n /** Called when composition updates */\n onCompositionUpdate?: (text: string, cursor: number) => void;\n /** Called when text is committed */\n onCommit?: (text: string) => void;\n}\n\nexport type ImeMode =\n | \"direct\"\n | \"hiragana\"\n | \"katakana\"\n | \"half-katakana\"\n | \"full-alpha\"\n | \"pinyin\"\n | \"hangul\";\n\nexport interface ImeManager {\n /** Whether IME is active */\n isActive: Ref<boolean>;\n /** Current input mode */\n mode: Ref<ImeMode>;\n /** Whether currently composing */\n isComposing: Ref<boolean>;\n /** Preedit text */\n preedit: Ref<string>;\n /** Cursor position in preedit */\n preeditCursor: Ref<number>;\n /** Candidate list */\n candidates: Ref<string[]>;\n /** Selected candidate index */\n selectedCandidate: Ref<number>;\n /** Mode display name */\n modeDisplay: Ref<string>;\n /** Enable IME */\n enable: () => void;\n /** Disable IME */\n disable: () => void;\n /** Set input mode */\n setMode: (mode: ImeMode) => void;\n /** Handle key event for IME */\n handleKey: (key: string, modifiers: { ctrl: boolean; alt: boolean }) => boolean;\n /** Commit current composition */\n commit: () => void;\n /** Cancel current composition */\n cancel: () => void;\n /** Select next candidate */\n nextCandidate: () => void;\n /** Select previous candidate */\n prevCandidate: () => void;\n /** Select candidate by number (1-9) */\n selectCandidate: (num: number) => void;\n}\n\nconst MODE_DISPLAY: Record<ImeMode, string> = {\n direct: \"A\",\n hiragana: \"あ\",\n katakana: \"ア\",\n \"half-katakana\": \"ア\",\n \"full-alpha\": \"A\",\n pinyin: \"拼\",\n hangul: \"한\",\n};\n\nexport function useIme(options: UseImeOptions = {}): ImeManager {\n const { mode: initialMode = \"direct\", onModeChange, onCompositionUpdate, onCommit } = options;\n\n const isActive = ref(false);\n const mode = ref<ImeMode>(initialMode);\n const isComposing = ref(false);\n const preedit = ref(\"\");\n const preeditCursor = ref(0);\n const candidates = ref<string[]>([]);\n const selectedCandidate = ref(0);\n\n const modeDisplay = computed(() => MODE_DISPLAY[mode.value] ?? \"A\");\n\n const enable = () => {\n isActive.value = true;\n };\n\n const disable = () => {\n isActive.value = false;\n cancel();\n };\n\n const setMode = (newMode: ImeMode) => {\n if (mode.value !== newMode) {\n cancel();\n mode.value = newMode;\n onModeChange?.(newMode);\n }\n };\n\n const handleKey = (key: string, modifiers: { ctrl: boolean; alt: boolean }): boolean => {\n if (!isActive.value || mode.value === \"direct\") {\n return false;\n }\n\n // IME mode toggle (usually Ctrl+Space or similar)\n // If we're here, mode is not 'direct' (filtered above), so toggle to 'direct'\n if (modifiers.ctrl && key === \" \") {\n setMode(\"direct\");\n return true;\n }\n\n // Handle composition\n if (isComposing.value) {\n switch (key) {\n case \"enter\":\n commit();\n return true;\n case \"escape\":\n cancel();\n return true;\n case \"backspace\":\n if (preedit.value.length > 0) {\n preedit.value = preedit.value.slice(0, -1);\n preeditCursor.value = Math.min(preeditCursor.value, preedit.value.length);\n onCompositionUpdate?.(preedit.value, preeditCursor.value);\n return true;\n }\n break;\n case \"space\":\n // Convert / select candidate\n if (candidates.value.length > 0) {\n nextCandidate();\n return true;\n }\n break;\n }\n\n // Number for candidate selection\n if (/^[1-9]$/.test(key)) {\n selectCandidate(parseInt(key, 10));\n return true;\n }\n }\n\n // Start/continue composition for printable characters\n if (key.length === 1 && !modifiers.ctrl && !modifiers.alt) {\n if (!isComposing.value) {\n isComposing.value = true;\n }\n preedit.value += key;\n preeditCursor.value = preedit.value.length;\n onCompositionUpdate?.(preedit.value, preeditCursor.value);\n return true;\n }\n\n return false;\n };\n\n const commit = () => {\n if (preedit.value) {\n const text = candidates.value[selectedCandidate.value] ?? preedit.value;\n onCommit?.(text);\n }\n preedit.value = \"\";\n preeditCursor.value = 0;\n candidates.value = [];\n selectedCandidate.value = 0;\n isComposing.value = false;\n };\n\n const cancel = () => {\n preedit.value = \"\";\n preeditCursor.value = 0;\n candidates.value = [];\n selectedCandidate.value = 0;\n isComposing.value = false;\n };\n\n const nextCandidate = () => {\n if (candidates.value.length > 0) {\n selectedCandidate.value = (selectedCandidate.value + 1) % candidates.value.length;\n }\n };\n\n const prevCandidate = () => {\n if (candidates.value.length > 0) {\n selectedCandidate.value =\n (selectedCandidate.value - 1 + candidates.value.length) % candidates.value.length;\n }\n };\n\n const selectCandidate = (num: number) => {\n if (num >= 1 && num <= candidates.value.length) {\n selectedCandidate.value = num - 1;\n commit();\n }\n };\n\n return {\n isActive,\n mode,\n isComposing,\n preedit,\n preeditCursor,\n candidates,\n selectedCandidate,\n modeDisplay,\n enable,\n disable,\n setMode,\n handleKey,\n commit,\n cancel,\n nextCandidate,\n prevCandidate,\n selectCandidate,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"composables-ThPaZc16.mjs","names":[],"sources":["../src/composables/useFocus.ts","../src/composables/useApp.ts","../src/composables/useIme.ts"],"sourcesContent":["/**\n * useFocus - Focus management composable\n */\n\nimport { ref, computed, provide, inject, type InjectionKey, type Ref } from \"@vue/runtime-core\";\n\nconst FOCUS_KEY: InjectionKey<FocusManager> = Symbol(\"fresco-focus\");\n\nexport interface UseFocusOptions {\n /** Whether this element starts focused */\n autoFocus?: boolean;\n /** Focus ID for this element */\n id?: string;\n}\n\nexport interface FocusManager {\n /** Currently focused element ID */\n focusedId: Ref<string | null>;\n /** All focusable element IDs */\n focusableIds: Ref<string[]>;\n /** Focus a specific element */\n focus: (id: string) => void;\n /** Focus next element */\n focusNext: () => void;\n /** Focus previous element */\n focusPrevious: () => void;\n /** Register a focusable element */\n register: (id: string) => void;\n /** Unregister a focusable element */\n unregister: (id: string) => void;\n}\n\n/**\n * Create a focus manager (use at app root)\n */\nexport function createFocusManager(): FocusManager {\n const focusedId = ref<string | null>(null);\n const focusableIds = ref<string[]>([]);\n\n const focus = (id: string) => {\n if (focusableIds.value.includes(id)) {\n focusedId.value = id;\n }\n };\n\n const focusNext = () => {\n if (focusableIds.value.length === 0) return;\n\n const currentIndex = focusedId.value ? focusableIds.value.indexOf(focusedId.value) : -1;\n const nextIndex = (currentIndex + 1) % focusableIds.value.length;\n focusedId.value = focusableIds.value[nextIndex];\n };\n\n const focusPrevious = () => {\n if (focusableIds.value.length === 0) return;\n\n const currentIndex = focusedId.value\n ? focusableIds.value.indexOf(focusedId.value)\n : focusableIds.value.length;\n const prevIndex = (currentIndex - 1 + focusableIds.value.length) % focusableIds.value.length;\n focusedId.value = focusableIds.value[prevIndex];\n };\n\n const register = (id: string) => {\n if (!focusableIds.value.includes(id)) {\n focusableIds.value.push(id);\n }\n };\n\n const unregister = (id: string) => {\n const index = focusableIds.value.indexOf(id);\n if (index !== -1) {\n focusableIds.value.splice(index, 1);\n if (focusedId.value === id) {\n focusedId.value = focusableIds.value[0] ?? null;\n }\n }\n };\n\n return {\n focusedId,\n focusableIds,\n focus,\n focusNext,\n focusPrevious,\n register,\n unregister,\n };\n}\n\n/**\n * Provide focus manager to descendants\n */\nexport function provideFocusManager(manager: FocusManager) {\n provide(FOCUS_KEY, manager);\n}\n\n/**\n * Use focus management\n */\nexport function useFocus(options: UseFocusOptions = {}) {\n const { autoFocus = false, id = `focus-${Math.random().toString(36).slice(2)}` } = options;\n\n const manager = inject(FOCUS_KEY, null);\n const localFocused = ref(autoFocus);\n\n const isFocused = computed(() => {\n if (manager) {\n return manager.focusedId.value === id;\n }\n return localFocused.value;\n });\n\n const focus = () => {\n if (manager) {\n manager.focus(id);\n } else {\n localFocused.value = true;\n }\n };\n\n const blur = () => {\n if (manager) {\n if (manager.focusedId.value === id) {\n manager.focusedId.value = null;\n }\n } else {\n localFocused.value = false;\n }\n };\n\n // Register with manager\n if (manager) {\n manager.register(id);\n\n if (autoFocus && !manager.focusedId.value) {\n manager.focus(id);\n }\n }\n\n return {\n id,\n isFocused,\n focus,\n blur,\n };\n}\n","/**\n * useApp - App context composable\n */\n\nimport { ref, provide, inject, type InjectionKey, type Ref } from \"@vue/runtime-core\";\n\nconst APP_KEY: InjectionKey<UseAppReturn> = Symbol(\"fresco-app\");\n\nexport interface UseAppReturn {\n /** Terminal width */\n width: Ref<number>;\n /** Terminal height */\n height: Ref<number>;\n /** Whether app is running */\n isRunning: Ref<boolean>;\n /** Exit the app */\n exit: (code?: number) => void;\n /** Force re-render */\n render: () => void;\n /** Clear the screen */\n clear: () => void;\n}\n\n/**\n * Create app context (use at app root)\n */\nexport function createAppContext(): UseAppReturn {\n const width = ref(80);\n const height = ref(24);\n const isRunning = ref(true);\n\n // These would be connected to actual app instance\n const exit = (_code = 0) => {\n isRunning.value = false;\n // In real implementation, trigger app exit\n };\n\n const render = () => {\n // In real implementation, trigger re-render\n };\n\n const clear = () => {\n // In real implementation, clear screen\n };\n\n // Try to get terminal size\n if (typeof process !== \"undefined\" && process.stdout) {\n width.value = process.stdout.columns ?? 80;\n height.value = process.stdout.rows ?? 24;\n\n process.stdout.on?.(\"resize\", () => {\n width.value = process.stdout.columns ?? 80;\n height.value = process.stdout.rows ?? 24;\n });\n }\n\n return {\n width,\n height,\n isRunning,\n exit,\n render,\n clear,\n };\n}\n\n/**\n * Provide app context to descendants\n */\nexport function provideApp(context: UseAppReturn) {\n provide(APP_KEY, context);\n}\n\n/**\n * Use app context\n */\nexport function useApp(): UseAppReturn {\n const context = inject(APP_KEY);\n\n if (!context) {\n // Return defaults if not in app context\n return {\n width: ref(80),\n height: ref(24),\n isRunning: ref(false),\n exit: () => {},\n render: () => {},\n clear: () => {},\n };\n }\n\n return context;\n}\n\n/**\n * Use terminal dimensions\n */\nexport function useTerminalSize() {\n const { width, height } = useApp();\n return { width, height };\n}\n\n/**\n * Exit handler\n */\nexport function useExit() {\n const { exit } = useApp();\n return exit;\n}\n","/**\n * useIme - IME (Input Method Editor) composable\n */\n\nimport { ref, computed, type Ref } from \"@vue/runtime-core\";\n\nexport interface UseImeOptions {\n /** Initial IME mode */\n mode?: ImeMode;\n /** Called when IME mode changes */\n onModeChange?: (mode: ImeMode) => void;\n /** Called when composition updates */\n onCompositionUpdate?: (text: string, cursor: number) => void;\n /** Called when text is committed */\n onCommit?: (text: string) => void;\n}\n\nexport type ImeMode =\n | \"direct\"\n | \"hiragana\"\n | \"katakana\"\n | \"half-katakana\"\n | \"full-alpha\"\n | \"pinyin\"\n | \"hangul\";\n\nexport interface ImeManager {\n /** Whether IME is active */\n isActive: Ref<boolean>;\n /** Current input mode */\n mode: Ref<ImeMode>;\n /** Whether currently composing */\n isComposing: Ref<boolean>;\n /** Preedit text */\n preedit: Ref<string>;\n /** Cursor position in preedit */\n preeditCursor: Ref<number>;\n /** Candidate list */\n candidates: Ref<string[]>;\n /** Selected candidate index */\n selectedCandidate: Ref<number>;\n /** Mode display name */\n modeDisplay: Ref<string>;\n /** Enable IME */\n enable: () => void;\n /** Disable IME */\n disable: () => void;\n /** Set input mode */\n setMode: (mode: ImeMode) => void;\n /** Handle key event for IME */\n handleKey: (key: string, modifiers: { ctrl: boolean; alt: boolean }) => boolean;\n /** Commit current composition */\n commit: () => void;\n /** Cancel current composition */\n cancel: () => void;\n /** Select next candidate */\n nextCandidate: () => void;\n /** Select previous candidate */\n prevCandidate: () => void;\n /** Select candidate by number (1-9) */\n selectCandidate: (num: number) => void;\n}\n\nconst MODE_DISPLAY: Record<ImeMode, string> = {\n direct: \"A\",\n hiragana: \"あ\",\n katakana: \"ア\",\n \"half-katakana\": \"ア\",\n \"full-alpha\": \"A\",\n pinyin: \"拼\",\n hangul: \"한\",\n};\n\nexport function useIme(options: UseImeOptions = {}): ImeManager {\n const { mode: initialMode = \"direct\", onModeChange, onCompositionUpdate, onCommit } = options;\n\n const isActive = ref(false);\n const mode = ref<ImeMode>(initialMode);\n const isComposing = ref(false);\n const preedit = ref(\"\");\n const preeditCursor = ref(0);\n const candidates = ref<string[]>([]);\n const selectedCandidate = ref(0);\n\n const modeDisplay = computed(() => MODE_DISPLAY[mode.value] ?? \"A\");\n\n const enable = () => {\n isActive.value = true;\n };\n\n const disable = () => {\n isActive.value = false;\n cancel();\n };\n\n const setMode = (newMode: ImeMode) => {\n if (mode.value !== newMode) {\n cancel();\n mode.value = newMode;\n onModeChange?.(newMode);\n }\n };\n\n const handleKey = (key: string, modifiers: { ctrl: boolean; alt: boolean }): boolean => {\n if (!isActive.value || mode.value === \"direct\") {\n return false;\n }\n\n // IME mode toggle (usually Ctrl+Space or similar)\n // If we're here, mode is not 'direct' (filtered above), so toggle to 'direct'\n if (modifiers.ctrl && key === \" \") {\n setMode(\"direct\");\n return true;\n }\n\n // Handle composition\n if (isComposing.value) {\n switch (key) {\n case \"enter\":\n commit();\n return true;\n case \"escape\":\n cancel();\n return true;\n case \"backspace\":\n if (preedit.value.length > 0) {\n preedit.value = preedit.value.slice(0, -1);\n preeditCursor.value = Math.min(preeditCursor.value, preedit.value.length);\n onCompositionUpdate?.(preedit.value, preeditCursor.value);\n return true;\n }\n break;\n case \"space\":\n // Convert / select candidate\n if (candidates.value.length > 0) {\n nextCandidate();\n return true;\n }\n break;\n }\n\n // Number for candidate selection\n if (/^[1-9]$/.test(key)) {\n selectCandidate(parseInt(key, 10));\n return true;\n }\n }\n\n // Start/continue composition for printable characters\n if (key.length === 1 && !modifiers.ctrl && !modifiers.alt) {\n if (!isComposing.value) {\n isComposing.value = true;\n }\n preedit.value += key;\n preeditCursor.value = preedit.value.length;\n onCompositionUpdate?.(preedit.value, preeditCursor.value);\n return true;\n }\n\n return false;\n };\n\n const commit = () => {\n if (preedit.value) {\n const text = candidates.value[selectedCandidate.value] ?? preedit.value;\n onCommit?.(text);\n }\n preedit.value = \"\";\n preeditCursor.value = 0;\n candidates.value = [];\n selectedCandidate.value = 0;\n isComposing.value = false;\n };\n\n const cancel = () => {\n preedit.value = \"\";\n preeditCursor.value = 0;\n candidates.value = [];\n selectedCandidate.value = 0;\n isComposing.value = false;\n };\n\n const nextCandidate = () => {\n if (candidates.value.length > 0) {\n selectedCandidate.value = (selectedCandidate.value + 1) % candidates.value.length;\n }\n };\n\n const prevCandidate = () => {\n if (candidates.value.length > 0) {\n selectedCandidate.value =\n (selectedCandidate.value - 1 + candidates.value.length) % candidates.value.length;\n }\n };\n\n const selectCandidate = (num: number) => {\n if (num >= 1 && num <= candidates.value.length) {\n selectedCandidate.value = num - 1;\n commit();\n }\n };\n\n return {\n isActive,\n mode,\n isComposing,\n preedit,\n preeditCursor,\n candidates,\n selectedCandidate,\n modeDisplay,\n enable,\n disable,\n setMode,\n handleKey,\n commit,\n cancel,\n nextCandidate,\n prevCandidate,\n selectCandidate,\n };\n}\n"],"mappings":"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"}
@@ -236,11 +236,11 @@ declare const Stack: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core0.E
236
236
  default: boolean;
237
237
  };
238
238
  }>> & Readonly<{}>, {
239
- align: "start" | "center" | "end" | "stretch" | undefined;
240
- justify: "start" | "center" | "end" | "between" | "around" | "evenly" | undefined;
241
239
  direction: "horizontal" | "vertical";
242
- gap: number;
243
240
  wrap: boolean;
241
+ gap: number;
242
+ align: "center" | "stretch" | "start" | "end" | undefined;
243
+ justify: "center" | "start" | "end" | "between" | "around" | "evenly" | undefined;
244
244
  }, {}, {}, {}, string, _$_vue_runtime_core0.ComponentProvideOptions, true, {}, any>;
245
245
  declare const HStack: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core0.ExtractPropTypes<{
246
246
  gap: {
@@ -379,9 +379,9 @@ declare const Card: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core0.Ex
379
379
  borderFg: StringConstructor;
380
380
  bg: StringConstructor;
381
381
  }>> & Readonly<{}>, {
382
+ titleFg: string;
382
383
  border: "none" | "single" | "double" | "rounded" | "heavy" | undefined;
383
384
  padding: number;
384
- titleFg: string;
385
385
  }, {}, {}, {}, string, _$_vue_runtime_core0.ComponentProvideOptions, true, {}, any>;
386
386
  //#endregion
387
387
  //#region src/components/Text.d.ts
@@ -431,11 +431,11 @@ declare const Text: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core0.Ex
431
431
  underline: BooleanConstructor;
432
432
  strikethrough: BooleanConstructor;
433
433
  }>> & Readonly<{}>, {
434
- wrap: boolean;
435
434
  bold: boolean;
436
- underline: boolean;
435
+ wrap: boolean;
437
436
  dim: boolean;
438
437
  italic: boolean;
438
+ underline: boolean;
439
439
  strikethrough: boolean;
440
440
  }, {}, {}, {}, string, _$_vue_runtime_core0.ComponentProvideOptions, true, {}, any>;
441
441
  //#endregion
@@ -531,8 +531,8 @@ declare const Code: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core0.Ex
531
531
  default: string;
532
532
  };
533
533
  }>> & Readonly<{}>, {
534
- border: "none" | "single" | "double" | "rounded" | undefined;
535
534
  fg: string;
535
+ border: "none" | "single" | "double" | "rounded" | undefined;
536
536
  lineNumbers: boolean;
537
537
  startLine: number;
538
538
  highlightLines: number[];
@@ -683,8 +683,8 @@ declare const TextInput: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_cor
683
683
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
684
684
  }>, {
685
685
  focus: boolean;
686
- placeholder: string;
687
686
  modelValue: string;
687
+ placeholder: string;
688
688
  mask: boolean;
689
689
  maskChar: string;
690
690
  }, {}, {}, {}, string, _$_vue_runtime_core0.ComponentProvideOptions, true, {}, any>;
@@ -811,9 +811,9 @@ declare const TextArea: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core
811
811
  lineNumbers: boolean;
812
812
  lineNumberFg: string;
813
813
  modelValue: string;
814
- rows: number;
815
814
  focused: boolean;
816
815
  disabled: boolean;
816
+ rows: number;
817
817
  placeholderFg: string;
818
818
  cursorLine: number;
819
819
  cursorColumn: number;
@@ -1654,8 +1654,8 @@ declare const Timer: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core0.E
1654
1654
  onTick?: ((...args: any[]) => any) | undefined;
1655
1655
  onComplete?: ((...args: any[]) => any) | undefined;
1656
1656
  }>, {
1657
- mode: TimerMode;
1658
1657
  fg: string;
1658
+ mode: TimerMode;
1659
1659
  initialSeconds: number;
1660
1660
  autoStart: boolean;
1661
1661
  showHours: boolean;
@@ -1733,8 +1733,8 @@ declare const Tooltip: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core0
1733
1733
  default: string;
1734
1734
  };
1735
1735
  }>> & Readonly<{}>, {
1736
- border: "none" | "single" | "rounded" | undefined;
1737
1736
  fg: string;
1737
+ border: "none" | "single" | "rounded" | undefined;
1738
1738
  bg: string;
1739
1739
  visible: boolean;
1740
1740
  position: TooltipPosition;
@@ -2486,8 +2486,8 @@ declare const Modal: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core0.E
2486
2486
  }>, {
2487
2487
  width: string | number;
2488
2488
  height: string | number;
2489
- border: "single" | "double" | "rounded" | "heavy" | undefined;
2490
2489
  titleFg: string;
2490
+ border: "single" | "double" | "rounded" | "heavy" | undefined;
2491
2491
  visible: boolean;
2492
2492
  }, {}, {}, {}, string, _$_vue_runtime_core0.ComponentProvideOptions, true, {}, any>;
2493
2493
  //#endregion
@@ -2764,11 +2764,11 @@ declare const Avatar: _$_vue_runtime_core0.DefineComponent<_$_vue_runtime_core0.
2764
2764
  type: PropType<AvatarProps["status"]>;
2765
2765
  };
2766
2766
  }>> & Readonly<{}>, {
2767
- size: "sm" | "md" | "lg";
2768
- border: boolean;
2769
2767
  fg: string;
2768
+ border: boolean;
2770
2769
  bg: string;
2770
+ size: "sm" | "md" | "lg";
2771
2771
  }, {}, {}, {}, string, _$_vue_runtime_core0.ComponentProvideOptions, true, {}, any>;
2772
2772
  //#endregion
2773
2773
  export { FormProps as $, TableColumn as A, Box as At, TimerProps as B, Menu as C, GridProps as Ct, TreeNode as D, VStack as Dt, Tree as E, StackProps as Et, Tooltip as F, AlertProps as G, BadgeProps as H, TooltipPosition as I, ProgressBarProps as J, AlertType as K, TooltipProps as L, List as M, ListItem as N, TreeProps as O, Divider as Ot, ListProps as P, FormField as Q, Timer as R, TabsProps as S, Grid as St, MenuProps as T, Stack as Tt, BadgeVariant as U, Badge as V, Alert as W, SpinnerProps as X, Spinner as Y, Form as Z, Breadcrumb as _, CodeProps as _t, KeyHintProps as a, Checkbox as at, Tab as b, Card as bt, StatusBar as c, SelectOption as ct, Modal as d, TextAreaProps as dt, Confirm as et, ModalProps as f, TextInput as ft, StepperProps as g, Code as gt, Stepper as h, LinkProps as ht, KeyHint as i, RadioOption as it, TableProps as j, BoxProps as jt, Table as k, DividerProps as kt, StatusBarItem as l, SelectProps as lt, StepStatus as m, Link as mt, AvatarProps as n, RadioGroup as nt, Header as o, CheckboxProps as ot, Step as p, TextInputProps as pt, ProgressBar as q, KeyBinding as r, RadioGroupProps as rt, HeaderProps as s, Select as st, Avatar as t, ConfirmProps as tt, StatusBarProps as u, TextArea as ut, BreadcrumbItem as v, Text as vt, MenuItem as w, HStack as wt, Tabs as x, CardProps as xt, BreadcrumbProps as y, TextProps as yt, TimerMode as z };
2774
- //# sourceMappingURL=index-B8a-5fM6.d.mts.map
2774
+ //# sourceMappingURL=index-dQ_vSjoe.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-B8a-5fM6.d.mts","names":[],"sources":["../src/components/Box.ts","../src/components/Divider.ts","../src/components/Stack.ts","../src/components/Grid.ts","../src/components/Card.ts","../src/components/Text.ts","../src/components/Code.ts","../src/components/Link.ts","../src/components/TextInput.ts","../src/components/TextArea.ts","../src/components/Select.ts","../src/components/Checkbox.ts","../src/components/RadioGroup.ts","../src/components/Confirm.ts","../src/components/Form.ts","../src/components/Spinner.ts","../src/components/ProgressBar.ts","../src/components/Alert.ts","../src/components/Badge.ts","../src/components/Timer.ts","../src/components/Tooltip.ts","../src/components/List.ts","../src/components/Table.ts","../src/components/Tree.ts","../src/components/Menu.ts","../src/components/Tabs.ts","../src/components/Breadcrumb.ts","../src/components/Stepper.ts","../src/components/Modal.ts","../src/components/StatusBar.ts","../src/components/Header.ts","../src/components/KeyHint.ts","../src/components/Avatar.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index-dQ_vSjoe.d.mts","names":[],"sources":["../src/components/Box.ts","../src/components/Divider.ts","../src/components/Stack.ts","../src/components/Grid.ts","../src/components/Card.ts","../src/components/Text.ts","../src/components/Code.ts","../src/components/Link.ts","../src/components/TextInput.ts","../src/components/TextArea.ts","../src/components/Select.ts","../src/components/Checkbox.ts","../src/components/RadioGroup.ts","../src/components/Confirm.ts","../src/components/Form.ts","../src/components/Spinner.ts","../src/components/ProgressBar.ts","../src/components/Alert.ts","../src/components/Badge.ts","../src/components/Timer.ts","../src/components/Tooltip.ts","../src/components/List.ts","../src/components/Table.ts","../src/components/Tree.ts","../src/components/Menu.ts","../src/components/Tabs.ts","../src/components/Breadcrumb.ts","../src/components/Stepper.ts","../src/components/Modal.ts","../src/components/StatusBar.ts","../src/components/Header.ts","../src/components/KeyHint.ts","../src/components/Avatar.ts"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as FormProps, A as TableColumn, At as Box, B as TimerProps, C as Menu, Ct as GridProps, D as TreeNode, Dt as VStack, E as Tree, Et as StackProps, F as Tooltip, G as AlertProps, H as BadgeProps, I as TooltipPosition, J as ProgressBarProps, K as AlertType, L as TooltipProps, M as List, N as ListItem, O as TreeProps, Ot as Divider, P as ListProps, Q as FormField, R as Timer, S as TabsProps, St as Grid, T as MenuProps, Tt as Stack, U as BadgeVariant, V as Badge, W as Alert, X as SpinnerProps, Y as Spinner, Z as Form, _ as Breadcrumb, _t as CodeProps, a as KeyHintProps, at as Checkbox, b as Tab, bt as Card, c as StatusBar, ct as SelectOption, d as Modal, dt as TextAreaProps, et as Confirm, f as ModalProps, ft as TextInput, g as StepperProps, gt as Code, h as Stepper, ht as LinkProps, i as KeyHint, it as RadioOption, j as TableProps, jt as BoxProps, k as Table, kt as DividerProps, l as StatusBarItem, lt as SelectProps, m as StepStatus, mt as Link, n as AvatarProps, nt as RadioGroup, o as Header, ot as CheckboxProps, p as Step, pt as TextInputProps, q as ProgressBar, r as KeyBinding, rt as RadioGroupProps, s as HeaderProps, st as Select, t as Avatar, tt as ConfirmProps, u as StatusBarProps, ut as TextArea, v as BreadcrumbItem, vt as Text, w as MenuItem, wt as HStack, x as Tabs, xt as CardProps, y as BreadcrumbProps, yt as TextProps, z as TimerMode } from "./index-B8a-5fM6.mjs";
1
+ import { $ as FormProps, A as TableColumn, At as Box, B as TimerProps, C as Menu, Ct as GridProps, D as TreeNode, Dt as VStack, E as Tree, Et as StackProps, F as Tooltip, G as AlertProps, H as BadgeProps, I as TooltipPosition, J as ProgressBarProps, K as AlertType, L as TooltipProps, M as List, N as ListItem, O as TreeProps, Ot as Divider, P as ListProps, Q as FormField, R as Timer, S as TabsProps, St as Grid, T as MenuProps, Tt as Stack, U as BadgeVariant, V as Badge, W as Alert, X as SpinnerProps, Y as Spinner, Z as Form, _ as Breadcrumb, _t as CodeProps, a as KeyHintProps, at as Checkbox, b as Tab, bt as Card, c as StatusBar, ct as SelectOption, d as Modal, dt as TextAreaProps, et as Confirm, f as ModalProps, ft as TextInput, g as StepperProps, gt as Code, h as Stepper, ht as LinkProps, i as KeyHint, it as RadioOption, j as TableProps, jt as BoxProps, k as Table, kt as DividerProps, l as StatusBarItem, lt as SelectProps, m as StepStatus, mt as Link, n as AvatarProps, nt as RadioGroup, o as Header, ot as CheckboxProps, p as Step, pt as TextInputProps, q as ProgressBar, r as KeyBinding, rt as RadioGroupProps, s as HeaderProps, st as Select, t as Avatar, tt as ConfirmProps, u as StatusBarProps, ut as TextArea, v as BreadcrumbItem, vt as Text, w as MenuItem, wt as HStack, x as Tabs, xt as CardProps, y as BreadcrumbProps, yt as TextProps, z as TimerMode } from "./index-dQ_vSjoe.mjs";
2
2
  import { a as useApp, c as useFocus, d as useInput, i as UseAppReturn, l as KeyHandler, n as UseImeOptions, o as FocusManager, r as useIme, s as UseFocusOptions, t as ImeManager, u as UseInputOptions } from "./index-BeImxraZ.mjs";
3
3
  import * as _$_vue_runtime_core0 from "@vue/runtime-core";
4
4
  import { Component, Ref, RendererElement, RendererNode } from "@vue/runtime-core";
@@ -1 +1 @@
1
- {"version":3,"file":"useInput-CbggNZUF.mjs","names":["createRenderer","createVueRenderer","createRenderer"],"sources":["../src/renderer.ts","../src/app.ts","../src/composables/useInput.ts"],"sourcesContent":["/**\n * Fresco Vue Custom Renderer\n */\n\nimport {\n createRenderer as createVueRenderer,\n type RendererOptions,\n type RendererNode,\n type RendererElement,\n} from \"@vue/runtime-core\";\n\n/**\n * Fresco node types\n */\nexport interface FrescoNode extends RendererNode {\n id: number;\n type: \"box\" | \"text\" | \"input\" | \"root\";\n props: Record<string, unknown>;\n children: FrescoNode[];\n parent: FrescoNode | null;\n text?: string;\n}\n\n/**\n * Fresco element (extends node)\n */\nexport interface FrescoElement extends FrescoNode, RendererElement {}\n\nlet nextId = 0;\n\nfunction createNode(type: FrescoNode[\"type\"]): FrescoNode {\n return {\n id: nextId++,\n type,\n props: {},\n children: [],\n parent: null,\n };\n}\n\n/**\n * Renderer options for Fresco\n */\nconst rendererOptions: RendererOptions<FrescoNode, FrescoElement> = {\n patchProp(el, key, prevValue, nextValue) {\n el.props[key] = nextValue;\n },\n\n insert(child, parent, anchor) {\n child.parent = parent;\n if (anchor) {\n const index = parent.children.indexOf(anchor);\n if (index !== -1) {\n parent.children.splice(index, 0, child);\n return;\n }\n }\n parent.children.push(child);\n },\n\n remove(child) {\n if (child.parent) {\n const index = child.parent.children.indexOf(child);\n if (index !== -1) {\n child.parent.children.splice(index, 1);\n }\n child.parent = null;\n }\n },\n\n createElement(type) {\n const nodeType = mapElementType(type);\n return createNode(nodeType) as FrescoElement;\n },\n\n createText(text) {\n const node = createNode(\"text\");\n node.text = text;\n return node;\n },\n\n createComment() {\n // Comments are ignored in TUI\n return createNode(\"text\");\n },\n\n setText(node, text) {\n node.text = text;\n },\n\n setElementText(el, text) {\n el.text = text;\n el.children = [];\n },\n\n parentNode(node) {\n return node.parent;\n },\n\n nextSibling(node) {\n if (!node.parent) return null;\n const index = node.parent.children.indexOf(node);\n return node.parent.children[index + 1] || null;\n },\n};\n\n/**\n * Map Vue element types to Fresco node types\n */\nfunction mapElementType(type: string): FrescoNode[\"type\"] {\n switch (type.toLowerCase()) {\n case \"box\":\n case \"div\":\n case \"view\":\n return \"box\";\n case \"text\":\n case \"span\":\n return \"text\";\n case \"input\":\n case \"textinput\":\n return \"input\";\n default:\n return \"box\";\n }\n}\n\n/**\n * Create the Fresco renderer\n */\nexport function createRenderer() {\n return createVueRenderer(rendererOptions);\n}\n\n/**\n * Convert Fresco tree to render nodes for native\n */\nexport function treeToRenderNodes(root: FrescoNode): Array<{\n id: number;\n nodeType: string;\n text?: string;\n wrap?: boolean;\n value?: string;\n placeholder?: string;\n focused?: boolean;\n mask?: boolean;\n style?: Record<string, unknown>;\n appearance?: Record<string, unknown>;\n border?: string;\n children?: number[];\n}> {\n const nodes: Array<{\n id: number;\n nodeType: string;\n text?: string;\n wrap?: boolean;\n value?: string;\n placeholder?: string;\n focused?: boolean;\n mask?: boolean;\n style?: Record<string, unknown>;\n appearance?: Record<string, unknown>;\n border?: string;\n children?: number[];\n }> = [];\n\n function visit(node: FrescoNode) {\n const renderNode: (typeof nodes)[0] = {\n id: node.id,\n nodeType: node.type,\n };\n\n // Extract props\n if (node.text) {\n renderNode.text = node.text;\n }\n if (node.props.wrap !== undefined) {\n renderNode.wrap = Boolean(node.props.wrap);\n }\n if (node.props.value !== undefined) {\n const v = node.props.value;\n renderNode.value = typeof v === \"string\" || typeof v === \"number\" ? String(v) : \"\";\n }\n if (node.props.placeholder !== undefined) {\n const p = node.props.placeholder;\n renderNode.placeholder = typeof p === \"string\" || typeof p === \"number\" ? String(p) : \"\";\n }\n if (node.props.focused !== undefined) {\n renderNode.focused = Boolean(node.props.focused);\n }\n if (node.props.cursor !== undefined) {\n (renderNode as any).cursor = Number(node.props.cursor);\n }\n if (node.props.mask !== undefined) {\n renderNode.mask = Boolean(node.props.mask);\n }\n if (node.props.border !== undefined) {\n const b = node.props.border;\n renderNode.border = typeof b === \"string\" ? b : \"\";\n }\n\n // Extract style - only include defined values\n if (node.props.style) {\n const s = node.props.style as Record<string, unknown>;\n const style: Record<string, unknown> = {};\n\n if (s.display !== undefined) style.display = s.display;\n if (s.flexDirection !== undefined) style.flexDirection = s.flexDirection;\n if (s.flexWrap !== undefined) style.flexWrap = s.flexWrap;\n if (s.justifyContent !== undefined) style.justifyContent = s.justifyContent;\n if (s.alignItems !== undefined) style.alignItems = s.alignItems;\n if (s.alignSelf !== undefined) style.alignSelf = s.alignSelf;\n if (s.alignContent !== undefined) style.alignContent = s.alignContent;\n if (s.flexGrow !== undefined) style.flexGrow = s.flexGrow;\n if (s.flexShrink !== undefined) style.flexShrink = s.flexShrink;\n if (s.width !== undefined && (typeof s.width === \"string\" || typeof s.width === \"number\"))\n style.width = String(s.width);\n if (s.height !== undefined && (typeof s.height === \"string\" || typeof s.height === \"number\"))\n style.height = String(s.height);\n if (\n s.minWidth !== undefined &&\n (typeof s.minWidth === \"string\" || typeof s.minWidth === \"number\")\n )\n style.minWidth = String(s.minWidth);\n if (\n s.minHeight !== undefined &&\n (typeof s.minHeight === \"string\" || typeof s.minHeight === \"number\")\n )\n style.minHeight = String(s.minHeight);\n if (\n s.maxWidth !== undefined &&\n (typeof s.maxWidth === \"string\" || typeof s.maxWidth === \"number\")\n )\n style.maxWidth = String(s.maxWidth);\n if (\n s.maxHeight !== undefined &&\n (typeof s.maxHeight === \"string\" || typeof s.maxHeight === \"number\")\n )\n style.maxHeight = String(s.maxHeight);\n if (s.padding !== undefined) style.padding = s.padding;\n if (s.paddingTop !== undefined) style.paddingTop = s.paddingTop;\n if (s.paddingRight !== undefined) style.paddingRight = s.paddingRight;\n if (s.paddingBottom !== undefined) style.paddingBottom = s.paddingBottom;\n if (s.paddingLeft !== undefined) style.paddingLeft = s.paddingLeft;\n if (s.margin !== undefined) style.margin = s.margin;\n if (s.marginTop !== undefined) style.marginTop = s.marginTop;\n if (s.marginRight !== undefined) style.marginRight = s.marginRight;\n if (s.marginBottom !== undefined) style.marginBottom = s.marginBottom;\n if (s.marginLeft !== undefined) style.marginLeft = s.marginLeft;\n if (s.gap !== undefined) style.gap = s.gap;\n\n renderNode.style = style as any;\n }\n\n // Extract appearance (fg, bg, bold, etc.)\n const appearance: Record<string, unknown> = {};\n if (node.props.fg) appearance.fg = node.props.fg;\n if (node.props.bg) appearance.bg = node.props.bg;\n if (node.props.bold) appearance.bold = node.props.bold;\n if (node.props.dim) appearance.dim = node.props.dim;\n if (node.props.italic) appearance.italic = node.props.italic;\n if (node.props.underline) appearance.underline = node.props.underline;\n if (Object.keys(appearance).length > 0) {\n renderNode.appearance = appearance;\n }\n\n // Children\n if (node.children.length > 0) {\n renderNode.children = node.children.map((c) => c.id);\n }\n\n nodes.push(renderNode);\n\n // Visit children\n for (const child of node.children) {\n visit(child);\n }\n }\n\n visit(root);\n return nodes;\n}\n","/**\n * Fresco App - Application instance management\n */\n\nimport { type Component, type App as VueApp, ref, type Ref } from \"@vue/runtime-core\";\nimport { createRenderer, treeToRenderNodes, type FrescoElement } from \"./renderer.js\";\n\n// Event types\nexport interface KeyEvent {\n type: \"key\";\n key?: string;\n char?: string;\n ctrl: boolean;\n alt: boolean;\n shift: boolean;\n}\n\nexport interface ResizeEvent {\n type: \"resize\";\n width: number;\n height: number;\n}\n\nexport type InputEvent = KeyEvent | ResizeEvent;\n\n// Global event state\nexport const lastKeyEvent: Ref<KeyEvent | null> = ref(null);\n\n// Import native bindings\n// eslint-disable-next-line typescript-eslint/no-redundant-type-constituents -- index.d.ts is not yet generated\nlet native: typeof import(\"@vizejs/fresco-native\") | null = null;\n\nasync function loadNative() {\n if (!native) {\n native = await import(\"@vizejs/fresco-native\");\n }\n return native;\n}\n\n/**\n * App options\n */\nexport interface AppOptions {\n /** Enable mouse support */\n mouse?: boolean;\n /** Exit on Ctrl+C */\n exitOnCtrlC?: boolean;\n /** Custom error handler */\n onError?: (error: Error) => void;\n /** Debug mode - logs render tree */\n debug?: boolean;\n}\n\n/**\n * Fresco App instance\n */\nexport interface App {\n /** Mount the app */\n mount(): Promise<void>;\n /** Unmount the app */\n unmount(): Promise<void>;\n /** Wait for exit */\n waitUntilExit(): Promise<void>;\n /** Render the app */\n render(): void;\n /** Get terminal info */\n getTerminalInfo(): Promise<{ width: number; height: number }>;\n}\n\n/**\n * Create a Fresco TUI app\n */\nexport function createApp(rootComponent: Component, options: AppOptions = {}): App {\n const { mouse = false, exitOnCtrlC = true, onError } = options;\n\n let vueApp: VueApp | null = null;\n let rootElement: FrescoElement | null = null;\n let mounted = false;\n let running = false;\n let exitResolve: (() => void) | null = null;\n let needsRender = true;\n\n const { createApp: createVueApp } = createRenderer();\n\n async function mount() {\n if (mounted) return;\n\n const n = await loadNative();\n\n // Initialize terminal\n if (mouse) {\n n.initTerminalWithMouse();\n } else {\n n.initTerminal();\n }\n\n // Initialize layout engine\n n.initLayout();\n\n // Create Vue app with custom renderer\n const app = createVueApp(rootComponent);\n\n // Create a root element for mounting\n rootElement = {\n id: -1,\n type: \"root\",\n props: {\n style: {\n width: \"100%\",\n height: \"100%\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n alignContent: \"flex-start\",\n },\n },\n children: [],\n parent: null,\n };\n\n app.mount(rootElement);\n vueApp = app;\n\n mounted = true;\n running = true;\n needsRender = true;\n\n // Start event loop\n void eventLoop();\n }\n\n async function unmount() {\n if (!mounted) return;\n\n running = false;\n\n const n = await loadNative();\n n.restoreTerminal();\n\n if (vueApp) {\n vueApp.unmount();\n vueApp = null;\n }\n\n rootElement = null;\n mounted = false;\n\n if (exitResolve) {\n exitResolve();\n }\n }\n\n async function waitUntilExit(): Promise<void> {\n return new Promise((resolve) => {\n exitResolve = resolve;\n });\n }\n\n function render() {\n if (!native || !mounted || !rootElement) {\n return;\n }\n\n try {\n // Convert Vue tree to render nodes\n const renderNodes = treeToRenderNodes(rootElement);\n\n // Send to native for rendering\n if (renderNodes.length > 0) {\n // Use renderTree which handles layout and painting\n native.renderTree(renderNodes as any);\n\n // Flush to display\n native.flushTerminal();\n }\n } catch (error) {\n if (onError) {\n onError(error as Error);\n } else {\n console.error(\"Render error:\", error);\n }\n }\n }\n\n async function getTerminalInfo() {\n const n = await loadNative();\n const info = n.getTerminalInfo();\n return { width: info.width, height: info.height };\n }\n\n async function eventLoop() {\n const n = await loadNative();\n\n while (running) {\n try {\n const event = n.pollEvent(16); // ~60fps\n\n if (event) {\n // Handle resize\n if (event.eventType === \"resize\") {\n n.syncTerminalSize();\n n.clearScreen();\n needsRender = true;\n }\n\n // Handle Ctrl+C\n if (\n exitOnCtrlC &&\n event.eventType === \"key\" &&\n event.char === \"c\" &&\n event.modifiers?.ctrl\n ) {\n await unmount();\n break;\n }\n\n // Dispatch key events\n if (event.eventType === \"key\") {\n lastKeyEvent.value = {\n type: \"key\",\n key: event.key ?? undefined,\n char: event.char ?? undefined,\n ctrl: event.modifiers?.ctrl ?? false,\n alt: event.modifiers?.alt ?? false,\n shift: event.modifiers?.shift ?? false,\n };\n }\n }\n\n // Render frame if needed\n if (needsRender) {\n render();\n needsRender = false;\n }\n\n // Schedule re-render (Vue reactivity will trigger updates)\n needsRender = true;\n } catch (error) {\n if (onError) {\n onError(error as Error);\n }\n }\n\n // Small delay to prevent busy loop\n await new Promise((resolve) => setTimeout(resolve, 16));\n }\n }\n\n return {\n mount,\n unmount,\n waitUntilExit,\n render,\n getTerminalInfo,\n };\n}\n","/**\n * useInput - Input handling composable\n */\n\nimport { ref, watch, isRef, type Ref } from \"@vue/runtime-core\";\nimport { lastKeyEvent } from \"../app.js\";\n\nexport interface KeyHandler {\n (key: string, modifiers: { ctrl: boolean; alt: boolean; shift: boolean }): void;\n}\n\nexport interface UseInputOptions {\n /** Whether to capture input (boolean or Ref<boolean>) */\n active?: boolean | Ref<boolean>;\n /** Whether to capture input (alias for active, boolean or Ref<boolean>) */\n isActive?: boolean | Ref<boolean>;\n /** Called on key press */\n onKey?: KeyHandler;\n /** Called on character input */\n onChar?: (char: string) => void;\n /** Called on Enter */\n onSubmit?: () => void;\n /** Called on Escape */\n onEscape?: () => void;\n /** Called on arrow keys */\n onArrow?: (direction: \"up\" | \"down\" | \"left\" | \"right\") => void;\n}\n\nexport function useInput(options: UseInputOptions = {}) {\n const {\n active = true,\n isActive: isActiveOption,\n onKey,\n onChar,\n onSubmit,\n onEscape,\n onArrow,\n } = options;\n\n // Support both active and isActive, prefer isActive if both provided\n const activeSource = isActiveOption ?? active;\n const isActive = isRef(activeSource) ? activeSource : ref(activeSource);\n const lastKey = ref<string | null>(null);\n\n // Watch for key events from the app\n watch(lastKeyEvent, (event) => {\n if (!event || !isActive.value) return;\n\n const modifiers = {\n ctrl: event.ctrl,\n alt: event.alt,\n shift: event.shift,\n };\n\n // Character input\n if (event.char) {\n lastKey.value = event.char;\n onChar?.(event.char);\n onKey?.(event.char, modifiers);\n return;\n }\n\n // Special keys\n if (event.key) {\n lastKey.value = event.key;\n onKey?.(event.key, modifiers);\n\n switch (event.key) {\n case \"enter\":\n onSubmit?.();\n break;\n case \"escape\":\n onEscape?.();\n break;\n case \"up\":\n case \"down\":\n case \"left\":\n case \"right\":\n onArrow?.(event.key as \"up\" | \"down\" | \"left\" | \"right\");\n break;\n }\n }\n });\n\n const enable = () => {\n isActive.value = true;\n };\n\n const disable = () => {\n isActive.value = false;\n };\n\n return {\n isActive,\n lastKey,\n enable,\n disable,\n };\n}\n\n/**\n * Shorthand for handling specific key combinations\n */\nexport function useKeyPress(\n key: string,\n handler: () => void,\n options: { ctrl?: boolean; alt?: boolean; shift?: boolean } = {},\n) {\n const { ctrl = false, alt = false, shift = false } = options;\n\n useInput({\n onKey: (pressedKey, modifiers) => {\n const matches =\n pressedKey.toLowerCase() === key.toLowerCase() &&\n modifiers.ctrl === ctrl &&\n modifiers.alt === alt &&\n modifiers.shift === shift;\n\n if (matches) {\n handler();\n }\n },\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useInput-CbggNZUF.mjs","names":["createRenderer","createVueRenderer","createRenderer"],"sources":["../src/renderer.ts","../src/app.ts","../src/composables/useInput.ts"],"sourcesContent":["/**\n * Fresco Vue Custom Renderer\n */\n\nimport {\n createRenderer as createVueRenderer,\n type RendererOptions,\n type RendererNode,\n type RendererElement,\n} from \"@vue/runtime-core\";\n\n/**\n * Fresco node types\n */\nexport interface FrescoNode extends RendererNode {\n id: number;\n type: \"box\" | \"text\" | \"input\" | \"root\";\n props: Record<string, unknown>;\n children: FrescoNode[];\n parent: FrescoNode | null;\n text?: string;\n}\n\n/**\n * Fresco element (extends node)\n */\nexport interface FrescoElement extends FrescoNode, RendererElement {}\n\nlet nextId = 0;\n\nfunction createNode(type: FrescoNode[\"type\"]): FrescoNode {\n return {\n id: nextId++,\n type,\n props: {},\n children: [],\n parent: null,\n };\n}\n\n/**\n * Renderer options for Fresco\n */\nconst rendererOptions: RendererOptions<FrescoNode, FrescoElement> = {\n patchProp(el, key, prevValue, nextValue) {\n el.props[key] = nextValue;\n },\n\n insert(child, parent, anchor) {\n child.parent = parent;\n if (anchor) {\n const index = parent.children.indexOf(anchor);\n if (index !== -1) {\n parent.children.splice(index, 0, child);\n return;\n }\n }\n parent.children.push(child);\n },\n\n remove(child) {\n if (child.parent) {\n const index = child.parent.children.indexOf(child);\n if (index !== -1) {\n child.parent.children.splice(index, 1);\n }\n child.parent = null;\n }\n },\n\n createElement(type) {\n const nodeType = mapElementType(type);\n return createNode(nodeType) as FrescoElement;\n },\n\n createText(text) {\n const node = createNode(\"text\");\n node.text = text;\n return node;\n },\n\n createComment() {\n // Comments are ignored in TUI\n return createNode(\"text\");\n },\n\n setText(node, text) {\n node.text = text;\n },\n\n setElementText(el, text) {\n el.text = text;\n el.children = [];\n },\n\n parentNode(node) {\n return node.parent;\n },\n\n nextSibling(node) {\n if (!node.parent) return null;\n const index = node.parent.children.indexOf(node);\n return node.parent.children[index + 1] || null;\n },\n};\n\n/**\n * Map Vue element types to Fresco node types\n */\nfunction mapElementType(type: string): FrescoNode[\"type\"] {\n switch (type.toLowerCase()) {\n case \"box\":\n case \"div\":\n case \"view\":\n return \"box\";\n case \"text\":\n case \"span\":\n return \"text\";\n case \"input\":\n case \"textinput\":\n return \"input\";\n default:\n return \"box\";\n }\n}\n\n/**\n * Create the Fresco renderer\n */\nexport function createRenderer() {\n return createVueRenderer(rendererOptions);\n}\n\n/**\n * Convert Fresco tree to render nodes for native\n */\nexport function treeToRenderNodes(root: FrescoNode): Array<{\n id: number;\n nodeType: string;\n text?: string;\n wrap?: boolean;\n value?: string;\n placeholder?: string;\n focused?: boolean;\n mask?: boolean;\n style?: Record<string, unknown>;\n appearance?: Record<string, unknown>;\n border?: string;\n children?: number[];\n}> {\n const nodes: Array<{\n id: number;\n nodeType: string;\n text?: string;\n wrap?: boolean;\n value?: string;\n placeholder?: string;\n focused?: boolean;\n mask?: boolean;\n style?: Record<string, unknown>;\n appearance?: Record<string, unknown>;\n border?: string;\n children?: number[];\n }> = [];\n\n function visit(node: FrescoNode) {\n const renderNode: (typeof nodes)[0] = {\n id: node.id,\n nodeType: node.type,\n };\n\n // Extract props\n if (node.text) {\n renderNode.text = node.text;\n }\n if (node.props.wrap !== undefined) {\n renderNode.wrap = Boolean(node.props.wrap);\n }\n if (node.props.value !== undefined) {\n const v = node.props.value;\n renderNode.value = typeof v === \"string\" || typeof v === \"number\" ? String(v) : \"\";\n }\n if (node.props.placeholder !== undefined) {\n const p = node.props.placeholder;\n renderNode.placeholder = typeof p === \"string\" || typeof p === \"number\" ? String(p) : \"\";\n }\n if (node.props.focused !== undefined) {\n renderNode.focused = Boolean(node.props.focused);\n }\n if (node.props.cursor !== undefined) {\n (renderNode as any).cursor = Number(node.props.cursor);\n }\n if (node.props.mask !== undefined) {\n renderNode.mask = Boolean(node.props.mask);\n }\n if (node.props.border !== undefined) {\n const b = node.props.border;\n renderNode.border = typeof b === \"string\" ? b : \"\";\n }\n\n // Extract style - only include defined values\n if (node.props.style) {\n const s = node.props.style as Record<string, unknown>;\n const style: Record<string, unknown> = {};\n\n if (s.display !== undefined) style.display = s.display;\n if (s.flexDirection !== undefined) style.flexDirection = s.flexDirection;\n if (s.flexWrap !== undefined) style.flexWrap = s.flexWrap;\n if (s.justifyContent !== undefined) style.justifyContent = s.justifyContent;\n if (s.alignItems !== undefined) style.alignItems = s.alignItems;\n if (s.alignSelf !== undefined) style.alignSelf = s.alignSelf;\n if (s.alignContent !== undefined) style.alignContent = s.alignContent;\n if (s.flexGrow !== undefined) style.flexGrow = s.flexGrow;\n if (s.flexShrink !== undefined) style.flexShrink = s.flexShrink;\n if (s.width !== undefined && (typeof s.width === \"string\" || typeof s.width === \"number\"))\n style.width = String(s.width);\n if (s.height !== undefined && (typeof s.height === \"string\" || typeof s.height === \"number\"))\n style.height = String(s.height);\n if (\n s.minWidth !== undefined &&\n (typeof s.minWidth === \"string\" || typeof s.minWidth === \"number\")\n )\n style.minWidth = String(s.minWidth);\n if (\n s.minHeight !== undefined &&\n (typeof s.minHeight === \"string\" || typeof s.minHeight === \"number\")\n )\n style.minHeight = String(s.minHeight);\n if (\n s.maxWidth !== undefined &&\n (typeof s.maxWidth === \"string\" || typeof s.maxWidth === \"number\")\n )\n style.maxWidth = String(s.maxWidth);\n if (\n s.maxHeight !== undefined &&\n (typeof s.maxHeight === \"string\" || typeof s.maxHeight === \"number\")\n )\n style.maxHeight = String(s.maxHeight);\n if (s.padding !== undefined) style.padding = s.padding;\n if (s.paddingTop !== undefined) style.paddingTop = s.paddingTop;\n if (s.paddingRight !== undefined) style.paddingRight = s.paddingRight;\n if (s.paddingBottom !== undefined) style.paddingBottom = s.paddingBottom;\n if (s.paddingLeft !== undefined) style.paddingLeft = s.paddingLeft;\n if (s.margin !== undefined) style.margin = s.margin;\n if (s.marginTop !== undefined) style.marginTop = s.marginTop;\n if (s.marginRight !== undefined) style.marginRight = s.marginRight;\n if (s.marginBottom !== undefined) style.marginBottom = s.marginBottom;\n if (s.marginLeft !== undefined) style.marginLeft = s.marginLeft;\n if (s.gap !== undefined) style.gap = s.gap;\n\n renderNode.style = style as any;\n }\n\n // Extract appearance (fg, bg, bold, etc.)\n const appearance: Record<string, unknown> = {};\n if (node.props.fg) appearance.fg = node.props.fg;\n if (node.props.bg) appearance.bg = node.props.bg;\n if (node.props.bold) appearance.bold = node.props.bold;\n if (node.props.dim) appearance.dim = node.props.dim;\n if (node.props.italic) appearance.italic = node.props.italic;\n if (node.props.underline) appearance.underline = node.props.underline;\n if (Object.keys(appearance).length > 0) {\n renderNode.appearance = appearance;\n }\n\n // Children\n if (node.children.length > 0) {\n renderNode.children = node.children.map((c) => c.id);\n }\n\n nodes.push(renderNode);\n\n // Visit children\n for (const child of node.children) {\n visit(child);\n }\n }\n\n visit(root);\n return nodes;\n}\n","/**\n * Fresco App - Application instance management\n */\n\nimport { type Component, type App as VueApp, ref, type Ref } from \"@vue/runtime-core\";\nimport { createRenderer, treeToRenderNodes, type FrescoElement } from \"./renderer.js\";\n\n// Event types\nexport interface KeyEvent {\n type: \"key\";\n key?: string;\n char?: string;\n ctrl: boolean;\n alt: boolean;\n shift: boolean;\n}\n\nexport interface ResizeEvent {\n type: \"resize\";\n width: number;\n height: number;\n}\n\nexport type InputEvent = KeyEvent | ResizeEvent;\n\n// Global event state\nexport const lastKeyEvent: Ref<KeyEvent | null> = ref(null);\n\n// Import native bindings\n// eslint-disable-next-line typescript-eslint/no-redundant-type-constituents -- index.d.ts is not yet generated\nlet native: typeof import(\"@vizejs/fresco-native\") | null = null;\n\nasync function loadNative() {\n if (!native) {\n native = await import(\"@vizejs/fresco-native\");\n }\n return native;\n}\n\n/**\n * App options\n */\nexport interface AppOptions {\n /** Enable mouse support */\n mouse?: boolean;\n /** Exit on Ctrl+C */\n exitOnCtrlC?: boolean;\n /** Custom error handler */\n onError?: (error: Error) => void;\n /** Debug mode - logs render tree */\n debug?: boolean;\n}\n\n/**\n * Fresco App instance\n */\nexport interface App {\n /** Mount the app */\n mount(): Promise<void>;\n /** Unmount the app */\n unmount(): Promise<void>;\n /** Wait for exit */\n waitUntilExit(): Promise<void>;\n /** Render the app */\n render(): void;\n /** Get terminal info */\n getTerminalInfo(): Promise<{ width: number; height: number }>;\n}\n\n/**\n * Create a Fresco TUI app\n */\nexport function createApp(rootComponent: Component, options: AppOptions = {}): App {\n const { mouse = false, exitOnCtrlC = true, onError } = options;\n\n let vueApp: VueApp | null = null;\n let rootElement: FrescoElement | null = null;\n let mounted = false;\n let running = false;\n let exitResolve: (() => void) | null = null;\n let needsRender = true;\n\n const { createApp: createVueApp } = createRenderer();\n\n async function mount() {\n if (mounted) return;\n\n const n = await loadNative();\n\n // Initialize terminal\n if (mouse) {\n n.initTerminalWithMouse();\n } else {\n n.initTerminal();\n }\n\n // Initialize layout engine\n n.initLayout();\n\n // Create Vue app with custom renderer\n const app = createVueApp(rootComponent);\n\n // Create a root element for mounting\n rootElement = {\n id: -1,\n type: \"root\",\n props: {\n style: {\n width: \"100%\",\n height: \"100%\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n alignContent: \"flex-start\",\n },\n },\n children: [],\n parent: null,\n };\n\n app.mount(rootElement);\n vueApp = app;\n\n mounted = true;\n running = true;\n needsRender = true;\n\n // Start event loop\n void eventLoop();\n }\n\n async function unmount() {\n if (!mounted) return;\n\n running = false;\n\n const n = await loadNative();\n n.restoreTerminal();\n\n if (vueApp) {\n vueApp.unmount();\n vueApp = null;\n }\n\n rootElement = null;\n mounted = false;\n\n if (exitResolve) {\n exitResolve();\n }\n }\n\n async function waitUntilExit(): Promise<void> {\n return new Promise((resolve) => {\n exitResolve = resolve;\n });\n }\n\n function render() {\n if (!native || !mounted || !rootElement) {\n return;\n }\n\n try {\n // Convert Vue tree to render nodes\n const renderNodes = treeToRenderNodes(rootElement);\n\n // Send to native for rendering\n if (renderNodes.length > 0) {\n // Use renderTree which handles layout and painting\n native.renderTree(renderNodes as any);\n\n // Flush to display\n native.flushTerminal();\n }\n } catch (error) {\n if (onError) {\n onError(error as Error);\n } else {\n console.error(\"Render error:\", error);\n }\n }\n }\n\n async function getTerminalInfo() {\n const n = await loadNative();\n const info = n.getTerminalInfo();\n return { width: info.width, height: info.height };\n }\n\n async function eventLoop() {\n const n = await loadNative();\n\n while (running) {\n try {\n const event = n.pollEvent(16); // ~60fps\n\n if (event) {\n // Handle resize\n if (event.eventType === \"resize\") {\n n.syncTerminalSize();\n n.clearScreen();\n needsRender = true;\n }\n\n // Handle Ctrl+C\n if (\n exitOnCtrlC &&\n event.eventType === \"key\" &&\n event.char === \"c\" &&\n event.modifiers?.ctrl\n ) {\n await unmount();\n break;\n }\n\n // Dispatch key events\n if (event.eventType === \"key\") {\n lastKeyEvent.value = {\n type: \"key\",\n key: event.key ?? undefined,\n char: event.char ?? undefined,\n ctrl: event.modifiers?.ctrl ?? false,\n alt: event.modifiers?.alt ?? false,\n shift: event.modifiers?.shift ?? false,\n };\n }\n }\n\n // Render frame if needed\n if (needsRender) {\n render();\n needsRender = false;\n }\n\n // Schedule re-render (Vue reactivity will trigger updates)\n needsRender = true;\n } catch (error) {\n if (onError) {\n onError(error as Error);\n }\n }\n\n // Small delay to prevent busy loop\n await new Promise((resolve) => setTimeout(resolve, 16));\n }\n }\n\n return {\n mount,\n unmount,\n waitUntilExit,\n render,\n getTerminalInfo,\n };\n}\n","/**\n * useInput - Input handling composable\n */\n\nimport { ref, watch, isRef, type Ref } from \"@vue/runtime-core\";\nimport { lastKeyEvent } from \"../app.js\";\n\nexport interface KeyHandler {\n (key: string, modifiers: { ctrl: boolean; alt: boolean; shift: boolean }): void;\n}\n\nexport interface UseInputOptions {\n /** Whether to capture input (boolean or Ref<boolean>) */\n active?: boolean | Ref<boolean>;\n /** Whether to capture input (alias for active, boolean or Ref<boolean>) */\n isActive?: boolean | Ref<boolean>;\n /** Called on key press */\n onKey?: KeyHandler;\n /** Called on character input */\n onChar?: (char: string) => void;\n /** Called on Enter */\n onSubmit?: () => void;\n /** Called on Escape */\n onEscape?: () => void;\n /** Called on arrow keys */\n onArrow?: (direction: \"up\" | \"down\" | \"left\" | \"right\") => void;\n}\n\nexport function useInput(options: UseInputOptions = {}) {\n const {\n active = true,\n isActive: isActiveOption,\n onKey,\n onChar,\n onSubmit,\n onEscape,\n onArrow,\n } = options;\n\n // Support both active and isActive, prefer isActive if both provided\n const activeSource = isActiveOption ?? active;\n const isActive = isRef(activeSource) ? activeSource : ref(activeSource);\n const lastKey = ref<string | null>(null);\n\n // Watch for key events from the app\n watch(lastKeyEvent, (event) => {\n if (!event || !isActive.value) return;\n\n const modifiers = {\n ctrl: event.ctrl,\n alt: event.alt,\n shift: event.shift,\n };\n\n // Character input\n if (event.char) {\n lastKey.value = event.char;\n onChar?.(event.char);\n onKey?.(event.char, modifiers);\n return;\n }\n\n // Special keys\n if (event.key) {\n lastKey.value = event.key;\n onKey?.(event.key, modifiers);\n\n switch (event.key) {\n case \"enter\":\n onSubmit?.();\n break;\n case \"escape\":\n onEscape?.();\n break;\n case \"up\":\n case \"down\":\n case \"left\":\n case \"right\":\n onArrow?.(event.key as \"up\" | \"down\" | \"left\" | \"right\");\n break;\n }\n }\n });\n\n const enable = () => {\n isActive.value = true;\n };\n\n const disable = () => {\n isActive.value = false;\n };\n\n return {\n isActive,\n lastKey,\n enable,\n disable,\n };\n}\n\n/**\n * Shorthand for handling specific key combinations\n */\nexport function useKeyPress(\n key: string,\n handler: () => void,\n options: { ctrl?: boolean; alt?: boolean; shift?: boolean } = {},\n) {\n const { ctrl = false, alt = false, shift = false } = options;\n\n useInput({\n onKey: (pressedKey, modifiers) => {\n const matches =\n pressedKey.toLowerCase() === key.toLowerCase() &&\n modifiers.ctrl === ctrl &&\n modifiers.alt === alt &&\n modifiers.shift === shift;\n\n if (matches) {\n handler();\n }\n },\n });\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vizejs/fresco",
3
- "version": "0.77.0",
3
+ "version": "0.81.0",
4
4
  "description": "Vue TUI framework - Build terminal UIs with Vue.js",
5
5
  "keywords": [
6
6
  "cli",
@@ -41,13 +41,13 @@
41
41
  "access": "public"
42
42
  },
43
43
  "dependencies": {
44
- "@vizejs/fresco-native": "0.77.0"
44
+ "@vizejs/fresco-native": "0.81.0"
45
45
  },
46
46
  "devDependencies": {
47
- "@types/node": "25.6.0",
48
- "@vue/runtime-core": "3.5.32",
47
+ "@types/node": "25.7.0",
48
+ "@vue/runtime-core": "3.5.34",
49
49
  "typescript": "6.0.3",
50
- "vite-plus": "0.1.19"
50
+ "vite-plus": "0.1.21"
51
51
  },
52
52
  "peerDependencies": {
53
53
  "@vue/runtime-core": "^3.4.0"