{"version":3,"file":"Radio.cjs","names":["_react","require","_OdysseyDesignTokensContext","_Typography","_useUniqueId","_Hint","_jsxRuntime","_interopRequireDefault","e","__esModule","default","Radio","hint","id","idOverride","inputRef","isChecked","isDisabled","isInvalid","label","labelProp","name","testId","translate","value","isReadOnly","onChange","onChangeProp","onBlur","onBlurProp","onClick","localInputRef","useRef","odysseyDesignTokens","useOdysseyDesignTokens","useUniqueId","hintId","undefined","useImperativeHandle","focus","current","useMemo","jsx","Typography","component","children","useCallback","event","checked","preventDefault","handleClick","stopPropagation","radioStyles","cursor","marginBlockEnd","inputProps","readOnly","tabIndex","jsxs","Fragment","_FormControlLabel2","className","control","_Radio2","disabled","sx","HintContainerWithInlineStartSpacing","_FormHelperText2","MemoizedRadio","exports","memo","displayName"],"sources":["../../../src/Fields/Radio.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n  FormControlLabel,\n  FormHelperText,\n  FormControlLabelProps as MuiFormControlLabelProps,\n  Radio as MuiRadio,\n  RadioProps as MuiRadioProps,\n} from \"@mui/material\";\nimport {\n  InputHTMLAttributes,\n  memo,\n  useCallback,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n} from \"react\";\n\nimport type { HtmlProps } from \"../HtmlProps.js\";\n\nimport { FieldComponentProps } from \"../FieldComponentProps.js\";\nimport { FocusHandle } from \"../inputUtils.js\";\nimport { useOdysseyDesignTokens } from \"../OdysseyDesignTokensContext.js\";\nimport { Typography } from \"../Typography.js\";\nimport { useUniqueId } from \"../useUniqueId.js\";\nimport { HintContainerWithInlineStartSpacing } from \"./Hint.js\";\n\nexport type RadioProps = {\n  /**\n   * Ref attached to the underlying `<input>` element.\n   */\n  inputRef?: React.RefObject<FocusHandle>;\n  /**\n   * If `true`, the radio button is checked.\n   */\n  isChecked?: boolean;\n  /**\n   * If `true`, the radio button has an invalid value.\n   */\n  isInvalid?: boolean;\n  /**\n   * The label text for the Radio\n   */\n  label: string;\n  /** Called when the radio button loses focus. */\n  onBlur?: MuiFormControlLabelProps[\"onBlur\"];\n  /**\n   * Called when the radio selection changes.\n   */\n  onChange?: MuiRadioProps[\"onChange\"];\n  /** Called when the radio button is clicked. */\n  onClick?: React.MouseEventHandler<HTMLSpanElement>;\n  /**\n   * The value attribute of the Radio\n   */\n  value: string;\n} & Pick<\n  FieldComponentProps,\n  \"hint\" | \"id\" | \"isDisabled\" | \"isReadOnly\" | \"name\"\n> &\n  Pick<HtmlProps, \"testId\" | \"translate\">;\n\n/**\n * A single radio button used within a RadioGroup.\n * Renders a labeled, optionally hinted radio input that supports read-only and disabled states.\n */\nconst Radio = ({\n  hint,\n  id: idOverride,\n  inputRef,\n  isChecked,\n  isDisabled,\n  isInvalid,\n  label: labelProp,\n  name,\n  testId,\n  translate,\n  value,\n  isReadOnly,\n  onChange: onChangeProp,\n  onBlur: onBlurProp,\n  onClick,\n}: RadioProps) => {\n  const localInputRef = useRef<HTMLInputElement>(null);\n  const odysseyDesignTokens = useOdysseyDesignTokens();\n  const id = useUniqueId(idOverride);\n  const hintId = hint ? `${id}-hint` : undefined;\n\n  useImperativeHandle(inputRef, () => {\n    return {\n      focus: () => {\n        localInputRef.current?.focus();\n      },\n    };\n  }, []);\n\n  const label = useMemo(\n    () => <Typography component=\"span\">{labelProp}</Typography>,\n    [labelProp],\n  );\n\n  const onChange = useCallback<NonNullable<MuiRadioProps[\"onChange\"]>>(\n    (event, checked) => {\n      if (isReadOnly) {\n        event.preventDefault();\n      } else {\n        onChangeProp?.(event, checked);\n      }\n    },\n    [onChangeProp, isReadOnly],\n  );\n\n  const handleClick = useCallback<React.MouseEventHandler<HTMLSpanElement>>(\n    (event) => {\n      if (isReadOnly) {\n        event.stopPropagation();\n        event.preventDefault();\n      }\n    },\n    [isReadOnly],\n  );\n\n  const onBlur = useCallback<NonNullable<MuiFormControlLabelProps[\"onBlur\"]>>(\n    (event) => {\n      onBlurProp?.(event);\n    },\n    [onBlurProp],\n  );\n\n  const radioStyles = useMemo(\n    () => ({\n      ...(isReadOnly && {\n        cursor: \"default\",\n        \"& .MuiTypography-root\": {\n          cursor: \"default\",\n        } as CSSStyleDeclaration,\n      }),\n\n      ...(hint && {\n        // needed to override specific :not(:last-child) selector\n        \":not(:last-child)\": {\n          marginBlockEnd: \"0\",\n        } as CSSStyleDeclaration,\n      }),\n    }),\n    [hint, isReadOnly],\n  );\n\n  const inputProps = useMemo<InputHTMLAttributes<HTMLInputElement>>(\n    () => ({\n      \"aria-describedby\": hintId,\n      \"aria-disabled\": isDisabled,\n      \"data-se\": testId,\n      readOnly: isReadOnly,\n      tabIndex: isReadOnly ? 0 : undefined,\n    }),\n    [hintId, isDisabled, isReadOnly, testId],\n  );\n\n  return (\n    <>\n      <FormControlLabel\n        checked={isChecked}\n        className={isInvalid ? \"Mui-error\" : \"\"}\n        control={\n          <MuiRadio\n            disabled={isDisabled}\n            inputProps={inputProps}\n            inputRef={localInputRef}\n            onChange={onChange}\n            onClick={onClick || handleClick}\n          />\n        }\n        disabled={isDisabled}\n        label={label}\n        name={name}\n        onBlur={onBlur}\n        sx={radioStyles}\n        translate={translate}\n        value={value}\n      />\n      {hint && (\n        <HintContainerWithInlineStartSpacing\n          odysseyDesignTokens={odysseyDesignTokens}\n        >\n          <FormHelperText id={hintId} translate={translate}>\n            {hint}\n          </FormHelperText>\n        </HintContainerWithInlineStartSpacing>\n      )}\n    </>\n  );\n};\n\nconst MemoizedRadio = memo(Radio);\nMemoizedRadio.displayName = \"Radio\";\n\nexport { MemoizedRadio as Radio };\n"],"mappings":"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","ignoreList":[]}