{"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":""}