{"repo": "1797127235/lumen", "files": {"channels/cli/cmd/tui/component/dialog-retry-action.tsx": {"d0d9e419d79c83986a9971e342620dfb35886041": {"t": 1785596383.6518416, "n": 5252, "h": "98726b24714c4c69", "c": "import { RGBA, TextAttributes } from \"@opentui/core\"\nimport open from \"open\"\nimport { createSignal } from \"solid-js\"\nimport { selectedForeground, useTheme } from \"@tui/context/theme\"\nimport { useDialog, type DialogContext } from \"@tui/ui/dialog\"\nimport { Link } from \"@tui/ui/link\"\nimport { BgPulse } from \"./bg-pulse\"\nimport { useBindings } from \"../keymap\"\n\nconst GO_URL = \"https://opencode.ai/go\"\nconst PAD_X = 3\nconst PAD_TOP_OUTER = 1\nconst FOREGROUND_ALPHA = 186\n\nexport type DialogRetryActionProps = {\n title: string\n message: string\n label: string\n link?: string\n onClose?: (dontShowAgain?: boolean) => void\n}\n\nfunction runAction(props: DialogRetryActionProps, dialog: ReturnType) {\n if (props.link) open(props.link).catch(() => {})\n props.onClose?.()\n dialog.clear()\n}\n\nfunction dismiss(props: DialogRetryActionProps, dialog: ReturnType) {\n props.onClose?.(true)\n dialog.clear()\n}\n\nfunction panelOverlay(color: RGBA) {\n const [r, g, b] = color.toInts()\n return RGBA.fromInts(r, g, b, FOREGROUND_ALPHA)\n}\n\nexport function DialogRetryAction(props: DialogRetryActionProps) {\n const dialog = useDialog()\n const { theme } = useTheme()\n const fg = selectedForeground(theme)\n const showGoTreatment = () => props.link === GO_URL\n const textBg = () => (showGoTreatment() ? panelOverlay(theme.backgroundPanel) : undefined)\n const [selected, setSelected] = createSignal<\"dismiss\" | \"action\">(\"action\")\n\n useBindings(() => ({\n bindings: [\n {\n key: \"left\",\n desc: \"Previous retry option\",\n group: \"Dialog\",\n cmd: () => setSelected((value) => (value === \"action\" ? \"dismiss\" : \"action\")),\n },\n {\n key: \"right\",\n desc: \"Next retry option\",\n group: \"Dialog\",\n cmd: () => setSelected((value) => (value === \"action\" ? \"dismiss\" : \"action\")),\n },\n {\n key: \"tab\",\n desc: \"Next retry option\",\n group: \"Dialog\",\n cmd: () => setSelected((value) => (value === \"action\" ? \"dismiss\" : \"action\")),\n },\n {\n key: \"return\",\n desc: \"Confirm retry option\",\n group: \"Dialog\",\n cmd: () => {\n if (selected() === \"action\") runAction(props, dialog)\n else dismiss(props, dialog)\n },\n },\n ],\n }))\n\n return (\n \n {showGoTreatment() ? (\n \n \n \n ) : null}\n \n \n \n {props.title}\n \n dialog.clear()}>\n esc\n \n \n \n \n {props.message}\n \n \n {props.link ? (\n showGoTreatment() ? (\n \n \n \n ) : (\n \n \n \n )\n ) : (\n \n )}\n \n setSelected(\"dismiss\")}\n onMouseUp={() => dismiss(props, dialog)}\n >\n \n don't show again\n \n \n setSelected(\"action\")}\n onMouseUp={() => runAction(props, dialog)}\n >\n \n {props.label}\n \n \n \n \n \n )\n}\n\nDialogRetryAction.show = (\n dialog: DialogContext,\n props: Pick,\n) => {\n return new Promise((resolve) => {\n dialog.replace(\n () => resolve(dontShow ?? false)} />,\n () => resolve(false),\n )\n })\n}\n"}}}}