{"version":3,"sources":["webpack:///./node_modules/preact/dist/preact.module.js","webpack:///./node_modules/prop-types/index.js","webpack:///./app/javascript/shared/components/useKeyboardShortcuts.js","webpack:///./app/javascript/crayons/Button/index.js","webpack:///./app/javascript/utilities/http/request.js","webpack:///./app/javascript/Search/SearchForm.jsx","webpack:///./app/javascript/Search/Search.jsx","webpack:///./app/javascript/Search/SearchFormSync.jsx","webpack:///./app/javascript/packs/Search.jsx","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./app/javascript/utilities/viewport.js","webpack:///./app/javascript/utilities/search/index.js","webpack:///./app/javascript/shared/components/useMediaQuery.js","webpack:///./app/javascript/shared/components/focusTrap.jsx","webpack:///./app/javascript/common-prop-types/article-prop-types.js","webpack:///./app/javascript/crayons/Button/Button.jsx","webpack:///./app/javascript/utilities/dropdownUtils.js","webpack:///./app/javascript/utilities/debounceAction.js","webpack:///./app/javascript/crayons/Modal/Modal.jsx","webpack:///./app/javascript/crayons/Spinner/Spinner.jsx","webpack:///./app/javascript/utilities/locale.js","webpack:///./app/javascript/crayons/ButtonGroup/ButtonGroup.jsx","webpack:///./app/javascript/crayons/Dropdown/Dropdown.jsx","webpack:///./app/javascript/crayons/formElements/FormField/FormField.jsx","webpack:///./app/javascript/crayons/formElements/RadioButton/RadioButton.jsx","webpack:///./app/javascript/crayons/MobileDrawer/MobileDrawer.jsx","webpack:///./app/javascript/crayons/navigation/MobileDrawerNavigation/MobileDrawerNavigation.jsx","webpack:///./app/javascript/common-prop-types/user-prop-types.js","webpack:///./app/javascript/common-prop-types/selected-tags-prop-types.js","webpack:///./node_modules/preact/compat/dist/compat.module.js","webpack:///./node_modules/focus-visible/dist/focus-visible.js","webpack:///./app/javascript/utilities/calculateTextAreaHeight.js","webpack:///./app/javascript/utilities/textAreaUtils.js","webpack:///./app/javascript/utilities/http/errors.js","webpack:///./app/javascript/common-prop-types/default-children-prop-types.js"],"names":["v","n","l","u","i","t","r","o","f","e","c","s","a","h","parentNode","removeChild","arguments","length","children","call","defaultProps","y","type","props","key","ref","__k","__","__b","__e","__d","__c","__h","constructor","__v","vnode","p","current","d","_","this","context","k","indexOf","b","base","m","push","g","__r","debounceRendering","sort","some","__P","j","__n","ownerSVGElement","z","w","A","Array","isArray","x","P","N","M","appendChild","nextSibling","insertBefore","$","setProperty","test","H","style","cssText","replace","toLowerCase","slice","addEventListener","T","I","removeEventListener","setAttribute","removeAttribute","event","contextType","value","__E","prototype","render","O","sub","state","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","forEach","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","L","diffed","localName","nodeType","document","createTextNode","createElementNS","createElement","is","data","childNodes","dangerouslySetInnerHTML","attributes","name","__html","innerHTML","C","checked","unmount","componentWillUnmount","S","firstChild","q","B","D","Consumer","Provider","splice","getDerivedStateFromError","setState","componentDidCatch","forceUpdate","Promise","then","bind","resolve","setTimeout","module","exports","isFormField","element","HTMLElement","nodeName","getAttribute","isContentEditable","callShortcut","keys","chain","shortcuts","shortcut","join","code","defaultOptions","timeout","useKeyboardShortcuts","eventTarget","window","options","useState","storedShortcuts","keyChain","setKeyChain","mergedOptions","setMergedOptions","useEffect","newOptions","clearTimeout","Object","keyEvent","defaultPrevented","ctrlKeyEntry","ctrlKey","cmdKeyEntry","metaKey","altKeyEntry","altKey","shiftKeyEntry","shiftKey","target","Node","newChain","KeyboardShortcuts","propTypes","PropTypes","object","isRequired","shape","number","oneOfType","instanceOf","Element","Window","request","url","headers","body","method","csrfToken","getCsrfToken","restOfOptions","jsonifiedBody","JSON","stringify","fetchOptions","Accept","credentials","fetch","SearchIcon","width","height","viewBox","className","xmlns","SearchForm","forwardRef","searchTerm","onSubmitSearch","action","acceptCharset","onSubmit","role","class","placeholder","locale","autoComplete","variant","contentType","icon","size","string","func","Search","enableSearchPageListener","enableSearchPageChecker","hasKeyModifiers","submit","preventDefault","searchInputRef","currentSearchTerm","hasInstantClick","setSearchTerm","preloadSearchResults","displaySearchResults","minimizeHeader","classList","toggle","focusOnSearchBox","remove","searchBox","focus","select","syncSearchUrlWithInput","createRef","searchPageChecker","exec","location","href","getSearchTermFromUrl","search","InstantClick","on","globalKeysListener","off","Component","SearchFormSync","mobileSearchContainer","setMobileSearchContainer","syncSearchFormsListener","querystring","detail","updatedSearchTerm","getElementById","unmountComponentAtNode","form","querySelector","createPortal","root","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","err","Error","getShim","ReactPropTypes","array","bool","symbol","any","arrayOf","elementType","node","objectOf","oneOf","exact","checkPropTypes","isInViewport","offsetTop","allowPartialVisibility","boundingRect","getBoundingClientRect","clientHeight","innerHeight","documentElement","clientWidth","innerWidth","topIsInViewport","top","rightIsInViewport","right","bottomIsInViewport","bottom","leftIsInViewport","left","topIsOutOfViewport","bottomIsOutOfViewport","getParameters","params","sanitizedName","results","RegExp","decodeURIComponent","getParameterByName","getFilterParameters","instantClick","fixedEncodeURIComponent","encodeURIComponent","charCodeAt","toString","baseUrl","origin","sanitizedQuery","filterParameters","sortParameters","display","searchParameters","URLSearchParams","query","filterXSS","get","divForDecode","nodeValue","encodedQuery","searchUrl","preload","fetchSearch","endpoint","dataHash","searchParams","arrayValue","append","createSearchUrl","response","json","BREAKPOINTS","freeze","Small","Medium","Large","useMediaQuery","mediaQuery","matchMedia","matches","match","setMatch","handler","addListener","removeListener","FocusTrap","selector","onDeactivate","clickOutsideDeactivates","focusTrap","useRef","deactivate","useCallback","useLayoutEffect","currentLocationHref","routeChangeObserver","MutationObserver","mutations","disconnect","createFocusTrap","escapeDeactivates","activate","observe","childList","escape","defaultChildrenPropTypes","articleSnippetResultPropTypes","body_text","articlePropTypes","id","title","path","cloudinary_video_url","video_duration_in_minutes","type_of","class_name","flare_tag","bg_color_hex","text_color_hex","tag_list","cached_tag_list_array","podcast","slug","image_url","user_id","user","username","organization","profile_image_90","highlight","public_reactions_count","reactions_count","comments_count","reading_time","getAdditionalClassNames","inverted","disabled","tooltip","additionalClassNames","Button","tagName","buttonType","onClick","onMouseOver","onMouseOut","onFocus","onBlur","onKeyUp","tabIndex","restOfProps","suppressTooltip","setSuppressTooltip","ComponentName","Icon","otherProps","undefined","displayName","getDropdownRepositionListener","debounceAction","handleDropdownRepositions","querySelectorAll","isDropdownCurrentlyOpen","opacity","add","removeProperty","INTERACTIVE_ELEMENTS_QUERY","closeDropdown","triggerElementId","dropdownContentId","onClose","dropdownContent","initializeDropdown","dropdownContentCloseButtonId","onOpen","triggerButton","keyUpListener","onCloseCleanupActions","contains","activeElement","clickOutsideListener","openDropdown","time","config","leading","configs","debounce","CloseIcon","Modal","overlay","closeOnClickOutside","focusTrapSelector","Spinner","fill","translationsDiv","term","I18n","translations","parse","dataset","defaultLocale","ButtonGroup","Dropdown","triggerButtonId","isInitialized","setIsInitialized","FormField","RadioButton","MobileDrawer","isCurrentPage","userPropTypes","profile_image_url","summary","selectedTagsPropTypes","tags","onKeyPress","E","isReactComponent","__f","isPureReactComponent","R","Symbol","for","$$typeof","map","__u","U","__R","__O","pop","__H","fallback","delete","revealOrder","W","Map","reverse","set","V","defineProperty","configurable","writable","Z","Y","cancelBubble","persist","isPropagationStopped","isDefaultPrevented","nativeEvent","J","K","multiple","selected","defaultValue","enumerable","Q","un","applyFocusVisiblePolyfill","scope","hadKeyboardEvent","hadFocusVisibleRecently","hadFocusVisibleRecentlyTimeout","inputTypesAllowlist","text","tel","email","password","date","month","week","datetime","isValidFocusTarget","el","focusTriggersKeyboardModality","readOnly","addFocusVisibleClass","removeFocusVisibleClass","hasAttribute","onKeyDown","onPointerDown","onVisibilityChange","visibilityState","addInitialPointerMoveListeners","onInitialPointerMove","removeInitialPointerMoveListeners","DOCUMENT_FRAGMENT_NODE","host","DOCUMENT_NODE","CustomEvent","error","createEvent","initCustomEvent","dispatchEvent","factory","hiddenTextarea","SIZING_STYLE","calculateNodeStyling","getComputedStyle","boxSizing","getPropertyValue","paddingSize","parseFloat","borderSize","sizingStyle","getCursorXY","input","selectionPoint","bodyRect","elementRect","inputY","scrollTop","inputX","scrollLeft","div","copyStyle","prop","inputValue","textContent","substr","span","spanX","offsetLeft","spanY","getMentionWordData","textArea","selectionStart","valueBeforeKeystroke","isUserMention","indexOfMentionStart","indexOfAutocompleteStart","getLastIndexOfCharacter","content","selectionIndex","character","breakOnCharacters","currentCharacter","charAt","previousCharacter","includes","getNextIndexOfCharacter","nextCharacter","getSelectionData","selectionEnd","textBeforeSelection","substring","textAfterSelection","selectedText","useTextAreaAutoResize","setTextArea","constrainToContentHeight","setConstrainToContentHeight","additionalElements","setAdditionalElements","resizeTextArea","allContentHeights","uiTextNode","baseHeight","scrollHeight","calculateTextAreaHeight","Math","max","newHeight","handleFetchAPIErrors","ok","SyntaxError","statusText"],"mappings":"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","file":"js/Search-b0a2aab3e45fd845901c.chunk.js","sourcesContent":["var n,l,u,i,t,r,o,f,e={},c=[],s=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function a(n,l){for(var u in l)n[u]=l[u];return n}function h(n){var l=n.parentNode;l&&l.removeChild(n)}function v(l,u,i){var t,r,o,f={};for(o in u)\"key\"==o?t=u[o]:\"ref\"==o?r=u[o]:f[o]=u[o];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===f[o]&&(f[o]=l.defaultProps[o]);return y(l,f,t,r,null)}function y(n,i,t,r,o){var f={type:n,props:i,key:t,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++u:o};return null==o&&null!=l.vnode&&l.vnode(f),f}function p(){return{current:null}}function d(n){return n.children}function _(n,l){this.props=n,this.context=l}function k(n,l){if(null==l)return n.__?k(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l0?y(_.type,_.props,_.key,null,_.__v):_)){if(_.__=u,_.__b=u.__b+1,null===(p=w[h])||p&&_.key==p.key&&_.type===p.type)w[h]=void 0;else for(v=0;v2&&(f.children=arguments.length>3?n.call(arguments,2):i),y(l.type,f,t||l.key,r||l.ref,null)}function D(n,l){var u={__c:l=\"__cC\"+f++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(m)},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=c.slice,l={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l}throw n}},u=0,i=function(n){return null!=n&&void 0===n.constructor},_.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=a({},this.state),\"function\"==typeof n&&(n=n(a({},u),this.props)),n&&a(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),m(this))},_.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),m(this))},_.prototype.render=d,t=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,g.__r=0,f=0;export{S as render,q as hydrate,v as createElement,v as h,d as Fragment,p as createRef,i as isValidElement,_ as Component,B as cloneElement,D as createContext,A as toChildArray,l as options};\n//# sourceMappingURL=preact.module.js.map\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","import { useState, useEffect } from 'preact/hooks';\nimport PropTypes from 'prop-types';\n\n/**\n * Checker that return true if element is a form element\n *\n * @param {node} element to be checked\n *\n * @returns {boolean} isFormField\n */\nfunction isFormField(element) {\n if (element instanceof HTMLElement === false) return false;\n\n const name = element.nodeName.toLowerCase();\n const type = (element.getAttribute('type') || '').toLowerCase();\n return (\n name === 'select' ||\n name === 'textarea' ||\n (name === 'input' &&\n type !== 'submit' &&\n type !== 'reset' &&\n type !== 'checkbox' &&\n type !== 'radio') ||\n element.isContentEditable\n );\n}\n\n/**\n * Function to handle converting key presses to callback functions\n *\n * @param {KeyboardEvent} e Keyboard event\n * @param {String} keys special keys formatted in a string\n * @param {Array} chain array of past keys\n * @param {Object} shortcuts object containing callback functions\n *\n * @returns {Array} New chain\n */\nconst callShortcut = (e, keys, chain, shortcuts) => {\n const shortcut =\n chain && chain.length > 0\n ? shortcuts[`${chain.join('~')}~${e.code}`]\n : shortcuts[`${keys}${e.code}`] ||\n shortcuts[`${keys}${e.key.toLowerCase()}`];\n\n // if a valid shortcut is found call it and reset the chain\n if (shortcut) {\n shortcut(e);\n return [];\n }\n\n // if we have keys don't add to the chain\n if (keys || e.key === 'Shift') {\n return [];\n }\n\n return [...chain, e.code];\n};\n\n// Default options to be used if null\nconst defaultOptions = {\n timeout: 0, // The default is zero as we want no delays between keystrokes by default.\n};\n\n/**\n * hook that can be added to a component to listen\n * for keyboard presses\n *\n * @example\n * const shortcuts = {\n * 'ctrl+alt+KeyG': (e) => {\n * e.preventDefault();\n * alert('Control Alt G has been pressed');\n * },\n * 'KeyG~KeyH': (e) => {\n * e.preventDefault();\n * alert('G has been pressed quickly followed by H');\n * },\n * '?': (e) => {\n * setIsHelpVisible(true);\n * }\n * }\n *\n * useKeyboardShortcuts(shortcuts, someElementOrWindowObject, {timeout: 1500});\n *\n * @param {object} shortcuts List of keyboard shortcuts/event\n * @param {EventTarget} [eventTarget=window] An event target.\n * @param {object} [options = {}] An object for extra options\n *\n */\nexport function useKeyboardShortcuts(\n shortcuts,\n eventTarget = window,\n options = {},\n) {\n const [storedShortcuts] = useState(shortcuts);\n const [keyChain, setKeyChain] = useState([]);\n const [mergedOptions, setMergedOptions] = useState({\n ...defaultOptions,\n ...options,\n });\n\n // update mergedOptions if options prop changes\n useEffect(() => {\n const newOptions = {};\n if (typeof options.timeout === 'number')\n newOptions.timeout = options.timeout;\n setMergedOptions({ ...defaultOptions, ...newOptions });\n }, [options.timeout]);\n\n // clear key chain after timeout is reached\n useEffect(() => {\n if (keyChain.length <= 0) return;\n\n const timeout = window.setTimeout(() => {\n clearTimeout(timeout);\n setKeyChain([]);\n }, mergedOptions.timeout);\n\n return () => clearTimeout(timeout);\n }, [keyChain.length, mergedOptions.timeout]);\n\n // set up event listeners\n useEffect(() => {\n if (!storedShortcuts || Object.keys(storedShortcuts).length === 0) return;\n\n const keyEvent = (e) => {\n if (e.defaultPrevented) return;\n\n const ctrlKeyEntry = e.ctrlKey ? 'ctrl+' : '';\n const cmdKeyEntry = e.metaKey ? 'cmd+' : '';\n const altKeyEntry = e.altKey ? 'alt+' : '';\n const shiftKeyEntry = e.shiftKey ? 'shift+' : '';\n\n // We build the special keys string in an opinionated order to ensure consistency\n const keys = `${ctrlKeyEntry}${cmdKeyEntry}${altKeyEntry}${shiftKeyEntry}`;\n\n // If no special keys, except shift, are pressed and focus is inside a field return\n if (e.target instanceof Node && isFormField(e.target) && !keys) return;\n\n const newChain = callShortcut(e, keys, keyChain, storedShortcuts);\n\n // update keychain with latest chain\n setKeyChain(newChain);\n };\n\n eventTarget.addEventListener('keydown', keyEvent);\n\n return () => eventTarget.removeEventListener('keydown', keyEvent);\n }, [keyChain, storedShortcuts, eventTarget]);\n}\n\n/**\n * A component that can be added to a component to listen\n * for keyboard presses using the useKeyboardShortcuts hook\n *\n * @example\n * const shortcuts = {\n * 'ctrl+alt+KeyG': (e) => {\n * e.preventDefault();\n * alert('Control Alt G has been pressed')\n * }\n * }\n *\n * \n * \n *\n * @param {object} shortcuts List of keyboard shortcuts/event\n * @param {EventTarget} [eventTarget=window] An event target.\n * @param {object} [options = {}] An object for extra options\n *\n */\nexport function KeyboardShortcuts({ shortcuts, eventTarget, options }) {\n useKeyboardShortcuts(shortcuts, eventTarget, options);\n\n return null;\n}\n\nKeyboardShortcuts.propTypes = {\n shortcuts: PropTypes.object.isRequired,\n options: PropTypes.shape({\n timeout: PropTypes.number,\n }),\n eventTarget: PropTypes.oneOfType([\n PropTypes.instanceOf(Element),\n PropTypes.instanceOf(Window),\n ]),\n};\n\nKeyboardShortcuts.defaultProps = {\n shortcuts: {},\n options: {},\n eventTarget: window,\n};\n","export * from './Button';\n","/**\n * Generic request with all the default headers required by the application.\n *\n * @example\n * import { request } from '@utilities/http';\n *\n * const response = await request('/notification_subscriptions/Article/26')\n *\n * Note:\n * The body option will typically be passed in as a JavaScript object.\n * A check is performed for this and automatically convert it to JSON if necessary.\n *\n * Requests send JSON by default but this can be easily overridden by adding\n * the Accept and Content-Type headers to the request options.\n *\n * The default method is GET.\n *\n * @param {string} url The URL to make the request to.\n * @param {RequestInit} [options={}] The request options.\n *\n * @return {Promise} the response\n */\nexport async function request(url, options = {}) {\n const {\n headers,\n body,\n method = 'GET',\n csrfToken = await getCsrfToken(),\n // These are any other options that might be passed in e.g. keepalive\n ...restOfOptions\n } = options;\n\n // There should never be a scenario where null is passed as the body,\n // but if ever there is, this logic should change.\n const jsonifiedBody = {\n body: body && typeof body !== 'string' ? JSON.stringify(body) : body,\n };\n\n const fetchOptions = {\n method,\n headers: {\n Accept: 'application/json',\n 'X-CSRF-Token': csrfToken,\n 'Content-Type': 'application/json',\n ...headers,\n },\n credentials: 'same-origin',\n ...jsonifiedBody,\n ...restOfOptions,\n };\n\n return fetch(url, fetchOptions);\n}\n","import PropTypes from 'prop-types';\nimport { h } from 'preact';\nimport { forwardRef } from 'preact/compat';\nimport { locale } from '../utilities/locale';\nimport { Button } from '@crayons';\n\n\nconst SearchIcon = () => (\n \n \n \n);\n\nexport const SearchForm = forwardRef(({ searchTerm, onSubmitSearch }, ref) => (\n \n \n
\n
\n \n \n
\n
\n \n));\n\nSearchForm.propTypes = {\n searchTerm: PropTypes.string.isRequired,\n onSubmitSearch: PropTypes.func.isRequired,\n};\n","import { h, Component, Fragment, createRef } from 'preact';\nimport PropTypes from 'prop-types';\nimport {\n displaySearchResults,\n getSearchTermFromUrl,\n hasInstantClick,\n preloadSearchResults,\n} from '../utilities/search';\nimport { KeyboardShortcuts } from '../shared/components/useKeyboardShortcuts';\nimport { SearchForm } from './SearchForm';\n\nconst GLOBAL_MINIMIZE_KEY = 'Digit0';\nconst GLOBAL_SEARCH_KEY = '/';\n\nexport class Search extends Component {\n constructor(props) {\n super(props);\n this.enableSearchPageChecker = true;\n this.syncSearchUrlWithInput = this.syncSearchUrlWithInput.bind(this);\n this.searchInputRef = createRef(null);\n }\n\n componentWillMount() {\n const { searchTerm, setSearchTerm } = this.props;\n\n const searchPageChecker = () => {\n if (\n this.enableSearchPageChecker &&\n searchTerm !== '' &&\n /^http(s)?:\\/\\/[^/]+\\/search/.exec(window.location.href) === null\n ) {\n setSearchTerm('');\n }\n\n setTimeout(searchPageChecker, 500);\n };\n\n searchPageChecker();\n }\n\n /**\n * Synchronizes the search input value with the search term defined in the URL.\n */\n syncSearchUrlWithInput() {\n // TODO: Consolidate search functionality.\n // Note that push states for search occur in _search.html.erb\n // in initializeSortingTabs(query)\n const { setSearchTerm } = this.props;\n const searchTerm = getSearchTermFromUrl(window.location.search);\n\n // We set the value outside of React state so that there is no flickering of placeholder\n // to search term.\n const searchBox = this.searchInputRef.current;\n searchBox.value = searchTerm;\n\n // Even though we set the search term directly via the DOM, it still needs to reside\n // in component state.\n setSearchTerm(searchTerm);\n }\n\n componentDidMount() {\n InstantClick.on('change', this.enableSearchPageListener);\n\n window.addEventListener('popstate', this.syncSearchUrlWithInput);\n }\n\n enableSearchPageListener = () => {\n this.enableSearchPageChecker = true;\n };\n\n hasKeyModifiers = (event) => {\n return event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n };\n\n submit = (event) => {\n event.preventDefault();\n\n const { value: searchTerm } = this.searchInputRef.current;\n const { searchTerm: currentSearchTerm } = this.props;\n\n this.enableSearchPageChecker = false;\n\n if (hasInstantClick() && searchTerm !== currentSearchTerm) {\n const { setSearchTerm } = this.props;\n setSearchTerm(searchTerm);\n\n preloadSearchResults({ searchTerm });\n displaySearchResults({ searchTerm });\n }\n };\n\n componentWillUnmount() {\n document.removeEventListener('keydown', this.globalKeysListener);\n window.removeEventListener('popstate', this.syncSearchUrlWithInput);\n InstantClick.off &&\n InstantClick.off('change', this.enableSearchPageListener);\n }\n\n minimizeHeader = (event) => {\n event.preventDefault();\n document.body.classList.toggle('zen-mode');\n };\n\n focusOnSearchBox = (event) => {\n event.preventDefault();\n document.body.classList.remove('zen-mode');\n\n const searchBox = this.searchInputRef.current;\n searchBox.focus();\n searchBox.select();\n };\n\n render({ searchTerm }) {\n return (\n \n \n \n \n );\n }\n}\n\nSearch.propTypes = {\n searchTerm: PropTypes.string.isRequired,\n setSearchTerm: PropTypes.func.isRequired,\n};\n","import { h } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\nimport { createPortal, Fragment, unmountComponentAtNode } from 'preact/compat';\nimport { Search } from './Search';\nimport { getSearchTermFromUrl } from '@utilities/search';\n\n/**\n * Manages the synchronization of search state between the top search bar (desktop) and\n * mobile (in search results page).\n */\nexport function SearchFormSync() {\n const [searchTerm, setSearchTerm] = useState(() => {\n return getSearchTermFromUrl(location.search);\n });\n const [mobileSearchContainer, setMobileSearchContainer] = useState(null);\n\n /**\n * A listener for handling the synchronization of search forms.\n *\n * @param {CustomEvent<{ querystring: string }>} event A custom event for synching search forms.\n */\n function syncSearchFormsListener(event) {\n const { querystring } = event.detail;\n const updatedSearchTerm = getSearchTermFromUrl(querystring);\n\n // Server-side rendering of search results means the DOM node is destroyed everytime a search is performed,\n // So we need to get the reference every time and use that for the parent in the portal.\n const element = document.getElementById('mobile-search-container');\n\n // The DOM element has changed because server-sde rendering returns new\n // search results which destroys the existing search form in mobile view.\n // Because of this we need to unmount the component at the old element reference\n // i.e. the container for the createPortal call in the render.\n // If we do not unmount, it will result in an unmounting error that will throw as the\n // container element (search form that was wiped out because of the new search results) no longer exists.\n if (mobileSearchContainer && element !== mobileSearchContainer) {\n unmountComponentAtNode(mobileSearchContainer);\n }\n\n // We need to delete the existing server-side rendered form because createPortal only appends to it's container.\n if (element) {\n const form = element.querySelector('form');\n form && element.removeChild(form);\n }\n\n setMobileSearchContainer(element);\n setSearchTerm(updatedSearchTerm);\n }\n\n useEffect(() => {\n window.addEventListener('syncSearchForms', syncSearchFormsListener);\n\n return () => {\n window.removeEventListener('syncSearchForms', syncSearchFormsListener);\n };\n });\n\n return (\n \n \n {mobileSearchContainer &&\n createPortal(\n ,\n mobileSearchContainer,\n )}\n \n );\n}\n","import { h, render } from 'preact';\nimport 'focus-visible';\nimport { SearchFormSync } from '../Search/SearchFormSync';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const root = document.getElementById('header-search');\n\n render(, root);\n});\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Checks if an element is visible in the viewport\n *\n * @example\n * const element = document.getElementById('element');\n * isInViewport({element, allowPartialVisibility = true}); // true or false\n *\n * @param {HTMLElement} element - The HTML element to check\n * @param {number} [offsetTop=0] - Part of the screen to ignore counting from the top\n * @param {boolean} [allowPartialVisibility=false] - A boolean to flip the check between partial or completely visible in the viewport\n * @returns {boolean} isInViewport - true if the element is visible in the viewport\n */\nexport function isInViewport({\n element,\n offsetTop = 0,\n allowPartialVisibility = false,\n}) {\n const boundingRect = element.getBoundingClientRect();\n const clientHeight =\n window.innerHeight || document.documentElement.clientHeight;\n const clientWidth = window.innerWidth || document.documentElement.clientWidth;\n const topIsInViewport =\n boundingRect.top <= clientHeight && boundingRect.top >= offsetTop;\n const rightIsInViewport =\n boundingRect.right >= 0 && boundingRect.right <= clientWidth;\n const bottomIsInViewport =\n boundingRect.bottom >= offsetTop && boundingRect.bottom <= clientHeight;\n const leftIsInViewport =\n boundingRect.left <= clientWidth && boundingRect.left >= 0;\n const topIsOutOfViewport = boundingRect.top <= offsetTop;\n const bottomIsOutOfViewport = boundingRect.bottom >= clientHeight;\n const elementSpansEntireViewport =\n topIsOutOfViewport && bottomIsOutOfViewport;\n\n if (allowPartialVisibility) {\n return (\n (topIsInViewport || bottomIsInViewport || elementSpansEntireViewport) &&\n (leftIsInViewport || rightIsInViewport)\n );\n }\n return (\n topIsInViewport &&\n bottomIsInViewport &&\n leftIsInViewport &&\n rightIsInViewport\n );\n}\n","// TODO: We should really be using the xss package by installing it in package.json\n// but for now filterXSS is global because of legacy JS\n\nimport { request } from '@utilities/http';\n\nfunction getParameterByName(name, url = window.location.href) {\n const sanitizedName = name.replace(/[[\\]]/g, '\\\\$&');\n const regex = new RegExp(`[?&]${sanitizedName}(=([^&#]*)|&|#|$)`);\n const results = regex.exec(url);\n\n if (!results) {\n return null;\n }\n\n if (!results[2]) {\n return '';\n }\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\nfunction getParameters(name, url) {\n const params = getParameterByName(name, url);\n\n if (params) {\n return `&${name}=${params}`;\n }\n\n return '';\n}\n\nfunction getFilterParameters(url) {\n return getParameters('filters', url);\n}\n\nfunction getSortParameters(url) {\n const sortBy = getParameters('sort_by', url);\n const sortDirection = getParameters('sort_direction', url);\n\n return sortBy + sortDirection;\n}\n\n/**\n * Determines whether or not InstantClick is enabled.\n *\n * @returns True if InstantClick is enabled, otherwise false.\n */\nexport function hasInstantClick() {\n return typeof instantClick !== 'undefined';\n}\n\nfunction fixedEncodeURIComponent(value) {\n // from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\n return encodeURIComponent(value).replace(\n /[!'()*]/g,\n (c) => `%${c.charCodeAt(0).toString(16)}`,\n );\n}\n\nfunction createSearchUrl(dataHash) {\n const searchParams = new URLSearchParams();\n Object.keys(dataHash).forEach((key) => {\n const value = dataHash[key];\n if (Array.isArray(value)) {\n value.forEach((arrayValue) => {\n searchParams.append(`${key}[]`, arrayValue);\n });\n } else {\n searchParams.append(key, value);\n }\n });\n\n return searchParams.toString();\n}\n\n/**\n *\n * @param {*} param0\n */\nexport function displaySearchResults({\n searchTerm,\n location = window.location,\n}) {\n const baseUrl = location.origin;\n const sanitizedQuery = fixedEncodeURIComponent(searchTerm);\n const filterParameters = getFilterParameters(location.href);\n const sortParameters = getSortParameters(location.href);\n\n InstantClick.display(\n `${baseUrl}/search?q=${sanitizedQuery}${filterParameters}${sortParameters}`,\n );\n}\n\n/**\n * Extracts the search term from an URL's query string.\n *\n * @param {string} querystring A URL query string\n *\n * @returns The extracted search term from the query string\n */\nexport function getSearchTermFromUrl(querystring) {\n const searchParameters = new URLSearchParams(querystring);\n const query = filterXSS(searchParameters.get('q')) ?? '';\n const divForDecode = document.createElement('div');\n\n divForDecode.innerHTML = query;\n\n return divForDecode.firstChild !== null\n ? divForDecode.firstChild.nodeValue\n : query;\n}\n\n/**\n * Preloads search results for the given search term\n * @param {string} searchTerm The search term\n * @param {Location} location[window.location] The location (URL) of the object it is linked to.\n * By default it is linked to the Window object.\n */\nexport function preloadSearchResults({\n searchTerm,\n location = window.location,\n}) {\n const encodedQuery = fixedEncodeURIComponent(\n searchTerm.replace(/^[ ]+|[ ]+$/g, ''),\n );\n const searchUrl = `${\n location.origin\n }/search?q=${encodedQuery}${getFilterParameters(location.href)}`;\n InstantClick.preload(searchUrl);\n}\n\n/**\n * A helper method to call /search endpoints.\n *\n * @param {string} endpoint - The search endpoint you want to request (i.e. tags).\n * @param {object} dataHash - A hash with the search params that need to be included in the request.\n *\n * @returns {Promise} A promise object with response formatted as JSON.\n */\nexport function fetchSearch(endpoint, dataHash) {\n const searchUrl = createSearchUrl(dataHash);\n\n return request(`/search/${endpoint}?${searchUrl}`).then((response) =>\n response.json(),\n );\n}\n","import { useState, useEffect } from 'preact/hooks';\n\n/**\n * Pre-defined breakpoints for width.\n *\n * Note: These were copied from _import.scss.\n */\nexport const BREAKPOINTS = Object.freeze({\n Small: 640,\n Medium: 768,\n Large: 1024,\n});\n\n/**\n * A custom Preact hook for evaluating whether or not a CSS media query is matched or not.\n *\n * @param {string} query The media query to evaluate.\n *\n * @returns {boolean} True if the media query is matched, false otherwise.\n *\n * @example\n * import { useMediaQuery } from '@components/useMediaQuery';\n *\n * function SomeComponent({ query }) {\n * const matchesBreakpoint = useMediaQuery(query);\n *\n * if (!matchesBreakpoint) {\n * return null;\n * }\n *\n * return \n * }\n */\nexport const useMediaQuery = (query) => {\n const mediaQuery = window.matchMedia(query);\n\n const [match, setMatch] = useState(!!mediaQuery.matches);\n\n useEffect(() => {\n const handler = () => {\n setMatch(!!mediaQuery.matches);\n };\n mediaQuery.addListener(handler);\n\n return () => mediaQuery.removeListener(handler);\n });\n\n return match;\n};\n","import PropTypes from 'prop-types';\nimport { h, Fragment } from 'preact';\nimport { useLayoutEffect, useRef, useCallback } from 'preact/hooks';\nimport { createFocusTrap } from 'focus-trap';\nimport { defaultChildrenPropTypes } from '../../common-prop-types';\nimport { KeyboardShortcuts } from './useKeyboardShortcuts';\n\n/**\n * Wrapper component to create a focus trap within the HTML element found by the given selector\n *\n * @example\n * import { FocusTrap } from \"shared/components/FocusTrap\";\n *\n * const ExampleComponent = ({ onClose }) => (\n * \n *
\n * \n *
\n *
\n * )\n *\n * @param {string} selector The CSS selector for the element where focus is to be trapped\n * @param {Array} children Child element(s) passed via composition\n * @param {Function} onDeactivate Callback function to be called when the focus trap is deactivated by navigation or Escape press\n * @param {boolean} clickOutsideDeactivates If true, the focus trap will deactivate when a user clicks outside of the trap area\n */\nexport const FocusTrap = ({\n selector,\n children,\n onDeactivate,\n clickOutsideDeactivates = false,\n}) => {\n const focusTrap = useRef(null);\n const deactivate = useCallback(() => onDeactivate(), [onDeactivate]);\n\n useLayoutEffect(() => {\n const currentLocationHref = document.location.href;\n const routeChangeObserver = new MutationObserver((mutations) => {\n const hasRouteChanged = mutations.some(\n () => currentLocationHref !== document.location.href,\n );\n\n // Ensure trap deactivates if user navigates from the page\n if (hasRouteChanged) {\n focusTrap.current?.deactivate();\n routeChangeObserver.disconnect();\n }\n });\n\n focusTrap.current = createFocusTrap(selector, {\n escapeDeactivates: false,\n clickOutsideDeactivates,\n onDeactivate: deactivate,\n });\n\n focusTrap.current.activate();\n routeChangeObserver.observe(document.querySelector('body'), {\n childList: true,\n });\n\n return () => {\n focusTrap.current.deactivate();\n routeChangeObserver.disconnect();\n };\n }, [clickOutsideDeactivates, selector, deactivate]);\n\n const shortcuts = {\n escape: onDeactivate,\n };\n\n return (\n \n {children}\n \n \n );\n};\n\nFocusTrap.defaultProps = {\n selector: '.crayons-modal',\n onDeactivate: () => {},\n};\n\nFocusTrap.propTypes = {\n selector: PropTypes.string,\n children: defaultChildrenPropTypes.isRequired,\n onDeactivate: PropTypes.func,\n};\n","import PropTypes from 'prop-types';\n\nexport const articleSnippetResultPropTypes = PropTypes.shape({\n body_text: PropTypes.arrayOf(PropTypes.string),\n});\n\nexport const articlePropTypes = PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n path: PropTypes.string.isRequired,\n cloudinary_video_url: PropTypes.string,\n video_duration_in_minutes: PropTypes.string,\n type_of: PropTypes.oneOf(['podcast_episodes']),\n class_name: PropTypes.oneOf(['PodcastEpisode', 'User', 'Article']),\n flare_tag: PropTypes.shape({\n name: PropTypes.string.isRequired,\n bg_color_hex: PropTypes.string,\n text_color_hex: PropTypes.string,\n }),\n tag_list: PropTypes.arrayOf(PropTypes.string),\n cached_tag_list_array: PropTypes.arrayOf(PropTypes.string),\n podcast: PropTypes.shape({\n slug: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n image_url: PropTypes.string.isRequired,\n }),\n user_id: PropTypes.number.isRequired,\n user: PropTypes.shape({\n username: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n }),\n organization: PropTypes.shape({\n name: PropTypes.string.isRequired,\n profile_image_90: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n }),\n highlight: articleSnippetResultPropTypes,\n public_reactions_count: PropTypes.number,\n reactions_count: PropTypes.number,\n comments_count: PropTypes.number,\n reading_time: PropTypes.number,\n});\n","import { h } from 'preact';\nimport { useState } from 'preact/hooks';\nimport PropTypes from 'prop-types';\nimport { defaultChildrenPropTypes } from '../../common-prop-types';\n\nfunction getAdditionalClassNames({\n variant,\n className,\n contentType,\n size,\n inverted,\n disabled,\n tooltip,\n}) {\n let additionalClassNames = '';\n\n if (variant && variant.length > 0 && variant !== 'primary') {\n additionalClassNames += ` crayons-btn--${variant}`;\n }\n\n if (size && size.length > 0 && size !== 'default') {\n additionalClassNames += ` crayons-btn--${size}`;\n }\n\n if (contentType && contentType.length > 0 && contentType !== 'text') {\n additionalClassNames += ` crayons-btn--${contentType}`;\n }\n\n if (disabled) {\n additionalClassNames += ' crayons-btn--disabled';\n }\n\n if (inverted) {\n additionalClassNames += ' crayons-btn--inverted';\n }\n\n if (className && className.length > 0) {\n additionalClassNames += ` ${className}`;\n }\n\n if (tooltip) {\n additionalClassNames += ` crayons-tooltip__activator`;\n }\n\n return additionalClassNames;\n}\n\nexport const Button = (props) => {\n const {\n children,\n variant = 'primary',\n tagName,\n inverted,\n contentType,\n size,\n className,\n icon,\n url,\n buttonType,\n disabled,\n onClick,\n onMouseOver,\n onMouseOut,\n onFocus,\n onBlur,\n onKeyUp,\n tabIndex,\n title,\n tooltip,\n ...restOfProps\n } = props;\n\n const [suppressTooltip, setSuppressTooltip] = useState(false);\n\n const handleKeyUp = (event) => {\n onKeyUp?.(event);\n if (!tooltip) {\n return;\n }\n setSuppressTooltip(event.key === 'Escape');\n };\n\n const ComponentName = tagName;\n const Icon = icon;\n const otherProps =\n tagName === 'button'\n ? { type: buttonType, disabled }\n : { href: disabled ? undefined : url };\n\n return (\n \n {contentType !== 'text' && contentType !== 'icon-right' && Icon && (\n \n )}\n {(contentType === 'text' ||\n contentType === 'icon-left' ||\n contentType === 'icon-right') &&\n children}\n {contentType !== 'text' && contentType === 'icon-right' && Icon && (\n \n )}\n {tooltip ? (\n \n {tooltip}\n \n ) : null}\n \n );\n};\n\nButton.displayName = 'Button';\n\nButton.defaultProps = {\n className: undefined,\n icon: undefined,\n url: undefined,\n buttonType: 'button',\n disabled: false,\n inverted: false,\n onClick: undefined,\n onMouseOver: undefined,\n onMouseOut: undefined,\n onFocus: undefined,\n onBlur: undefined,\n tabIndex: undefined,\n title: undefined,\n tagName: 'button',\n size: 'default',\n contentType: 'text',\n variant: 'primary',\n};\n\nButton.propTypes = {\n children: defaultChildrenPropTypes,\n variant: PropTypes.oneOf([\n 'primary',\n 'secondary',\n 'outlined',\n 'danger',\n 'ghost',\n 'ghost-brand',\n 'ghost-success',\n 'ghost-warning',\n 'ghost-danger',\n ]),\n contentType: PropTypes.oneOf([\n 'text',\n 'icon-left',\n 'icon-right',\n 'icon',\n 'icon-rounded',\n ]).isRequired,\n inverted: PropTypes.bool,\n tagName: PropTypes.oneOf(['a', 'button']).isRequired,\n className: PropTypes.string,\n icon: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n url: PropTypes.string,\n buttonType: PropTypes.string,\n disabled: PropTypes.bool,\n size: PropTypes.oneOf(['default', 's', 'l', 'xl']).isRequired,\n onClick: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseOut: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n tabIndex: PropTypes.number,\n title: PropTypes.string,\n tooltip: PropTypes.node,\n};\n","import { isInViewport } from '@utilities/viewport';\nimport { debounceAction } from '@utilities/debounceAction';\n\n/**\n * Helper function designed to be used on scroll to detect when dropdowns should switch from dropping downwards/upwards.\n * The action is debounced since scroll events are usually fired several at a time.\n *\n * @returns {Function} a debounced function that handles the repositioning of dropdowns\n * @example\n *\n * document.addEventListener('scroll', getDropdownRepositionListener());\n */\nexport const getDropdownRepositionListener = () =>\n debounceAction(handleDropdownRepositions);\n\n/**\n * Checks for all dropdowns on the page which have the attribute 'data-repositioning-dropdown', signalling\n * they should dynamically change between dropping downwards or upwards, depending on viewport position.\n *\n * Any dropdowns not fully in view when dropping down will be switched to dropping upwards.\n */\nconst handleDropdownRepositions = () => {\n // Select all of the dropdowns which should reposition\n const allRepositioningDropdowns = document.querySelectorAll(\n '[data-repositioning-dropdown]',\n );\n\n for (const element of allRepositioningDropdowns) {\n // Default to dropping downwards\n element.classList.remove('reverse');\n\n const isDropdownCurrentlyOpen = element.style.display === 'block';\n\n if (!isDropdownCurrentlyOpen) {\n // We can't determine position on an element with display:none, so we \"show\" the dropdown with 0 opacity very temporarily\n element.style.opacity = 0;\n element.style.display = 'block';\n }\n\n if (!isInViewport({ element })) {\n // If the element isn't fully visible when dropping down, reverse the direction\n element.classList.add('reverse');\n }\n\n if (!isDropdownCurrentlyOpen) {\n // Revert the temporary changes to determine position\n element.style.removeProperty('display');\n element.style.removeProperty('opacity');\n }\n }\n};\n\n/**\n * Helper query string to identify interactive/focusable HTML elements\n */\nconst INTERACTIVE_ELEMENTS_QUERY =\n 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex=\"0\"]';\n\n/**\n * Open the given dropdown, updating aria attributes, and focusing the first interactive element\n *\n * @param {Object} args\n * @param {string} args.triggerElementId The id of the button which activates the dropdown\n * @param {string} args.dropdownContent The id of the dropdown content element\n */\nconst openDropdown = ({ triggerElementId, dropdownContentId }) => {\n const dropdownContent = document.getElementById(dropdownContentId);\n const triggerElement = document.getElementById(triggerElementId);\n\n triggerElement.setAttribute('aria-expanded', 'true');\n\n // Style set inline to prevent specificity issues\n dropdownContent.style.display = 'block';\n\n // Send focus to the first suitable element\n dropdownContent.querySelector(INTERACTIVE_ELEMENTS_QUERY)?.focus();\n};\n\n/**\n * Close the given dropdown, updating aria attributes\n *\n * @param {Object} args\n * @param {string} args.triggerElementId The id of the button which activates the dropdown\n * @param {string} args.dropdownContent The id of the dropdown content element\n * @param {Function} args.onClose Optional function for any side-effects which should occur on dropdown close\n */\nconst closeDropdown = ({ triggerElementId, dropdownContentId, onClose }) => {\n const dropdownContent = document.getElementById(dropdownContentId);\n\n if (!dropdownContent) {\n // Component may have unmounted\n return;\n }\n\n document\n .getElementById(triggerElementId)\n ?.setAttribute('aria-expanded', 'false');\n\n // Remove the inline style added when we opened the dropdown\n dropdownContent.style.removeProperty('display');\n\n onClose?.();\n};\n\n/**\n * A helper function to initialize dropdown behaviors. This function attaches open/close click and keyup listeners,\n * and makes sure relevant aria properties and keyboard focus are updated.\n *\n * @param {Object} args\n * @param {string} args.triggerButtonElementId The ID of the button which triggers the dropdown open/close behavior\n * @param {string} args.dropdownContentId The ID of the dropdown content which should open/close on trigger button press\n * @param {string} args.dropdownContentCloseButtonId Optional ID of any button within the dropdown content which should close the dropdown\n * @param {Function} args.onClose An optional callback for when the dropdown is closed. This can be passed to execute any side-effects required when the dropdown closes.\n * @param {Function} args.onOpen An optional callback for when the dropdown is opened. This can be passed to execute any side-effects required when the dropdown opens.\n *\n * @returns {{closeDropdown: Function}} Object with callback to close the initialized dropdown\n */\nexport const initializeDropdown = ({\n triggerElementId,\n dropdownContentId,\n dropdownContentCloseButtonId,\n onClose,\n onOpen,\n}) => {\n const triggerButton = document.getElementById(triggerElementId);\n const dropdownContent = document.getElementById(dropdownContentId);\n\n if (!triggerButton || !dropdownContent) {\n // The required props haven't been provided, do nothing\n return;\n }\n\n // Ensure default values have been applied\n triggerButton.setAttribute('aria-expanded', 'false');\n triggerButton.setAttribute('aria-controls', dropdownContentId);\n triggerButton.setAttribute('aria-haspopup', 'true');\n\n const keyUpListener = ({ key }) => {\n if (key === 'Escape') {\n // Close the dropdown and return focus to the trigger button to prevent focus being lost\n const isCurrentlyOpen =\n triggerButton.getAttribute('aria-expanded') === 'true';\n if (isCurrentlyOpen) {\n closeDropdown({\n triggerElementId,\n dropdownContentId,\n onClose: onCloseCleanupActions,\n });\n triggerButton.focus();\n }\n } else if (key === 'Tab') {\n // Close the dropdown if the user has tabbed away from it\n const isInsideDropdown = dropdownContent?.contains(\n document.activeElement,\n );\n if (!isInsideDropdown) {\n closeDropdown({\n triggerElementId,\n dropdownContentId,\n onClose: onCloseCleanupActions,\n });\n }\n }\n };\n\n // Close the dropdown if user has clicked outside\n const clickOutsideListener = ({ target }) => {\n if (\n target !== triggerButton &&\n !dropdownContent.contains(target) &&\n !triggerButton.contains(target)\n ) {\n closeDropdown({\n triggerElementId,\n dropdownContentId,\n onClose: onCloseCleanupActions,\n });\n\n // If the user did not click on another interactive item, return focus to the trigger\n if (!target.matches(INTERACTIVE_ELEMENTS_QUERY)) {\n triggerButton.focus();\n }\n }\n };\n\n // Any necessary side effects required on dropdown close\n const onCloseCleanupActions = () => {\n onClose?.();\n document.removeEventListener('keyup', keyUpListener);\n document.removeEventListener('click', clickOutsideListener);\n };\n\n // Add the main trigger button toggle funcationality\n triggerButton.addEventListener('click', () => {\n if (\n document\n .getElementById(triggerElementId)\n ?.getAttribute('aria-expanded') === 'true'\n ) {\n closeDropdown({\n triggerElementId,\n dropdownContentId,\n onClose: onCloseCleanupActions,\n });\n } else {\n openDropdown({\n triggerElementId,\n dropdownContentId,\n });\n onOpen?.();\n\n document.addEventListener('keyup', keyUpListener);\n document.addEventListener('click', clickOutsideListener);\n }\n });\n\n if (dropdownContentCloseButtonId) {\n // The dropdown content has a 'close' button inside that we also need to handle\n document\n .getElementById(dropdownContentCloseButtonId)\n ?.addEventListener('click', () => {\n closeDropdown({\n triggerElementId,\n dropdownContentId,\n onClose: onCloseCleanupActions,\n });\n\n document.getElementById(triggerElementId)?.focus();\n });\n }\n\n return {\n closeDropdown: () => {\n closeDropdown({\n triggerElementId,\n dropdownContentId,\n onClose: onCloseCleanupActions,\n });\n },\n };\n};\n","import debounce from 'lodash.debounce';\n\n/**\n * A util function to wrap any action with lodash's `debounce` (https://lodash.com/docs/#debounce).\n * To use this util, wrap it in the util like so: debounceAction(onSearchBoxType.bind(this));\n *\n * By default, this util uses a default time of 300ms, and includes a default config of `{ leading: false }`.\n * These values can be overridden: debounceAction(this.onSearchBoxType.bind(this), { time: 100, config: { leading: true }});\n *\n *\n * @param {Function} action - The function that should be wrapped with `debounce`.\n * @param {Number} [time=300] - The number of milliseconds to wait.\n * @param {Object} [config={ leading: false }] - Any configuration for the debounce function.\n *\n * @returns {Function} A function wrapped in `debounce`.\n */\nexport function debounceAction(\n action,\n { time = 300, config = { leading: false } } = {},\n) {\n const configs = { ...config };\n return debounce(action, time, configs);\n}\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport { FocusTrap } from '../../shared/components/focusTrap';\nimport { defaultChildrenPropTypes } from '../../common-prop-types';\nimport { Button } from '@crayons';\n\nfunction getAdditionalClassNames({ size, className }) {\n let additionalClassNames = '';\n\n if (size && size.length > 0 && size !== 'default') {\n additionalClassNames += ` crayons-modal--${size}`;\n }\n\n if (className && className.length > 0) {\n additionalClassNames += ` ${className}`;\n }\n\n return additionalClassNames;\n}\n\nconst CloseIcon = () => (\n \n Close\n \n \n);\n\n/**\n * A modal component which can be presented with or without an overlay.\n * The modal is presented within a focus trap for accessibility purposes - please note that the selector used for the focusTrap must be unique on the given page, otherwise focus may be trapped on the wrong element.\n *\n * @param {Object} props\n * @param {Array} props.children The content to be displayed inside the Modal. Can be provided by composition (see example).\n * @param {string} props.size The desired modal size ('s', 'm' or 'default')\n * @param {string} props.className Optional additional classnames to apply to the modal container\n * @param {string} props.title The title to be displayed in the modal heading. If provided, a title bar with a close button will be displayed.\n * @param {boolean} props.overlay Whether or not to show a semi-opaque overlay behind the modal\n * @param {Function} props.onClose Callback for any function to be executed on close button click or Escape\n * @param {boolean} props.closeOnClickOutside Whether the modal should close if the user clicks outside of it\n * @param {string} props.focusTrapSelector The CSS selector for where to trap the user's focus. This should be unique to the page in which the modal is presented.\n *\n * @example\n * \n
\n

Some modal content

\n
\n \n */\nexport const Modal = ({\n children,\n size,\n className,\n title,\n overlay = true,\n onClose = () => {},\n closeOnClickOutside = false,\n focusTrapSelector = '.crayons-modal',\n}) => {\n return (\n \n \n \n {title && (\n
\n

{title}

\n \n
\n )}\n
{children}
\n \n {overlay && (\n \n )}\n \n \n );\n};\n\nModal.displayName = 'Modal';\n\nModal.defaultProps = {\n size: 'default',\n};\n\nModal.propTypes = {\n children: defaultChildrenPropTypes.isRequired,\n className: PropTypes.string,\n title: PropTypes.string.isRequired,\n overlay: PropTypes.bool,\n onClose: PropTypes.func,\n size: PropTypes.oneOf(['default', 's', 'm']).isRequired,\n focusTrapSelector: PropTypes.string,\n};\n","import { h } from 'preact';\n\nexport const Spinner = () => (\n \n \n \n);\n","import I18n from \"i18n-js\"\nconst translationsDiv = document.getElementById('i18n-translations')\nif (translationsDiv) {\n I18n.translations = JSON.parse(translationsDiv.dataset.translations);\n}\nI18n.defaultLocale = 'en';\nI18n.locale = document.body.dataset.locale;\nexport function locale(term) {\n return I18n.t(term);\n}","import { h } from 'preact';\nimport { defaultChildrenPropTypes } from '../../common-prop-types/default-children-prop-types';\n\nexport const ButtonGroup = ({ children }) => (\n
\n {children}\n
\n);\n\nButtonGroup.displayName = 'ButtonGroup';\n\nButtonGroup.propTypes = {\n children: defaultChildrenPropTypes,\n};\n","import { h } from 'preact';\nimport { useLayoutEffect, useState } from 'preact/hooks';\nimport PropTypes from 'prop-types';\nimport { defaultChildrenPropTypes } from '../../common-prop-types/default-children-prop-types';\nimport { initializeDropdown } from '@utilities/dropdownUtils';\n\n/**\n * A component to render a dropdown with the provided children.\n * This component handles the attachment of all open/close click events and listeners.\n *\n * @param {Object} props\n * @param {Array} props.children Children to be rendered inside the dropdown, passed via composition\n * @param {String} props.className Optional string of classnames to be applied to the dropdown (e.g for positioning)\n * @param {String} props.triggerButtonId The ID of the button element which should open and close the dropdown\n * @param {String} props.dropdownContentId The ID to be applied to the dropdown itself\n * @param {String} props.dropdownContentCloseButtonId An optional ID for any button inside the dropdown content itself which should close it\n * @param {Function} props.onOpen Optional callback for any side-effects needed when the dropdown opens\n * @param {Function} props.onClose Optional callback for any side-effects needed when the dropdown closes\n *\n * @example\n *
\n * \n * \n * {dropdownInnerContent}\n * \n *
\n */\nexport const Dropdown = ({\n children,\n className,\n triggerButtonId,\n dropdownContentId,\n dropdownContentCloseButtonId,\n onOpen = () => {},\n onClose = () => {},\n ...restOfProps\n}) => {\n const [isInitialized, setIsInitialized] = useState(false);\n useLayoutEffect(() => {\n if (!isInitialized) {\n initializeDropdown({\n triggerElementId: triggerButtonId,\n dropdownContentId,\n dropdownContentCloseButtonId,\n onOpen,\n onClose,\n });\n\n setIsInitialized(true);\n }\n }, [\n dropdownContentId,\n triggerButtonId,\n dropdownContentCloseButtonId,\n isInitialized,\n onOpen,\n onClose,\n ]);\n\n return (\n 0 ? ` ${className}` : ''\n }`}\n {...restOfProps}\n >\n {children}\n \n );\n};\n\nDropdown.defaultProps = {\n className: undefined,\n};\n\nDropdown.displayName = 'Dropdown';\n\nDropdown.propTypes = {\n children: defaultChildrenPropTypes.isRequired,\n className: PropTypes.string,\n triggerButtonId: PropTypes.string.isRequired,\n dropdownContentId: PropTypes.string.isRequired,\n dropdownContentCloseButtonId: PropTypes.string,\n onOpen: PropTypes.func,\n onClose: PropTypes.func,\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport { defaultChildrenPropTypes } from '../../../common-prop-types';\n\n// Only radio and checkboxes require an additional CSS class (variant class). Other form elements do not.\n\nexport const FormField = ({ children, variant }) => {\n return (\n 0 ? ` crayons-field--${variant}` : ''\n }`}\n >\n {children}\n \n );\n};\n\nFormField.displayName = 'FormField';\n\nFormField.defaultProps = {\n variant: undefined,\n};\n\nFormField.propTypes = {\n children: defaultChildrenPropTypes.isRequired,\n variant: PropTypes.oneOf(['radio', 'checkbox']),\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\n\nexport const RadioButton = (props) => {\n const { id, value, name, className, checked, onClick, ...otherProps } = props;\n\n return (\n 0 ? ` ${className}` : ''\n }`}\n checked={checked}\n onClick={onClick}\n type=\"radio\"\n {...otherProps}\n />\n );\n};\n\nRadioButton.displayName = 'RadioButton';\n\nRadioButton.defaultProps = {\n id: undefined,\n className: undefined,\n checked: false,\n name: undefined,\n};\n\nRadioButton.propTypes = {\n id: PropTypes.string,\n value: PropTypes.string.isRequired,\n className: PropTypes.string,\n checked: PropTypes.bool,\n name: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport { defaultChildrenPropTypes } from '../../common-prop-types';\nimport { FocusTrap } from '../../shared/components/focusTrap';\n\n/**\n * A component that creates a full-width modal that slides in from the bottom of viewport.\n *\n *\n * @param {object} props\n * @param {Array} props.children\n * @param {string} props.title The title to be applied to the dialog, surfaced to screen reader users\n * @param {Function} props.onClose Action to complete when user opts to close the drawer\n *\n * @example\n * const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n * return (\n *
\n * \n * {isDrawerOpen && (\n * setIsDrawerOpen(false)}\n * >\n *

Lorem ipsum

\n * \n * \n * )}\n *
\n * );\n */\nexport const MobileDrawer = ({ children, title, onClose = () => {} }) => {\n return (\n
\n
\n \n \n {children}\n
\n \n
\n );\n};\n\nMobileDrawer.propTypes = {\n children: defaultChildrenPropTypes.isRequired,\n title: PropTypes.string.isRequired,\n onClose: PropTypes.func,\n};\n","import { h, Fragment } from 'preact';\nimport { useState } from 'preact/hooks';\nimport PropTypes from 'prop-types';\nimport { MobileDrawer } from '@crayons/MobileDrawer';\nimport { Button } from '@crayons/Button';\n\nconst OverflowIcon = () => (\n \n \n \n);\n\nconst CheckIcon = () => (\n \n \n \n);\n\n/**\n * Renders a page heading with a button which activates a with a list of the given navigation links.\n *\n * @param {object} props\n * @param {number} headingLevel The level of heading to render as the page title (e.g. 1-6)\n * @param {string} navigationTitle The title to be used for the navigation element (e.g. 'Feed timeframes')\n * @param {Array} navigationLinks An array of navigationLink objects to display\n *\n * @example\n * \n */\nexport const MobileDrawerNavigation = ({\n headingLevel,\n navigationTitle,\n navigationLinks,\n}) => {\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n const currentPage = navigationLinks.find((item) => item.isCurrentPage);\n\n const Heading = `h${headingLevel}`;\n\n return (\n \n
\n {currentPage.displayName}\n setIsDrawerOpen(true)}\n />\n
\n\n {isDrawerOpen && (\n setIsDrawerOpen(false)}\n >\n \n setIsDrawerOpen(false)}\n >\n Cancel\n \n
\n )}\n \n );\n};\n\nMobileDrawerNavigation.propTypes = {\n headingLevel: PropTypes.oneOf([1, 2, 3, 4, 5, 6]).isRequired,\n navigationTitle: PropTypes.string.isRequired,\n navigationLinks: PropTypes.arrayOf(\n PropTypes.shape({\n url: PropTypes.string,\n isCurrentPage: PropTypes.bool,\n displayName: PropTypes.string,\n }),\n ).isRequired,\n};\n","import PropTypes from 'prop-types';\n\nexport const userPropTypes = PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n profile_image_url: PropTypes.string.isRequired,\n summary: PropTypes.string.isRequired,\n});\n","import PropTypes from 'prop-types';\n\nexport const selectedTagsPropTypes = PropTypes.shape({\n tags: PropTypes.arrayOf(PropTypes.string).isRequired,\n onClick: PropTypes.func.isRequired,\n onKeyPress: PropTypes.func.isRequired,\n});\n","import{useState as n,useReducer as t,useEffect as e,useLayoutEffect as r,useRef as u,useImperativeHandle as o,useMemo as i,useCallback as l,useContext as c,useDebugValue as f}from\"preact/hooks\";export*from\"preact/hooks\";import{Component as a,createElement as s,options as h,toChildArray as d,Fragment as v,render as p,hydrate as m,cloneElement as y,createRef as b,createContext as _}from\"preact\";export{createElement,createContext,createRef,Fragment,Component}from\"preact\";function S(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function E(n){this.props=n}function g(n,t){function e(n){var e=this.props.ref,r=e==n.ref;return!r&&e&&(e.call?e(null):e.current=null),t?!t(this.props,n)||!r:C(this.props,n)}function r(t){return this.shouldComponentUpdate=e,s(n,t)}return r.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",r.prototype.isReactComponent=!0,r.__f=!0,r}(E.prototype=new a).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var w=h.__b;h.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),w&&w(n)};var R=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function x(n){function t(t,e){var r=S({},t);return delete r.ref,n(r,(e=t.ref||e)&&(\"object\"!=typeof e||\"current\"in e)?e:null)}return t.$$typeof=R,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var N=function(n,t){return null==n?null:d(d(n).map(t))},k={map:N,forEach:N,count:function(n){return n?d(n).length:0},only:function(n){var t=d(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:d},A=h.__e;h.__e=function(n,t,e){if(n.then)for(var r,u=t;u=u.__;)if((r=u.__c)&&r.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),r.__c(n,t);A(n,t,e)};var O=h.unmount;function L(){this.__u=0,this.t=null,this.__b=null}function U(n){var t=n.__.__c;return t&&t.__e&&t.__e(n)}function F(n){var t,e,r;function u(u){if(t||(t=n()).then(function(n){e=n.default||n},function(n){r=n}),r)throw r;if(!e)throw t;return s(e,u)}return u.displayName=\"Lazy\",u.__f=!0,u}function M(){this.u=null,this.o=null}h.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),O&&O(n)},(L.prototype=new a).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=U(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__e){var n=r.state.__e;r.__v.__k[0]=function n(t,e,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)}),t.__c&&t.__c.__P===e&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate()}},c=!0===t.__h;r.__u++||c||r.setState({__e:r.__b=r.__v.__k[0]}),n.then(i,i)},L.prototype.componentWillUnmount=function(){this.t=[]},L.prototype.render=function(n,t){if(this.__b){if(this.__v.__k){var e=document.createElement(\"div\"),r=this.__v.__k[0].__c;this.__v.__k[0]=function n(t,e,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),t.__c.__H=null),null!=(t=S({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=e),t.__c=null),t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)})),t}(this.__b,e,r.__O=r.__P)}this.__b=null}var u=t.__e&&s(v,null,n.fallback);return u&&(u.__h=null),[s(v,null,t.__e?null:n.children),u]};var T=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]>>1,1),t.i.removeChild(n)}}),p(s(D,{context:t.context},n.__v),t.l)):t.l&&t.componentWillUnmount()}function W(n,t){return s(I,{__v:n,i:t})}(M.prototype=new a).__e=function(n){var t=this,e=U(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),T(t,n,r)):u()};e?e(o):o()}},M.prototype.render=function(n){this.u=null,this.o=new Map;var t=d(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},M.prototype.componentDidUpdate=M.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){T(n,e,t)})};var j=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,P=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,V=\"undefined\"!=typeof document,z=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};function B(n,t,e){return null==t.__k&&(t.textContent=\"\"),p(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function H(n,t,e){return m(n,t),\"function\"==typeof e&&e(),n?n.__c:null}a.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(n){Object.defineProperty(a.prototype,n,{configurable:!0,get:function(){return this[\"UNSAFE_\"+n]},set:function(t){Object.defineProperty(this,n,{configurable:!0,writable:!0,value:t})}})});var Z=h.event;function Y(){}function $(){return this.cancelBubble}function q(){return this.defaultPrevented}h.event=function(n){return Z&&(n=Z(n)),n.persist=Y,n.isPropagationStopped=$,n.isDefaultPrevented=q,n.nativeEvent=n};var G,J={configurable:!0,get:function(){return this.class}},K=h.vnode;h.vnode=function(n){var t=n.type,e=n.props,r=e;if(\"string\"==typeof t){var u=-1===t.indexOf(\"-\");for(var o in r={},e){var i=e[o];V&&\"children\"===o&&\"noscript\"===t||\"value\"===o&&\"defaultValue\"in e&&null==i||(\"defaultValue\"===o&&\"value\"in e&&null==e.value?o=\"value\":\"download\"===o&&!0===i?i=\"\":/ondoubleclick/i.test(o)?o=\"ondblclick\":/^onchange(textarea|input)/i.test(o+t)&&!z(e.type)?o=\"oninput\":/^on(Ani|Tra|Tou|BeforeInp)/.test(o)?o=o.toLowerCase():u&&P.test(o)?o=o.replace(/[A-Z0-9]/,\"-$&\").toLowerCase():null===i&&(i=void 0),r[o]=i)}\"select\"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=d(e.children).forEach(function(n){n.props.selected=-1!=r.value.indexOf(n.props.value)})),\"select\"==t&&null!=r.defaultValue&&(r.value=d(e.children).forEach(function(n){n.props.selected=r.multiple?-1!=r.defaultValue.indexOf(n.props.value):r.defaultValue==n.props.value})),n.props=r}t&&e.class!=e.className&&(J.enumerable=\"className\"in e,null!=e.className&&(r.class=e.className),Object.defineProperty(r,\"className\",J)),n.$$typeof=j,K&&K(n)};var Q=h.__r;h.__r=function(n){Q&&Q(n),G=n.__c};var X={ReactCurrentDispatcher:{current:{readContext:function(n){return G.__n[n.__c].props.value}}}},nn=\"17.0.2\";function tn(n){return s.bind(null,n)}function en(n){return!!n&&n.$$typeof===j}function rn(n){return en(n)?y.apply(null,arguments):n}function un(n){return!!n.__k&&(p(null,n),!0)}function on(n){return n&&(n.base||1===n.nodeType&&n)||null}var ln=function(n,t){return n(t)},cn=function(n,t){return n(t)},fn=v;export default{useState:n,useReducer:t,useEffect:e,useLayoutEffect:r,useRef:u,useImperativeHandle:o,useMemo:i,useCallback:l,useContext:c,useDebugValue:f,version:\"17.0.2\",Children:k,render:B,hydrate:H,unmountComponentAtNode:un,createPortal:W,createElement:s,createContext:_,createFactory:tn,cloneElement:rn,createRef:b,Fragment:v,isValidElement:en,findDOMNode:on,Component:a,PureComponent:E,memo:g,forwardRef:x,flushSync:cn,unstable_batchedUpdates:ln,StrictMode:v,Suspense:L,SuspenseList:M,lazy:F,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:X};export{nn as version,k as Children,B as render,H as hydrate,un as unmountComponentAtNode,W as createPortal,tn as createFactory,rn as cloneElement,en as isValidElement,on as findDOMNode,E as PureComponent,g as memo,x as forwardRef,cn as flushSync,ln as unstable_batchedUpdates,fn as StrictMode,L as Suspense,M as SuspenseList,F as lazy,X as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED};\n//# sourceMappingURL=compat.module.js.map\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. ¯\\_(ツ)_/¯\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n","// These styles are applied to the hidden element we use to measure the height.\n// !important styles are used to ensure no matter what style properties are attached to the given textarea, the hidden textarea will never become visible or cause layout jumps\nconst HIDDEN_TEXTAREA_STYLE = `\nmin-height:0 !important;\nmax-height:none !important;\nheight:0 !important;\nvisibility:hidden !important;\noverflow:hidden !important;\nposition:absolute !important;\nz-index:-1000 !important;\ntop:0 !important;\nright:0 !important\n`;\n\nconst SIZING_STYLE = [\n 'letter-spacing',\n 'line-height',\n 'padding-top',\n 'padding-bottom',\n 'font-family',\n 'font-weight',\n 'font-size',\n 'text-rendering',\n 'text-transform',\n 'width',\n 'text-indent',\n 'padding-left',\n 'padding-right',\n 'border-width',\n 'box-sizing',\n];\n\nlet hiddenTextarea;\n\n/**\n * Helper function to get the height of the textarea based on the current text content\n *\n * @param {HTMLElement} uiTextNode The textarea to measure height of\n *\n * @returns {{height: number}} Object with the calculated height\n */\nexport const calculateTextAreaHeight = (uiTextNode) => {\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n document.body.appendChild(hiddenTextarea);\n }\n\n // Copy all CSS properties that have an impact on the height of the content in\n // the textbox\n const {\n paddingSize,\n borderSize,\n boxSizing,\n sizingStyle,\n } = calculateNodeStyling(uiTextNode);\n\n // Need to have the overflow attribute to hide the scrollbar otherwise\n // text-lines will not calculated properly as the shadow will technically be\n // narrower for content\n hiddenTextarea.setAttribute(\n 'style',\n `${sizingStyle};${HIDDEN_TEXTAREA_STYLE}`,\n );\n hiddenTextarea.value = uiTextNode.value || uiTextNode.placeholder || 'x';\n\n const baseHeight = hiddenTextarea.scrollHeight;\n\n if (boxSizing === 'border-box') {\n // border-box: add border, since height = content + padding + border\n return { height: baseHeight + borderSize };\n } else if (boxSizing === 'content-box') {\n // remove padding, since height = content\n return { height: baseHeight - paddingSize };\n }\n\n return { height: baseHeight };\n};\n\nconst calculateNodeStyling = (node) => {\n const style = window.getComputedStyle(node);\n\n const boxSizing =\n style.getPropertyValue('box-sizing') ||\n style.getPropertyValue('-moz-box-sizing') ||\n style.getPropertyValue('-webkit-box-sizing');\n\n const paddingSize =\n parseFloat(style.getPropertyValue('padding-bottom')) +\n parseFloat(style.getPropertyValue('padding-top'));\n\n const borderSize =\n parseFloat(style.getPropertyValue('border-bottom-width')) +\n parseFloat(style.getPropertyValue('border-top-width'));\n\n const sizingStyle = SIZING_STYLE.map(\n (name) => `${name}:${style.getPropertyValue(name)}`,\n ).join(';');\n\n return {\n sizingStyle,\n paddingSize,\n borderSize,\n boxSizing,\n };\n};\n","import { useEffect, useState } from 'preact/hooks';\nimport { calculateTextAreaHeight } from '@utilities/calculateTextAreaHeight';\n\n/**\n * A helper function to get the X/Y coordinates of the current cursor position within an element.\n * For a full explanation see the post by Jhey Tompkins: https://medium.com/@jh3y/how-to-where-s-the-caret-getting-the-xy-position-of-the-caret-a24ba372990a\n *\n * @param {element} input The DOM element the cursor is to be found within\n * @param {number} selectionPoint The current cursor position (e.g. either selectionStart or selectionEnd)\n *\n * @returns {object} An object with x and y properties (e.g. {x: 10, y: 0})\n *\n * @example\n * const coordinates = getCursorXY(elementRef.current, elementRef.current.selectionStart)\n */\nexport const getCursorXY = (input, selectionPoint) => {\n const bodyRect = document.body.getBoundingClientRect();\n const elementRect = input.getBoundingClientRect();\n\n const inputY = elementRect.top - bodyRect.top - input.scrollTop;\n const inputX = elementRect.left - bodyRect.left - input.scrollLeft;\n\n // create a dummy element with the computed style of the input\n const div = document.createElement('div');\n const copyStyle = getComputedStyle(input);\n for (const prop of copyStyle) {\n div.style[prop] = copyStyle[prop];\n }\n\n // set the div to the correct position\n div.style['position'] = 'absolute';\n div.style['top'] = `${inputY}px`;\n div.style['left'] = `${inputX}px`;\n div.style['opacity'] = 0;\n\n // replace whitespace with '.' when filling the dummy element if it's a single line \n const swap = '.';\n const inputValue =\n input.tagName === 'INPUT' ? input.value.replace(/ /g, swap) : input.value;\n\n // set the div content to that of the textarea up until selection point\n div.textContent = inputValue.substr(0, selectionPoint);\n\n if (input.tagName === 'TEXTAREA') div.style.height = 'auto';\n // if a single line input then the div needs to be single line and not break out like a text area\n if (input.tagName === 'INPUT') div.style.width = 'auto';\n\n // marker element to obtain caret position\n const span = document.createElement('span');\n // give the span the textContent of remaining content so that the recreated dummy element is as close as possible\n span.textContent = inputValue.substr(selectionPoint) || '.';\n\n // append the span marker to the div and the dummy element to the body\n div.appendChild(span);\n document.body.appendChild(div);\n\n // get the marker position, this is the caret position top and left relative to the input\n const { offsetLeft: spanX, offsetTop: spanY } = span;\n\n // remove dummy element\n document.body.removeChild(div);\n\n // return object with the x and y of the caret. account for input positioning so that you don't need to wrap the input\n return {\n x: inputX + spanX,\n y: inputY + spanY,\n };\n};\n\n/**\n * A helper function that searches back to the beginning of the currently typed word (indicated by cursor position) and verifies whether it begins with an '@' symbol for user mention\n *\n * @param {element} textArea The text area or input to inspect the current word of\n * @returns {{isUserMention: boolean, indexOfMentionStart: number}} Object with the word's mention data\n *\n * @example\n * const { isUserMention, indexOfMentionStart } = getMentionWordData(textArea);\n * if (isUserMention) {\n * // Do something\n * }\n */\nexport const getMentionWordData = (textArea) => {\n const { selectionStart, value: valueBeforeKeystroke } = textArea;\n\n if (selectionStart === 0 || valueBeforeKeystroke === '') {\n return {\n isUserMention: false,\n indexOfMentionStart: -1,\n };\n }\n\n const indexOfAutocompleteStart = getLastIndexOfCharacter({\n content: valueBeforeKeystroke,\n selectionIndex: selectionStart,\n character: '@',\n breakOnCharacters: [' ', '', '\\n'],\n });\n\n return {\n isUserMention: indexOfAutocompleteStart !== -1,\n indexOfMentionStart: indexOfAutocompleteStart,\n };\n};\n\n/**\n * Searches backwards through text content for the last occurence of the given character\n *\n * @param {Object} params\n * @param {string} content The chunk of text to search within\n * @param {number} selectionIndex The starting point to search from\n * @param {string} character The character to search for\n * @param {string[]} breakOnCharacters Any characters which should result in an immediate halt to the search\n * @returns {number} Index of the last occurence of the character, or -1 if it isn't found\n */\nexport const getLastIndexOfCharacter = ({\n content,\n selectionIndex,\n character,\n breakOnCharacters = [],\n}) => {\n const currentCharacter = content.charAt(selectionIndex);\n const previousCharacter = content.charAt(selectionIndex - 1);\n\n if (currentCharacter === character) {\n return selectionIndex;\n }\n\n if (selectionIndex !== 0 && !breakOnCharacters.includes(previousCharacter)) {\n return getLastIndexOfCharacter({\n content,\n selectionIndex: selectionIndex - 1,\n character,\n breakOnCharacters,\n });\n }\n\n return -1;\n};\n\n/**\n * Searches forwards through text content for the next occurence of the given character\n *\n * @param {Object} params\n * @param {string} content The chunk of text to search within\n * @param {number} selectionIndex The starting point to search from\n * @param {string} character The character to search for\n * @param {string[]} breakOnCharacters Any characters which should result in an immediate halt to the search\n * @returns {number} Index of the next occurence of the character, or -1 if it isn't found\n */\nexport const getNextIndexOfCharacter = ({\n content,\n selectionIndex,\n character,\n breakOnCharacters = [],\n}) => {\n const currentCharacter = content.charAt(selectionIndex);\n const nextCharacter = content.charAt(selectionIndex + 1);\n\n if (currentCharacter === character) {\n return selectionIndex;\n }\n\n if (\n selectionIndex <= content.length &&\n !breakOnCharacters.includes(nextCharacter)\n ) {\n return getNextIndexOfCharacter({\n content,\n selectionIndex: selectionIndex + 1,\n character,\n breakOnCharacters,\n });\n }\n\n return -1;\n};\n\n/**\n * Retrieve data about the user's current text selection\n *\n * @param {Object} params\n * @param {number} selectionStart The start point of user's selection\n * @param {number} selectionEnd The end point of user's selection\n * @param {string} value The current value of the textarea\n * @returns {Object} object containing the text chunks before and after insertion, and the currently selected text\n */\nexport const getSelectionData = ({ selectionStart, selectionEnd, value }) => ({\n textBeforeSelection: value.substring(0, selectionStart),\n textAfterSelection: value.substring(selectionEnd, value.length),\n selectedText: value.substring(selectionStart, selectionEnd),\n});\n\n/**\n * This hook can be used to keep the height of a textarea in step with the current content height, avoiding a scrolling textarea.\n * An optional array of additional elements can be set. If provided, all elements will be set to the greatest content height.\n * Optionally, it can be specified to also constrain the max-height to the content height. Otherwise the max-height will continue to be managed only by the textarea's CSS\n *\n * @example\n *\n * const { setTextArea } = useTextAreaAutoResize();\n * setTextArea(myTextAreaRef.current);\n * setAdditionalElements([myOtherElement.current]);\n */\nexport const useTextAreaAutoResize = () => {\n const [textArea, setTextArea] = useState(null);\n const [constrainToContentHeight, setConstrainToContentHeight] =\n useState(false);\n const [additionalElements, setAdditionalElements] = useState([]);\n\n useEffect(() => {\n if (!textArea) {\n return;\n }\n\n const resizeTextArea = () => {\n const allElements = [textArea, ...additionalElements];\n\n const allContentHeights = allElements.map(\n (element) => calculateTextAreaHeight(element).height,\n );\n\n const height = Math.max(...allContentHeights);\n const newHeight = `${height}px`;\n\n [textArea, ...additionalElements].forEach((element) => {\n element.style['min-height'] = newHeight;\n if (constrainToContentHeight) {\n // Don't allow the textarea to grow to a size larger than the content\n element.style['max-height'] = newHeight;\n }\n });\n };\n\n // Resize on first attach\n resizeTextArea();\n // Resize on subsequent value changes\n textArea.addEventListener('input', resizeTextArea);\n\n return () => textArea.removeEventListener('input', resizeTextArea);\n }, [textArea, additionalElements, constrainToContentHeight]);\n\n return { setTextArea, setAdditionalElements, setConstrainToContentHeight };\n};\n","// eslint-disable-next-line consistent-return\nexport function handleFetchAPIErrors(response) {\n // pass along a correct response\n if (response.ok) {\n return response;\n }\n\n // API errors contain the error message in {\"error\": \"error message\"}\n // but they could be unhandled 500 errors\n try {\n response.json().then((data) => {\n throw new Error(data.error);\n });\n } catch (e) {\n if (e instanceof SyntaxError) {\n throw new Error(response.statusText);\n } else {\n throw e;\n }\n }\n}\n","import PropTypes from 'prop-types';\n\n// Use this whenever you need the standard children prop.\nexport const defaultChildrenPropTypes = PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n PropTypes.object,\n PropTypes.arrayOf(PropTypes.object),\n]);\n"],"sourceRoot":""}