{"ast":null,"code":"import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nvar _excluded = [\"nativeID\", \"isRequired\", \"isInvalid\", \"isDisabled\", \"isReadOnly\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nimport React from 'react';\nimport { useId } from '@react-native-aria/utils';\nimport omit from 'lodash.omit';\nimport { ariaAttr } from \"../../../utils\";\nimport { uniqueId } from 'lodash';\nimport { useNativeBaseConfig } from \"../../../core/NativeBaseContext\";\nexport var FormControlContext = React.createContext({});\nexport function useFormControlProvider(props) {\n  var idProp = props.nativeID,\n    isRequired = props.isRequired,\n    isInvalid = props.isInvalid,\n    isDisabled = props.isDisabled,\n    isReadOnly = props.isReadOnly,\n    htmlProps = _objectWithoutProperties(props, _excluded);\n  var id = uniqueId();\n  var isSSR = useNativeBaseConfig('NativeBase').isSSR;\n  var disableCSSMediaQueries = !isSSR;\n  if (!disableCSSMediaQueries) {\n    id = useId();\n  }\n  var nativeID = idProp || \"field-\".concat(id);\n  var labelId = \"\".concat(nativeID, \"-label\");\n  var feedbackId = \"\".concat(nativeID, \"-feedback\");\n  var helpTextId = \"\".concat(nativeID, \"-helptext\");\n  var _React$useState = React.useState(false),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    hasFeedbackText = _React$useState2[0],\n    setHasFeedbackText = _React$useState2[1];\n  var _React$useState3 = React.useState(false),\n    _React$useState4 = _slicedToArray(_React$useState3, 2),\n    hasHelpText = _React$useState4[0],\n    setHasHelpText = _React$useState4[1];\n  var context = React.useMemo(function () {\n    return {\n      isRequired: !!isRequired,\n      isInvalid: !!isInvalid,\n      isReadOnly: !!isReadOnly,\n      isDisabled: !!isDisabled,\n      hasFeedbackText: hasFeedbackText,\n      setHasFeedbackText: setHasFeedbackText,\n      hasHelpText: hasHelpText,\n      setHasHelpText: setHasHelpText,\n      nativeID: nativeID,\n      labelId: labelId,\n      feedbackId: feedbackId,\n      helpTextId: helpTextId,\n      htmlProps: htmlProps\n    };\n  }, [feedbackId, hasFeedbackText, hasHelpText, helpTextId, htmlProps, isDisabled, isInvalid, isReadOnly, isRequired, labelId, nativeID]);\n  return context;\n}\nexport function useFormControl(props) {\n  var field = useFormControlContext();\n  var describedBy = [];\n  if (field !== null && field !== void 0 && field.hasFeedbackText) describedBy.push(field === null || field === void 0 ? void 0 : field.feedbackId);\n  if (field !== null && field !== void 0 && field.hasHelpText) describedBy.push(field === null || field === void 0 ? void 0 : field.helpTextId);\n  var ariaDescribedBy = describedBy.join(' ');\n  var cleanProps = omit(props, ['isInvalid', 'isDisabled', 'isReadOnly', 'isRequired']);\n  var nativeID = props === null || props === void 0 ? void 0 : props.nativeID;\n  if (!nativeID && field !== null && field !== void 0 && field.nativeID) {\n    nativeID = \"\".concat(field === null || field === void 0 ? void 0 : field.nativeID, \"-input\");\n  }\n  return _objectSpread(_objectSpread({}, cleanProps), {}, {\n    nativeID: nativeID,\n    disabled: props.isDisabled || (field === null || field === void 0 ? void 0 : field.isDisabled),\n    readOnly: props.isReadOnly || (field === null || field === void 0 ? void 0 : field.isReadOnly),\n    required: props.isRequired || (field === null || field === void 0 ? void 0 : field.isRequired),\n    accessibilityInvalid: ariaAttr(props.isInvalid || (field === null || field === void 0 ? void 0 : field.isInvalid)),\n    accessibilityRequired: ariaAttr(props.isRequired || (field === null || field === void 0 ? void 0 : field.isRequired)),\n    accessibilityReadOnly: ariaAttr(props.isReadOnly || (field === null || field === void 0 ? void 0 : field.isReadOnly)),\n    accessibilityDescribedBy: ariaDescribedBy || undefined\n  });\n}\nexport var useFormControlContext = function useFormControlContext() {\n  return React.useContext(FormControlContext);\n};","map":{"version":3,"sources":["useFormControl.tsx"],"names":["React","useId","omit","ariaAttr","uniqueId","useNativeBaseConfig","FormControlContext","createContext","useFormControlProvider","props","nativeID","idProp","isRequired","isInvalid","isDisabled","isReadOnly","htmlProps","id","isSSR","disableCSSMediaQueries","labelId","feedbackId","helpTextId","hasFeedbackText","setHasFeedbackText","useState","hasHelpText","setHasHelpText","context","useMemo","useFormControl","field","useFormControlContext","describedBy","push","ariaDescribedBy","join","cleanProps","disabled","readOnly","required","accessibilityInvalid","accessibilityRequired","accessibilityReadOnly","accessibilityDescribedBy","undefined","useContext"],"mappings":";;;;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,KAAT,QAAsB,0BAAtB;AACA,OAAOC,IAAP,MAAiB,aAAjB;AAEA,SAASC,QAAT;AACA,SAASC,QAAT,QAAyB,QAAzB;AACA,SAASC,mBAAT;AAOA,OAAO,IAAMC,kBAAkB,GAAGN,KAAK,CAACO,aAANP,CAAoB,CAAA,CAApBA,CAA3B;AAEP,OAAO,SAASQ,sBAAT,CAAgCC,KAAhC,EAA0D;EAC/D,IACYE,MADN,GAOFF,KAPJ,CACEC,QAAQ;IACRE,UAFI,GAOFH,KAPJ,CAEEG,UAFI;IAGJC,SAHI,GAOFJ,KAPJ,CAGEI,SAHI;IAIJC,UAJI,GAOFL,KAPJ,CAIEK,UAJI;IAKJC,UALI,GAOFN,KAPJ,CAKEM,UALI;IAMDC,SAAAA,GAAAA,wBAAAA,CACDP,KAPJ,EAAA,SAAA;EASA,IAAIQ,EAAE,GAAGb,QAAQ,CAAA,CAAjB;EACA,IAAMc,KAAK,GAAGb,mBAAmB,CAAC,YAAD,CAAnBA,CAAkCa,KAAhD;EACA,IAAMC,sBAAsB,GAAG,CAACD,KAAhC;EAEA,IAAI,CAACC,sBAAL,EAA6B;IAI3BF,EAAE,GAAGhB,KAAK,CAAA,CAAVgB;EAlB6D;EAuB/D,IAAMP,QAAQ,GAAGC,MAAM,IAAA,QAAA,CAAA,MAAA,CAAaM,EAAb,CAAvB;EAEA,IAAMG,OAAO,GAAA,EAAA,CAAA,MAAA,CAAMV,QAAN,EAAA,QAAA,CAAb;EACA,IAAMW,UAAU,GAAA,EAAA,CAAA,MAAA,CAAMX,QAAN,EAAA,WAAA,CAAhB;EACA,IAAMY,UAAU,GAAA,EAAA,CAAA,MAAA,CAAMZ,QAAN,EAAA,WAAA,CAAhB;EAMA,IAAA,eAAA,GAA8CV,KAAK,CAACyB,QAANzB,CAAe,KAAfA,CAA9C;IAAA,gBAAA,GAAA,cAAA,CAAA,eAAA;IAAOuB,eAAD,GAAA,gBAAA;IAAkBC,kBAAlB,GAAA,gBAAA;EAMN,IAAA,gBAAA,GAAsCxB,KAAK,CAACyB,QAANzB,CAAe,KAAfA,CAAtC;IAAA,gBAAA,GAAA,cAAA,CAAA,gBAAA;IAAO0B,WAAD,GAAA,gBAAA;IAAcC,cAAd,GAAA,gBAAA;EAEN,IAAMC,OAAO,GAAG,KAAK,CAACC,OAAN,CAAc,YAAM;IAClC,OAAO;MACLjB,UAAU,EAAE,CAAC,CAACA,UADT;MAELC,SAAS,EAAE,CAAC,CAACA,SAFR;MAGLE,UAAU,EAAE,CAAC,CAACA,UAHT;MAILD,UAAU,EAAE,CAAC,CAACA,UAJT;MAKLS,eALK,EAKLA,eALK;MAMLC,kBANK,EAMLA,kBANK;MAOLE,WAPK,EAOLA,WAPK;MAQLC,cARK,EAQLA,cARK;MASLjB,QATK,EASLA,QATK;MAULU,OAVK,EAULA,OAVK;MAWLC,UAXK,EAWLA,UAXK;MAYLC,UAZK,EAYLA,UAZK;MAaLN,SAAAA,EAAAA;IAbK,CAAP;EAeD,CAhBe,EAgBb,CACDK,UADC,EAEDE,eAFC,EAGDG,WAHC,EAIDJ,UAJC,EAKDN,SALC,EAMDF,UANC,EAODD,SAPC,EAQDE,UARC,EASDH,UATC,EAUDQ,OAVC,EAWDV,QAXC,CAhBa,CAAhB;EA8BA,OAAOkB,OAAP;AACD;AASD,OAAO,SAASE,cAAT,CAAwBrB,KAAxB,EAAkD;EACvD,IAAMsB,KAAK,GAAGC,qBAAqB,CAAA,CAAnC;EACA,IAAMC,WAAkB,GAAG,EAF4B;EAKvD,IAAIF,KAAJ,KAAA,IAAA,IAAIA,KAAJ,KAAA,KAAA,CAAA,IAAIA,KAAK,CAAER,eAAX,EAA4BU,WAAW,CAACC,IAAZD,CAAiBF,KAAjBE,KAAAA,IAAAA,IAAiBF,KAAjBE,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAiBF,KAAK,CAAEV,UAAxBY,CAAAA;EAC5B,IAAIF,KAAJ,KAAA,IAAA,IAAIA,KAAJ,KAAA,KAAA,CAAA,IAAIA,KAAK,CAAEL,WAAX,EAAwBO,WAAW,CAACC,IAAZD,CAAiBF,KAAjBE,KAAAA,IAAAA,IAAiBF,KAAjBE,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAiBF,KAAK,CAAET,UAAxBW,CAAAA;EACxB,IAAME,eAAe,GAAGF,WAAW,CAACG,IAAZH,CAAiB,GAAjBA,CAAxB;EAEA,IAAMI,UAAU,GAAGnC,IAAI,CAACO,KAAD,EAAQ,CAC7B,WAD6B,EAE7B,YAF6B,EAG7B,YAH6B,EAI7B,YAJ6B,CAAR,CAAvB;EAOA,IAAIC,QAAQ,GAAGD,KAAH,KAAA,IAAA,IAAGA,KAAH,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAGA,KAAK,CAAEC,QAAtB;EAEA,IAAI,CAACA,QAAD,IAAaqB,KAAb,KAAA,IAAA,IAAaA,KAAb,KAAA,KAAA,CAAA,IAAaA,KAAK,CAAErB,QAAxB,EAAkC;IAChCA,QAAQ,GAAA,EAAA,CAAA,MAAA,CAAMqB,KAAN,KAAA,IAAA,IAAMA,KAAN,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAMA,KAAK,CAAErB,QAAb,EAAA,QAAA,CAARA;EACD;EAED,OAAA,aAAA,CAAA,aAAA,KACK2B,UADE;IAEL3B,QAAQ,EAAEA,QAFL;IAGL4B,QAAQ,EAAE7B,KAAK,CAACK,UAANL,KAAoBsB,KAApBtB,KAAAA,IAAAA,IAAoBsB,KAApBtB,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAoBsB,KAAK,CAAEjB,UAA3BL,CAHL;IAIL8B,QAAQ,EAAE9B,KAAK,CAACM,UAANN,KAAoBsB,KAApBtB,KAAAA,IAAAA,IAAoBsB,KAApBtB,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAoBsB,KAAK,CAAEhB,UAA3BN,CAJL;IAKL+B,QAAQ,EAAE/B,KAAK,CAACG,UAANH,KAAoBsB,KAApBtB,KAAAA,IAAAA,IAAoBsB,KAApBtB,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAoBsB,KAAK,CAAEnB,UAA3BH,CALL;IAMLgC,oBAAoB,EAAEtC,QAAQ,CAACM,KAAK,CAACI,SAANJ,KAAmBsB,KAAnBtB,KAAAA,IAAAA,IAAmBsB,KAAnBtB,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAmBsB,KAAK,CAAElB,SAA1BJ,CAAD,CANzB;IAOLiC,qBAAqB,EAAEvC,QAAQ,CAACM,KAAK,CAACG,UAANH,KAAoBsB,KAApBtB,KAAAA,IAAAA,IAAoBsB,KAApBtB,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAoBsB,KAAK,CAAEnB,UAA3BH,CAAD,CAP1B;IAQLkC,qBAAqB,EAAExC,QAAQ,CAACM,KAAK,CAACM,UAANN,KAAoBsB,KAApBtB,KAAAA,IAAAA,IAAoBsB,KAApBtB,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAoBsB,KAAK,CAAEhB,UAA3BN,CAAD,CAR1B;IASLmC,wBAAwB,EAAET,eAAe,IAAIU;EAAAA;AAEhD;AAED,OAAO,IAAMb,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAA,EAAS;EACzC,OAAQhC,KAAK,CAAC8C,UAAN9C,CACNM,kBADMN,CAAR;AAGD,CAJM","sourcesContent":["import React from 'react';\nimport { useId } from '@react-native-aria/utils';\nimport omit from 'lodash.omit';\nimport type { IFormControlProps } from './types';\nimport { ariaAttr } from '../../../utils';\nimport { uniqueId } from 'lodash';\nimport { useNativeBaseConfig } from '../../../core/NativeBaseContext';\n\nexport type IFormControlContext = Omit<\n  ReturnType<typeof useFormControlProvider>,\n  'htmlProps'\n>;\n\nexport const FormControlContext = React.createContext({});\n\nexport function useFormControlProvider(props: IFormControlProps) {\n  const {\n    nativeID: idProp,\n    isRequired,\n    isInvalid,\n    isDisabled,\n    isReadOnly,\n    ...htmlProps\n  } = props;\n\n  let id = uniqueId();\n  const isSSR = useNativeBaseConfig('NativeBase').isSSR;\n  const disableCSSMediaQueries = !isSSR;\n\n  if (!disableCSSMediaQueries) {\n    // This if statement technically breaks the rules of hooks, but is safe\n    // because the condition never changes after mounting.\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    id = useId();\n  }\n\n  // const id = '';\n  // Generate all the required ids\n  const nativeID = idProp || `field-${id}`;\n\n  const labelId = `${nativeID}-label`;\n  const feedbackId = `${nativeID}-feedback`;\n  const helpTextId = `${nativeID}-helptext`;\n\n  /**\n   * Track whether the `FormErrorMessage` has been rendered.\n   * We use this to append its id the the `aria-describedby` of the `input`.\n   */\n  const [hasFeedbackText, setHasFeedbackText] = React.useState(false);\n\n  /**\n   * Track whether the `FormHelperText` has been rendered.\n   * We use this to append its id the the `aria-describedby` of the `input`.\n   */\n  const [hasHelpText, setHasHelpText] = React.useState(false);\n\n  const context = React.useMemo(() => {\n    return {\n      isRequired: !!isRequired,\n      isInvalid: !!isInvalid,\n      isReadOnly: !!isReadOnly,\n      isDisabled: !!isDisabled,\n      hasFeedbackText,\n      setHasFeedbackText,\n      hasHelpText,\n      setHasHelpText,\n      nativeID,\n      labelId,\n      feedbackId,\n      helpTextId,\n      htmlProps,\n    };\n  }, [\n    feedbackId,\n    hasFeedbackText,\n    hasHelpText,\n    helpTextId,\n    htmlProps,\n    isDisabled,\n    isInvalid,\n    isReadOnly,\n    isRequired,\n    labelId,\n    nativeID,\n  ]);\n\n  return context;\n}\n\n/**\n * React hook that provides the props that should be spread on to\n * input fields (`input`, `select`, `textarea`, etc.).\n *\n * It provides a convenient way to control a form fields, validation\n * and helper text.\n */\nexport function useFormControl(props: IFormControlProps) {\n  const field = useFormControlContext();\n  const describedBy: any[] = [];\n\n  // Error message must be described first in all scenarios.\n  if (field?.hasFeedbackText) describedBy.push(field?.feedbackId);\n  if (field?.hasHelpText) describedBy.push(field?.helpTextId);\n  const ariaDescribedBy = describedBy.join(' ');\n\n  const cleanProps = omit(props, [\n    'isInvalid',\n    'isDisabled',\n    'isReadOnly',\n    'isRequired',\n  ]);\n\n  let nativeID = props?.nativeID;\n\n  if (!nativeID && field?.nativeID) {\n    nativeID = `${field?.nativeID}-input`;\n  }\n\n  return {\n    ...cleanProps,\n    nativeID: nativeID,\n    disabled: props.isDisabled || field?.isDisabled,\n    readOnly: props.isReadOnly || field?.isReadOnly,\n    required: props.isRequired || field?.isRequired,\n    accessibilityInvalid: ariaAttr(props.isInvalid || field?.isInvalid),\n    accessibilityRequired: ariaAttr(props.isRequired || field?.isRequired),\n    accessibilityReadOnly: ariaAttr(props.isReadOnly || field?.isReadOnly),\n    accessibilityDescribedBy: ariaDescribedBy || undefined,\n  };\n}\n\nexport const useFormControlContext = () => {\n  return (React.useContext(\n    FormControlContext\n  ) as unknown) as IFormControlContext;\n};\n"]},"metadata":{},"sourceType":"module"}