{"version":3,"file":"Checkbox.cjs","names":["_react","require","_i18n","_inputUtils","_OdysseyDesignTokensContext","_Typography","_useUniqueId","_Hint","_jsxRuntime","_interopRequireDefault","e","__esModule","default","checkboxValidityValues","exports","Checkbox","ariaLabel","ariaLabelledBy","id","idOverride","inputRef","isChecked","isDefaultChecked","isDisabled","isIndeterminate","isReadOnly","isRequired","label","labelProp","hint","name","nameOverride","onChange","onChangeProp","onBlur","onBlurProp","testId","translate","validity","value","t","useTranslation","odysseyDesignTokens","useOdysseyDesignTokens","useUniqueId","hintId","undefined","controlledStateRef","useRef","getControlState","controlledValue","uncontrolledValue","inputValues","useMemo","current","ComponentControlledState","CONTROLLED","checked","defaultChecked","localInputRef","useImperativeHandle","focus","jsxs","Fragment","children","jsx","Typography","component","color","useCallback","event","onClick","stopPropagation","preventDefault","checkboxStyles","alignItems","cursor","marginBlockEnd","checkboxInputStyles","marginBlockStart","inputProps","readOnly","_FormControlLabel2","className","control","_Checkbox2","disabled","indeterminate","required","sx","HintContainerWithInlineStartSpacing","_FormHelperText2","MemoizedCheckbox","memo","displayName"],"sources":["../../../src/Fields/Checkbox.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  Checkbox as MuiCheckbox,\n  CheckboxProps as MuiCheckboxProps,\n  FormControlLabelProps as MuiFormControlLabelProps,\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 { CheckedFieldProps } from \"../FormCheckedProps.js\";\nimport { useTranslation } from \"../i18n.generated/i18n.js\";\nimport {\n  ComponentControlledState,\n  FocusHandle,\n  getControlState,\n} 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 const checkboxValidityValues = [\"valid\", \"invalid\", \"inherit\"] as const;\n\nexport type CheckboxProps = {\n  /**\n   * Ref attached to the underlying `<input>` element.\n   */\n  inputRef?: React.RefObject<FocusHandle>;\n  /**\n   * If `true`, the checkbox is in an indeterminate state, displayed as a dash rather than checked or unchecked.\n   */\n  isIndeterminate?: boolean;\n  /**\n   * If `true`, the checkbox is required.\n   */\n  isRequired?: boolean;\n  /**\n   * The label text for the Checkbox\n   */\n  label?: string;\n  /**\n   * Called when the checkbox loses focus.\n   */\n  onBlur?: MuiFormControlLabelProps[\"onBlur\"];\n  /**\n   * The checkbox validity, if different from its enclosing group.\n   * @default \"inherit\"\n   */\n  validity?: (typeof checkboxValidityValues)[number];\n  /**\n   * The value attribute of the Checkbox\n   */\n  value?: string;\n} & Pick<\n  FieldComponentProps,\n  \"hint\" | \"id\" | \"isDisabled\" | \"isReadOnly\" | \"name\"\n> &\n  CheckedFieldProps<MuiCheckboxProps> &\n  Pick<HtmlProps, \"ariaLabel\" | \"ariaLabelledBy\" | \"testId\" | \"translate\">;\n\n/**\n * A single checkbox input that allows a user to select or deselect a binary option. Use within a CheckboxGroup for grouped selections, or standalone for independent boolean choices.\n */\nconst Checkbox = ({\n  ariaLabel,\n  ariaLabelledBy,\n  id: idOverride,\n  inputRef,\n  isChecked,\n  isDefaultChecked,\n  isDisabled,\n  isIndeterminate,\n  isReadOnly = false,\n  isRequired,\n  label: labelProp,\n  hint,\n  name: nameOverride,\n  onChange: onChangeProp,\n  onBlur: onBlurProp,\n  testId,\n  translate,\n  validity = \"inherit\",\n  value,\n}: CheckboxProps) => {\n  const { t } = useTranslation();\n  const odysseyDesignTokens = useOdysseyDesignTokens();\n  const id = useUniqueId(idOverride);\n  const hintId = hint ? `${id}-hint` : undefined;\n\n  const controlledStateRef = useRef(\n    getControlState({\n      controlledValue: isChecked,\n      uncontrolledValue: isDefaultChecked,\n    }),\n  );\n  const inputValues = useMemo(() => {\n    if (controlledStateRef.current === ComponentControlledState.CONTROLLED) {\n      return { checked: isChecked };\n    }\n    return { defaultChecked: isDefaultChecked };\n  }, [isDefaultChecked, isChecked]);\n\n  const localInputRef = useRef<HTMLInputElement>(null);\n  useImperativeHandle(\n    inputRef,\n    () => ({\n      focus: () => {\n        localInputRef.current?.focus();\n      },\n    }),\n    [],\n  );\n\n  const label = useMemo(() => {\n    return (\n      <>\n        <Typography component=\"span\">{labelProp}</Typography>\n        {isRequired && (\n          <>\n            {\" \"}\n            <Typography color=\"textSecondary\" component=\"span\">\n              ({t(\"fieldlabel.required.text\")})\n            </Typography>\n          </>\n        )}\n      </>\n    );\n  }, [isRequired, labelProp, t]);\n\n  const onChange = useCallback<NonNullable<MuiCheckboxProps[\"onChange\"]>>(\n    (event, checked) => {\n      onChangeProp?.(event, checked);\n    },\n    [onChangeProp],\n  );\n\n  const onClick = useCallback<NonNullable<MuiCheckboxProps[\"onClick\"]>>(\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 checkboxStyles = useMemo(\n    () => ({\n      alignItems: \"flex-start\",\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  // TODO: Is there a better way to handle these styles? Why pixels? Isn't this tying Checkbox to the label's font size? -Kevin\n  const checkboxInputStyles = useMemo(\n    () => ({\n      marginBlockStart: \"2px\",\n    }),\n    [],\n  );\n\n  const inputProps = useMemo<InputHTMLAttributes<HTMLInputElement>>(\n    () => ({\n      \"aria-describedby\": hintId,\n      \"aria-readonly\": isReadOnly,\n      \"data-se\": testId,\n      readOnly: isReadOnly,\n    }),\n    [hintId, isReadOnly, testId],\n  );\n\n  return (\n    <>\n      <FormControlLabel\n        aria-label={ariaLabel}\n        aria-labelledby={ariaLabelledBy}\n        className={\n          validity === \"invalid\"\n            ? \"Mui-error\"\n            : validity === \"valid\"\n              ? \"Mui-valid\"\n              : \"\"\n        }\n        control={\n          <MuiCheckbox\n            {...inputValues}\n            disabled={isDisabled}\n            indeterminate={isIndeterminate}\n            inputProps={inputProps}\n            inputRef={localInputRef}\n            onChange={onChange}\n            onClick={onClick}\n            required={isRequired}\n            sx={checkboxInputStyles}\n          />\n        }\n        disabled={isDisabled}\n        id={idOverride}\n        label={label}\n        name={nameOverride ?? idOverride}\n        onBlur={onBlur}\n        required={isRequired}\n        sx={checkboxStyles}\n        translate={translate}\n        value={value}\n      />\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 MemoizedCheckbox = memo(Checkbox);\nMemoizedCheckbox.displayName = \"Checkbox\";\n\nexport { MemoizedCheckbox as Checkbox };\n"],"mappings":"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","ignoreList":[]}