\n \n )}\n >\n );\n};\n\nexport default WidgetChat;\n","export const image = ['jpeg', 'png', 'jpg', 'gif', 'bmp'];\nexport const audio = [\n 'mp3',\n 'wav',\n 'ogg',\n 'oga',\n 'mpga',\n 'opus',\n 'wav',\n 'x-wav',\n];\nexport const video = ['mp4', 'm4v'];\nexport const document = [\n 'doc',\n 'docx',\n 'txt',\n 'csv',\n 'pdf',\n 'xls',\n 'xlsx',\n 'ppt',\n 'pptx',\n];\nexport const compression = ['zip', 'rar', 'gz', '7z'];\n\nexport const allAccept = [\n ...image,\n ...audio,\n ...video,\n ...document,\n ...compression,\n]\n .map((ext) => `.${ext}`)\n .join(',');\n\nexport const malicious = [\n 'exe',\n 'msi',\n 'bat',\n 'com',\n 'cmd',\n 'hta',\n 'src',\n 'pif',\n 'reg',\n 'js',\n 'vbs',\n 'wsf',\n 'cpl',\n 'jar',\n 'dll',\n 'deb',\n];\n","export default {\n TEXT: 'TEXT',\n IMAGE: 'IMAGE',\n VIDEO: 'VIDEO',\n AUDIO: 'AUDIO',\n DOCUMENT: 'DOCUMENT',\n COLLECT: 'Collect',\n TYPING: 'TYPING',\n MESSAGE: 'MESSAGE',\n CAROUSEL: 'CAROUSEL',\n WEBVIEW: 'WEBVIEW',\n BIGGER_FILE: 'bigger',\n MALICIOUS_FILE: 'malicious',\n MEDIA_ERROR_MESSAGE: 'Media Error',\n};\n","const AUDIO_RECEIVING_ALERT =\r\n 'data:audio/mpeg;base64,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';\r\n\r\nconst AUDIO_SENDING_ALERT =\r\n 'data:audio/mpeg;base64,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';\r\n\r\nmodule.exports = { AUDIO_RECEIVING_ALERT, AUDIO_SENDING_ALERT };\r\n","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","function replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}","export default {\n disabled: false\n};","import React from 'react';\nexport default React.createContext(null);","export var forceReflow = function forceReflow(node) {\n return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * \n * {state => (\n *
\n * I'm a fade Transition!\n *
\n * )}\n * \n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n *
\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen, we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n }\n\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * \n * {state => (\n * \n * )}\n * \n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport addOneClass from 'dom-helpers/addClass';\nimport removeOneClass from 'dom-helpers/removeClass';\nimport React from 'react';\nimport Transition from './Transition';\nimport { classNamesShape } from './utils/PropTypes';\nimport { forceReflow } from './utils/reflow';\n\nvar _addClass = function addClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return addOneClass(node, c);\n });\n};\n\nvar removeClass = function removeClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return removeOneClass(node, c);\n });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n *