{"version":3,"sources":["../src/components/Checkbox/shimCheckboxProps.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport type { ICheckboxProps } from '@fluentui/react';\nimport type { CheckboxProps, CheckboxOnChangeData } from '@fluentui/react-components';\nimport { useControllableValue } from '@fluentui/react-hooks';\nimport { getHTMLAttributes } from '../utils';\n\n// https://react.fluentui.dev/?path=/docs/concepts-migration-from-v8-components-checkbox-migration--docs [Link of the fluent v9 migration guide]\n// https://github.com/microsoft/fluentui/blob/master/packages/react/src/components/Checkbox/Checkbox.types.ts [Link of the fluent v8 checkbox types definition]\n// https://github.com/microsoft/fluentui/blob/103b8977f8d5f8dd8c430bab46ff5308a2c76371/packages/react-components/react-checkbox/src/components/Checkbox/Checkbox.types.ts [Link of the fluent v9 checkbox types definition]\n\nconst CHECKBOX_PROPS_V8: Set<string> = new Set([\n  'ariaDescribedBy',\n  'ariaLabel',\n  'ariaLabelledBy',\n  'ariaPositionInSet',\n  'ariaSetSize',\n  'boxSide',\n  'checked',\n  'checkmarkIconProps', // one case used this\n  'className',\n  'componentRef',\n  'defaultChecked',\n  'defaultIndeterminate',\n  'disabled',\n  'indeterminate',\n  'inputProps',\n  'label',\n  'name',\n  'onChange',\n  'onRenderLabel',\n  'required',\n  'styles',\n  'theme',\n  'title',\n]);\n\nexport const useCheckboxProps = (props: ICheckboxProps): CheckboxProps => {\n  const {\n    ariaDescribedBy,\n    ariaLabel,\n    ariaLabelledBy,\n    ariaPositionInSet,\n    ariaSetSize,\n    boxSide,\n    checked: checkedV8,\n    indeterminate,\n    defaultChecked,\n    defaultIndeterminate,\n    disabled,\n    inputProps,\n    name,\n    required,\n    title,\n    onChange: onChangeV8,\n  } = props;\n\n  const [checked, setChecked] = useControllableValue(checkedV8, defaultChecked);\n  const [mixed, setMixed] = React.useState(indeterminate || defaultIndeterminate);\n\n  const onChange = React.useCallback(\n    (event: React.ChangeEvent<HTMLElement>, data: CheckboxOnChangeData): void => {\n      let val: boolean | undefined = checked !== undefined ? (data.checked as boolean) : undefined;\n      // Ensure the checkbox is controlled\n      if (checked !== undefined) {\n        if (mixed) {\n          val = checkedV8 !== undefined ? checkedV8 : defaultChecked !== undefined ? defaultChecked : val;\n        }\n      }\n\n      if (mixed) {\n        setMixed(mixed && !indeterminate ? false : mixed);\n      }\n\n      setChecked(val);\n      onChangeV8?.(event, data.checked as boolean);\n    },\n    [setChecked, checked, onChangeV8, mixed, indeterminate, checkedV8, defaultChecked],\n  );\n\n  const v9Props: Partial<CheckboxProps> = {\n    checked: mixed ? 'mixed' : checked,\n    defaultChecked: mixed ? 'mixed' : defaultChecked,\n    labelPosition: boxSide === 'end' ? 'before' : 'after',\n    disabled,\n    required,\n    title,\n    name,\n    onChange,\n  };\n\n  return {\n    ...inputProps, // This inputProps is specific for the input element, and the html attributes are also used here instead of props.\n    'aria-describedby': ariaDescribedBy,\n    'aria-label': ariaLabel,\n    'aria-labelledby': ariaLabelledBy,\n    'aria-posinset': ariaPositionInSet,\n    'aria-setsize': ariaSetSize,\n    ...v9Props,\n    ...getHTMLAttributes(props, CHECKBOX_PROPS_V8),\n  } as CheckboxProps;\n};\n"],"names":["React","useControllableValue","getHTMLAttributes","CHECKBOX_PROPS_V8","Set","useCheckboxProps","props","ariaDescribedBy","ariaLabel","ariaLabelledBy","ariaPositionInSet","ariaSetSize","boxSide","checked","checkedV8","indeterminate","defaultChecked","defaultIndeterminate","disabled","inputProps","name","required","title","onChange","onChangeV8","setChecked","mixed","setMixed","useState","useCallback","event","data","val","undefined","v9Props","labelPosition"],"mappings":"AAAA;;;;;;;;eAuCaK;;;;iEArCU,QAAQ;4BAIM,wBAAwB;uBAC3B,cAAW;AAE7C,gJAAgJ;AAChJ,+JAA+J;AAC/J,2NAA2N;AAE3N,MAAMF,oBAAiC,IAAIC,IAAI;IAC7C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAEM,yBAAyB,CAACE;IAC/B,MAAM,EACJC,eAAe,EACfC,SAAS,EACTC,cAAc,EACdC,iBAAiB,EACjBC,WAAW,EACXC,OAAO,EACPC,SAASC,SAAS,EAClBC,aAAa,EACbC,cAAc,EACdC,oBAAoB,EACpBC,QAAQ,EACRC,UAAU,EACVC,IAAI,EACJC,QAAQ,EACRC,KAAK,EACLC,UAAUC,UAAU,EACrB,GAAGlB;IAEJ,MAAM,CAACO,SAASY,WAAW,OAAGxB,gCAAAA,EAAqBa,WAAWE;IAC9D,MAAM,CAACU,OAAOC,SAAS,GAAG3B,OAAM4B,QAAQ,CAACb,iBAAiBE;IAE1D,MAAMM,WAAWvB,OAAM6B,WAAW,CAChC,CAACC,OAAuCC;QACtC,IAAIC,MAA2BnB,YAAYoB,YAAaF,KAAKlB,OAAO,GAAeoB;QACnF,oCAAoC;QACpC,IAAIpB,YAAYoB,WAAW;YACzB,IAAIP,OAAO;gBACTM,MAAMlB,cAAcmB,YAAYnB,YAAYE,mBAAmBiB,YAAYjB,iBAAiBgB;YAC9F;QACF;QAEA,IAAIN,OAAO;YACTC,SAASD,SAAS,CAACX,gBAAgB,QAAQW;QAC7C;QAEAD,WAAWO;QACXR,eAAAA,QAAAA,eAAAA,KAAAA,IAAAA,KAAAA,IAAAA,WAAaM,OAAOC,KAAKlB,OAAO;IAClC,GACA;QAACY;QAAYZ;QAASW;QAAYE;QAAOX;QAAeD;QAAWE;KAAe;IAGpF,MAAMkB,UAAkC;QACtCrB,SAASa,QAAQ,UAAUb;QAC3BG,gBAAgBU,QAAQ,UAAUV;QAClCmB,eAAevB,YAAY,QAAQ,WAAW;QAC9CM;QACAG;QACAC;QACAF;QACAG;IACF;IAEA,OAAO;QACL,GAAGJ,UAAU;QACb,oBAAoBZ;QACpB,cAAcC;QACd,mBAAmBC;QACnB,iBAAiBC;QACjB,gBAAgBC;QAChB,GAAGuB,OAAO;QACV,OAAGhC,wBAAAA,EAAkBI,OAAOH,kBAAkB;IAChD;AACF,EAAE"}