{"record":{"id":"9a7c61e025fb8ba1","repo":"reflex-dev/reflex","slug":"f-invalid-variant-variant-available-variants-9a7c61","errorCode":null,"errorMessage":"f\"Invalid variant: {variant}. Available variants: {available_variants}\"","messagePattern":"f\"Invalid variant: (.+?)\\. Available variants: (.+?)\"","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/reflex-components-internal/src/reflex_components_internal/components/base/link.py","lineNumber":95,"sourceCode":"            class_name = cn(\n                f\"{ClassNames.ROOT} {size_class} {variant_class}\", link_class_name\n            )\n\n        if show_icon:\n            children.append(hi(\"LinkSquare02Icon\", class_name=ClassNames.ICON))\n\n        props[\"class_name\"] = class_name\n        return super().create(*children, **props)\n\n    @staticmethod\n    def validate_variant(variant: LiteralLinkVariant):\n        \"\"\"Validate the link variant.\"\"\"\n        if variant not in LINK_VARIANTS[\"variant\"]:\n            available_variants = \", \".join(LINK_VARIANTS[\"variant\"].keys())\n            message = (\n                f\"Invalid variant: {variant}. Available variants: {available_variants}\"\n            )\n            raise ValueError(message)\n\n    @staticmethod\n    def validate_size(size: LiteralLinkSize):\n        \"\"\"Validate the link size.\"\"\"\n        if size not in LINK_VARIANTS[\"size\"]:\n            available_sizes = \", \".join(LINK_VARIANTS[\"size\"].keys())\n            message = f\"Invalid size: {size}. Available sizes: {available_sizes}\"\n            raise ValueError(message)\n\n    def _exclude_props(self) -> list[str]:\n        return [*super()._exclude_props(), \"size\", \"variant\", \"show_icon\", \"render_\"]\n\n\nlink = Link.create\n","sourceCodeStart":77,"sourceCodeEnd":110,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-components-internal/src/reflex_components_internal/components/base/link.py#L77-L110","documentation":"Link validates its variant the same way Button does; only variants registered in LINK_VARIANTS (classic, solid, soft, surface, outline, ghost) are accepted.","triggerScenarios":"rx.link(\"docs\", href=\"#\", variant=\"underline\") or any Chakra-era variant like \"unstyled\".","commonSituations":"Migrating from reflex.components.radix or Chakra links; copying variant names from other component libraries.","solutions":["Use a variant listed in the error (e.g. \"solid\", \"soft\", \"outline\")","Drop variant and style via css/class_name for effects like underline","Map legacy names during migration"],"exampleFix":"# before\nrx.link(\"Home\", href=\"/\", variant=\"unstyled\")\n# after\nrx.link(\"Home\", href=\"/\", variant=\"ghost\")","handlingStrategy":"validation","validationCode":"from reflex_components_internal.components.base.link import LINK_VARIANTS\nif variant not in LINK_VARIANTS['variant']:\n    variant = 'ghost'","typeGuard":"def is_valid_link_variant(v: str) -> TypeGuard[str]:\n    from reflex_components_internal.components.base.link import LINK_VARIANTS\n    return v in LINK_VARIANTS['variant']","tryCatchPattern":null,"preventionTips":["Use listed link variants only","Use css/class_name for effects like underline"],"tags":["reflex","link","variant"],"backgroundTag":"invalid-enum-value","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}