{"version":3,"file":"js/4612-e0f9a1106c4f85691447.js","mappings":"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","sources":["webpack://AYTM/./app/_stock/webpack/lib/hooks/useMultiRef.js","webpack://AYTM/./app/_stock/webpack/lib/rfd-ui/styles/basic/formatted-input.module.scss?e8af","webpack://AYTM/./app/_stock/webpack/lib/rfd-ui/components/basic/formatted-input.jsx","webpack://AYTM/./app/_stock/webpack/lib/rfd-ui/components/basic/label.jsx","webpack://AYTM/./app/_stock/webpack/lib/rfd-ui/components/basic/webcam.jsx"],"sourcesContent":["import { useRef, createRef } from 'react'\n\nexport default function useMultiRef() {\n  const multiRef = useRef(null)\n  if (null === multiRef.current) {\n    multiRef.current = Array.prototype.map.call(arguments, value => {\n      const ref = createRef()\n      ref.current = value\n      return ref\n    })\n  }\n  return multiRef.current\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"component\":\"formatted-input-module__component___2elQm\"};","import React, { useRef, useEffect, useCallback, useMemo } from 'react'\nimport PropTypes from 'prop-types'\nimport { getVisualSelection, setVisualSelection } from '@aytm/lib/common/content-editable'\nimport { nextFocusableElement, stopEvent, stopDragOver } from '@aytm/lib/common/func'\nimport useMultiRef from '@aytm/lib/hooks/useMultiRef'\n\n// styles\nimport styles from '@aytm/lib/rfd-ui/styles/basic/formatted-input.module.scss'\n\n// mobile browser input duplication fix detection\nconst duplicationFixEnabled = (() => {\n  const userAgentMatch = window.navigator.userAgent.match(/Android.*Chrome\\/(\\d+)/) // eslint-disable-line compat/compat\n  return userAgentMatch ? parseInt(userAgentMatch[1], 10) <= 74 : false\n})()\n\nFormattedInput.propTypes = {\n  readOnly: PropTypes.bool,\n  formatter: PropTypes.func.isRequired,\n  text: PropTypes.string,\n  ariaLabel: PropTypes.string,\n  className: PropTypes.string,\n  style: PropTypes.object,\n  onFocus: PropTypes.func,\n  onBlur: PropTypes.func,\n  onSelect: PropTypes.func,\n  onChange: PropTypes.func,\n  debounce: PropTypes.number,\n  handleEnterKey: PropTypes.func,\n  handleTabKey: PropTypes.func,\n  formatPastedText: PropTypes.func\n}\n\nexport default React.memo(\n  FormattedInput,\n  (prevProps, nextProps) =>\n    prevProps.readOnly === nextProps.readOnly &&\n    prevProps.text === nextProps.text &&\n    prevProps.ariaLabel === nextProps.ariaLabel &&\n    prevProps.className === nextProps.className &&\n    prevProps.formatter === nextProps.formatter &&\n    prevProps.onFocus === nextProps.onFocus &&\n    prevProps.onBlur === nextProps.onBlur &&\n    prevProps.onSelect === nextProps.onSelect &&\n    prevProps.onChange === nextProps.onChange &&\n    prevProps.debounce === nextProps.debounce &&\n    prevProps.handleEnterKey === nextProps.handleEnterKey &&\n    prevProps.handleTabKey === nextProps.handleTabKey &&\n    prevProps.formatPastedText === nextProps.formatPastedText\n)\nexport function FormattedInput(props = {}) {\n  const {\n    text: props_text,\n    ariaLabel: props_ariaLabel,\n    onFocus: props_onFocus,\n    onBlur: props_onBlur,\n    onChange: props_onChange,\n    onSelect: props_onSelect,\n    formatter: props_formatter,\n    debounce: props_debounce,\n    handleEnterKey: props_handleEnterKey,\n    handleTabKey: props_handleTabKey,\n    formatPastedText: props_formatPastedText,\n    className: props_className,\n    readOnly: props_readOnly,\n    style: props_style\n  } = props\n\n  const [\n    inputRef,\n    focused,\n    selectOnFocus,\n    mutationObserver,\n    lastInputText,\n    lastFormattedHTML,\n    lastFormattedText,\n    lastSelectionStart,\n    lastSelectionEnd,\n    mutatedHTML,\n    mutatedText\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  ] = useMultiRef(null, false, false, null, '', '<br>', '', 0, 0, '<br>', '')\n\n  // update input\n  const inputDebounceTimer = useRef(null)\n  const updateInput = useCallback(\n    (start, deleteCount, insertedChars, { registerChanges = true, forceUpdate = false } = {}) => {\n      // console.log(\n      //   'updateInput',\n      //   {\n      //     start,\n      //     deleteCount,\n      //     insertedChars\n      //   },\n      //   { registerChanges, forceUpdate }\n      // )\n      if (inputRef.current && props_formatter && (0 !== deleteCount || 0 !== insertedChars.length || forceUpdate)) {\n        const {\n          html: htmlAfterFormat = '<br>',\n          text: inputTextAfterFormat = '',\n          selectionStart: selectionStartAfterFormat = 0,\n          selectionEnd: selectionEndAfterFormat = 0,\n          valid = false,\n          empty = true\n        } = props_formatter(start, deleteCount, insertedChars)\n        // console.log('formatter output', {\n        //   html: htmlAfterFormat,\n        //   text: inputTextAfterFormat,\n        //   selectionStart: selectionStartAfterFormat,\n        //   selectionEnd: selectionEndAfterFormat,\n        //   valid,\n        //   empty\n        // })\n        lastFormattedHTML.current = htmlAfterFormat || '<br>'\n        if (inputRef.current.innerHTML !== lastFormattedHTML.current) {\n          inputRef.current.innerHTML = lastFormattedHTML.current\n          lastFormattedHTML.current = inputRef.current.innerHTML\n          lastFormattedText.current = inputRef.current.innerText\n        }\n        if (\n          registerChanges &&\n          props_onSelect &&\n          (lastSelectionStart.current !== selectionStartAfterFormat ||\n            lastSelectionEnd.current !== selectionEndAfterFormat)\n        ) {\n          props_onSelect(selectionStartAfterFormat, selectionEndAfterFormat)\n        }\n        lastSelectionStart.current = selectionStartAfterFormat\n        lastSelectionEnd.current = selectionEndAfterFormat\n        setVisualSelection(inputRef.current, selectionStartAfterFormat, selectionEndAfterFormat)\n        if (registerChanges && props_onChange && (forceUpdate || lastInputText.current !== inputTextAfterFormat)) {\n          if (props_debounce) {\n            if (inputDebounceTimer.current) {\n              clearTimeout(inputDebounceTimer.current)\n            }\n            inputDebounceTimer.current = setTimeout(() => {\n              inputDebounceTimer.current = null\n              props_onChange(inputTextAfterFormat, { valid, empty })\n            }, props_debounce)\n          } else {\n            props_onChange(inputTextAfterFormat, { valid, empty })\n          }\n        }\n        lastInputText.current = inputTextAfterFormat\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [props_onChange, props_onSelect, props_formatter, props_debounce]\n  )\n\n  // focus / blur\n  const onFocus = useCallback(\n    event => {\n      focused.current = true\n      selectOnFocus.current = true\n      if (null != inputRef.current && null != mutationObserver.current) {\n        mutationObserver.current.observe(inputRef.current, {\n          characterData: true,\n          childList: true,\n          subtree: true\n        })\n      }\n      if (props_onFocus) {\n        props_onFocus(event)\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [props_onFocus]\n  )\n  const onBlur = useCallback(\n    event => {\n      if (null != mutationObserver.current) {\n        mutationObserver.current.disconnect()\n      }\n      updateInput(-1, 0, [], { registerChanges: false, forceUpdate: true })\n      focused.current = false\n      selectOnFocus.current = false\n      if (props_onBlur) {\n        props_onBlur(event)\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [props_onBlur, updateInput]\n  )\n\n  // manage selection\n  const onSelect = useCallback(\n    _event => {\n      if (null != inputRef.current && focused.current) {\n        if (inputRef.current.innerHTML !== lastFormattedHTML.current) {\n          // skipped - select is part of mutation\n          return\n        }\n        const [start, end] = getVisualSelection(inputRef.current)\n        if (null != start && null != end) {\n          if (selectOnFocus.current) {\n            selectOnFocus.current = false\n            updateInput(end, 0, [], { registerChanges: false, forceUpdate: true })\n            if (props_onSelect) {\n              props_onSelect(lastSelectionStart.current, lastSelectionEnd.current)\n            }\n          } else if (lastSelectionStart.current !== start || lastSelectionEnd.current !== end) {\n            lastSelectionStart.current = start\n            lastSelectionEnd.current = end\n            // console.log('onSelect', {\n            //   lastSelectionStart: lastSelectionStart.current,\n            //   lastSelectionEnd: lastSelectionEnd.current\n            // })\n            if (props_onSelect) {\n              props_onSelect(lastSelectionStart.current, lastSelectionEnd.current)\n            }\n          }\n        }\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [props_onSelect, updateInput]\n  )\n\n  // register mutation\n  const registerMutationDebounceTimer = useRef(null)\n  const registerMutation = useCallback(() => {\n    if (registerMutationDebounceTimer.current) {\n      clearTimeout(registerMutationDebounceTimer.current)\n    }\n    registerMutationDebounceTimer.current = setTimeout(() => {\n      const [mutatedSelectionStart, mutatedSelectionEnd] = getVisualSelection(inputRef.current)\n      // console.log('registerMutation', {\n      //   lastFormattedHTML: lastFormattedHTML.current,\n      //   lastFormattedText: lastFormattedText.current,\n      //   mutatedHTML: mutatedHTML.current,\n      //   mutatedText: mutatedText.current,\n      //   mutatedSelectionStart,\n      //   mutatedSelectionEnd,\n      //   lastSelectionStart: lastSelectionStart.current,\n      //   lastSelectionEnd: lastSelectionEnd.current\n      // })\n      registerMutationDebounceTimer.current = null\n\n      const mutatedTextBeforeSelection = mutatedText.current.slice(0, mutatedSelectionStart)\n      const lastFormattedTextBeforeSelection = lastFormattedText.current.slice(\n        0,\n        Math.max(0, lastSelectionStart.current)\n      )\n      const mutatedTextLengthAfterSelection = mutatedText.current.length - mutatedSelectionEnd\n      const lastFormattedTextLengthAfterSelection =\n        lastFormattedText.current.length - Math.max(0, lastSelectionEnd.current)\n\n      let formatterStart = lastSelectionStart.current\n      let deleteCount = lastSelectionEnd.current - lastSelectionStart.current\n      const insertedChars = []\n\n      if (mutatedTextBeforeSelection !== lastFormattedTextBeforeSelection) {\n        const maxTextsLength = Math.max(mutatedTextBeforeSelection.length, lastFormattedTextBeforeSelection.length)\n        for (let i = 0; i < maxTextsLength; i++) {\n          if (mutatedTextBeforeSelection[i] !== lastFormattedTextBeforeSelection[i]) {\n            formatterStart = i\n            if (formatterStart < mutatedSelectionStart) {\n              insertedChars.push(...mutatedTextBeforeSelection.slice(formatterStart).split(''))\n            }\n            if (lastSelectionStart.current > formatterStart) {\n              deleteCount += lastSelectionStart.current - formatterStart\n            }\n            break\n          }\n        }\n      }\n      if (mutatedTextLengthAfterSelection < lastFormattedTextLengthAfterSelection) {\n        deleteCount += lastFormattedTextLengthAfterSelection - mutatedTextLengthAfterSelection\n      }\n\n      if (duplicationFixEnabled && insertedChars.length > 1) {\n        let duplicatedCharsAmount = 0\n        for (let i = 1; i < insertedChars.length; i++) {\n          if (\n            lastFormattedTextBeforeSelection.slice(lastFormattedTextBeforeSelection.length - i) ===\n            insertedChars.slice(0, i).join('')\n          ) {\n            duplicatedCharsAmount = i\n          }\n        }\n        updateInput(\n          formatterStart,\n          deleteCount,\n          0 < duplicatedCharsAmount ? insertedChars.slice(duplicatedCharsAmount) : insertedChars,\n          { registerChanges: true }\n        )\n      } else {\n        updateInput(formatterStart, deleteCount, insertedChars, { registerChanges: true })\n      }\n    }, 10)\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [updateInput])\n\n  // manage mutation observer\n  useEffect(() => {\n    if (mutationObserver.current) {\n      mutationObserver.current.disconnect()\n    }\n    mutationObserver.current =\n      'undefined' !== typeof MutationObserver\n        ? new MutationObserver(_mutations => {\n            const nextHTML = inputRef.current.innerHTML\n            if (lastFormattedHTML.current !== nextHTML) {\n              mutatedHTML.current = inputRef.current.innerHTML\n              mutatedText.current = inputRef.current.innerText\n              // console.log('mutation', {\n              //   mutatedHTML: mutatedHTML.current,\n              //   mutatedText: mutatedText.current\n              // })\n              registerMutation()\n            }\n          })\n        : null\n    if (focused.current && mutationObserver.current && inputRef.current) {\n      mutationObserver.current.observe(inputRef.current, {\n        characterData: true,\n        childList: true,\n        subtree: true\n      })\n    }\n    return () => {\n      if (mutationObserver.current) {\n        mutationObserver.current.disconnect()\n        mutationObserver.current = null\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [inputRef.current, registerMutation])\n\n  // manage props.text and props.formatter changes\n  useEffect(() => {\n    updateInput(0, 0, (props_text || '').split(''), { registerChanges: true, forceUpdate: true })\n    if (!focused.current) {\n      // blurred text changes\n      updateInput(-1, 0, [], { registerChanges: false, forceUpdate: true })\n    }\n    return () => {\n      updateInput(0, lastFormattedText.current.length, [], { registerChanges: false, forceUpdate: true })\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [props_text, props_formatter, updateInput])\n\n  // manage focus\n  useEffect(() => {\n    if (null != inputRef.current && inputRef.current === document.activeElement) {\n      focused.current = true\n    }\n    return () => {\n      focused.current = false\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [inputRef.current])\n\n  // manage keys\n  const onKeyDown = useCallback(\n    event => {\n      switch (event.key) {\n        case 'Enter': {\n          if (null != props_handleEnterKey) {\n            props_handleEnterKey({\n              selectionStart: lastSelectionStart.current,\n              selectionEnd: lastSelectionEnd.current,\n              html: lastFormattedHTML.current,\n              text: lastFormattedText.current,\n              ctrlKey: event.ctrlKey,\n              shiftKey: event.shiftKey,\n              altKey: event.altKey,\n              metaKey: event.metaKey,\n              updateInput\n            }) && stopEvent(event)\n          } else if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n            stopEvent(event)\n            break\n          } else {\n            stopEvent(event)\n            const selectionStartBeforeUpdate = lastSelectionStart.current\n            const selectionEndBeforeUpdate = lastSelectionEnd.current\n            updateInput(lastSelectionStart.current, lastSelectionEnd.current - lastSelectionStart.current, ['\\n'], {\n              registerChanges: false\n            })\n            if (\n              selectionStartBeforeUpdate === lastSelectionStart.current &&\n              selectionEndBeforeUpdate === lastSelectionEnd.current\n            ) {\n              // selection has not changed - jump to next focusable item\n              const nextFocusable = nextFocusableElement(inputRef.current)\n              if (null != nextFocusable && nextFocusable.focus) {\n                nextFocusable.focus()\n              } else if (inputRef.current && inputRef.current.blur) {\n                inputRef.current.blur()\n              }\n            }\n          }\n          break\n        }\n        case 'Tab': {\n          if (null != props_handleTabKey) {\n            props_handleTabKey({\n              selectionStart: lastSelectionStart.current,\n              selectionEnd: lastSelectionEnd.current,\n              html: lastFormattedHTML.current,\n              text: lastFormattedText.current,\n              ctrlKey: event.ctrlKey,\n              shiftKey: event.shiftKey,\n              altKey: event.altKey,\n              metaKey: event.metaKey,\n              updateInput\n            }) && stopEvent(event)\n          } else if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n            break\n          } else {\n            const selectionStartBeforeUpdate = lastSelectionStart.current\n            const selectionEndBeforeUpdate = lastSelectionEnd.current\n            updateInput(lastSelectionStart.current, lastSelectionEnd.current - lastSelectionStart.current, ['\\t'], {\n              registerChanges: false\n            })\n            if (\n              selectionStartBeforeUpdate !== lastSelectionStart.current ||\n              selectionEndBeforeUpdate !== lastSelectionEnd.current\n            ) {\n              // selection changed - skip default action\n              stopEvent(event)\n            }\n          }\n          break\n        }\n        case 'Backspace': {\n          stopEvent(event)\n          if (event.ctrlKey || event.altKey || event.metaKey) {\n            break\n          }\n          updateInput(\n            lastSelectionStart.current,\n            lastSelectionEnd.current !== lastSelectionStart.current\n              ? lastSelectionEnd.current - lastSelectionStart.current\n              : -1,\n            [],\n            { registerChanges: true }\n          )\n          break\n        }\n        case 'Delete': {\n          stopEvent(event)\n          if (event.ctrlKey || event.altKey || event.metaKey) {\n            break\n          }\n          updateInput(\n            lastSelectionStart.current,\n            lastSelectionEnd.current !== lastSelectionStart.current\n              ? lastSelectionEnd.current - lastSelectionStart.current\n              : 1,\n            [],\n            { registerChanges: true }\n          )\n          break\n        }\n        case ' ': {\n          stopEvent(event)\n          if (event.ctrlKey || event.altKey || event.metaKey) {\n            break\n          }\n          updateInput(lastSelectionStart.current, lastSelectionEnd.current - lastSelectionStart.current, [' '], {\n            registerChanges: true\n          })\n          break\n        }\n        case 'y':\n        case 'z': {\n          if (event.ctrlKey) {\n            stopEvent(event)\n          }\n          break\n        }\n        default: {\n          break\n        }\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [props_handleEnterKey, props_handleTabKey, updateInput]\n  )\n\n  const onPaste = useCallback(\n    event => {\n      stopEvent(event)\n      let pastedText = ''\n      try {\n        pastedText = (event.clipboardData || window.clipboardData).getData('text') || ''\n      } catch {\n        pastedText = ''\n      }\n      if (pastedText.length) {\n        updateInput(\n          lastSelectionStart.current,\n          lastSelectionEnd.current - lastSelectionStart.current,\n          props_formatPastedText ? props_formatPastedText(pastedText).split('') : pastedText.split(''),\n          { registerChanges: true }\n        )\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [props_formatPastedText, updateInput]\n  )\n\n  // manage className\n  const className = useMemo(\n    () => `rfd-ui-formatted-input ${styles.component}${props_className ? ' ' + props_className : ''}`,\n    [props_className]\n  )\n\n  return (\n    <div\n      aria-label={props_ariaLabel}\n      contentEditable={!props_readOnly}\n      className={className}\n      data-testid=\"SW-Formatted-Input\"\n      style={props_style}\n      ref={inputRef}\n      onFocus={onFocus}\n      onBlur={onBlur}\n      onSelect={onSelect}\n      onKeyDown={onKeyDown}\n      onPaste={onPaste}\n      onDragOver={stopDragOver}\n      onDrop={stopEvent}\n      autoComplete=\"off\"\n      autoCorrect=\"off\"\n      autoCapitalize=\"off\"\n      spellCheck=\"false\"\n      key=\"formatted-input\"\n    />\n  )\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Map } from 'immutable'\nimport classNames from 'classnames'\nimport { PureDataComponent } from '@aytm/lib/common/components/pure-component'\n\nimport '@aytm/lib/rfd-ui/styles/basic/select.scss'\nimport '@aytm/lib/rfd-ui/styles/basic/label.scss'\n\nexport default class Label extends PureDataComponent {\n  static propTypes = {\n    width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    placeholder: PropTypes.string,\n    icon: PropTypes.string,\n    iconRight: PropTypes.bool,\n    withArrow: PropTypes.bool,\n    onClick: PropTypes.func\n  }\n\n  constructor(props) {\n    super(props)\n    this.state = {\n      opened: false,\n      valueOption: Map({ value: null, text: '' }),\n      filter: '',\n      keyboardIndex: null,\n      focused: false,\n      flipped: false,\n      page: 1\n    }\n    this.filterChangeDelayTimer = null\n    this.mounted = false\n    this.mouseOverOptions = false\n    this.filteredOptionsCache = null\n    this.filteredOptionsCacheFor = null\n    this.selectRoot = null\n    this.options = null\n    this.overflow = 0\n    this.loading = false\n  }\n\n  render() {\n    const { width, placeholder, onClick, icon, iconRight, withArrow, className, ...otherProps } = this.props\n\n    return (\n      <div\n        className={classNames('rfd-ui-select', 'rfd-ui-label', className)}\n        style={{ width: width ? width : 200 }}\n        onClick={onClick}\n        {...otherProps}\n      >\n        <div\n          className={classNames('rfd-ui-select-button', {\n            'rfd-ui-icon-right': iconRight\n          })}\n        >\n          {icon && !iconRight && <i className={'icon-aytmfd-' + icon} />}\n          <span className=\"rfd-ui-select-button-text\" dangerouslySetInnerHTML={{ __html: placeholder }} />\n          {icon && iconRight && <i className={'icon-aytmfd-' + icon} />}\n          {withArrow && <span className=\"rfd-ui-select-button-arrow\" />}\n        </div>\n      </div>\n    )\n  }\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nfunction hasGetUserMedia() {\n  return Boolean(\n    // compat/compat disabled for navigator.getUserMedia because it has fallback\n    // eslint-disable-next-line compat/compat\n    navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia\n  )\n}\n\nexport default class Webcam extends Component {\n  static defaultProps = {\n    audio: true,\n    className: '',\n    height: 480,\n    muted: false,\n    onUserMedia: () => {},\n    screenshotFormat: 'image/webp',\n    width: 640\n  }\n\n  static propTypes = {\n    audio: PropTypes.bool,\n    muted: PropTypes.bool,\n    onUserMedia: PropTypes.func,\n    getVideoSources: PropTypes.func,\n    getAudioSources: PropTypes.func,\n    onGetUserMedia: PropTypes.func,\n    fallback: PropTypes.func,\n    onVideoRecordStart: PropTypes.func,\n    onDataAvailable: PropTypes.func,\n    height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    screenshotFormat: PropTypes.oneOf(['image/webp', 'image/png', 'image/jpeg']),\n    style: PropTypes.object,\n    className: PropTypes.string,\n    audioSource: PropTypes.string,\n    videoSource: PropTypes.string\n  }\n\n  static mountedInstances = []\n\n  static userMediaRequested = false\n\n  constructor() {\n    super()\n    this.state = {\n      hasUserMedia: false\n    }\n    this.recordedBlobs = []\n  }\n\n  componentDidMount() {\n    try {\n      if (!hasGetUserMedia()) return\n\n      Webcam.mountedInstances.push(this)\n\n      if (!this.state.hasUserMedia && !Webcam.userMediaRequested) {\n        this.requestUserMedia()\n      }\n    } catch (error) {\n      console.log(`${error.name}: ${error.message}`) // eslint-disable-line no-console\n    }\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if (nextProps.videoSource != this.props.videoSource) this.requestUserMedia()\n  }\n\n  componentWillUnmount() {\n    try {\n      const index = Webcam.mountedInstances.indexOf(this)\n      Webcam.mountedInstances.splice(index, 1)\n\n      if (0 === Webcam.mountedInstances.length && this.state.hasUserMedia) {\n        if (this.stream.stop) {\n          this.stream.stop()\n        } else {\n          if (this.stream.getVideoTracks) {\n            this.stream.getVideoTracks().map(track => track.stop())\n          }\n          if (this.stream.getAudioTracks) {\n            this.stream.getAudioTracks().map(track => track.stop())\n          }\n        }\n        Webcam.userMediaRequested = false\n      }\n    } catch (error) {\n      console.log(`${error.name}: ${error.message}`) // eslint-disable-line no-console\n    }\n  }\n\n  getScreenshot() {\n    if (!this.state.hasUserMedia) return null\n\n    const canvas = this.getCanvas()\n    return canvas.toDataURL(this.props.screenshotFormat)\n  }\n\n  startRecordVideo() {\n    const self = this\n    this.recordedBlobs = []\n    try {\n      const options = (() => {\n        if (!MediaRecorder.isTypeSupported('video/webm')) {\n          console.error(options.mimeType + ' is not Supported') // eslint-disable-line no-console\n          if (!MediaRecorder.isTypeSupported('video/webm;codecs=vp8')) {\n            console.error('video/webm;codecs=vp8  is not Supported') // eslint-disable-line no-console\n            if (!MediaRecorder.isTypeSupported('video/webm')) {\n              console.error('video/webm is not Supported') // eslint-disable-line no-console\n              return { mimeType: '' }\n            }\n            return { mimeType: 'video/webm' }\n          }\n          return { mimeType: 'video/webm;codecs=vp8' }\n        }\n        return { mimeType: 'video/webm' }\n      })()\n\n      try {\n        // eslint-disable-next-line compat/compat\n        this.mediaRecorder = new MediaRecorder(this.stream, options)\n      } catch (error) {\n        console.error('Exception while creating MediaRecorder: ' + error) // eslint-disable-line no-console\n        if ('function' == typeof this.props.fallback) this.props.fallback()\n        return\n      }\n      if ('function' == typeof this.props.onDataAvailable)\n        this.mediaRecorder.addEventListener('dataavailable', function (event) {\n          if (event.data && event.data.size > 0) {\n            self.props.onDataAvailable(event)\n            self.recordedBlobs.push(event.data)\n          }\n        })\n\n      this.mediaRecorder.start(10)\n      if ('function' == typeof this.props.onVideoRecordStart) this.props.onVideoRecordStart()\n    } catch (error) {\n      console.error('Exception with MediaRecorder: ' + error) // eslint-disable-line no-console\n      if ('function' == typeof this.props.fallback) this.props.fallback()\n    }\n  }\n\n  stopRecordVideo() {\n    if (this.mediaRecorder) this.mediaRecorder.stop()\n    return this.recordedBlobs\n  }\n\n  getCanvas() {\n    if (!this.state.hasUserMedia) return null\n\n    const video = this.refVideo\n\n    if (!this.ctx || (this.canvas && !this.canvas.height)) {\n      const canvas = document.createElement('canvas')\n      const aspectRatio = video.videoWidth / video.videoHeight\n\n      canvas.width = video.clientWidth\n      canvas.height = video.clientWidth / aspectRatio\n\n      this.canvas = canvas\n      this.ctx = canvas.getContext('2d')\n    }\n\n    const { ctx, canvas } = this\n    ctx.drawImage(video, 0, 0, canvas.width, canvas.height)\n\n    return canvas\n  }\n\n  requestUserMedia() {\n    // eslint-disable-next-line compat/compat\n    const isSecureOrigin = 'https:' === location.protocol || 'localhost' === location.hostname\n    const self = this\n    if (!isSecureOrigin) {\n      return\n    }\n\n    /* eslint-disable compat/compat */\n    /* compat/compat disabled for navigator.getUserMedia because it has fallback */\n    navigator.getUserMedia =\n      navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia\n    if (null == navigator.getUserMedia) {\n      return // no getUserMedia found event with prefixes\n    }\n    /* eslint-enable compat/compat */\n\n    const sourceSelected = (audioSource, videoSource) => {\n      const constraints = {\n        video: {\n          optional: [{ sourceId: videoSource }]\n        }\n      }\n\n      if (this.props.audio) {\n        constraints.audio = {\n          optional: [{ sourceId: audioSource }]\n        }\n      }\n\n      // compat/compat disabled for navigator.getUserMedia because it has fallback\n      // eslint-disable-next-line compat/compat\n      navigator.getUserMedia(\n        constraints,\n        stream => {\n          Webcam.mountedInstances.forEach(instance => instance.handleUserMedia(null, stream))\n          self.stream = stream\n          if ('function' == typeof self.props.onGetUserMedia) self.props.onGetUserMedia(stream)\n        },\n        event => {\n          Webcam.mountedInstances.forEach(instance => instance.handleUserMedia(event))\n        }\n      )\n    }\n\n    if (this.props.audioSource && this.props.videoSource) {\n      sourceSelected(this.props.audioSource, this.props.videoSource)\n    } else if (null != navigator.mediaDevices) {\n      navigator.mediaDevices\n        .enumerateDevices()\n        .then(devices => {\n          let audioSource = null\n          let videoSource = null\n\n          if ('function' == typeof this.props.getVideoSources)\n            this.props.getVideoSources(devices.filter(d => 'video' == d.kind || 'videoinput' == d.kind))\n\n          if ('function' == typeof this.props.getAudioSources)\n            this.props.getAudioSources(devices.filter(d => 'audioinput' == d.kind))\n\n          devices.forEach(device => {\n            if ('audio' === device.kind) {\n              audioSource = device.id\n            } else if ('video' === device.kind) {\n              videoSource = device.id\n            }\n          })\n\n          if (this.props.videoSource) videoSource = this.props.videoSource\n\n          sourceSelected(audioSource, videoSource)\n        })\n        .catch(error => {\n          console.log(`${error.name}: ${error.message}`) // eslint-disable-line no-console\n        })\n    } else {\n      MediaStreamTrack.getSources(sources => {\n        let audioSource = null\n        let videoSource = null\n\n        sources.forEach(source => {\n          if ('audio' === source.kind) {\n            audioSource = source.id\n          } else if ('video' === source.kind) {\n            videoSource = source.id\n          }\n        })\n\n        sourceSelected(audioSource, videoSource)\n      })\n    }\n\n    Webcam.userMediaRequested = true\n  }\n\n  handleUserMedia(error, stream) {\n    if (error) {\n      this.setState({\n        hasUserMedia: false\n      })\n\n      return\n    }\n\n    this.stream = stream\n    this.setState({\n      hasUserMedia: true\n    })\n    this.refVideo.srcObject = stream\n    this.props.onUserMedia()\n  }\n\n  render() {\n    if (!this.state.hasUserMedia) this.requestUserMedia()\n    return (\n      <video\n        autoPlay\n        width={this.props.width}\n        height={this.props.height}\n        muted={this.props.muted}\n        className={this.props.className}\n        style={this.props.style}\n        data-testid=\"SW-VR-Webcam\"\n        ref={el => {\n          this.refVideo = el\n        }}\n      />\n    )\n  }\n}\n"],"names":["useMultiRef","multiRef","useRef","current","Array","prototype","map","call","arguments","value","ref","createRef","userAgentMatch","duplicationFixEnabled","window","navigator","userAgent","match","parseInt","React","FormattedInput","prevProps","nextProps","readOnly","text","ariaLabel","className","formatter","onFocus","onBlur","onSelect","onChange","debounce","handleEnterKey","handleTabKey","formatPastedText","props","length","undefined","props_text","props_ariaLabel","props_onFocus","props_onBlur","props_onChange","props_onSelect","props_formatter","props_debounce","props_handleEnterKey","props_handleTabKey","props_formatPastedText","props_className","props_readOnly","props_style","style","_useMultiRef2","_slicedToArray","inputRef","focused","selectOnFocus","mutationObserver","lastInputText","lastFormattedHTML","lastFormattedText","lastSelectionStart","lastSelectionEnd","mutatedHTML","mutatedText","inputDebounceTimer","updateInput","useCallback","start","deleteCount","insertedChars","_ref","_ref$registerChanges","registerChanges","_ref$forceUpdate","forceUpdate","_props_formatter","_props_formatter$html","html","htmlAfterFormat","_props_formatter$text","inputTextAfterFormat","_props_formatter$sele","selectionStart","selectionStartAfterFormat","_props_formatter$sele2","selectionEnd","selectionEndAfterFormat","_props_formatter$vali","valid","_props_formatter$empt","empty","innerHTML","innerText","setVisualSelection","clearTimeout","setTimeout","event","observe","characterData","childList","subtree","disconnect","_event","_getVisualSelection2","getVisualSelection","end","registerMutationDebounceTimer","registerMutation","_getVisualSelection4","mutatedSelectionStart","mutatedSelectionEnd","mutatedTextBeforeSelection","slice","lastFormattedTextBeforeSelection","Math","max","mutatedTextLengthAfterSelection","lastFormattedTextLengthAfterSelection","formatterStart","maxTextsLength","i","push","apply","_toConsumableArray","split","duplicatedCharsAmount","join","useEffect","MutationObserver","_mutations","nextHTML","document","activeElement","onKeyDown","key","ctrlKey","shiftKey","altKey","metaKey","stopEvent","selectionStartBeforeUpdate","selectionEndBeforeUpdate","nextFocusable","nextFocusableElement","focus","blur","onPaste","pastedText","clipboardData","getData","_unused","useMemo","styles","contentEditable","onDragOver","stopDragOver","onDrop","autoComplete","autoCorrect","autoCapitalize","spellCheck","Label","_PureDataComponent","_this","_classCallCheck","_callSuper","state","opened","valueOption","Map","filter","keyboardIndex","flipped","page","filterChangeDelayTimer","mounted","mouseOverOptions","filteredOptionsCache","filteredOptionsCacheFor","selectRoot","options","overflow","loading","_inherits","_this$props","this","width","placeholder","onClick","icon","iconRight","withArrow","otherProps","_objectWithoutProperties","_excluded","_extends","classNames","dangerouslySetInnerHTML","__html","PureDataComponent","propTypes","PropTypes","Webcam","_Component","hasUserMedia","recordedBlobs","Boolean","getUserMedia","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","mountedInstances","userMediaRequested","requestUserMedia","error","console","log","name","message","videoSource","index","indexOf","splice","stream","stop","getVideoTracks","track","getAudioTracks","getCanvas","toDataURL","screenshotFormat","self","MediaRecorder","isTypeSupported","mimeType","mediaRecorder","fallback","onDataAvailable","addEventListener","data","size","onVideoRecordStart","video","refVideo","ctx","canvas","height","createElement","aspectRatio","videoWidth","videoHeight","clientWidth","getContext","drawImage","_this2","isSecureOrigin","location","protocol","hostname","sourceSelected","audioSource","constraints","optional","sourceId","audio","forEach","instance","handleUserMedia","onGetUserMedia","mediaDevices","enumerateDevices","then","devices","getVideoSources","d","kind","getAudioSources","device","id","catch","MediaStreamTrack","getSources","sources","source","setState","srcObject","onUserMedia","_this3","autoPlay","muted","el","Component","defaultProps"],"sourceRoot":""}