{"version":3,"sources":["webpack:///./node_modules/preact/dist/preact.module.js","webpack:///./app/javascript/utilities/calculateTextAreaHeight.js","webpack:///./app/javascript/utilities/textAreaUtils.js","webpack:///./app/javascript/crayons/Buttons/Button.jsx","webpack:///./app/javascript/crayons/Links/Link.jsx","webpack:///./app/javascript/crayons/CTAs/CTA.jsx","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/formElements/ColorPicker/ColorPicker.jsx","webpack:///./app/javascript/crayons/formElements/Toggles/Toggle.jsx","webpack:///./app/javascript/crayons/formElements/DateRangePicker/dateRangeUtils.js","webpack:///./app/javascript/crayons/formElements/DateRangePicker/DateRangePicker.jsx","webpack:///./app/javascript/crayons/Icons/Icon.jsx","webpack:///./app/javascript/crayons/MobileDrawer/MobileDrawer.jsx","webpack:///./app/javascript/crayons/MarkdownToolbar/markdownSyntaxFormatters.jsx","webpack:///./app/javascript/crayons/MarkdownToolbar/MarkdownToolbar.jsx","webpack:///./app/javascript/shared/components/defaultSelectionTemplate.jsx","webpack:///./app/javascript/crayons/MultiSelectAutocomplete/MultiSelectAutocomplete.jsx","webpack:///./app/javascript/common-prop-types/user-prop-types.js","webpack:///./app/javascript/common-prop-types/selected-tags-prop-types.js","webpack:///./app/javascript/utilities/runtime.js","webpack:///./app/javascript/shared/components/useMediaQuery.js","webpack:///./app/javascript/common-prop-types/default-children-prop-types.js","webpack:///./node_modules/bignumber.js/bignumber.js","webpack:///./app/javascript/Snackbar/index.js","webpack:///./app/javascript/utilities/viewport.js","webpack:///./app/javascript/utilities/dropdownUtils.js","webpack:///./app/javascript/utilities/debounceAction.js","webpack:///./app/javascript/shared/components/useKeyboardShortcuts.js","webpack:///./app/javascript/packs/validateFileInputs.js","webpack:///./app/javascript/Snackbar/SnackbarItem.jsx","webpack:///./app/javascript/shared/components/focusTrap.jsx","webpack:///./node_modules/lodash/isArray.js","webpack:///./app/javascript/utilities/locale.js","webpack:///./app/javascript/crayons/Modal/Modal.jsx","webpack:///./app/javascript/article-form/actions.js","webpack:///./app/javascript/common-prop-types/article-prop-types.js","webpack:///./app/javascript/utilities/http/errors.js","webpack:///./app/javascript/crayons/Button/index.js","webpack:///./app/javascript/crayons/Button/Button.jsx","webpack:///./app/javascript/crayons/Spinner/Spinner.jsx","webpack:///./app/javascript/Snackbar/Snackbar.jsx","webpack:///./app/javascript/crayons/AutocompleteTriggerTextArea/UserListItemContent.jsx","webpack:///./app/javascript/crayons/AutocompleteTriggerTextArea/AutocompleteTriggerTextArea.jsx","webpack:///./app/javascript/article-form/components/ClipboardButton.jsx","webpack:///./app/javascript/article-form/components/ImageUploader.jsx","webpack:///./app/javascript/utilities/http/csrfToken.js","webpack:///./app/javascript/utilities/http/request.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./app/javascript/utilities/search/index.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/isArrayLike.js","webpack:///./node_modules/lodash/identity.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/isArguments.js","webpack:///./node_modules/lodash/isLength.js","webpack:///./node_modules/lodash/_setToArray.js","webpack:///./node_modules/lodash/_isIterateeCall.js","webpack:///./node_modules/lodash/keys.js","webpack:///./node_modules/lodash/set.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_hasPath.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_SetCache.js","webpack:///./node_modules/lodash/_cacheHas.js","webpack:///./node_modules/lodash/_Set.js","webpack:///./node_modules/lodash/_hasUnicode.js","webpack:///./node_modules/lodash/toFinite.js","webpack:///./node_modules/lodash/_baseFlatten.js","webpack:///./node_modules/lodash/_arrayPush.js","webpack:///./node_modules/lodash/_Stack.js","webpack:///./node_modules/lodash/_baseIsEqual.js","webpack:///./node_modules/lodash/_equalArrays.js","webpack:///./node_modules/lodash/isBuffer.js","webpack:///./node_modules/lodash/isTypedArray.js","webpack:///./node_modules/lodash/_baseUnary.js","webpack:///./node_modules/lodash/_isStrictComparable.js","webpack:///./node_modules/lodash/_matchesStrictComparable.js","webpack:///./node_modules/i18n-js/dist/import/Locales.js","webpack:///./node_modules/i18n-js/dist/import/Pluralization.js","webpack:///./node_modules/i18n-js/dist/import/helpers/camelCaseKeys.js","webpack:///./node_modules/i18n-js/dist/import/helpers/isSet.js","webpack:///./node_modules/i18n-js/dist/import/helpers/expandRoundMode.js","webpack:///./node_modules/i18n-js/dist/import/helpers/roundNumber.js","webpack:///./node_modules/i18n-js/dist/import/helpers/formatNumber.js","webpack:///./node_modules/i18n-js/dist/import/helpers/getFullScope.js","webpack:///./node_modules/i18n-js/dist/import/helpers/inferType.js","webpack:///./node_modules/i18n-js/dist/import/helpers/interpolate.js","webpack:///./node_modules/i18n-js/dist/import/helpers/lookup.js","webpack:///./node_modules/i18n-js/dist/import/helpers/numberToHuman.js","webpack:///./node_modules/i18n-js/dist/import/helpers/numberToHumanSize.js","webpack:///./node_modules/i18n-js/dist/import/helpers/parseDate.js","webpack:///./node_modules/i18n-js/dist/import/helpers/pluralize.js","webpack:///./node_modules/i18n-js/dist/import/helpers/propertyFlatList.js","webpack:///./node_modules/i18n-js/dist/import/helpers/strftime.js","webpack:///./node_modules/i18n-js/dist/import/helpers/timeAgoInWords.js","webpack:///./node_modules/i18n-js/dist/import/MissingTranslation.js","webpack:///./node_modules/i18n-js/dist/import/I18n.js","webpack:///./node_modules/i18n-js/dist/import/helpers/createTranslationOptions.js","webpack:///./node_modules/i18n-js/dist/import/helpers/numberToDelimited.js","webpack:///./node_modules/lodash/has.js","webpack:///./node_modules/lodash/uniq.js","webpack:///./node_modules/lodash/camelCase.js","webpack:///./node_modules/lodash/repeat.js","webpack:///./node_modules/lodash/sortBy.js","webpack:///./node_modules/lodash/zipObject.js","webpack:///./node_modules/lodash/flattenDeep.js","webpack:///./node_modules/lodash/range.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_baseHas.js","webpack:///./node_modules/lodash/_baseIsArguments.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_baseUniq.js","webpack:///./node_modules/lodash/_setCacheAdd.js","webpack:///./node_modules/lodash/_setCacheHas.js","webpack:///./node_modules/lodash/_arrayIncludes.js","webpack:///./node_modules/lodash/_baseIndexOf.js","webpack:///./node_modules/lodash/_baseFindIndex.js","webpack:///./node_modules/lodash/_baseIsNaN.js","webpack:///./node_modules/lodash/_strictIndexOf.js","webpack:///./node_modules/lodash/_arrayIncludesWith.js","webpack:///./node_modules/lodash/_createSet.js","webpack:///./node_modules/lodash/noop.js","webpack:///./node_modules/lodash/capitalize.js","webpack:///./node_modules/lodash/upperFirst.js","webpack:///./node_modules/lodash/_createCaseFirst.js","webpack:///./node_modules/lodash/_castSlice.js","webpack:///./node_modules/lodash/_baseSlice.js","webpack:///./node_modules/lodash/_stringToArray.js","webpack:///./node_modules/lodash/_asciiToArray.js","webpack:///./node_modules/lodash/_unicodeToArray.js","webpack:///./node_modules/lodash/_createCompounder.js","webpack:///./node_modules/lodash/_arrayReduce.js","webpack:///./node_modules/lodash/deburr.js","webpack:///./node_modules/lodash/_deburrLetter.js","webpack:///./node_modules/lodash/_basePropertyOf.js","webpack:///./node_modules/lodash/words.js","webpack:///./node_modules/lodash/_asciiWords.js","webpack:///./node_modules/lodash/_hasUnicodeWord.js","webpack:///./node_modules/lodash/_unicodeWords.js","webpack:///./node_modules/lodash/_baseRepeat.js","webpack:///./node_modules/lodash/toInteger.js","webpack:///./node_modules/lodash/_isFlattenable.js","webpack:///./node_modules/lodash/_baseOrderBy.js","webpack:///./node_modules/lodash/_baseIteratee.js","webpack:///./node_modules/lodash/_baseMatches.js","webpack:///./node_modules/lodash/_baseIsMatch.js","webpack:///./node_modules/lodash/_stackClear.js","webpack:///./node_modules/lodash/_stackDelete.js","webpack:///./node_modules/lodash/_stackGet.js","webpack:///./node_modules/lodash/_stackHas.js","webpack:///./node_modules/lodash/_stackSet.js","webpack:///./node_modules/lodash/_baseIsEqualDeep.js","webpack:///./node_modules/lodash/_arraySome.js","webpack:///./node_modules/lodash/_equalByTag.js","webpack:///./node_modules/lodash/_Uint8Array.js","webpack:///./node_modules/lodash/_mapToArray.js","webpack:///./node_modules/lodash/_equalObjects.js","webpack:///./node_modules/lodash/_getAllKeys.js","webpack:///./node_modules/lodash/_baseGetAllKeys.js","webpack:///./node_modules/lodash/_getSymbols.js","webpack:///./node_modules/lodash/_arrayFilter.js","webpack:///./node_modules/lodash/stubArray.js","webpack:///./node_modules/lodash/_arrayLikeKeys.js","webpack:///./node_modules/lodash/_baseTimes.js","webpack:///./node_modules/lodash/stubFalse.js","webpack:///./node_modules/lodash/_baseIsTypedArray.js","webpack:///./node_modules/lodash/_nodeUtil.js","webpack:///./node_modules/lodash/_baseKeys.js","webpack:///./node_modules/lodash/_isPrototype.js","webpack:///./node_modules/lodash/_nativeKeys.js","webpack:///./node_modules/lodash/_overArg.js","webpack:///./node_modules/lodash/_getTag.js","webpack:///./node_modules/lodash/_DataView.js","webpack:///./node_modules/lodash/_Promise.js","webpack:///./node_modules/lodash/_WeakMap.js","webpack:///./node_modules/lodash/_getMatchData.js","webpack:///./node_modules/lodash/_baseMatchesProperty.js","webpack:///./node_modules/lodash/hasIn.js","webpack:///./node_modules/lodash/_baseHasIn.js","webpack:///./node_modules/lodash/property.js","webpack:///./node_modules/lodash/_baseProperty.js","webpack:///./node_modules/lodash/_basePropertyDeep.js","webpack:///./node_modules/lodash/_baseMap.js","webpack:///./node_modules/lodash/_baseEach.js","webpack:///./node_modules/lodash/_baseForOwn.js","webpack:///./node_modules/lodash/_baseFor.js","webpack:///./node_modules/lodash/_createBaseFor.js","webpack:///./node_modules/lodash/_createBaseEach.js","webpack:///./node_modules/lodash/_baseSortBy.js","webpack:///./node_modules/lodash/_compareMultiple.js","webpack:///./node_modules/lodash/_compareAscending.js","webpack:///./node_modules/lodash/_baseRest.js","webpack:///./node_modules/lodash/_overRest.js","webpack:///./node_modules/lodash/_apply.js","webpack:///./node_modules/lodash/_setToString.js","webpack:///./node_modules/lodash/_baseSetToString.js","webpack:///./node_modules/lodash/constant.js","webpack:///./node_modules/lodash/_shortOut.js","webpack:///./node_modules/lodash/_baseZipObject.js","webpack:///./node_modules/lodash/_createRange.js","webpack:///./node_modules/lodash/_baseRange.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"],"names":["n","l","u","i","t","r","o","f","e","c","s","a","h","v","parentNode","removeChild","y","arguments","length","children","call","defaultProps","p","type","props","key","ref","__k","__","__b","__e","__d","__c","__h","constructor","__v","vnode","d","current","_","b","setProperty","test","g","style","cssText","replace","toLowerCase","slice","addEventListener","w","m","removeEventListener","indexOf","removeAttribute","setAttribute","this","event","x","context","A","P","base","C","setTimeout","T","push","$","__r","debounceRendering","sort","shift","__P","M","__n","ownerSVGElement","N","H","k","Array","isArray","I","z","L","nextSibling","q","S","j","some","appendChild","insertBefore","contextType","value","__E","prototype","render","B","sub","state","_sb","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","forEach","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","O","diffed","localName","nodeType","document","createTextNode","createElementNS","createElement","is","data","childNodes","dangerouslySetInnerHTML","attributes","name","__html","innerHTML","checked","unmount","componentWillUnmount","D","firstChild","E","F","G","Consumer","Provider","splice","getDerivedStateFromError","setState","componentDidCatch","forceUpdate","Promise","then","bind","resolve","hiddenTextarea","SIZING_STYLE","calculateNodeStyling","node","window","getComputedStyle","boxSizing","getPropertyValue","paddingSize","parseFloat","borderSize","sizingStyle","map","join","getCursorXY","input","selectionPoint","relativeToElement","body","bodyRect","getBoundingClientRect","elementRect","inputY","top","scrollTop","inputX","left","scrollLeft","div","copyStyle","Object","values","property","inputValue","tagName","textContent","substr","height","width","span","spanX","offsetLeft","spanY","offsetTop","getAutocompleteWordData","textArea","triggerCharacter","selectionStart","valueBeforeKeystroke","isTriggered","indexOfAutocompleteStart","getLastIndexOfCharacter","content","selectionIndex","character","breakOnCharacters","currentCharacter","charAt","previousCharacter","includes","getNextIndexOfCharacter","nextCharacter","getNumberOfNewLinesPrecedingSelection","count","searchIndex","getNumberOfNewLinesFollowingSelection","selectionEnd","getSelectionData","textBeforeSelection","substring","textAfterSelection","selectedText","useTextAreaAutoResize","useState","setTextArea","constrainToContentHeight","setConstrainToContentHeight","additionalElements","setAdditionalElements","useEffect","resizeTextArea","allElements","allContentHeights","element","uiTextNode","placeholder","baseHeight","scrollHeight","calculateTextAreaHeight","Math","max","newHeight","resizeCallback","debounceAction","resizeObserver","ResizeObserver","observe","disconnect","ButtonNew","variant","icon","rounded","destructive","className","tooltip","onKeyUp","otherProps","suppressTooltip","setSuppressTooltip","classes","classNames","focusable","src","displayName","propTypes","defaultChildrenPropTypes","PropTypes","oneOf","bool","string","oneOfType","func","elementType","Link","href","block","isRequired","CTA","ButtonGroup","labelText","role","Dropdown","triggerButtonId","dropdownContentId","dropdownContentCloseButtonId","onOpen","onClose","restOfProps","isInitialized","setIsInitialized","useLayoutEffect","initializeDropdown","triggerElementId","id","undefined","FormField","RadioButton","onClick","ColorPicker","buttonLabelText","defaultValue","inputProps","onChange","onBlur","color","setColor","buttonId","popoverId","backgroundColor","fullHexCode","hex","handleBlur","prefixed","object","Toggle","MONTH_UNTIL_TODAY","QUARTER_UNTIL_TODAY","YEAR_UNTIL_TODAY","LAST_FULL_MONTH","LAST_FULL_QUARTER","LAST_FULL_YEAR","ALL_PRESET_RANGES","RANGE_LABELS","PERIODS","getPeriodUntilToday","today","period","start","clone","startOf","end","getLastFullPeriod","subtract","endOf","getDateRangeStartAndEndDates","dateRangeName","ChevronLeft","ChevronRight","Calendar","PICKER_PHRASES","defaultPhrases","chooseAvailableStartDate","date","chooseAvailableEndDate","focusStartDate","invalidDateFormat","format","errorPrefix","dateTooLate","latestDate","dateTooEarly","earliestDate","MONTH_NAMES","keys","Date","toLocaleString","month","MonthYearPicker","earliestMoment","latestMoment","onMonthSelect","onYearSelect","selectedMonth","selectedYear","year","latestMonthIndex","availableMonths","yearsDiff","diff","years","target","index","PresetDateRangeOptions","presetRanges","onPresetSelected","presetsWithinPermittedDates","filter","rangeStart","rangeEnd","isSameOrBefore","isSameOrAfter","rangeName","DateRangePicker","startDateId","endDateId","defaultStartDate","defaultEndDate","maxEndDate","minStartDate","onDatesChanged","startDateAriaLabel","endDateAriaLabel","todaysDate","START_DATE","focusedInput","setFocusedInput","moment","startMoment","setStartMoment","endMoment","setEndMoment","dateFormat","getCurrentLocale","useCompactLayout","useMediaQuery","BREAKPOINTS","Medium","startDateInput","setStartDateInput","endDateInput","setEndDateInput","startDateError","setStartDateError","endDateError","setEndDateError","setError","error","inputType","valueMoment","isValid","isBefore","isAfter","handleStartBlur","handleEndBlur","useDateRangeValidation","getElementById","startDate","endDate","startDatePlaceholderText","endDatePlaceholderText","displayFormat","navPrev","tabindex","navNext","minDate","maxDate","initialVisibleMonth","relevantDate","isMonthSameAsLatestMonth","customInputIcon","showDefaultInputIcon","inputIconPosition","ICON_BEFORE_POSITION","orientation","VERTICAL_ORIENTATION","HORIZONTAL_ORIENTATION","showClearDates","customArrowIcon","phrases","onFocusChange","isOutsideRange","isBetween","isDateOutsideOfRange","onDatesChange","toDate","small","renderMonthElement","renderCalendarInfo","instanceOf","maxStartDate","arrayOf","Icon","InternalIcon","native","MobileDrawer","title","clickOutsideDeactivates","selector","onDeactivate","BoldIcon","ItalicIcon","LinkIcon","OrderedListIcon","UnorderedListIcon","HeadingIcon","QuoteIcon","CodeIcon","CodeBlockIcon","EmbedIcon","UnderlineIcon","StrikethroughIcon","DividerIcon","ORDERED_LIST_ITEM_REGEX","MARKDOWN_LINK_REGEX","URL_PLACEHOLDER_TEXT","getNewLinePrefixSuffixes","numberOfNewLinesBeforeSelection","numberOfNewLinesFollowingSelection","numberOfNewLinesNeededAtStart","newLinesPrefix","String","padStart","newLinesSuffix","undoOrAddFormattingForInlineSyntax","prefix","suffix","prefixLength","suffixLength","editSelectionStart","editSelectionEnd","replaceSelectionWith","newCursorStart","newCursorEnd","undoOrAddFormattingForMultilineSyntax","linePrefix","blockPrefix","blockSuffix","formattedText","lastNewLine","lineStart","splitByNewLine","split","line","every","unformattedText","newLinePrefixLength","cursorStartBaseline","cursorStartBlockPrefixOffset","cursorStartLinePrefixOffset","markdownSyntaxFormatters","bold","label","getKeyboardShortcut","modifier","getOSKeyboardModifierKeyString","command","tooltipHint","toUpperCase","getFormatting","italic","link","startingText","basicFormattingForEmptySelection","indexOfLinkStructureEnd","urlText","handleLinkFormattingForEmptyTextSelection","startsWith","basicFormattingForLinkSelection","indexOfSyntaxOpen","textToReplaceMarkdown","handleLinkFormattingForUrlSelection","match","linkDescriptionEnd","linkText","handleUndoMarkdownLinkSelection","orderedList","newLineSuffixLength","newText","indexOfFullStop","formattedList","textChunk","unorderedList","heading","currentLineSelectionStart","indexOfFirstLineCharacter","currentHeadingIndex","adjustingHeading","cursorOffset","quote","code","codeBlock","embed","underline","strikethrough","divider","OverflowIcon","UPLOADING_IMAGE_PLACEHOLDER","MAX_CORE_FORMATTERS_BY_SCREEN_SIZE","MarkdownToolbar","textAreaId","additionalSecondaryToolbarElements","textAreaRef","useRef","overflowMenuOpen","setOverflowMenuOpen","storedCursorPosition","setStoredCursorPosition","smallScreen","largeScreen","Large","ExtraLarge","overflowMenuRows","additionalSecondaryItems","SecondaryItem","cloneElement","handleToolbarButtonKeyPress","keyboardShortcuts","fromEntries","syntaxName","preventDefault","insertSyntax","useKeyboardShortcuts","querySelector","clickOutsideHandler","escapePressHandler","focus","getElementsByClassName","isSmallScreen","isLargeScreen","nextButton","sibling","nextElementSibling","matches","getNextMatchingSibling","previousButton","previousElementSibling","getPreviousMatchingSibling","firstButton","allButtons","lastButton","contentEditable","preventScroll","setSelectionRange","execCommand","textAreaValue","getNewTextAreaValueWithEdits","dispatchEvent","Event","handleImageUploadEnd","imageMarkdown","currentTextAreaValue","indexOfPlaceholder","newTextValue","differenceInLength","numberOfCoreFormatters","coreSyntaxFormatters","entries","secondarySyntaxFormatters","secondaryFormatterButtons","controlName","ImageUploader","editorVersion","onImageUploadStart","textWithPlaceholder","newCursorPosition","onImageUploadSuccess","onImageUploadError","buttonProps","Close","DefaultSelectionTemplate","enableValidation","valid","buttonVariant","onEdit","onDeselect","KEYS","ALLOWED_CHARS_REGEX","reducer","action","selectedItems","payload","suggestions","activeDescendentIndex","editValue","inputPosition","ignoreBlur","showMaxSelectionsReached","MultiSelectAutocomplete","showLabel","fetchSuggestions","staticSuggestions","staticSuggestionsHeading","border","inputId","maxSelections","onSelectionsChanged","onFocus","allowUserDefinedSelections","SuggestionTemplate","SelectionTemplate","useReducer","dispatch","inputRef","inputSizerRef","selectedItemsRef","popoverRef","allowSelections","resizeInputToContentSize","cursorPosition","changeEvent","popover","activeItem","offsetHeight","popoverOffsetHeight","isBelow","scrollTo","selectByText","textValue","nextInputValue","keepSelecting","matchingSuggestion","find","suggestion","selectItem","selectedItem","enterEditState","editItem","editItemIndex","innerText","deselectItem","exitEditState","removeProperty","clientWidth","handleInputChange","results","item","clearInput","editPreviousSelectionIfExists","nextEditIndex","currentSelections","insertIndex","newSelections","listItem","selection","deselectedItem","querySelectorAll","selectionNode","remove","allSelectedItemElements","defaultPosition","position","order","selectionsPlaceholder","inputPlaceholder","autocomplete","onKeyDown","currentValue","suggestionDisplayName","onMouseDown","optionPropType","shape","number","userPropTypes","profile_image_url","summary","selectedTagsPropTypes","tags","onKeyPress","currentContext","currentMedium","currentOS","navigator","userAgent","platform","isNativeIOS","namespace","nativeCheck","webkit","messageHandlers","namespaceCheck","isNativeAndroid","AndroidBridge","copyToClipboard","text","reject","clipboard","writeText","hasOSSpecificModifier","KeyboardEvent","metaKey","ctrlKey","language","freeze","Small","query","mediaQuery","matchMedia","setMatch","handler","addListener","removeListener","globalObject","BigNumber","isNumeric","mathceil","ceil","mathfloor","floor","bignumberError","tooManyDigits","BASE","LOG_BASE","MAX_SAFE_INTEGER","POWS_TEN","SQRT_BASE","MAX","bitFloor","coeffToString","charCodeAt","compare","xc","yc","intCheck","min","Error","isOdd","toExponential","str","toFixedPoint","len","zs","configObject","convertBase","parseNumeric","pow2_53","random53bitInt","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","toString","valueOf","ONE","DECIMAL_PLACES","ROUNDING_MODE","TO_EXP_NEG","TO_EXP_POS","MIN_EXP","MAX_EXP","CRYPTO","MODULO_MODE","POW_PRECISION","FORMAT","groupSize","secondaryGroupSize","groupSeparator","decimalSeparator","fractionGroupSize","fractionGroupSeparator","ALPHABET","alphabetHasNormalDecimalDigits","alphabet","caseChanged","isNum","_isBigNumber","search","round","DEBUG","rm","c0","ne","maxOrMin","args","method","normalise","pop","sd","ni","rd","pows10","out","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","set","obj","hasOwnProperty","crypto","getRandomValues","randomBytes","EXPONENTIAL_AT","RANGE","isBigNumber","maximum","lt","minimum","gt","random","dp","rand","Uint32Array","copy","sum","plus","decimal","toBaseOut","baseIn","baseOut","arrL","arr","reverse","sign","callerIsToString","pow","concat","multiply","temp","xlo","xhi","carry","klo","khi","aL","bL","cmp","more","prod","prodL","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","NaN","isNaN","p1","p2","absoluteValue","abs","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","idiv","exponentiatedBy","half","isModExp","nIsBig","nIsNeg","nIsOdd","isInteger","mod","times","integerValue","isEqualTo","eq","isFinite","isGreaterThan","isGreaterThanOrEqualTo","gte","isLessThan","isLessThanOrEqualTo","lte","isNegative","isPositive","isZero","minus","xLTy","xe","ye","modulo","multipliedBy","xcL","ycL","ylo","yhi","zc","sqrtBase","negated","precision","shiftedBy","squareRoot","sqrt","rep","toFixed","toFormat","g1","g2","intPart","fractionPart","isNeg","intDigits","RegExp","toFraction","md","d0","d1","d2","exp","n0","n1","toNumber","toPrecision","toJSON","isInViewport","allowPartialVisibility","boundingRect","clientHeight","innerHeight","documentElement","innerWidth","topIsInViewport","rightIsInViewport","right","bottomIsInViewport","bottom","leftIsInViewport","topIsOutOfViewport","bottomIsOutOfViewport","getDropdownRepositionListener","handleDropdownRepositions","classList","isDropdownCurrentlyOpen","display","opacity","add","INTERACTIVE_ELEMENTS_QUERY","openDropdown","dropdownContent","closeDropdown","triggerButton","keyUpListener","getAttribute","onCloseCleanupActions","contains","activeElement","clickOutsideListener","time","leading","configs","debounce","isFormField","HTMLElement","nodeName","isContentEditable","callShortcut","chain","shortcuts","shortcut","defaultOptions","timeout","eventTarget","options","storedShortcuts","keyChain","setKeyChain","mergedOptions","setMergedOptions","newOptions","clearTimeout","keyEvent","defaultPrevented","ctrlKeyEntry","cmdKeyEntry","altKeyEntry","altKey","shiftKeyEntry","shiftKey","Node","newChain","KeyboardShortcuts","Element","Window","MAX_FILE_SIZE_MB","image","video","PERMITTED_FILE_TYPES","addErrorMessage","msg","addSnackbarItem","message","addCloseButton","validateFileSize","file","fileType","fileInput","maxFileSizeMb","dataset","fileSizeErrorHandler","fileSizeMb","size","isValidFileSize","Number","errorMessage","handleFileSizeError","validateFileType","permittedFileTypes","JSON","parse","fileTypeErrorHandler","isValidFileType","fileTypeBracketed","handleFileTypeError","validateFileNameLength","maxFileNameLength","fileNameLengthErrorHandler","isValidFileNameLength","handleFileNameLengthError","validateFileInput","isValidFileInput","files","from","validateFileInputs","validFileInputs","fileInputs","snackbarItemProps","actions","lifespan","SnackbarItem","inverted","FocusTrap","focusTrap","deactivate","useCallback","currentLocationHref","location","routeChangeObserver","MutationObserver","mutations","createFocusTrap","escapeDeactivates","activate","childList","escape","module","exports","i18n","I18n","translationsDiv","translations","store","defaultLocale","userLocale","locale","term","localeArray","CloseIcon","Modal","prompt","sheet","centered","noBackdrop","showHeader","sheetAlign","backdropDismissible","allowOverflow","focusTrapSelector","class","backdrop","previewArticle","successCb","failureCb","fetch","headers","Accept","csrfToken","stringify","article_body","credentials","response","json","status","processPayload","previewShowing","helpShowing","previewResponse","helpHTML","imageManagementShowing","moreConfigShowing","errors","submitArticle","onSuccess","onError","url","article","current_state_path","generateUploadFormdata","token","formData","FormData","append","generateMainImage","signal","links","processImageUpload","images","handleImageUploading","handleImageSuccess","handleImageFailure","articleSnippetResultPropTypes","body_text","articlePropTypes","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","handleFetchAPIErrors","ok","SyntaxError","statusText","getAdditionalClassNames","contentType","disabled","additionalClassNames","Button","buttonType","onMouseOver","onMouseOut","tabIndex","ComponentName","Spinner","viewBox","fill","xmlns","snackbarItems","snackbarItem","Snackbar","snacks","pollingId","paused","pauseLifespan","resumeLifespan","initializePolling","_event","stopPropagation","pollingTime","setInterval","newSnacks","updateSnackbarItems","snack","lifespanTimeoutId","decreaseLifespan","prevState","potentialSnackToFilterOut","updatedSnacks","currentSnack","Component","UserListItemContent","alt","isComboboxMode","dropdownPositionPoints","suppressPopover","emptyStateMessage","AutocompleteTriggerTextArea","forwardRef","forwardedRef","autoResize","searchInstructionsMessage","maxSuggestions","replaceElement","wrapperRef","scrollIntoView","originalTextArea","newTextArea","enhancedTextArea","defaultView","attributeKey","transition","refs","selectSuggestion","currentInput","indexOfSearchStart","currentSearchTerm","newTextAreaValue","comboboxProps","isSearching","searchTermStartPosition","searchTerm","cursorX","textAreaX","createPortal","CopyIcon","ClipboardButton","imageLinks","onCopy","imageUrls","showCopyMessage","readOnly","imageLink","ImageIcon","CancelIcon","SpinnerOrCancel","imageUploaderReducer","uploadErrorMessage","uploadingImage","insertionImageUrls","initNativeImagePicker","ForemMobile","injectNativeMessage","NativeIosV1ImageUpload","V2EditorImageUpload","handleInsertionImageUpload","useNativeUpload","handleNativeMessage","abortRequestController","setAbortRequestController","actionTooltip","controller","AbortController","accept","abort","click","V1EditorImageUpload","showCopiedImageText","setShowCopiedImageText","multiple","imageMarkdownInput","Honeybadger","notify","onUploadError","abortSignal","handleInsertImageUploadSuccess","detail","getCSRFToken","waitingOnCSRF","metaTag","clearInterval","authToken","localStorage","current_user","request","restOfOptions","jsonifiedBody","fetchOptions","baseIsNative","getValue","baseToString","baseGet","result","isSymbol","getParameters","params","sanitizedName","exec","decodeURIComponent","getParameterByName","getFilterParameters","hasInstantClick","instantClick","fixedEncodeURIComponent","encodeURIComponent","displaySearchResults","baseUrl","origin","sanitizedQuery","filterParameters","sortParameters","InstantClick","getSearchTermFromUrl","querystring","searchParameters","URLSearchParams","filterXSS","get","divForDecode","nodeValue","preloadSearchResults","encodedQuery","searchUrl","preload","fetchSearch","endpoint","dataHash","searchParams","arrayValue","createSearchUrl","nativeCreate","getNative","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","clear","entry","has","array","other","isKeyable","__data__","reIsUint","isFunction","isLength","castPath","toKey","isKey","stringToPath","reIsDeepProp","reIsPlainProp","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","Map","baseIsArguments","isObjectLike","objectProto","propertyIsEnumerable","isArguments","isArrayLike","isIndex","isObject","arrayLikeKeys","baseKeys","baseSet","webpackContext","req","webpackContextResolve","__webpack_require__","baseGetTag","tag","funcToString","Function","iteratee","hasFunc","baseAssignValue","objValue","defineProperty","setCacheAdd","setCacheHas","SetCache","cache","Set","reHasUnicode","INFINITY","arrayPush","isFlattenable","baseFlatten","depth","predicate","isStrict","offset","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","baseIsEqualDeep","baseIsEqual","bitmask","customizer","stack","arraySome","cacheHas","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","stubFalse","freeExports","freeModule","Buffer","root","isBuffer","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","isTypedArray","srcValue","defaultLocaleResolver","locales","list","enableFallback","Boolean","currentLocale","codes","Locales","registry","register","localeResolver","default","defaultPluralizer","_i18n","Pluralization","pluralizer","camelCaseKeys","reduce","buffer","isSet","RoundingModeMap","expandRoundMode","roundMode","_a","getAbsolutePrecision","numeric","significant","log10","digitCount","roundNumber","rounder","formatNumber","_b","_c","originalNumber","raise","roundedNumber","whole","significand","formattedNumber","positiveFormat","negativeFormat","unshift","delimiter","limit","computeSignificand","stripInsignificantZeros","separator","unit","replaceInFormat","getFullScope","scope","defaultSeparator","inferType","instance","interpolate","transformKey","nullPlaceholder","missingPlaceholder","regex","lookup","assign","localeType","component","DECIMAL_UNITS","INVERTED_DECIMAL_UNITS","parseInt","numberToHuman","roundOptions","units","exponent","num","unitExponents","calculateExponent","determineUnit","trim","STORAGE_UNITS","parseDate","setTime","parts","day","hour","minute","second","milliseconds","UTC","$1","$2","$3","$6","$4","$5","pluralize","baseScope","missingTranslation","pluralization","missingKeys","compute","DEFAULT_OPTIONS","meridian","am","pm","dayNames","abbrDayNames","monthNames","abbrMonthNames","within","actual","guessStrategy","missingTranslationPrefix","_match","messageStrategy","fullScope","errorStrategy","fullScopeWithLocale","MissingTranslation","strategy","missingBehavior","__awaiter","thisArg","_arguments","generator","fulfilled","step","next","rejected","done","apply","DEFAULT_I18N_OPTIONS","_locale","_defaultLocale","_version","onChangeHandlers","translate","localize","distanceOfTimeInWords","timeAgoInWords","hasChanged","newLocale","changed","translationOptions","defaults","createTranslationOptions","translation","translationOption","numberToCurrency","numberToPercentage","localizedValue","toTime","strftime","numberToHumanSize","smallerThanBase","numberToBeFormatted","log","computeExponent","billion","million","quadrillion","thousand","trillion","numberToRounded","numberToDelimited","delimiterPattern","global","digitToDelimiter","withLocale","callback","originalLocale","AM_PM","getTime","weekDay","getDay","getDate","getFullYear","getMonth","getHours","hour12","secs","getSeconds","mins","getMinutes","getTimezoneOffset","absOffsetHours","absOffsetMinutes","timezoneoffset","update","override","strict","currentNode","currentType","overrideType","newNode","toSentence","items","wordsConnector","twoWordsConnector","lastWordConnector","fromTime","fromInSeconds","toInSeconds","distanceInSeconds","distanceInMinutes","distanceInDays","distanceInHoursRounded","distanceInDaysRounded","distanceInMonthsRounded","includeSeconds","fromYear","toYear","minutesInYear","minutesWithOffset","distanceInYears","trunc","version","runCallbacks","baseHas","hasPath","baseUniq","capitalize","camelCase","createCompounder","word","baseRepeat","isIterateeCall","toInteger","guard","baseOrderBy","baseRest","sortBy","collection","iteratees","assignValue","baseZipObject","range","createRange","memoizeCapped","rePropName","reEscapeChar","subString","memoize","resolver","TypeError","memoized","Cache","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","isMasked","toSource","reIsHostCtor","funcProto","reIsNative","uid","coreJsData","maskSrcKey","IE_PROTO","assocIndexOf","getMapData","Symbol","arrayMap","symbolProto","symbolToString","lastIndex","nested","newValue","arrayIncludes","arrayIncludesWith","createSet","setToArray","comparator","isCommon","outer","computed","seenIndex","baseIndexOf","baseFindIndex","baseIsNaN","strictIndexOf","fromIndex","fromRight","noop","upperFirst","createCaseFirst","castSlice","hasUnicode","stringToArray","methodName","strSymbols","chr","trailing","baseSlice","asciiToArray","unicodeToArray","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","rsSymbol","reUnicode","arrayReduce","deburr","words","reApos","accumulator","initAccum","deburrLetter","reLatin","reComboMark","basePropertyOf","asciiWords","hasUnicodeWord","unicodeWords","pattern","reAsciiWord","reHasUnicodeWord","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsModifier","rsEmoji","reUnicodeWord","nativeFloor","toFinite","remainder","spreadableSymbol","isConcatSpreadable","baseIteratee","baseMap","baseSortBy","compareMultiple","identity","orders","baseMatches","baseMatchesProperty","baseIsMatch","getMatchData","matchesStrictComparable","source","matchData","noCustomizer","COMPARE_PARTIAL_FLAG","pairs","LARGE_ARRAY_SIZE","equalArrays","equalByTag","equalObjects","getTag","argsTag","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","Uint8Array","mapToArray","symbolValueOf","byteLength","byteOffset","convert","stacked","getAllKeys","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","baseGetAllKeys","getSymbols","keysFunc","symbolsFunc","arrayFilter","stubArray","nativeGetSymbols","getOwnPropertySymbols","symbol","resIndex","baseTimes","inherited","isArr","isArg","isBuff","isType","skipIndexes","typedArrayTags","freeProcess","freeGlobal","process","types","require","binding","isPrototype","nativeKeys","Ctor","overArg","transform","arg","DataView","WeakMap","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ArrayBuffer","ctorString","isStrictComparable","hasIn","baseHasIn","baseProperty","basePropertyDeep","baseEach","baseForOwn","createBaseEach","baseFor","createBaseFor","iterable","eachFunc","comparer","compareAscending","objCriteria","criteria","othCriteria","ordersLength","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","overRest","setToString","nativeMax","otherArgs","baseSetToString","shortOut","constant","nativeNow","now","lastCalled","stamp","remaining","assignFunc","valsLength","baseRange","nativeCeil","SearchIcon","SearchForm","onSubmitSearch","acceptCharset","onSubmit","autoComplete","Search","enableSearchPageListener","enableSearchPageChecker","hasKeyModifiers","submit","searchInputRef","setSearchTerm","minimizeHeader","toggle","focusOnSearchBox","searchBox","select","syncSearchUrlWithInput","createRef","searchPageChecker","on","globalKeysListener","off","SearchFormSync","mobileSearchContainer","setMobileSearchContainer","syncSearchFormsListener","updatedSearchTerm","mscElement","unmountComponentAtNode","form","mscElementClone","cloneNode","mscElementParent","parentElement","prepend"],"mappings":"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","file":"js/Search-3c06eac390a9aeec6774.chunk.js","sourcesContent":["var n,l,u,i,t,r,o,f,e,c={},s=[],a=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function h(n,l){for(var u in l)n[u]=l[u];return n}function v(n){var l=n.parentNode;l&&l.removeChild(n)}function y(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 p(l,f,t,r,null)}function p(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 d(){return{current:null}}function _(n){return n.children}function k(n,l,u,i,t){var r;for(r in u)\"children\"===r||\"key\"===r||r in l||g(n,r,null,u[r],i);for(r in l)t&&\"function\"!=typeof l[r]||\"children\"===r||\"key\"===r||\"value\"===r||\"checked\"===r||u[r]===l[r]||g(n,r,l[r],u[r],i)}function b(n,l,u){\"-\"===l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||a.test(l)?u:u+\"px\"}function g(n,l,u,i,t){var r;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof i&&(n.style.cssText=i=\"\"),i)for(l in i)u&&l in u||b(n.style,l,\"\");if(u)for(l in u)i&&u[l]===i[l]||b(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])r=l!==(l=l.replace(/Capture$/,\"\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?i||n.addEventListener(l,r?w:m,r):n.removeEventListener(l,r?w:m,r);else if(\"dangerouslySetInnerHTML\"!==l){if(t)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!==l&&\"height\"!==l&&\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&-1==l.indexOf(\"-\")?n.removeAttribute(l):n.setAttribute(l,u))}}function m(n){t=!0;try{return this.l[n.type+!1](l.event?l.event(n):n)}finally{t=!1}}function w(n){t=!0;try{return this.l[n.type+!0](l.event?l.event(n):n)}finally{t=!1}}function x(n,l){this.props=n,this.context=l}function A(n,l){if(null==l)return n.__?A(n.__,n.__.__k.indexOf(n)+1):null;for(var u;ll&&r.sort(function(n,l){return n.__v.__b-l.__v.__b}));$.__r=0}function H(n,l,u,i,t,r,o,f,e,a){var h,v,y,d,k,b,g,m=i&&i.__k||s,w=m.length;for(u.__k=[],h=0;h0?p(d.type,d.props,d.key,d.ref?d.ref:null,d.__v):d)){if(d.__=u,d.__b=u.__b+1,null===(y=m[h])||y&&d.key==y.key&&d.type===y.type)m[h]=void 0;else for(v=0;v=0;l--)if((u=n.__k[l])&&(i=L(u)))return i;return null}function M(n,u,i,t,r,o,f,e,c){var s,a,v,y,p,d,k,b,g,m,w,A,P,C,T,$=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,o=[e]),(s=l.__b)&&s(u);try{n:if(\"function\"==typeof $){if(b=u.props,g=(s=$.contextType)&&t[s.__c],m=s?g?g.props.value:s.__:t,i.__c?k=(a=u.__c=i.__c).__=a.__E:(\"prototype\"in $&&$.prototype.render?u.__c=a=new $(b,m):(u.__c=a=new x(b,m),a.constructor=$,a.render=B),g&&g.sub(a),a.props=b,a.state||(a.state={}),a.context=m,a.__n=t,v=a.__d=!0,a.__h=[],a._sb=[]),null==a.__s&&(a.__s=a.state),null!=$.getDerivedStateFromProps&&(a.__s==a.state&&(a.__s=h({},a.__s)),h(a.__s,$.getDerivedStateFromProps(b,a.__s))),y=a.props,p=a.state,a.__v=u,v)null==$.getDerivedStateFromProps&&null!=a.componentWillMount&&a.componentWillMount(),null!=a.componentDidMount&&a.__h.push(a.componentDidMount);else{if(null==$.getDerivedStateFromProps&&b!==y&&null!=a.componentWillReceiveProps&&a.componentWillReceiveProps(b,m),!a.__e&&null!=a.shouldComponentUpdate&&!1===a.shouldComponentUpdate(b,a.__s,m)||u.__v===i.__v){for(u.__v!==i.__v&&(a.props=b,a.state=a.__s,a.__d=!1),u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u)}),w=0;w2&&(f.children=arguments.length>3?n.call(arguments,2):i),p(l.type,f,t||l.key,r||l.ref,null)}function G(n,l){var u={__c:l=\"__cC\"+e++,__: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(function(n){n.__e=!0,T(n)})},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=s.slice,l={__e:function(n,l,u,i){for(var t,r,o;l=l.__;)if((t=l.__c)&&!t.__)try{if((r=t.constructor)&&null!=r.getDerivedStateFromError&&(t.setState(r.getDerivedStateFromError(n)),o=t.__d),null!=t.componentDidCatch&&(t.componentDidCatch(n,i||{}),o=t.__d),o)return t.__E=t}catch(l){n=l}throw n}},u=0,i=function(n){return null!=n&&void 0===n.constructor},t=!1,x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=h({},this.state),\"function\"==typeof n&&(n=n(h({},u),this.props)),n&&h(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),T(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),T(this))},x.prototype.render=_,r=[],f=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,$.__r=0,e=0;export{x as Component,_ as Fragment,F as cloneElement,G as createContext,y as createElement,d as createRef,y as h,E as hydrate,i as isValidElement,l as options,D as render,j as toChildArray};\n//# sourceMappingURL=preact.module.js.map\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';\nimport { debounceAction } from '@utilities/debounceAction';\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 {args}\n * @param {args.element} input The DOM element the cursor is to be found within\n * @param {args.number} selectionPoint The current cursor position (e.g. either selectionStart or selectionEnd)\n * @param {args.element} relativeToElement The DOM element the position to be calculated relative to. Defaults to the document body\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 = ({\n input,\n selectionPoint,\n relativeToElement = document.body,\n}) => {\n const bodyRect = relativeToElement.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\n for (const property of Object.values(copyStyle)) {\n div.style.setProperty(property, copyStyle.getPropertyValue(property));\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 relativeToElement.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 relativeToElement.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// TODO: Remove once MentionAutocompleteTextArea removed\nexport const getMentionWordData = () => {};\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 {{isTriggered: boolean, indexOfAutocompleteStart: number}} Object with the word's autocomplete data\n *\n * @example\n * const { isTriggered, indexOfAutocompleteStart } = getAutocompleteWordData({textArea, triggerCharacter: '@'});\n * if (isTriggered) {\n * // Do something\n * }\n */\nexport const getAutocompleteWordData = ({ textArea, triggerCharacter }) => {\n const { selectionStart, value: valueBeforeKeystroke } = textArea;\n\n if (selectionStart === 0 || valueBeforeKeystroke === '') {\n return {\n isTriggered: false,\n indexOfAutocompleteStart: -1,\n };\n }\n\n const indexOfAutocompleteStart = getLastIndexOfCharacter({\n content: valueBeforeKeystroke,\n selectionIndex: selectionStart,\n character: triggerCharacter,\n breakOnCharacters: [' ', '', '\\n'],\n });\n\n return {\n isTriggered: indexOfAutocompleteStart !== -1,\n indexOfAutocompleteStart,\n };\n};\n\n/**\n * Searches backwards through text content for the last occurrence 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 occurrence 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 occurrence 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 occurrence 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 * Counts how many new lines come immediately before the user's current selection start\n * @param {object} args\n * @param {number} args.selectionStart The index of user's current selection start\n * @param {string} args.value The value of the textarea\n *\n * @returns {number} Number of new lines directly before selection start\n */\nexport const getNumberOfNewLinesPrecedingSelection = ({\n selectionStart,\n value,\n}) => {\n if (selectionStart === 0) {\n return 0;\n }\n\n let count = 0;\n let searchIndex = selectionStart - 1;\n\n while (searchIndex >= 0 && value.charAt(searchIndex) === '\\n') {\n count++;\n searchIndex--;\n }\n\n return count;\n};\n\n/**\n * Counts how many new lines come immediately after the user's current selection end\n *\n * @param {object} args\n * @param {number} args.selectionEnd The index of user's current selection end\n * @param {string} args.value The value of the textarea\n *\n * @returns {number} the count of new line characters immediately following selection\n */\nexport const getNumberOfNewLinesFollowingSelection = ({\n selectionEnd,\n value,\n}) => {\n if (selectionEnd === value.length) {\n return 0;\n }\n\n let count = 0;\n let searchIndex = selectionEnd;\n\n while (searchIndex < value.length && value.charAt(searchIndex) === '\\n') {\n count++;\n searchIndex++;\n }\n\n return count;\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 allElements.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\n // Resize on window size changes\n const resizeCallback = debounceAction(() => resizeTextArea(), 300);\n const resizeObserver = new ResizeObserver(resizeCallback);\n resizeObserver.observe(textArea);\n\n // Resize on subsequent value changes\n textArea.addEventListener('input', resizeTextArea);\n\n return () => {\n resizeObserver.disconnect();\n textArea.removeEventListener('input', resizeTextArea);\n };\n }, [textArea, additionalElements, constrainToContentHeight]);\n\n return { setTextArea, setAdditionalElements, setConstrainToContentHeight };\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport { useState } from 'preact/hooks';\nimport classNames from 'classnames/bind';\nimport { defaultChildrenPropTypes } from '../../common-prop-types/default-children-prop-types';\nimport { Icon } from '@crayons';\n\nexport const ButtonNew = (props) => {\n const {\n children,\n variant = 'default',\n icon,\n rounded,\n destructive,\n type = 'button',\n className,\n tooltip,\n onKeyUp,\n ...otherProps\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 classes = classNames('c-btn', {\n [`c-btn--${variant}`]: variant && variant !== 'default',\n 'c-btn--destructive': destructive && variant !== 'secondary',\n 'c-btn--icon-left': icon && children,\n 'c-btn--icon-alone': icon && !children,\n 'crayons-tooltip__activator': tooltip,\n 'radius-full': rounded,\n [className]: className,\n });\n\n return (\n \n {icon && (\n \n )}\n {children}\n {tooltip ? (\n \n {tooltip}\n \n ) : null}\n \n );\n};\n\nButtonNew.displayName = 'ButtonNew';\n\nButtonNew.propTypes = {\n children: defaultChildrenPropTypes,\n variant: PropTypes.oneOf(['default', 'primary', 'secondary']),\n rounded: PropTypes.bool,\n destructive: PropTypes.bool,\n type: PropTypes.oneOf(['button', 'submit']),\n className: PropTypes.string,\n tooltip: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n onKeyUp: PropTypes.func,\n icon: PropTypes.elementType,\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames/bind';\nimport { defaultChildrenPropTypes } from '../../common-prop-types/default-children-prop-types';\nimport { Icon } from '@crayons';\n\nexport const Link = (props) => {\n const {\n children,\n href = '#',\n variant = 'default',\n block,\n icon,\n rounded,\n className,\n ...otherProps\n } = props;\n\n const classes = classNames('c-link', {\n [`c-link--${variant}`]: variant && variant !== 'default',\n 'c-link--icon-left': icon && children,\n 'c-link--icon-alone': icon && !children,\n 'c-link--block': block,\n 'radius-full': rounded,\n [className]: className,\n });\n\n return (\n \n {icon && (\n \n )}\n {children}\n \n );\n};\n\nLink.displayName = 'Link';\n\nLink.propTypes = {\n variant: PropTypes.oneOf(['default', 'branded']),\n block: PropTypes.bool,\n rounded: PropTypes.bool,\n href: PropTypes.string.isRequired,\n className: PropTypes.string,\n children: defaultChildrenPropTypes,\n icon: PropTypes.elementType,\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames/bind';\nimport { defaultChildrenPropTypes } from '../../common-prop-types/default-children-prop-types';\nimport { Icon } from '@crayons';\n\nexport const CTA = (props) => {\n const {\n children,\n href = '#',\n variant = 'default',\n icon,\n className,\n ...otherProps\n } = props;\n\n const classes = classNames('c-cta', {\n [`c-cta--${variant}`]: variant && variant !== 'default',\n 'c-cta--icon-left': icon && children,\n [className]: className,\n });\n\n return (\n \n {icon && (\n \n )}\n {children}\n \n );\n};\n\nCTA.displayName = 'CTA';\n\nCTA.propTypes = {\n variant: PropTypes.oneOf(['default', 'branded']),\n rounded: PropTypes.bool,\n href: PropTypes.string.isRequired,\n className: PropTypes.string,\n children: defaultChildrenPropTypes.isRequired,\n icon: PropTypes.elementType,\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport { defaultChildrenPropTypes } from '../../common-prop-types/default-children-prop-types';\n\n/**\n * Used to group related buttons together\n *\n * @param {string} labelText Used to form the aria-label providing to assistive technologies to describe the control\n * @param {HTMLElement[]} children The buttons rendered inside the group\n */\nexport const ButtonGroup = ({ children, labelText }) => (\n
\n {children}\n
\n);\n\nButtonGroup.displayName = 'ButtonGroup';\n\nButtonGroup.propTypes = {\n children: defaultChildrenPropTypes,\n labelText: PropTypes.string.isRequired,\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, Fragment } from 'preact';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useState, useLayoutEffect } from 'preact/hooks';\nimport { HexColorPicker, HexColorInput } from 'react-colorful';\nimport { initializeDropdown } from '@utilities/dropdownUtils';\nimport { ButtonNew as Button } from '@crayons';\n\nconst convertThreeCharHexToSix = (hex) => {\n const r = hex.charAt(1);\n const g = hex.charAt(2);\n const b = hex.charAt(3);\n\n return `#${r}${r}${g}${g}${b}${b}`;\n};\n\nexport const ColorPicker = ({\n id,\n buttonLabelText,\n defaultValue,\n inputProps,\n onChange,\n onBlur,\n}) => {\n // Ternary has been used here to guard against an empty string being passed as default value\n const [color, setColor] = useState(defaultValue ? defaultValue : '#000');\n\n const buttonId = `color-popover-btn-${id}`;\n const popoverId = `color-popover-${id}`;\n\n useLayoutEffect(() => {\n initializeDropdown({\n triggerElementId: buttonId,\n dropdownContentId: popoverId,\n });\n }, [buttonId, popoverId]);\n\n // Hex codes may validly be represented by three characters, where r, g, b are all repeated,\n // e.g. #0D6 === #00DD66. To make sure that all color codes can be handled consistently through our app,\n // we convert any shorthand hex codes to their full 6 char representation.\n const handleBlur = () => {\n // Color always includes a leading '#', hence a length of 4\n if (color.length === 4) {\n const fullHexCode = convertThreeCharHexToSix(color);\n setColor(fullHexCode);\n onChange?.(fullHexCode);\n }\n };\n\n return (\n \n
\n \n {\n onChange?.(color);\n setColor(color);\n }}\n onBlur={(e) => {\n onBlur?.(e);\n handleBlur();\n }}\n prefixed\n />\n \n {\n onChange?.(color);\n setColor(color);\n }}\n />\n
\n \n
\n );\n};\n\nColorPicker.propTypes = {\n id: PropTypes.string.isRequired,\n buttonLabelText: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n inputProps: PropTypes.object,\n};\n","import { h } from 'preact';\n\nexport const Toggle = ({ ...otherProps }) => {\n return ;\n};\n\nToggle.displayName = 'Toggle';\n","export const MONTH_UNTIL_TODAY = 'MONTH_UNTIL_TODAY';\nexport const QUARTER_UNTIL_TODAY = 'QUARTER_UNTIL_TODAY';\nexport const YEAR_UNTIL_TODAY = 'YEAR_UNTIL_TODAY';\nexport const LAST_FULL_MONTH = 'LAST_FULL_MONTH';\nexport const LAST_FULL_QUARTER = 'LAST_FULL_QUARTER';\nexport const LAST_FULL_YEAR = 'LAST_FULL_YEAR';\n\nexport const ALL_PRESET_RANGES = [\n MONTH_UNTIL_TODAY,\n LAST_FULL_MONTH,\n QUARTER_UNTIL_TODAY,\n LAST_FULL_QUARTER,\n YEAR_UNTIL_TODAY,\n LAST_FULL_YEAR,\n];\n\nexport const RANGE_LABELS = {\n MONTH_UNTIL_TODAY: 'This month',\n QUARTER_UNTIL_TODAY: 'This quarter',\n YEAR_UNTIL_TODAY: 'This year',\n LAST_FULL_MONTH: 'Last month',\n LAST_FULL_QUARTER: 'Last quarter',\n LAST_FULL_YEAR: 'Last year',\n};\n\nconst PERIODS = {\n DAY: 'day',\n MONTH: 'month',\n QUARTER: 'quarter',\n YEAR: 'year',\n};\n\nconst getPeriodUntilToday = (today, period) => ({\n start: today.clone().startOf(period),\n end: today.clone(),\n});\n\nconst getLastFullPeriod = (today, period) => ({\n start: today.clone().subtract(1, period).startOf(period),\n end: today.clone().subtract(1, period).endOf(period),\n});\n\nexport const getDateRangeStartAndEndDates = ({ today, dateRangeName }) => {\n switch (dateRangeName) {\n case MONTH_UNTIL_TODAY:\n return getPeriodUntilToday(today, PERIODS.MONTH);\n case LAST_FULL_MONTH:\n return getLastFullPeriod(today, PERIODS.MONTH);\n case QUARTER_UNTIL_TODAY:\n return getPeriodUntilToday(today, PERIODS.QUARTER);\n case LAST_FULL_QUARTER:\n return getLastFullPeriod(today, PERIODS.QUARTER);\n case YEAR_UNTIL_TODAY:\n return getPeriodUntilToday(today, PERIODS.YEAR);\n case LAST_FULL_YEAR:\n return getLastFullPeriod(today, PERIODS.YEAR);\n }\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport { useState, useLayoutEffect, useEffect } from 'preact/hooks';\nimport 'react-dates/initialize';\nimport moment from 'moment';\nimport { DateRangePicker as ReactDateRangePicker } from 'react-dates';\nimport defaultPhrases from 'react-dates/lib/defaultPhrases';\nimport {\n START_DATE,\n ICON_BEFORE_POSITION,\n VERTICAL_ORIENTATION,\n HORIZONTAL_ORIENTATION,\n} from 'react-dates/constants';\nimport { getDateRangeStartAndEndDates, RANGE_LABELS } from './dateRangeUtils';\nimport { Icon, ButtonNew as Button } from '@crayons';\nimport ChevronLeft from '@images/chevron-left.svg';\nimport ChevronRight from '@images/chevron-right.svg';\nimport Calendar from '@images/calendar.svg';\nimport { getCurrentLocale } from '@utilities/runtime';\nimport { useMediaQuery, BREAKPOINTS } from '@components/useMediaQuery';\n\nconst PICKER_PHRASES = {\n ...defaultPhrases,\n chooseAvailableStartDate: ({ date }) => `Choose ${date} as start date`,\n chooseAvailableEndDate: ({ date }) => `Choose ${date} as end date`,\n focusStartDate: 'Interact with the calendar and add your start date',\n invalidDateFormat: (format, errorPrefix) =>\n `${errorPrefix} must be in the format ${format}`,\n dateTooLate: (latestDate, errorPrefix) =>\n `${errorPrefix} must be on or before ${latestDate}`,\n dateTooEarly: (earliestDate, errorPrefix) =>\n `${errorPrefix} must be on or after ${earliestDate}`,\n};\n\nconst MONTH_NAMES = [...Array(12).keys()].map((key) =>\n new Date(0, key).toLocaleString('en', { month: 'long' }),\n);\n\nconst isDateOutsideOfRange = ({ date, minDate, maxDate }) =>\n !date.isBetween(minDate, maxDate);\n\n/**\n * Renders select elements allowing a user to jump to a given month/year\n * @param {Object} earliestMoment Moment object representing the earliest permitted date\n * @param {Object} latestMoment Moment object representing the latest permitted date\n * @param {Function} onMonthSelect Callback passed by react-dates library\n * @param {Function} onYearSelect Callback passed by react-dates library\n * @param {Object} month Moment object passed by react-dates library, representing the currently visible calendar\n */\nconst MonthYearPicker = ({\n earliestMoment,\n latestMoment,\n onMonthSelect,\n onYearSelect,\n month,\n}) => {\n const selectedMonth = month.month();\n const selectedYear = month.year();\n\n const latestYear = latestMoment.year();\n\n // Make sure we only display the available months for the currently selected year\n const latestMonthIndex =\n latestYear === selectedYear ? latestMoment.month() : 11;\n const availableMonths = MONTH_NAMES.slice(0, latestMonthIndex + 1);\n\n const yearsDiff = latestMoment.diff(earliestMoment, 'years');\n\n const years = [...Array(yearsDiff).keys()].map(\n (key) => latestMoment.year() - key,\n );\n years.push(earliestMoment.year());\n\n return (\n
\n onMonthSelect(month, e.target.value)}\n value={selectedMonth}\n >\n {availableMonths.map((month, index) => (\n \n ))}\n \n onYearSelect(month, e.target.value)}\n value={selectedYear}\n >\n {years.map((year) => (\n \n ))}\n \n
\n );\n};\n\n/**\n * Renders preset date ranges as 'quick select' buttons, if the range falls within the permitted dates.\n * Possible preset ranges are defined in ./dateRangeUtils.js\n *\n * @param {[string]} presetRanges The preset range names requested\n * @param {Object} earliestMoment Moment object representing earliest permitted date\n * @param {Object} latestMoment Moment object representing latest permitted date\n * @param {Function} onPresetSelected Callback which will receive start and end dates of selected preset\n * @param {Object} today Moment object representing today's date\n */\nconst PresetDateRangeOptions = ({\n presetRanges = [],\n earliestMoment,\n latestMoment,\n onPresetSelected,\n today,\n}) => {\n // Filter out any requested ranges which extend beyond the valid time period\n const presetsWithinPermittedDates = presetRanges.filter((dateRangeName) => {\n const { start: rangeStart, end: rangeEnd } = getDateRangeStartAndEndDates({\n today,\n dateRangeName,\n });\n\n return (\n rangeStart.isSameOrBefore(rangeEnd) &&\n rangeStart.isSameOrAfter(earliestMoment) &&\n rangeEnd.isSameOrBefore(latestMoment)\n );\n });\n\n if (presetsWithinPermittedDates.length === 0) {\n return null;\n }\n\n return (\n
    \n {presetsWithinPermittedDates.map((rangeName) => (\n
  • \n {\n onPresetSelected(\n getDateRangeStartAndEndDates({\n today,\n dateRangeName: rangeName,\n }),\n );\n }}\n >\n {RANGE_LABELS[rangeName]}\n \n
  • \n ))}\n
\n );\n};\n\n/**\n * Hook that will attach listeners to date range inputs and return the correct error message for each.\n * @param {Object} props\n * @param {Object} props.earliesMoment Moment object reflecting the earliest date that may be selected\n * @param {Object} props.latestMoment Moment object reflecting the latest date that may be selected\n * @param {string} props.dateFormat The expected date format, e.g. \"MM/DD/YYYY\"\n */\nconst useDateRangeValidation = ({\n earliestMoment,\n latestMoment,\n dateFormat,\n}) => {\n const [startDateInput, setStartDateInput] = useState(null);\n const [endDateInput, setEndDateInput] = useState(null);\n const [startDateError, setStartDateError] = useState('');\n const [endDateError, setEndDateError] = useState('');\n\n useEffect(() => {\n const setError = (error, inputType) =>\n inputType === 'start'\n ? setStartDateError(error ?? '')\n : setEndDateError(error ?? '');\n\n const handleBlur = ({ target: { value } }, inputType) => {\n if (value === '') {\n setError('', inputType);\n return;\n }\n\n const errorPrefix = `${inputType === 'start' ? 'Start' : 'End'} date`;\n\n const valueMoment = moment(value, dateFormat);\n if (!valueMoment.isValid()) {\n setError(\n PICKER_PHRASES.invalidDateFormat(dateFormat, errorPrefix),\n inputType,\n );\n return;\n }\n\n if (valueMoment.isBefore(earliestMoment)) {\n setError(\n PICKER_PHRASES.dateTooEarly(\n earliestMoment.format(dateFormat),\n errorPrefix,\n ),\n inputType,\n );\n return;\n }\n\n if (valueMoment.isAfter(latestMoment)) {\n setError(\n PICKER_PHRASES.dateTooLate(\n latestMoment.format(dateFormat),\n errorPrefix,\n ),\n inputType,\n );\n return;\n }\n\n // Date is valid\n setError('', inputType);\n };\n\n const handleStartBlur = (e) => handleBlur(e, 'start');\n const handleEndBlur = (e) => handleBlur(e, 'end');\n\n startDateInput?.addEventListener('blur', handleStartBlur);\n endDateInput?.addEventListener('blur', handleEndBlur);\n\n return () => {\n startDateInput?.removeEventListener('blur', handleStartBlur);\n endDateInput?.removeEventListener('blur', handleEndBlur);\n };\n }, [startDateInput, endDateInput, dateFormat, earliestMoment, latestMoment]);\n\n return { setStartDateInput, setEndDateInput, startDateError, endDateError };\n};\n\n/**\n * Used to facilitate picking a date range. This component is a wrapper around the one provided from react-dates.\n *\n * @param {Object} props\n * @param {string} props.startDateId A unique ID for the start date input\n * @param {string} props.endDateId A unique ID for the end date input\n * @param {Date} props.defaultStartDate The optional initial value for the start date\n * @param {Date} props.defaultEndDate The optional initial value for the end date\n * @param {Date} props.maxEndDate The latest date that may be selected\n * @param {Date} props.minStartDate The oldest date that may be selected\n * @param {Function} props.onDatesChanged Callback function for when dates are selected. Receives an object with startDate and endDate values.\n * @param {[string]} props.presetRanges Quick-select preset date ranges to offer in the calendar. These will only be shown if they fall within the min and max dates.\n * @param {string} props.startDateAriaLabel Custom aria-label for start date input\n * @param {string} props.endDateAriaLabel Custom aria-label for end date input\n * @param {Date} props.todaysDate Optional param to pass in today's Date, primarily for testing purposes\n */\nexport const DateRangePicker = ({\n startDateId,\n endDateId,\n defaultStartDate,\n defaultEndDate,\n maxEndDate = new Date(),\n minStartDate = new Date(),\n onDatesChanged,\n presetRanges = [],\n startDateAriaLabel,\n endDateAriaLabel,\n todaysDate = new Date(),\n}) => {\n const [focusedInput, setFocusedInput] = useState(START_DATE);\n const [startMoment, setStartMoment] = useState(\n defaultStartDate ? moment(defaultStartDate) : null,\n );\n\n const [endMoment, setEndMoment] = useState(\n defaultEndDate ? moment(defaultEndDate) : null,\n );\n\n const dateFormat =\n getCurrentLocale().toLowerCase() === 'en-us' ? 'MM/DD/YYYY' : 'DD/MM/YYYY';\n\n const useCompactLayout = useMediaQuery(\n `(max-width: ${BREAKPOINTS.Medium - 1}px)`,\n );\n\n const earliestMoment = moment(minStartDate).startOf('day');\n const latestMoment = moment(maxEndDate).endOf('day');\n\n const isMonthSameAsLatestMonth = (relevantDate) =>\n relevantDate.year() === latestMoment.year() &&\n relevantDate.month() === latestMoment.month();\n\n const today = moment(todaysDate);\n\n const { setStartDateInput, setEndDateInput, startDateError, endDateError } =\n useDateRangeValidation({ earliestMoment, latestMoment, dateFormat });\n\n useLayoutEffect(() => {\n const startDateInput = document.getElementById(startDateId);\n startDateInput.setAttribute('aria-describedby', 'start-date-error');\n setStartDateInput(startDateInput);\n\n const endDateInput = document.getElementById(endDateId);\n endDateInput.setAttribute('aria-describedby', 'end-date-error');\n setEndDateInput(endDateInput);\n }, [startDateId, endDateId, setStartDateInput, setEndDateInput]);\n\n return (\n // We wrap in a span to assist with scoping CSS selectors & overriding styles from react-dates\n \n }\n navNext={}\n minDate={earliestMoment}\n maxDate={latestMoment}\n initialVisibleMonth={() => {\n const relevantDate = startMoment ? startMoment : today;\n\n return isMonthSameAsLatestMonth(relevantDate)\n ? relevantDate.clone().subtract(1, 'month')\n : relevantDate;\n }}\n customInputIcon={}\n showDefaultInputIcon={!(startMoment || endMoment)}\n inputIconPosition={ICON_BEFORE_POSITION}\n orientation={\n useCompactLayout ? VERTICAL_ORIENTATION : HORIZONTAL_ORIENTATION\n }\n showClearDates={startMoment || endMoment}\n customArrowIcon=\"-\"\n phrases={PICKER_PHRASES}\n onFocusChange={(focusedInput) => setFocusedInput(focusedInput)}\n isOutsideRange={(date) =>\n isDateOutsideOfRange({\n date,\n minDate: earliestMoment,\n maxDate: latestMoment,\n })\n }\n onDatesChange={({ startDate, endDate }) => {\n setStartMoment(startDate);\n setEndMoment(endDate);\n onDatesChanged?.({\n startDate: startDate?.toDate(),\n endDate: endDate?.toDate(),\n });\n }}\n small={useCompactLayout}\n renderMonthElement={(props) => (\n \n )}\n renderCalendarInfo={() => (\n {\n setStartMoment(start);\n setEndMoment(end);\n // Force the calendar to close, same as if user clicks an end date manually\n setFocusedInput(false);\n }}\n />\n )}\n />\n {/* This hidden input provides information that may be needed by implementing forms to properly parse dates */}\n \n \n
{startDateError}
\n
{endDateError}
\n \n \n );\n};\n\nDateRangePicker.propTypes = {\n startDateId: PropTypes.string.isRequired,\n endDateId: PropTypes.string.isRequired,\n defaultStartDate: PropTypes.instanceOf(Date),\n defaultEndDate: PropTypes.instanceOf(Date),\n maxStartDate: PropTypes.instanceOf(Date),\n maxEndDate: PropTypes.instanceOf(Date),\n onDatesChanged: PropTypes.func,\n presetRanges: PropTypes.arrayOf(PropTypes.string),\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames/bind';\n\nexport const Icon = ({\n src: InternalIcon,\n native,\n className,\n ...otherProps\n}) => {\n return (\n \n );\n};\n\nIcon.displayName = 'Icon';\n\nIcon.propTypes = {\n native: PropTypes.bool,\n className: PropTypes.string,\n src: PropTypes.elementType.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 } from 'preact';\nimport {\n getLastIndexOfCharacter,\n getNextIndexOfCharacter,\n getNumberOfNewLinesFollowingSelection,\n getNumberOfNewLinesPrecedingSelection,\n getSelectionData,\n} from '../../utilities/textAreaUtils';\nimport { getOSKeyboardModifierKeyString } from '@utilities/runtime';\nimport BoldIcon from '@images/bold.svg';\nimport ItalicIcon from '@images/italic.svg';\nimport LinkIcon from '@images/link.svg';\nimport OrderedListIcon from '@images/list-ordered.svg';\nimport UnorderedListIcon from '@images/list-unordered.svg';\nimport HeadingIcon from '@images/heading.svg';\nimport QuoteIcon from '@images/quote.svg';\nimport CodeIcon from '@images/code.svg';\nimport CodeBlockIcon from '@images/codeblock.svg';\nimport EmbedIcon from '@images/lightning.svg';\nimport UnderlineIcon from '@images/underline.svg';\nimport StrikethroughIcon from '@images/strikethrough.svg';\nimport DividerIcon from '@images/divider.svg';\nimport { Icon } from '@crayons';\n\nconst ORDERED_LIST_ITEM_REGEX = /^\\d+\\.\\s+.*/;\nconst MARKDOWN_LINK_REGEX =\n /^\\[([\\w\\s\\d]*)\\]\\((url|(https?:\\/\\/[\\w\\d./?=#]+))\\)$/;\nconst URL_PLACEHOLDER_TEXT = 'url';\n\nconst NUMBER_OF_NEW_LINES_BEFORE_BLOCK_SYNTAX = 2;\nconst NUMBER_OF_NEW_LINES_BEFORE_AFTER_SYNTAX = 1;\n\nconst getNewLinePrefixSuffixes = ({ selectionStart, selectionEnd, value }) => {\n const numberOfNewLinesBeforeSelection = getNumberOfNewLinesPrecedingSelection(\n { selectionStart, value },\n );\n const numberOfNewLinesFollowingSelection =\n getNumberOfNewLinesFollowingSelection({ selectionEnd, value });\n\n // We only add new lines if we're not at the beginning of the text area\n const numberOfNewLinesNeededAtStart =\n selectionStart === 0\n ? 0\n : NUMBER_OF_NEW_LINES_BEFORE_BLOCK_SYNTAX -\n numberOfNewLinesBeforeSelection;\n\n const newLinesPrefix = String.prototype.padStart(\n numberOfNewLinesNeededAtStart,\n '\\n',\n );\n\n const newLinesSuffix =\n numberOfNewLinesFollowingSelection >=\n NUMBER_OF_NEW_LINES_BEFORE_AFTER_SYNTAX\n ? ''\n : '\\n';\n\n return { newLinesPrefix, newLinesSuffix };\n};\n\nconst handleLinkFormattingForEmptyTextSelection = ({\n textBeforeSelection,\n textAfterSelection,\n value,\n selectionStart,\n selectionEnd,\n}) => {\n const basicFormattingForEmptySelection = {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: `[](${URL_PLACEHOLDER_TEXT})`,\n newCursorStart: selectionStart + 3,\n newCursorEnd: selectionEnd + 6,\n };\n\n // Directly after inserting a link with a URL highlighted, cursor is inside the link description '[]'\n // Check if we are inside empty link description remove the link syntax if so\n const directlySurroundedByLinkStructure =\n textBeforeSelection.slice(-1) === '[' &&\n textAfterSelection.slice(0, 2) === '](';\n\n if (!directlySurroundedByLinkStructure)\n return basicFormattingForEmptySelection;\n\n // Search for the closing bracket of markdown link\n const indexOfLinkStructureEnd = getNextIndexOfCharacter({\n content: value,\n selectionIndex: selectionStart,\n character: ')',\n breakOnCharacters: [' ', '\\n'],\n });\n\n if (indexOfLinkStructureEnd === -1) return basicFormattingForEmptySelection;\n\n // Remove the markdown link structure, preserving the link text if it isn't the \"url\" placeholder\n const urlText = value.slice(selectionEnd + 2, indexOfLinkStructureEnd);\n\n return {\n editSelectionStart: selectionStart - 1,\n editSelectionEnd: indexOfLinkStructureEnd + 1,\n replaceSelectionWith: urlText === URL_PLACEHOLDER_TEXT ? '' : urlText,\n newCursorStart: selectionStart - 1,\n newCursorEnd: selectionEnd - 1,\n };\n};\n\nconst handleLinkFormattingForUrlSelection = ({\n textBeforeSelection,\n textAfterSelection,\n value,\n selectionStart,\n selectionEnd,\n selectedText,\n}) => {\n const basicFormattingForLinkSelection = {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: `[](${selectedText})`,\n newCursorStart: selectionStart + 1,\n newCursorEnd: selectionStart + 1,\n };\n\n // Check if the text selection is likely inside a currently formatted markdown link\n const directlySurroundedByLinkStructure =\n textBeforeSelection.slice(-2) === '](' &&\n textAfterSelection.slice(0, 1) === ')';\n\n if (!directlySurroundedByLinkStructure)\n return basicFormattingForLinkSelection;\n\n // Get the index of where the current link opens so we can get the text inside the square brackets\n const indexOfSyntaxOpen = getLastIndexOfCharacter({\n content: value,\n selectionIndex: selectionStart,\n character: '[',\n });\n\n // If link syntax is incomplete, format the selection as a link\n if (indexOfSyntaxOpen === -1) return basicFormattingForLinkSelection;\n\n // Replace the markdown with the link text in square brackets, if available\n let textToReplaceMarkdown = textBeforeSelection.slice(\n indexOfSyntaxOpen + 1,\n -2,\n );\n\n // If not available, take the URL as long as it's not the placeholder 'url' text\n if (textToReplaceMarkdown === '') {\n textToReplaceMarkdown =\n selectedText === URL_PLACEHOLDER_TEXT ? '' : selectedText;\n }\n\n return {\n editSelectionStart: indexOfSyntaxOpen,\n editSelectionEnd: selectionEnd + 1,\n replaceSelectionWith: textToReplaceMarkdown,\n newCursorStart: indexOfSyntaxOpen,\n newCursorEnd: indexOfSyntaxOpen + textToReplaceMarkdown.length,\n };\n};\n\nconst handleUndoMarkdownLinkSelection = ({\n selectedText,\n selectionStart,\n selectionEnd,\n}) => {\n const linkDescriptionEnd = getNextIndexOfCharacter({\n content: selectedText,\n selectionIndex: 0,\n character: ']',\n });\n\n let textToReplaceMarkdown = selectedText.slice(1, linkDescriptionEnd);\n\n // Keep the URL instead if no link description exists\n if (textToReplaceMarkdown === '') {\n const linkText = selectedText.slice(linkDescriptionEnd + 2, -1);\n textToReplaceMarkdown = linkText === URL_PLACEHOLDER_TEXT ? '' : linkText;\n }\n\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: textToReplaceMarkdown,\n newCursorStart: selectionStart,\n newCursorEnd: selectionStart + textToReplaceMarkdown.length,\n };\n};\n\nconst isStringStartAUrl = (string) => {\n const startingText = string.substring(0, 8);\n return startingText === 'https://' || startingText.startsWith('http://');\n};\n\nconst undoOrAddFormattingForInlineSyntax = ({\n value,\n selectionStart,\n selectionEnd,\n prefix,\n suffix,\n}) => {\n const { length: prefixLength } = prefix;\n const { length: suffixLength } = suffix;\n const { selectedText, textBeforeSelection, textAfterSelection } =\n getSelectionData({ selectionStart, selectionEnd, value });\n\n // Check if selected text has prefix/suffix\n const selectedTextAlreadyFormatted =\n selectedText.slice(0, prefixLength) === prefix &&\n selectedText.slice(-1 * suffixLength) === suffix;\n\n if (selectedTextAlreadyFormatted) {\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: selectedText.slice(prefixLength, -1 * suffixLength),\n newCursorStart: selectionStart,\n newCursorEnd: selectionEnd - (prefixLength + suffixLength),\n };\n }\n\n // Check if immediate surrounding content has prefix/suffix\n const surroundingTextHasFormatting =\n textBeforeSelection.substring(textBeforeSelection.length - prefixLength) ===\n prefix && textAfterSelection.substring(0, suffixLength) === suffix;\n\n if (surroundingTextHasFormatting) {\n return {\n editSelectionStart: selectionStart - prefixLength,\n editSelectionEnd: selectionEnd + suffixLength,\n replaceSelectionWith: selectedText,\n newCursorStart: selectionStart - prefixLength,\n newCursorEnd: selectionEnd - prefixLength,\n };\n }\n\n // No formatting to undo - format the selected text\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: `${prefix}${selectedText}${suffix}`,\n newCursorStart: selectionStart + prefixLength,\n newCursorEnd: selectionEnd + prefixLength,\n };\n};\n\nconst undoOrAddFormattingForMultilineSyntax = ({\n selectionStart,\n selectionEnd,\n value,\n linePrefix,\n blockPrefix,\n blockSuffix,\n}) => {\n const { selectedText, textBeforeSelection, textAfterSelection } =\n getSelectionData({ selectionStart, selectionEnd, value });\n\n let formattedText = selectedText;\n\n if (linePrefix) {\n const { length: prefixLength } = linePrefix;\n\n // If no selection, check if we're in a freshly inserted syntax\n if (selectedText === '') {\n const lastNewLine =\n textBeforeSelection === ''\n ? -1\n : getLastIndexOfCharacter({\n content: value,\n selectionIndex: selectionStart - 1,\n character: '\\n',\n });\n\n const lineStart = lastNewLine === -1 ? 0 : lastNewLine + 1;\n\n if (\n textBeforeSelection.slice(lineStart, lineStart + prefixLength) ===\n linePrefix\n ) {\n // Remove the list formatting\n\n return {\n editSelectionStart: lineStart,\n editSelectionEnd: lineStart + prefixLength,\n replaceSelectionWith: '',\n newCursorStart: selectionStart - prefixLength,\n newCursorEnd: selectionEnd - prefixLength,\n };\n }\n }\n\n // Split by new lines and check each line has formatting\n const splitByNewLine = selectedText\n .split('\\n')\n .filter((line) => line !== '');\n\n const isAlreadyFormatted =\n splitByNewLine.length > 0 &&\n splitByNewLine.every(\n (line) => line.slice(0, prefixLength) === linePrefix,\n );\n\n if (isAlreadyFormatted) {\n // Remove the formatting\n const unformattedText = splitByNewLine\n .map((line) => line.slice(prefixLength))\n .join('\\n');\n\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: unformattedText,\n newCursorStart: selectionStart,\n newCursorEnd:\n selectionEnd + (unformattedText.length - selectedText.length),\n };\n }\n\n // Otherwise add the prefix to each line to create the new formatted text\n formattedText =\n selectedText === ''\n ? linePrefix\n : splitByNewLine.map((line) => `${linePrefix}${line}`).join('\\n');\n } else {\n // Uses only block prefix and suffix\n const { length: prefixLength } = blockPrefix;\n const { length: suffixLength } = blockSuffix;\n\n // does the selection start and end with the prefix/suffix\n const selectionIsFormatted =\n selectedText.slice(0, prefixLength) === blockPrefix &&\n selectedText.slice(-1 * suffixLength) === blockSuffix;\n\n if (selectionIsFormatted) {\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: selectedText.slice(\n prefixLength,\n -1 * suffixLength,\n ),\n newCursorStart: selectionStart,\n newCursorEnd: selectionEnd - prefixLength - suffixLength,\n };\n }\n\n // or does the prefix/suffix plus new line chars immediately precede and follow the selection\n const surroundingTextIsFormatted =\n textBeforeSelection.slice(-1 * prefixLength) === blockPrefix &&\n textAfterSelection.slice(0, suffixLength) === blockSuffix;\n\n if (surroundingTextIsFormatted) {\n return {\n editSelectionStart: selectionStart - prefixLength,\n editSelectionEnd: selectionEnd + suffixLength,\n replaceSelectionWith: selectedText,\n newCursorStart: selectionStart - prefixLength,\n newCursorEnd: selectionEnd - prefixLength,\n };\n }\n }\n\n // Add the formatting\n\n const { newLinesPrefix, newLinesSuffix } = getNewLinePrefixSuffixes({\n selectionStart,\n selectionEnd,\n value,\n });\n const { length: newLinePrefixLength } = newLinesPrefix;\n\n const cursorStartBaseline = selectionStart + newLinePrefixLength;\n const cursorStartBlockPrefixOffset = blockPrefix ? blockPrefix.length : 0;\n const cursorStartLinePrefixOffset =\n selectedText === '' && linePrefix ? linePrefix.length : 0;\n\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: `${newLinesPrefix}${\n blockPrefix ? blockPrefix : ''\n }${formattedText}${blockSuffix ? blockSuffix : ''}${newLinesSuffix}`,\n newCursorStart:\n cursorStartBaseline +\n cursorStartBlockPrefixOffset +\n cursorStartLinePrefixOffset,\n newCursorEnd:\n selectionEnd +\n formattedText.length -\n selectedText.length +\n newLinePrefixLength +\n (blockPrefix?.length || 0),\n };\n};\n\nexport const getNewTextAreaValueWithEdits = ({\n textAreaValue,\n editSelectionStart,\n editSelectionEnd,\n replaceSelectionWith,\n}) =>\n `${textAreaValue.substring(\n 0,\n editSelectionStart,\n )}${replaceSelectionWith}${textAreaValue.substring(editSelectionEnd)}`;\n\nexport const markdownSyntaxFormatters = {\n bold: {\n icon: () => ,\n label: 'Bold',\n getKeyboardShortcut: () => {\n const modifier = getOSKeyboardModifierKeyString();\n return {\n command: `${modifier}+b`,\n tooltipHint: `${modifier.toUpperCase()} + B`,\n };\n },\n getFormatting: ({ selectionStart, selectionEnd, value }) => {\n return undoOrAddFormattingForInlineSyntax({\n selectionStart,\n selectionEnd,\n value,\n prefix: '**',\n suffix: '**',\n });\n },\n },\n italic: {\n icon: () => ,\n label: 'Italic',\n getKeyboardShortcut: () => {\n const modifier = getOSKeyboardModifierKeyString();\n return {\n command: `${modifier}+i`,\n tooltipHint: `${modifier.toUpperCase()} + I`,\n };\n },\n getFormatting: ({ selectionStart, selectionEnd, value }) => {\n return undoOrAddFormattingForInlineSyntax({\n selectionStart,\n selectionEnd,\n value,\n prefix: '_',\n suffix: '_',\n });\n },\n },\n link: {\n icon: () => ,\n label: 'Link',\n getKeyboardShortcut: () => {\n const modifier = getOSKeyboardModifierKeyString();\n return {\n command: `${modifier}+k`,\n tooltipHint: `${modifier.toUpperCase()} + K`,\n };\n },\n getFormatting: ({ selectionStart, selectionEnd, value }) => {\n const { selectedText, textBeforeSelection, textAfterSelection } =\n getSelectionData({ selectionStart, selectionEnd, value });\n\n if (selectedText === '') {\n return handleLinkFormattingForEmptyTextSelection({\n textBeforeSelection,\n textAfterSelection,\n value,\n selectionStart,\n selectionEnd,\n });\n }\n\n if (\n isStringStartAUrl(selectedText) ||\n selectedText === URL_PLACEHOLDER_TEXT\n ) {\n return handleLinkFormattingForUrlSelection({\n textBeforeSelection,\n textAfterSelection,\n value,\n selectionStart,\n selectedText,\n selectionEnd,\n });\n }\n\n // If the whole selectedText matches markdown link formatting, undo it\n if (selectedText.match(MARKDOWN_LINK_REGEX)) {\n return handleUndoMarkdownLinkSelection({\n selectedText,\n selectionStart,\n selectionEnd,\n textBeforeSelection,\n textAfterSelection,\n });\n }\n\n // Finally, handle the case where link syntax is inserted for a selection other than a URL\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: `[${selectedText}](${URL_PLACEHOLDER_TEXT})`,\n newCursorStart: selectionStart + selectedText.length + 3,\n newCursorEnd: selectionEnd + 6,\n };\n },\n },\n orderedList: {\n icon: () => ,\n label: 'Ordered list',\n getFormatting: ({ selectionStart, selectionEnd, value }) => {\n const { selectedText, textBeforeSelection } = getSelectionData({\n selectionStart,\n selectionEnd,\n value,\n });\n\n const { newLinesPrefix, newLinesSuffix } = getNewLinePrefixSuffixes({\n selectionStart,\n selectionEnd,\n value,\n });\n const { length: newLinePrefixLength } = newLinesPrefix;\n const { length: newLineSuffixLength } = newLinesSuffix;\n\n if (selectedText === '') {\n // Check start of line for whether we're in an empty ordered list\n const lastNewLine =\n textBeforeSelection === ''\n ? -1\n : getLastIndexOfCharacter({\n content: value,\n selectionIndex: selectionStart - 1,\n character: '\\n',\n });\n\n const lineStart = lastNewLine === -1 ? 0 : lastNewLine + 1;\n\n if (textBeforeSelection.slice(lineStart, lineStart + 3) === '1. ') {\n // Remove the list formatting\n return {\n editSelectionStart: lineStart,\n editSelectionEnd: lineStart + 3,\n replaceSelectionWith: '',\n newCursorStart: selectionStart - 3,\n newCursorEnd: selectionEnd - 3,\n };\n }\n }\n\n if (selectedText === '') {\n // Otherwise insert an empty list for an empty selection\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: `${newLinesPrefix}1. ${newLinesSuffix}`,\n newCursorStart: selectionStart + 3 + newLinePrefixLength,\n newCursorEnd: selectionEnd + 3 + newLinePrefixLength,\n };\n }\n\n const splitByNewLine = selectedText.split('\\n');\n\n const isAlreadyAnOrderedList = splitByNewLine.every(\n (line) => line.match(ORDERED_LIST_ITEM_REGEX) || line === '',\n );\n\n if (isAlreadyAnOrderedList) {\n // Undo formatting\n const newText = splitByNewLine\n .filter((line) => line !== '')\n .map((line) => {\n const indexOfFullStop = line.indexOf('.');\n return line.substring(indexOfFullStop + 2);\n })\n .join('\\n');\n\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: newText,\n newCursorStart: selectionStart + selectedText.indexOf('.') - 1,\n newCursorEnd: selectionEnd + newText.length - selectedText.length,\n };\n }\n // Otherwise convert to an ordered list\n const formattedList = `${newLinesPrefix}${splitByNewLine\n .map((textChunk, index) => `${index + 1}. ${textChunk}`)\n .join('\\n')}${newLinesSuffix}`;\n\n const cursorOffsetStart =\n selectedText.length === 0 ? 4 : newLinePrefixLength;\n\n return {\n editSelectionStart: selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: formattedList,\n newCursorStart: selectionStart + cursorOffsetStart,\n newCursorEnd:\n selectionStart + formattedList.length - newLineSuffixLength,\n };\n },\n },\n unorderedList: {\n icon: () => ,\n label: 'Unordered list',\n getFormatting: ({ selectionStart, selectionEnd, value }) => {\n return undoOrAddFormattingForMultilineSyntax({\n selectionStart,\n selectionEnd,\n value,\n linePrefix: '- ',\n });\n },\n },\n heading: {\n icon: () => ,\n label: 'Heading',\n getFormatting: ({ selectionStart, selectionEnd, value }) => {\n let currentLineSelectionStart = selectionStart;\n\n // The 'heading' formatter changes insertion based on the existing heading level of the current line\n // So we find the start of the current line and check for '#' characters\n if (selectionStart > 0) {\n const lastNewLine = getLastIndexOfCharacter({\n content: value,\n selectionIndex: selectionStart - 1,\n character: '\\n',\n });\n\n const indexOfFirstLineCharacter =\n lastNewLine === -1 ? 0 : lastNewLine + 1;\n\n if (value.charAt(indexOfFirstLineCharacter) === '#') {\n currentLineSelectionStart = indexOfFirstLineCharacter;\n }\n }\n\n const { selectedText } = getSelectionData({\n selectionStart: currentLineSelectionStart,\n selectionEnd,\n value,\n });\n\n let currentHeadingIndex = 0;\n while (selectedText.charAt(currentHeadingIndex) === '#') {\n currentHeadingIndex++;\n }\n\n // After h4, revert to no heading at all\n if (currentHeadingIndex >= 4) {\n return {\n editSelectionStart: currentLineSelectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: selectedText.substring(5),\n newCursorStart: selectionStart - 5,\n newCursorEnd: selectionEnd - 5,\n };\n }\n\n const { newLinesPrefix, newLinesSuffix } = getNewLinePrefixSuffixes({\n selectionStart,\n selectionEnd,\n value,\n });\n const { length: newLinePrefixLength } = newLinesPrefix;\n\n const adjustingHeading = currentHeadingIndex > 0;\n const cursorOffset = adjustingHeading ? 1 : 3 + newLinePrefixLength;\n\n return {\n editSelectionStart: adjustingHeading\n ? currentLineSelectionStart\n : selectionStart,\n editSelectionEnd: selectionEnd,\n replaceSelectionWith: adjustingHeading\n ? `#${selectedText}`\n : `${newLinesPrefix}## ${selectedText}${newLinesSuffix}`,\n newCursorStart: selectionStart + cursorOffset,\n newCursorEnd: selectionEnd + cursorOffset,\n };\n },\n },\n quote: {\n icon: () => ,\n label: 'Quote',\n getFormatting: ({ selectionStart, selectionEnd, value }) =>\n undoOrAddFormattingForMultilineSyntax({\n selectionStart,\n selectionEnd,\n value,\n linePrefix: '> ',\n }),\n },\n code: {\n icon: () => ,\n label: 'Code',\n getFormatting: ({ selectionStart, selectionEnd, value }) =>\n undoOrAddFormattingForInlineSyntax({\n selectionStart,\n selectionEnd,\n value,\n prefix: '`',\n suffix: '`',\n }),\n },\n codeBlock: {\n icon: () => ,\n label: 'Code block',\n getFormatting: ({ selectionStart, selectionEnd, value }) =>\n undoOrAddFormattingForMultilineSyntax({\n selectionStart,\n selectionEnd,\n value,\n blockPrefix: '```\\n',\n blockSuffix: '\\n```',\n }),\n },\n embed: {\n icon: () => ,\n label: 'Embed',\n getKeyboardShortcut: () => {\n const modifier = getOSKeyboardModifierKeyString();\n return {\n command: `${modifier}+shift+k`,\n tooltipHint: `${modifier.toUpperCase()} + SHIFT + K`,\n };\n },\n getFormatting: ({ selectionStart, selectionEnd, value }) =>\n undoOrAddFormattingForInlineSyntax({\n value,\n selectionStart,\n selectionEnd,\n prefix: '{% embed ',\n suffix: ' %}',\n }),\n },\n underline: {\n icon: () => ,\n label: 'Underline',\n getKeyboardShortcut: () => {\n const modifier = getOSKeyboardModifierKeyString();\n return {\n command: `${modifier}+u`,\n tooltipHint: `${modifier.toUpperCase()} + U`,\n };\n },\n getFormatting: ({ selectionStart, selectionEnd, value }) =>\n undoOrAddFormattingForInlineSyntax({\n selectionStart,\n selectionEnd,\n value,\n prefix: '',\n suffix: '',\n }),\n },\n strikethrough: {\n icon: () => ,\n label: 'Strikethrough',\n getKeyboardShortcut: () => {\n const modifier = getOSKeyboardModifierKeyString();\n return {\n command: `${modifier}+shift+x`,\n tooltipHint: `${modifier.toUpperCase()} + SHIFT + X`,\n };\n },\n getFormatting: ({ selectionStart, selectionEnd, value }) =>\n undoOrAddFormattingForInlineSyntax({\n selectionStart,\n selectionEnd,\n value,\n prefix: '~~',\n suffix: '~~',\n }),\n },\n divider: {\n icon: () => ,\n label: 'Line divider',\n getFormatting: ({ selectionStart, selectionEnd, value }) =>\n undoOrAddFormattingForMultilineSyntax({\n selectionStart,\n selectionEnd,\n value,\n blockPrefix: '---\\n',\n blockSuffix: '',\n }),\n },\n};\n","import { h, cloneElement } from 'preact';\nimport { useState, useLayoutEffect, useRef } from 'preact/hooks';\nimport { ImageUploader } from '../../article-form/components/ImageUploader';\nimport {\n markdownSyntaxFormatters,\n getNewTextAreaValueWithEdits,\n} from './markdownSyntaxFormatters';\nimport OverflowIcon from '@images/overflow-vertical.svg';\nimport { ButtonNew as Button } from '@crayons';\nimport { useKeyboardShortcuts } from '@components/useKeyboardShortcuts';\nimport { BREAKPOINTS, useMediaQuery } from '@components/useMediaQuery';\nimport { getSelectionData } from '@utilities/textAreaUtils';\n\n// Placeholder text displayed while an image is uploading\nconst UPLOADING_IMAGE_PLACEHOLDER = '![Uploading image](...)';\n\nconst MAX_CORE_FORMATTERS_BY_SCREEN_SIZE = {\n small: 5,\n large: 7,\n extraLarge: 10,\n};\n\nconst getNumberOfIconsToDisplayInToolbar = ({\n isSmallScreen,\n isLargeScreen,\n}) => {\n if (isSmallScreen) {\n return MAX_CORE_FORMATTERS_BY_SCREEN_SIZE.small;\n }\n if (isLargeScreen) {\n return MAX_CORE_FORMATTERS_BY_SCREEN_SIZE.large;\n }\n return MAX_CORE_FORMATTERS_BY_SCREEN_SIZE.extraLarge;\n};\n\n/**\n * Returns the next sibling in the DOM which matches the given CSS selector.\n * This makes sure that only toolbar buttons are cycled through on Arrow key press,\n * and not e.g. the hidden file input from ImageUploader\n *\n * @param {HTMLElement} element The current HTML element\n * @param {string} selector The CSS selector to match\n * @returns\n */\nconst getNextMatchingSibling = (element, selector) => {\n let sibling = element.nextElementSibling;\n\n while (sibling) {\n if (sibling.matches(selector)) return sibling;\n sibling = sibling.nextElementSibling;\n }\n};\n\n/**\n * Returns the previous sibling in the DOM which matches the given CSS selector.\n * This makes sure that only toolbar buttons are cycled through on Arrow key press,\n * and not e.g. the hidden file input from ImageUploader\n *\n * @param {HTMLElement} element The current HTML element\n * @param {string} selector The CSS selector to match\n * @returns\n */\nconst getPreviousMatchingSibling = (element, selector) => {\n let sibling = element.previousElementSibling;\n\n while (sibling) {\n if (sibling.matches(selector)) return sibling;\n sibling = sibling.previousElementSibling;\n }\n};\n\n/**\n * UI component providing markdown shortcuts, to be inserted into the textarea with the given ID\n *\n * @param {object} props\n * @param {string} props.textAreaId The ID of the textarea the markdown formatting should be added to\n */\nexport const MarkdownToolbar = ({\n textAreaId,\n additionalSecondaryToolbarElements = [],\n}) => {\n const textAreaRef = useRef(null);\n\n const [overflowMenuOpen, setOverflowMenuOpen] = useState(false);\n const [storedCursorPosition, setStoredCursorPosition] = useState({});\n const smallScreen = useMediaQuery(`(max-width: ${BREAKPOINTS.Medium - 1}px)`);\n const largeScreen = useMediaQuery(\n `(min-width: ${BREAKPOINTS.Large}px) and (max-width: ${\n BREAKPOINTS.ExtraLarge - 1\n }px)`,\n );\n\n const overflowMenuRows = smallScreen ? 2 : 1;\n\n // Enhance any additional toolbar elements with the appropriate roles & listeners\n const additionalSecondaryItems = additionalSecondaryToolbarElements.map(\n (SecondaryItem) =>\n cloneElement(SecondaryItem, {\n role: 'menuitem',\n className: 'overflow-menu-btn',\n tabindex: '-1',\n onKeyUp: (e) => handleToolbarButtonKeyPress(e, 'overflow-menu-btn'),\n }),\n );\n\n const keyboardShortcuts = Object.fromEntries(\n Object.keys(markdownSyntaxFormatters)\n .filter(\n (syntaxName) =>\n !!markdownSyntaxFormatters[syntaxName].getKeyboardShortcut,\n )\n .map((syntaxName) => {\n const { command } =\n markdownSyntaxFormatters[syntaxName].getKeyboardShortcut();\n return [\n command,\n (e) => {\n e.preventDefault();\n insertSyntax(syntaxName);\n },\n ];\n }),\n );\n\n useKeyboardShortcuts(keyboardShortcuts, textAreaRef.current);\n\n useLayoutEffect(() => {\n textAreaRef.current = document.getElementById(textAreaId);\n }, [textAreaId]);\n\n useLayoutEffect(() => {\n // If a user resizes their screen, make sure roving tabindex continues to operate\n const focusableToolbarButton = document.querySelector(\n '.toolbar-btn[tabindex=\"0\"]',\n );\n if (!focusableToolbarButton) {\n document.querySelector('.toolbar-btn').setAttribute('tabindex', '0');\n }\n }, [smallScreen, largeScreen]);\n\n useLayoutEffect(() => {\n const clickOutsideHandler = ({ target }) => {\n if (target.id !== 'overflow-menu-button') {\n setOverflowMenuOpen(false);\n }\n };\n\n const escapePressHandler = ({ key }) => {\n if (key === 'Escape') {\n setOverflowMenuOpen(false);\n document.getElementById('overflow-menu-button').focus();\n }\n if (key === 'Tab') {\n setOverflowMenuOpen(false);\n }\n };\n\n if (overflowMenuOpen) {\n document\n .getElementById('overflow-menu')\n .getElementsByClassName('overflow-menu-btn')[0]\n .focus();\n\n document.addEventListener('keyup', escapePressHandler);\n document.addEventListener('click', clickOutsideHandler);\n } else {\n document.removeEventListener('keyup', escapePressHandler);\n document.removeEventListener('click', clickOutsideHandler);\n }\n\n return () => {\n document.removeEventListener('keyup', escapePressHandler);\n document.removeEventListener('click', clickOutsideHandler);\n };\n }, [overflowMenuOpen]);\n\n // Handles keyboard 'roving tabindex' pattern for toolbar\n const handleToolbarButtonKeyPress = (event, className) => {\n const { key, target } = event;\n\n const nextButton = getNextMatchingSibling(target, `.${className}`);\n const previousButton = getPreviousMatchingSibling(target, `.${className}`);\n\n switch (key) {\n case 'ArrowRight':\n event.preventDefault();\n target.setAttribute('tabindex', '-1');\n if (nextButton) {\n nextButton.setAttribute('tabindex', 0);\n nextButton.focus();\n } else {\n const firstButton = document.querySelector(`.${className}`);\n firstButton.setAttribute('tabindex', '0');\n firstButton.focus();\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n target.setAttribute('tabindex', '-1');\n if (previousButton) {\n previousButton.setAttribute('tabindex', 0);\n previousButton.focus();\n } else {\n const allButtons = document.getElementsByClassName(className);\n const lastButton = allButtons[allButtons.length - 1];\n lastButton.setAttribute('tabindex', '0');\n lastButton.focus();\n }\n break;\n case 'ArrowDown':\n if (target.id === 'overflow-menu-button') {\n event.preventDefault();\n setOverflowMenuOpen(true);\n }\n break;\n }\n };\n\n const insertSyntax = (syntaxName) => {\n setOverflowMenuOpen(false);\n\n const { current: textArea } = textAreaRef;\n const {\n newCursorStart,\n newCursorEnd,\n editSelectionStart,\n editSelectionEnd,\n replaceSelectionWith,\n } = markdownSyntaxFormatters[syntaxName].getFormatting(textArea);\n\n // We try to update the textArea with document.execCommand, which requires the contentEditable attribute to be true.\n // The value is later toggled back to 'false'\n textArea.contentEditable = 'true';\n textArea.focus({ preventScroll: true });\n textArea.setSelectionRange(editSelectionStart, editSelectionEnd);\n\n try {\n // We first try to use execCommand which allows the change to be correctly added to the undo queue.\n // document.execCommand is deprecated, but the API which will eventually replace it is still incoming (https://w3c.github.io/input-events/)\n if (replaceSelectionWith === '') {\n document.execCommand('delete', false);\n } else {\n document.execCommand('insertText', false, replaceSelectionWith);\n }\n } catch {\n // In the event of any error using execCommand, we make sure the text area updates (but undo queue will not)\n textArea.value = getNewTextAreaValueWithEdits({\n textAreaValue: textArea.value,\n editSelectionStart,\n editSelectionEnd,\n replaceSelectionWith,\n });\n }\n\n textArea.contentEditable = 'false';\n textArea.dispatchEvent(new Event('input'));\n textArea.setSelectionRange(newCursorStart, newCursorEnd);\n };\n\n const handleImageUploadStarted = () => {\n const { current: textArea } = textAreaRef;\n const { textBeforeSelection, textAfterSelection } =\n getSelectionData(textArea);\n\n const { selectionEnd } = storedCursorPosition;\n\n const textWithPlaceholder = `${textBeforeSelection}\\n${UPLOADING_IMAGE_PLACEHOLDER}${textAfterSelection}`;\n textArea.value = textWithPlaceholder;\n // Make sure Editor text area updates via linkstate\n textArea.dispatchEvent(new Event('input'));\n\n textArea.focus({ preventScroll: true });\n\n // Set cursor to the end of the placeholder\n const newCursorPosition =\n selectionEnd + UPLOADING_IMAGE_PLACEHOLDER.length + 1;\n\n textArea.setSelectionRange(newCursorPosition, newCursorPosition);\n };\n\n const handleImageUploadEnd = (imageMarkdown = '') => {\n const { current: textArea } = textAreaRef;\n\n const {\n selectionStart,\n selectionEnd,\n value: currentTextAreaValue,\n } = textArea;\n\n const indexOfPlaceholder = currentTextAreaValue.indexOf(\n UPLOADING_IMAGE_PLACEHOLDER,\n );\n\n // User has deleted placeholder, nothing to do\n if (indexOfPlaceholder === -1) return;\n\n const newTextValue = textArea.value.replace(\n UPLOADING_IMAGE_PLACEHOLDER,\n imageMarkdown,\n );\n\n textArea.value = newTextValue;\n // Make sure Editor text area updates via linkstate\n textArea.dispatchEvent(new Event('input'));\n\n // The change to image markdown length does not affect cursor position\n if (indexOfPlaceholder > selectionStart) {\n textArea.setSelectionRange(selectionStart, selectionEnd);\n return;\n }\n\n const differenceInLength =\n imageMarkdown.length - UPLOADING_IMAGE_PLACEHOLDER.length;\n\n textArea.setSelectionRange(\n selectionStart + differenceInLength,\n selectionEnd + differenceInLength,\n );\n };\n\n const numberOfCoreFormatters = getNumberOfIconsToDisplayInToolbar({\n isSmallScreen: smallScreen,\n isLargeScreen: largeScreen,\n });\n\n const coreSyntaxFormatters = Object.fromEntries(\n Object.entries(markdownSyntaxFormatters).slice(0, numberOfCoreFormatters),\n );\n const secondarySyntaxFormatters = Object.fromEntries(\n Object.entries(markdownSyntaxFormatters).slice(numberOfCoreFormatters),\n );\n\n const secondaryFormatterButtons = Object.keys(secondarySyntaxFormatters).map(\n (controlName, index) => {\n const { icon, label, getKeyboardShortcut } =\n secondarySyntaxFormatters[controlName];\n\n return (\n insertSyntax(controlName)}\n onKeyUp={(e) => handleToolbarButtonKeyPress(e, 'overflow-menu-btn')}\n aria-label={label}\n tooltip={\n smallScreen ? null : (\n \n {label}\n {getKeyboardShortcut ? (\n \n {` ${getKeyboardShortcut().tooltipHint}`}\n \n ) : null}\n \n )\n }\n />\n );\n },\n );\n\n return (\n \n {Object.keys(coreSyntaxFormatters).map((controlName, index) => {\n const { icon, label, getKeyboardShortcut } =\n coreSyntaxFormatters[controlName];\n return (\n insertSyntax(controlName)}\n onKeyUp={(e) => handleToolbarButtonKeyPress(e, 'toolbar-btn')}\n aria-label={label}\n tooltip={\n smallScreen ? null : (\n \n {label}\n {getKeyboardShortcut ? (\n \n {` ${getKeyboardShortcut().tooltipHint}`}\n \n ) : null}\n \n )\n }\n />\n );\n })}\n\n handleToolbarButtonKeyPress(e, 'toolbar-btn'),\n onClick: () => {\n const {\n current: { selectionStart, selectionEnd },\n } = textAreaRef;\n setStoredCursorPosition({ selectionStart, selectionEnd });\n },\n tooltip: smallScreen ? null : (\n Upload image\n ),\n key: 'image-btn',\n className: 'toolbar-btn formatter-btn mr-1',\n tabindex: '-1',\n }}\n />\n\n setOverflowMenuOpen(!overflowMenuOpen)}\n onKeyUp={(e) => handleToolbarButtonKeyPress(e, 'toolbar-btn')}\n aria-expanded={overflowMenuOpen ? 'true' : 'false'}\n aria-haspopup=\"true\"\n icon={OverflowIcon}\n className=\"toolbar-btn ml-auto\"\n tabindex=\"-1\"\n aria-label=\"More options\"\n />\n\n {overflowMenuOpen && (\n \n {secondaryFormatterButtons}\n {additionalSecondaryItems}\n \n )}\n \n );\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport { Icon, ButtonNew as Button } from '@crayons';\nimport { Close } from '@images/x.svg';\n\n/**\n * Responsible for the layout of a selected item in the crayons autocomplete and multi input components\n *\n * @param {string} name The selected item name\n * @param {string} buttonVariant Optional button variant\n * @param {string} className Optional classname for selected item\n * @param {Function} onEdit Callback for edit click on the name of the selected item\n * @param {Function} onDeselect Callback for deselect click on the close icon\n */\nexport const DefaultSelectionTemplate = ({\n name,\n enableValidation = false,\n valid = true,\n buttonVariant = 'default',\n className = 'c-autocomplete--multi__selected',\n onEdit,\n onDeselect,\n}) => {\n const conditionalAttributes = () => {\n if (enableValidation) {\n return { 'aria-describedby': `invalid-item-${name}` };\n }\n return {};\n };\n\n return (\n <>\n {enableValidation && (\n \n {!valid ? 'Invalid entry' : ''}\n \n )}\n
\n \n {name}\n \n \n \n \n
\n \n );\n};\n\nDefaultSelectionTemplate.propTypes = {\n name: PropTypes.string.isRequired,\n buttonVariant: PropTypes.string,\n className: PropTypes.string,\n onEdit: PropTypes.func.isRequired,\n onDeselect: PropTypes.func.isRequired,\n};\n","/* eslint-disable jsx-a11y/interactive-supports-focus, jsx-a11y/role-has-required-aria-props */\n// Disabled due to the linter being out of date for combobox role: https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/789\nimport { h, Fragment } from 'preact';\nimport PropTypes from 'prop-types';\nimport { useEffect, useRef, useReducer } from 'preact/hooks';\nimport { DefaultSelectionTemplate } from '../../shared/components/defaultSelectionTemplate';\n\nconst KEYS = {\n UP: 'ArrowUp',\n DOWN: 'ArrowDown',\n ENTER: 'Enter',\n ESCAPE: 'Escape',\n DELETE: 'Backspace',\n COMMA: ',',\n SPACE: ' ',\n};\n\nconst ALLOWED_CHARS_REGEX = /([a-zA-Z0-9])/;\nconst PLACEHOLDER_SELECTIONS_MADE = 'Add another...';\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case 'setSelectedItems':\n return {\n ...state,\n selectedItems: action.payload.selectedItems,\n suggestions: action.payload.suggestions ?? state.suggestions,\n activeDescendentIndex: null,\n };\n case 'setSuggestions':\n return {\n ...state,\n suggestions: action.payload,\n activeDescendentIndex: null,\n };\n case 'updateEditState':\n return {\n ...state,\n editValue: action.payload.editValue,\n inputPosition: action.payload.inputPosition,\n };\n case 'setActiveDescendentIndex':\n return { ...state, activeDescendentIndex: action.payload };\n case 'setIgnoreBlur':\n return { ...state, ignoreBlur: action.payload };\n case 'setShowMaxSelectionsReached':\n return { ...state, showMaxSelectionsReached: action.payload };\n default:\n return state;\n }\n};\n\n/**\n * Component allowing users to search and select multiple values\n *\n * @param {Object} props\n * @param {string} props.labelText The text for the input's label\n * @param {boolean} props.showLabel Whether the label text should be visible or hidden (for assistive tech users only)\n * @param {Function} props.fetchSuggestions Callback function which accepts the search term string and returns an array of suggestions\n * @param {Array} props.defaultValue Array of items which should be selected by default\n * @param {Array} props.staticSuggestions Array of items which should be suggested if no search term has been entered yet\n * @param {string} props.staticSuggestionsHeading Optional heading to display when static suggestions are rendered\n * @param {boolean} props.border Whether to show a bordered input\n * @param {string} props.placeholder Input placeholder text\n * @param {string} props.inputId ID to be applied to the input element\n * @param {number} props.maxSelections Optional maximum number of allowed selections\n * @param {Function} props.onSelectionsChanged Callback for when selections are added or removed\n * @param {Function} props.onFocus Callback for when the component receives focus\n * @param {boolean} props.allowUserDefinedSelections Whether a user can create new selections other than the defined suggestions\n * @param {Function} props.SuggestionTemplate Optional Preact component to render suggestion items\n * @param {Function} props.SelectionTemplate Optional Preact component to render selected items\n */\nexport const MultiSelectAutocomplete = ({\n labelText,\n showLabel = true,\n fetchSuggestions,\n defaultValue = [],\n staticSuggestions = [],\n staticSuggestionsHeading,\n border = true,\n placeholder = 'Add...',\n inputId,\n maxSelections,\n onSelectionsChanged,\n onFocus,\n allowUserDefinedSelections = false,\n SuggestionTemplate,\n SelectionTemplate = DefaultSelectionTemplate,\n}) => {\n const [state, dispatch] = useReducer(reducer, {\n suggestions: [],\n selectedItems: defaultValue,\n inputPosition: null,\n editValue: null,\n activeDescendentIndex: null,\n ignoreBlur: false,\n showMaxSelectionsReached: false,\n });\n\n const {\n selectedItems,\n suggestions,\n inputPosition,\n editValue,\n activeDescendentIndex,\n ignoreBlur,\n showMaxSelectionsReached,\n } = state;\n\n const inputRef = useRef(null);\n const inputSizerRef = useRef(null);\n const selectedItemsRef = useRef(null);\n const popoverRef = useRef(null);\n\n const allowSelections =\n !maxSelections || selectedItems.length < maxSelections;\n\n useEffect(() => {\n if (defaultValue.length > 0) {\n dispatch({\n type: 'setSelectedItems',\n payload: {\n selectedItems: defaultValue,\n },\n });\n }\n }, [defaultValue]);\n\n const handleInputBlur = () => {\n dispatch({ type: 'setShowMaxSelectionsReached', payload: false });\n\n const {\n current: { value: currentValue },\n } = inputRef;\n\n // The input will blur when user selects an option from the dropdown via mouse click. The ignoreBlur boolean lets us know we can ignore this event.\n if (!ignoreBlur && allowSelections && currentValue !== '') {\n selectByText({ textValue: currentValue, keepSelecting: false });\n return;\n }\n if (!ignoreBlur) {\n // Clear the suggestions if a genuine blur event\n dispatch({ type: 'setSuggestions', payload: [] });\n }\n exitEditState({ keepSelecting: false });\n dispatch({ type: 'setIgnoreBlur', payload: false });\n };\n\n useEffect(() => {\n // editValue defaults to null when component is first rendered.\n // This ensures we do not autofocus the input before the user has started interacting with the component.\n if (editValue === null) {\n return;\n }\n\n const { current: input } = inputRef;\n if (input && inputPosition !== null) {\n // Entering 'edit' mode\n resizeInputToContentSize();\n\n input.value = editValue;\n const { length: cursorPosition } = editValue;\n\n input.focus();\n input.setSelectionRange(cursorPosition, cursorPosition);\n\n // Trigger the input event to make sure suggestion UI updates correctly\n const changeEvent = new Event('input');\n input.dispatchEvent(changeEvent);\n }\n }, [inputPosition, editValue]);\n\n useEffect(() => {\n if (activeDescendentIndex !== null) {\n const { current: popover } = popoverRef;\n const activeItem = popover?.querySelector('[aria-selected=\"true\"]');\n if (!popover || !activeItem) {\n return;\n }\n\n // Make sure that the active item is scrolled into view, if need be\n const { offsetHeight, offsetTop } = activeItem;\n const { offsetHeight: popoverOffsetHeight, scrollTop } = popover;\n\n const isAbove = offsetTop < scrollTop;\n const isBelow =\n offsetTop + offsetHeight > scrollTop + popoverOffsetHeight;\n\n if (isAbove) {\n popover.scrollTo(0, offsetTop);\n } else if (isBelow) {\n popover.scrollTo(0, offsetTop - popoverOffsetHeight + offsetHeight);\n }\n }\n }, [activeDescendentIndex]);\n\n const selectByText = ({\n textValue,\n nextInputValue = '',\n keepSelecting = true,\n }) => {\n const matchingSuggestion = suggestions.find(\n (suggestion) => suggestion.name === textValue,\n );\n\n if (matchingSuggestion) {\n selectItem({\n selectedItem: matchingSuggestion,\n nextInputValue,\n keepSelecting,\n });\n return;\n }\n\n // If we allow user's own input as a selection, fallback to that\n if (allowUserDefinedSelections) {\n selectItem({\n selectedItem: { name: textValue },\n nextInputValue,\n keepSelecting,\n });\n return;\n }\n\n // If we couldn't select any valid input, and search is terminated, clear the input\n if (!keepSelecting) {\n inputRef.current.value = '';\n dispatch('setSuggestions', { payload: [] });\n }\n };\n\n const enterEditState = (editItem, editItemIndex) => {\n inputSizerRef.current.innerText = editItem.name;\n deselectItem(editItem);\n\n dispatch({\n type: 'updateEditState',\n payload: {\n editValue: editItem.name,\n inputPosition: editItemIndex,\n },\n });\n };\n\n const exitEditState = ({ nextInputValue = '', keepSelecting = true }) => {\n // Reset 'edit mode' input resizing\n inputRef.current?.style?.removeProperty('width');\n inputSizerRef.current.innerText = nextInputValue;\n\n dispatch({\n type: 'updateEditState',\n payload: {\n editValue: nextInputValue,\n inputPosition: nextInputValue === '' ? null : inputPosition + 1,\n },\n });\n\n // Blurring away while clearing the input\n if (!keepSelecting && nextInputValue === '') {\n inputRef.current.value = '';\n }\n };\n\n const resizeInputToContentSize = () => {\n const { current: input } = inputRef;\n\n if (input) {\n input.style.width = `${inputSizerRef.current.clientWidth}px`;\n }\n };\n\n const handleAutocompleteStart = () => {\n // Only show static suggestions when not in edit mode\n if (inputPosition !== null) {\n return;\n }\n\n // If we've already reached max selections, show the message rather than static suggestions\n if (!allowSelections) {\n dispatch({ type: 'setShowMaxSelectionsReached', payload: true });\n return;\n }\n\n // If we have static suggestions, and no search term, show the static suggestions\n if (staticSuggestions.length > 0 && inputRef.current?.value === '') {\n dispatch({\n type: 'setSuggestions',\n payload: staticSuggestions.filter(\n (item) =>\n !selectedItems.some(\n (selectedItem) => selectedItem.name === item.name,\n ),\n ),\n });\n }\n };\n\n const handleInputChange = async ({ target: { value } }) => {\n // When the input appears inline in \"edit\" mode, we need to dynamically calculate the width to ensure it occupies the right space\n // (an input cannot resize based on its text content). We use a hidden to track the size.\n inputSizerRef.current.innerText = value;\n\n if (inputPosition !== null) {\n resizeInputToContentSize();\n }\n\n // If max selections have already been reached, no need to fetch further suggestions\n if (!allowSelections) {\n return;\n }\n\n if (value === '') {\n dispatch({\n type: 'setSuggestions',\n payload: staticSuggestions.filter(\n (item) =>\n !selectedItems.some(\n (selectedItem) => selectedItem.name === item.name,\n ),\n ),\n });\n return;\n }\n\n const results = await fetchSuggestions(value);\n\n // It could be that while waiting on the network fetch, the user has already made a selection or otherwise cleared the input\n if (inputRef.current.value === '') {\n return;\n }\n\n // If no results, and user-generated selections are allowed, display current search term as an option\n if (allowUserDefinedSelections && results.length === 0 && value !== '') {\n results.push({ name: value });\n }\n\n dispatch({\n type: 'setSuggestions',\n payload: results.filter(\n (item) =>\n !selectedItems.some(\n (selectedItem) => selectedItem.name === item.name,\n ),\n ),\n });\n };\n\n const clearInput = () => {\n inputRef.current.value = '';\n dispatch({ type: 'setSuggestions', payload: [] });\n };\n\n const handleKeyDown = (e) => {\n const { selectionStart, value: currentValue } = inputRef.current;\n\n switch (e.key) {\n case KEYS.DOWN:\n e.preventDefault();\n\n if (\n activeDescendentIndex !== null &&\n activeDescendentIndex < suggestions.length - 1\n ) {\n dispatch({\n type: 'setActiveDescendentIndex',\n payload: activeDescendentIndex + 1,\n });\n } else {\n dispatch({ type: 'setActiveDescendentIndex', payload: 0 });\n }\n break;\n case KEYS.UP:\n e.preventDefault();\n\n dispatch({\n type: 'setActiveDescendentIndex',\n payload:\n activeDescendentIndex >= 1\n ? activeDescendentIndex - 1\n : suggestions.length - 1,\n });\n\n break;\n case KEYS.ENTER:\n e.preventDefault();\n if (activeDescendentIndex !== null) {\n selectItem({ selectedItem: suggestions[activeDescendentIndex] });\n }\n break;\n case KEYS.ESCAPE:\n e.preventDefault();\n // Clear the input and suggestions\n clearInput();\n break;\n case KEYS.COMMA:\n case KEYS.SPACE:\n e.preventDefault();\n // Accept whatever is in the input before the comma or space.\n // If any text remains after the comma or space, the edit will continue separately\n if (currentValue !== '' && allowSelections) {\n selectByText({\n textValue: currentValue.slice(0, selectionStart),\n nextInputValue: currentValue.slice(selectionStart),\n });\n }\n break;\n case KEYS.DELETE:\n if (currentValue === '') {\n e.preventDefault();\n editPreviousSelectionIfExists();\n }\n break;\n default:\n if (!ALLOWED_CHARS_REGEX.test(e.key)) {\n e.preventDefault();\n }\n }\n };\n\n // If there is a previous selection, then pop it into edit mode\n const editPreviousSelectionIfExists = () => {\n if (selectedItems.length > 0 && inputPosition !== 0) {\n const nextEditIndex =\n inputPosition !== null ? inputPosition - 1 : selectedItems.length - 1;\n\n const item = selectedItems[nextEditIndex];\n deselectItem(item);\n enterEditState(item, nextEditIndex);\n }\n };\n\n const getEmptyInputSuggestions = ({ currentSelections = selectedItems }) => {\n if (staticSuggestions.length > 0) {\n return staticSuggestions.filter(\n (suggestion) =>\n !currentSelections.some(\n (selection) => selection.name === suggestion.name,\n ),\n );\n }\n\n return [];\n };\n\n const selectItem = ({\n selectedItem,\n nextInputValue = '',\n keepSelecting = true,\n }) => {\n // If a user has manually typed an item already selected, reset\n if (selectedItems.some((item) => item.name === selectedItem.name)) {\n clearInput();\n return;\n }\n\n // If an item was edited, we want to keep it in the same position in the list\n const insertIndex =\n inputPosition !== null ? inputPosition : selectedItems.length;\n const newSelections = [\n ...selectedItems.slice(0, insertIndex),\n selectedItem,\n ...selectedItems.slice(insertIndex),\n ];\n\n // We update the hidden selected items list, so additions are announced to screen reader users\n const listItem = document.createElement('li');\n listItem.innerText = selectedItem.name;\n selectedItemsRef.current.appendChild(listItem);\n\n exitEditState({ nextInputValue, keepSelecting });\n\n dispatch({\n type: 'setSelectedItems',\n payload: {\n selectedItems: newSelections,\n suggestions: keepSelecting\n ? getEmptyInputSuggestions({\n currentSelections: newSelections,\n })\n : [],\n },\n });\n\n onSelectionsChanged?.(newSelections);\n\n // Clear the text input\n const { current: input } = inputRef;\n input.value = nextInputValue;\n\n if (keepSelecting) {\n dispatch({\n type: 'setShowMaxSelectionsReached',\n payload: maxSelections && newSelections.length >= maxSelections,\n });\n\n // setTimeout is used with no delay here to make sure this focus event is executed in the next event cycle.\n // selectItem() happens on mousedown rather than click, because mousedown is handled before the blur event, and we\n // want to ignore some blur events (i.e. when input blurs because user has clicked a dropdown option).\n // By using setTimeout, we make sure that the normal blur event is handled before we try to refocus the input.\n setTimeout(() => {\n input.focus();\n });\n }\n };\n\n const deselectItem = (deselectedItem) => {\n const newSelections = selectedItems.filter(\n (item) => item.name !== deselectedItem.name,\n );\n dispatch({\n type: 'setSelectedItems',\n payload: {\n selectedItems: newSelections,\n suggestions,\n },\n });\n\n dispatch({\n type: 'setShowMaxSelectionsReached',\n payload: maxSelections && newSelections.length >= maxSelections,\n });\n\n onSelectionsChanged?.(newSelections);\n\n // We also update the hidden selected items list, so removals are announced to screen reader users\n selectedItemsRef.current.querySelectorAll('li').forEach((selectionNode) => {\n if (selectionNode.innerText === deselectedItem.name) {\n selectionNode.remove();\n }\n });\n };\n\n const allSelectedItemElements = selectedItems.map((item, index) => {\n // When we are in \"edit mode\" we visually display the input between the other selections\n const defaultPosition = index + 1;\n const appearsBeforeInput = inputPosition === null || index < inputPosition;\n const position = appearsBeforeInput ? defaultPosition : defaultPosition + 1;\n\n const { name: displayName } = item;\n return (\n \n enterEditState(item, index)}\n onDeselect={() => deselectItem(item)}\n />\n \n );\n });\n\n const selectionsPlaceholder =\n selectedItems.length > 0 ? PLACEHOLDER_SELECTIONS_MADE : placeholder;\n\n const inputPlaceholder = allowSelections ? selectionsPlaceholder : null;\n\n return (\n \n \n \n {labelText}\n \n \n {maxSelections ? `Maximum ${maxSelections} selections` : ''}\n \n\n {/* A visually hidden list provides confirmation messages to screen reader users as an item is selected or removed */}\n
\n

Selected items:

\n \n
\n\n
\n {/* disabled as the inner input forms the tab stop (this click handler ensures _any_ click on the wrapper focuses the input which may be less wide) */}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n 0}\n aria-owns=\"listbox1\"\n className={`c-autocomplete--multi__wrapper${\n border ? '-border crayons-textfield' : ' border-none p-0'\n } flex items-center cursor-text`}\n onClick={() => inputRef.current?.focus()}\n >\n
    \n {allSelectedItemElements}\n\n \n {\n onFocus?.(e);\n handleAutocompleteStart();\n }}\n placeholder={inputPosition === null ? inputPlaceholder : null}\n />\n \n
\n
\n {showMaxSelectionsReached ? (\n
\n Only {maxSelections} selections allowed\n
\n ) : null}\n {suggestions.length > 0 && allowSelections ? (\n
\n {inputRef.current?.value === '' ? staticSuggestionsHeading : null}\n \n {suggestions.map((suggestion, index) => {\n const { name: suggestionDisplayName } = suggestion;\n return (\n {\n selectItem({ selectedItem: suggestion });\n dispatch({ type: 'setIgnoreBlur', payload: true });\n }}\n >\n {SuggestionTemplate ? (\n \n ) : (\n suggestionDisplayName\n )}\n \n );\n })}\n \n
\n ) : null}\n \n
\n );\n};\n\nconst optionPropType = PropTypes.shape({ name: PropTypes.string });\n\nMultiSelectAutocomplete.propTypes = {\n labelText: PropTypes.string.isRequired,\n showLabel: PropTypes.bool,\n fetchSuggestions: PropTypes.func.isRequired,\n defaultValue: PropTypes.arrayOf(optionPropType),\n staticSuggestions: PropTypes.arrayOf(optionPropType),\n staticSuggestionsHeading: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.string,\n ]),\n border: PropTypes.bool,\n placeholder: PropTypes.string,\n inputId: PropTypes.string,\n maxSelections: PropTypes.number,\n onSelectionsChanged: PropTypes.func,\n onFocus: PropTypes.func,\n SuggestionTemplate: PropTypes.func,\n SelectionTemplate: PropTypes.func,\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","/**\n * This function returns a string combining the current Medium and OS\n * that represents the current Context where the app is running.\n *\n * @returns {String} \"Medium-OS\", for example \"Browser-Android\"\n */\nexport const currentContext = () => `${currentMedium()}-${currentOS()}`;\n\n/**\n * This function returns a string that represents the current Medium where\n * the app is currently running. The currently supported mediums are Browser,\n * and ForemWebView.\n *\n * @returns {String} One of the supported Mediums\n */\nexport const currentMedium = () =>\n /ForemWebView/i.test(navigator.userAgent) ? 'ForemWebView' : 'Browser';\n\n/**\n * This function returns a string that represents the current OS where the app\n * is currently running. The currently supported Operating Systems are\n * Windows, Linux, macOS, Android and iOS.\n *\n * @returns {String} One of the supported Operating Systems or 'Unsupported'\n */\nexport const currentOS = () => {\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n\n if (macosPlatforms.includes(window.navigator.platform)) {\n return 'macOS';\n } else if (iosPlatforms.includes(window.navigator.platform)) {\n return 'iOS';\n } else if (windowsPlatforms.includes(window.navigator.platform)) {\n return 'Windows';\n } else if (/Android/i.test(window.navigator.userAgent)) {\n return 'Android';\n } else if (/Linux/i.test(window.navigator.platform)) {\n return 'Linux';\n }\n\n return 'Unsupported';\n};\n\n/**\n * Checks the device for iOS (webkit) native feature support\n *\n * @function isNativeIOS\n * @param {string} namespace Specifies support for a specific feature\n * (i.e. video, podcast, etc)\n * @returns {boolean} true if current environment support native features\n */\nexport const isNativeIOS = (namespace = null) => {\n const nativeCheck =\n /DEV-Native-ios|ForemWebView/i.test(navigator.userAgent) &&\n window &&\n window.webkit &&\n window.webkit.messageHandlers;\n\n let namespaceCheck = true;\n if (nativeCheck && namespace) {\n namespaceCheck = window.webkit.messageHandlers[namespace] != undefined;\n }\n\n return nativeCheck && namespaceCheck;\n};\n\n/**\n * Checks the device for Android native feature support\n *\n * @function isNativeAndroid\n * @param {string} namespace Specifies support for a specific feature\n * (i.e. videoMessage, podcastMessage, etc)\n * @returns {boolean} true if current environment support native features\n */\nexport const isNativeAndroid = (namespace = null) => {\n const nativeCheck =\n /DEV-Native-android|ForemWebView/i.test(navigator.userAgent) &&\n typeof AndroidBridge !== 'undefined';\n\n let namespaceCheck = true;\n if (nativeCheck && namespace) {\n namespaceCheck = AndroidBridge[namespace] != undefined;\n }\n\n return nativeCheck && namespaceCheck;\n};\n\n/**\n * This function copies text to clipboard taking in consideration all\n * supported platforms.\n *\n * @param {string} text to be copied to the clipboard\n *\n * @returns {Promise} Resolves when successful in copying to clipboard\n */\nexport const copyToClipboard = (text) => {\n return new Promise((resolve, reject) => {\n if (isNativeAndroid('copyToClipboard')) {\n AndroidBridge.copyToClipboard(text);\n resolve();\n } else if (navigator.clipboard != null) {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n resolve();\n })\n .catch((e) => {\n reject(e);\n });\n } else {\n reject('Unable to copy the text. Try reloading the page');\n }\n });\n};\n\n/**\n * Returns true if the supplied KeyboardEvent includes the OS-specific\n * modifier key. For example, the Cmd key on Apple platforms or the Ctrl key\n * on others.\n *\n * @param {KeyboardEvent} The event to check for the OS-specific modifier key\n *\n * @returns {Boolean} true if the event was fired with the OS-specific\n * modifier key, false otherwise. Also returns false if\n * the event is not a KeyboardEvent.\n */\nexport const hasOSSpecificModifier = (event) => {\n if (!(event instanceof KeyboardEvent)) {\n return false;\n }\n\n if (navigator.userAgent.indexOf('Mac OS X') >= 0) {\n return event.metaKey;\n }\n return event.ctrlKey;\n};\n\n/**\n * Returns a string representation of the expected modifier key for the current OS.\n * This allows us to display correct shortcut key hints to users in the UI, and set up correct shortcut key bindings.\n *\n * @returns {string} either 'cmd' if on macOS, or 'ctrl' otherwise\n */\nexport const getOSKeyboardModifierKeyString = () =>\n currentOS() === 'macOS' ? 'cmd' : 'ctrl';\n\n/**\n * @returns {string} A string representing the locale as per the user's browser settings\n */\nexport const getCurrentLocale = () => navigator.language;\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 ExtraLarge: 1280,\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';\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",";(function (globalObject) {\r\n 'use strict';\r\n\r\n/*\r\n * bignumber.js v9.1.0\r\n * A JavaScript library for arbitrary-precision arithmetic.\r\n * https://github.com/MikeMcl/bignumber.js\r\n * Copyright (c) 2022 Michael Mclaughlin \r\n * MIT Licensed.\r\n *\r\n * BigNumber.prototype methods | BigNumber methods\r\n * |\r\n * absoluteValue abs | clone\r\n * comparedTo | config set\r\n * decimalPlaces dp | DECIMAL_PLACES\r\n * dividedBy div | ROUNDING_MODE\r\n * dividedToIntegerBy idiv | EXPONENTIAL_AT\r\n * exponentiatedBy pow | RANGE\r\n * integerValue | CRYPTO\r\n * isEqualTo eq | MODULO_MODE\r\n * isFinite | POW_PRECISION\r\n * isGreaterThan gt | FORMAT\r\n * isGreaterThanOrEqualTo gte | ALPHABET\r\n * isInteger | isBigNumber\r\n * isLessThan lt | maximum max\r\n * isLessThanOrEqualTo lte | minimum min\r\n * isNaN | random\r\n * isNegative | sum\r\n * isPositive |\r\n * isZero |\r\n * minus |\r\n * modulo mod |\r\n * multipliedBy times |\r\n * negated |\r\n * plus |\r\n * precision sd |\r\n * shiftedBy |\r\n * squareRoot sqrt |\r\n * toExponential |\r\n * toFixed |\r\n * toFormat |\r\n * toFraction |\r\n * toJSON |\r\n * toNumber |\r\n * toPrecision |\r\n * toString |\r\n * valueOf |\r\n *\r\n */\r\n\r\n\r\n var BigNumber,\r\n isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n mathceil = Math.ceil,\r\n mathfloor = Math.floor,\r\n\r\n bignumberError = '[BigNumber Error] ',\r\n tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n BASE = 1e14,\r\n LOG_BASE = 14,\r\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\r\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\r\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n SQRT_BASE = 1e7,\r\n\r\n // EDITABLE\r\n // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n MAX = 1E9; // 0 to MAX_INT32\r\n\r\n\r\n /*\r\n * Create and return a BigNumber constructor.\r\n */\r\n function clone(configObject) {\r\n var div, convertBase, parseNumeric,\r\n P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n ONE = new BigNumber(1),\r\n\r\n\r\n //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n // The default values below must be integers within the inclusive ranges stated.\r\n // The values can also be changed at run-time using BigNumber.set.\r\n\r\n // The maximum number of decimal places for operations involving division.\r\n DECIMAL_PLACES = 20, // 0 to MAX\r\n\r\n // The rounding mode used when rounding to the above decimal places, and when using\r\n // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n // UP 0 Away from zero.\r\n // DOWN 1 Towards zero.\r\n // CEIL 2 Towards +Infinity.\r\n // FLOOR 3 Towards -Infinity.\r\n // HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n ROUNDING_MODE = 4, // 0 to 8\r\n\r\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n // The exponent value at and beneath which toString returns exponential notation.\r\n // Number type: -7\r\n TO_EXP_NEG = -7, // 0 to -MAX\r\n\r\n // The exponent value at and above which toString returns exponential notation.\r\n // Number type: 21\r\n TO_EXP_POS = 21, // 0 to MAX\r\n\r\n // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // Number type: -324 (5e-324)\r\n MIN_EXP = -1e7, // -1 to -MAX\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // Number type: 308 (1.7976931348623157e+308)\r\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n MAX_EXP = 1e7, // 1 to MAX\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n CRYPTO = false, // true or false\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend.\r\n // This modulo mode is commonly known as 'truncated division' and is\r\n // equivalent to (a % n) in JavaScript.\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n // The remainder is always positive.\r\n //\r\n // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n // modes are commonly used for the modulus operation.\r\n // Although the other rounding modes can also be used, they may not give useful results.\r\n MODULO_MODE = 1, // 0 to 9\r\n\r\n // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n POW_PRECISION = 0, // 0 to MAX\r\n\r\n // The format specification used by the BigNumber.prototype.toFormat method.\r\n FORMAT = {\r\n prefix: '',\r\n groupSize: 3,\r\n secondaryGroupSize: 0,\r\n groupSeparator: ',',\r\n decimalSeparator: '.',\r\n fractionGroupSize: 0,\r\n fractionGroupSeparator: '\\xA0', // non-breaking space\r\n suffix: ''\r\n },\r\n\r\n // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n // '-', '.', whitespace, or repeated character.\r\n // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n //------------------------------------------------------------------------------------------\r\n\r\n\r\n // CONSTRUCTOR\r\n\r\n\r\n /*\r\n * The BigNumber constructor and exported function.\r\n * Create and return a new instance of a BigNumber object.\r\n *\r\n * v {number|string|BigNumber} A numeric value.\r\n * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n */\r\n function BigNumber(v, b) {\r\n var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n x = this;\r\n\r\n // Enable constructor call without `new`.\r\n if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n if (b == null) {\r\n\r\n if (v && v._isBigNumber === true) {\r\n x.s = v.s;\r\n\r\n if (!v.c || v.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else if (v.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = v.e;\r\n x.c = v.c.slice();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n // Use `1 / n` to handle minus zero also.\r\n x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n // Fast path for integers, where n < 2147483648 (2**31).\r\n if (v === ~~v) {\r\n for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n if (e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else {\r\n x.e = e;\r\n x.c = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n str = String(v);\r\n } else {\r\n\r\n if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n // Allow exponential notation to be used with base 10 argument, while\r\n // also rounding to DECIMAL_PLACES as with other bases.\r\n if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n x = new BigNumber(v);\r\n return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n }\r\n\r\n str = String(v);\r\n\r\n if (isNum = typeof v == 'number') {\r\n\r\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n throw Error\r\n (tooManyDigits + v);\r\n }\r\n } else {\r\n x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n alphabet = ALPHABET.slice(0, b);\r\n e = i = 0;\r\n\r\n // Check that str is a valid base b number.\r\n // Don't use RegExp, so alphabet can contain special characters.\r\n for (len = str.length; i < len; i++) {\r\n if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n if (c == '.') {\r\n\r\n // If '.' is not the first character and it has not be found before.\r\n if (i > e) {\r\n e = len;\r\n continue;\r\n }\r\n } else if (!caseChanged) {\r\n\r\n // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n caseChanged = true;\r\n i = -1;\r\n e = 0;\r\n continue;\r\n }\r\n }\r\n\r\n return parseNumeric(x, String(v), isNum, b);\r\n }\r\n }\r\n\r\n // Prevent later check for length on converted number.\r\n isNum = false;\r\n str = convertBase(str, b, 10, x.s);\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n else e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n if (str = str.slice(i, ++len)) {\r\n len -= i;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (isNum && BigNumber.DEBUG &&\r\n len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n throw Error\r\n (tooManyDigits + (x.s * v));\r\n }\r\n\r\n // Overflow?\r\n if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n x.c = x.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = e;\r\n x.c = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first element of the coefficient array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE; // i < 1\r\n\r\n if (i < len) {\r\n if (i) x.c.push(+str.slice(0, i));\r\n\r\n for (len -= LOG_BASE; i < len;) {\r\n x.c.push(+str.slice(i, i += LOG_BASE));\r\n }\r\n\r\n i = LOG_BASE - (str = str.slice(i)).length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--; str += '0');\r\n x.c.push(+str);\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n\r\n // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n BigNumber.clone = clone;\r\n\r\n BigNumber.ROUND_UP = 0;\r\n BigNumber.ROUND_DOWN = 1;\r\n BigNumber.ROUND_CEIL = 2;\r\n BigNumber.ROUND_FLOOR = 3;\r\n BigNumber.ROUND_HALF_UP = 4;\r\n BigNumber.ROUND_HALF_DOWN = 5;\r\n BigNumber.ROUND_HALF_EVEN = 6;\r\n BigNumber.ROUND_HALF_CEIL = 7;\r\n BigNumber.ROUND_HALF_FLOOR = 8;\r\n BigNumber.EUCLID = 9;\r\n\r\n\r\n /*\r\n * Configure infrequently-changing library-wide settings.\r\n *\r\n * Accept an object with the following optional properties (if the value of a property is\r\n * a number, it must be an integer within the inclusive range stated):\r\n *\r\n * DECIMAL_PLACES {number} 0 to MAX\r\n * ROUNDING_MODE {number} 0 to 8\r\n * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]\r\n * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]\r\n * CRYPTO {boolean} true or false\r\n * MODULO_MODE {number} 0 to 9\r\n * POW_PRECISION {number} 0 to MAX\r\n * ALPHABET {string} A string of two or more unique characters which does\r\n * not contain '.'.\r\n * FORMAT {object} An object with some of the following properties:\r\n * prefix {string}\r\n * groupSize {number}\r\n * secondaryGroupSize {number}\r\n * groupSeparator {string}\r\n * decimalSeparator {string}\r\n * fractionGroupSize {number}\r\n * fractionGroupSeparator {string}\r\n * suffix {string}\r\n *\r\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n *\r\n * E.g.\r\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n *\r\n * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n *\r\n * Return an object with the properties current values.\r\n */\r\n BigNumber.config = BigNumber.set = function (obj) {\r\n var p, v;\r\n\r\n if (obj != null) {\r\n\r\n if (typeof obj == 'object') {\r\n\r\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n DECIMAL_PLACES = v;\r\n }\r\n\r\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 8, p);\r\n ROUNDING_MODE = v;\r\n }\r\n\r\n // EXPONENTIAL_AT {number|number[]}\r\n // Integer, -MAX to MAX inclusive or\r\n // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, 0, p);\r\n intCheck(v[1], 0, MAX, p);\r\n TO_EXP_NEG = v[0];\r\n TO_EXP_POS = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n }\r\n }\r\n\r\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n if (obj.hasOwnProperty(p = 'RANGE')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, -1, p);\r\n intCheck(v[1], 1, MAX, p);\r\n MIN_EXP = v[0];\r\n MAX_EXP = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n if (v) {\r\n MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' cannot be zero: ' + v);\r\n }\r\n }\r\n }\r\n\r\n // CRYPTO {boolean} true or false.\r\n // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n // '[BigNumber Error] crypto unavailable'\r\n if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n v = obj[p];\r\n if (v === !!v) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n CRYPTO = v;\r\n } else {\r\n CRYPTO = !v;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n } else {\r\n CRYPTO = v;\r\n }\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' not true or false: ' + v);\r\n }\r\n }\r\n\r\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 9, p);\r\n MODULO_MODE = v;\r\n }\r\n\r\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n POW_PRECISION = v;\r\n }\r\n\r\n // FORMAT {object}\r\n // '[BigNumber Error] FORMAT not an object: {v}'\r\n if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n v = obj[p];\r\n if (typeof v == 'object') FORMAT = v;\r\n else throw Error\r\n (bignumberError + p + ' not an object: ' + v);\r\n }\r\n\r\n // ALPHABET {string}\r\n // '[BigNumber Error] ALPHABET invalid: {v}'\r\n if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n v = obj[p];\r\n\r\n // Disallow if less than two characters,\r\n // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n ALPHABET = v;\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' invalid: ' + v);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Object expected: {v}'\r\n throw Error\r\n (bignumberError + 'Object expected: ' + obj);\r\n }\r\n }\r\n\r\n return {\r\n DECIMAL_PLACES: DECIMAL_PLACES,\r\n ROUNDING_MODE: ROUNDING_MODE,\r\n EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n RANGE: [MIN_EXP, MAX_EXP],\r\n CRYPTO: CRYPTO,\r\n MODULO_MODE: MODULO_MODE,\r\n POW_PRECISION: POW_PRECISION,\r\n FORMAT: FORMAT,\r\n ALPHABET: ALPHABET\r\n };\r\n };\r\n\r\n\r\n /*\r\n * Return true if v is a BigNumber instance, otherwise return false.\r\n *\r\n * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n *\r\n * v {any}\r\n *\r\n * '[BigNumber Error] Invalid BigNumber: {v}'\r\n */\r\n BigNumber.isBigNumber = function (v) {\r\n if (!v || v._isBigNumber !== true) return false;\r\n if (!BigNumber.DEBUG) return true;\r\n\r\n var i, n,\r\n c = v.c,\r\n e = v.e,\r\n s = v.s;\r\n\r\n out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n // If the first element is zero, the BigNumber value must be zero.\r\n if (c[0] === 0) {\r\n if (e === 0 && c.length === 1) return true;\r\n break out;\r\n }\r\n\r\n // Calculate number of digits that c[0] should have, based on the exponent.\r\n i = (e + 1) % LOG_BASE;\r\n if (i < 1) i += LOG_BASE;\r\n\r\n // Calculate number of digits of c[0].\r\n //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n if (String(c[0]).length == i) {\r\n\r\n for (i = 0; i < c.length; i++) {\r\n n = c[i];\r\n if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n }\r\n\r\n // Last element cannot be zero, unless it is the only element.\r\n if (n !== 0) return true;\r\n }\r\n }\r\n\r\n // Infinity/NaN\r\n } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n return true;\r\n }\r\n\r\n throw Error\r\n (bignumberError + 'Invalid BigNumber: ' + v);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.maximum = BigNumber.max = function () {\r\n return maxOrMin(arguments, P.lt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.minimum = BigNumber.min = function () {\r\n return maxOrMin(arguments, P.gt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n * zeros are produced).\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n * '[BigNumber Error] crypto unavailable'\r\n */\r\n BigNumber.random = (function () {\r\n var pow2_53 = 0x20000000000000;\r\n\r\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n // Check if Math.random() produces more than 32 bits of randomness.\r\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n ? function () { return mathfloor(Math.random() * pow2_53); }\r\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n (Math.random() * 0x800000 | 0); };\r\n\r\n return function (dp) {\r\n var a, b, e, k, v,\r\n i = 0,\r\n c = [],\r\n rand = new BigNumber(ONE);\r\n\r\n if (dp == null) dp = DECIMAL_PLACES;\r\n else intCheck(dp, 0, MAX);\r\n\r\n k = mathceil(dp / LOG_BASE);\r\n\r\n if (CRYPTO) {\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n if (crypto.getRandomValues) {\r\n\r\n a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n for (; i < k;) {\r\n\r\n // 53 bits:\r\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n // 11111 11111111 11111111\r\n // 0x20000 is 2^21.\r\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n // Rejection sampling:\r\n // 0 <= v < 9007199254740992\r\n // Probability that v >= 9e15, is\r\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n if (v >= 9e15) {\r\n b = crypto.getRandomValues(new Uint32Array(2));\r\n a[i] = b[0];\r\n a[i + 1] = b[1];\r\n } else {\r\n\r\n // 0 <= v <= 8999999999999999\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 2;\r\n }\r\n }\r\n i = k / 2;\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n a = crypto.randomBytes(k *= 7);\r\n\r\n for (; i < k;) {\r\n\r\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n // 0 <= v < 9007199254740992\r\n v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n if (v >= 9e15) {\r\n crypto.randomBytes(7).copy(a, i);\r\n } else {\r\n\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 7;\r\n }\r\n }\r\n i = k / 7;\r\n } else {\r\n CRYPTO = false;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n }\r\n\r\n // Use Math.random.\r\n if (!CRYPTO) {\r\n\r\n for (; i < k;) {\r\n v = random53bitInt();\r\n if (v < 9e15) c[i++] = v % 1e14;\r\n }\r\n }\r\n\r\n k = c[--i];\r\n dp %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to dp.\r\n if (k && dp) {\r\n v = POWS_TEN[LOG_BASE - dp];\r\n c[i] = mathfloor(k / v) * v;\r\n }\r\n\r\n // Remove trailing elements which are zero.\r\n for (; c[i] === 0; c.pop(), i--);\r\n\r\n // Zero?\r\n if (i < 0) {\r\n c = [e = 0];\r\n } else {\r\n\r\n // Remove leading elements which are zero and adjust exponent accordingly.\r\n for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n // Count the digits of the first element of c to determine leading zeros, and...\r\n for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n // adjust the exponent accordingly.\r\n if (i < LOG_BASE) e -= LOG_BASE - i;\r\n }\r\n\r\n rand.e = e;\r\n rand.c = c;\r\n return rand;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the sum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.sum = function () {\r\n var i = 1,\r\n args = arguments,\r\n sum = new BigNumber(args[0]);\r\n for (; i < args.length;) sum = sum.plus(args[i++]);\r\n return sum;\r\n };\r\n\r\n\r\n // PRIVATE FUNCTIONS\r\n\r\n\r\n // Called by BigNumber and BigNumber.prototype.toString.\r\n convertBase = (function () {\r\n var decimal = '0123456789';\r\n\r\n /*\r\n * Convert string of baseIn to an array of numbers of baseOut.\r\n * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n */\r\n function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n len = str.length;\r\n\r\n for (; i < len;) {\r\n for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n for (j = 0; j < arr.length; j++) {\r\n\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] == null) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n // If the caller is toString, we are converting from base 10 to baseOut.\r\n // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n var alphabet, d, e, k, r, x, xc, y,\r\n i = str.indexOf('.'),\r\n dp = DECIMAL_PLACES,\r\n rm = ROUNDING_MODE;\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n k = POW_PRECISION;\r\n\r\n // Unlimited precision.\r\n POW_PRECISION = 0;\r\n str = str.replace('.', '');\r\n y = new BigNumber(baseIn);\r\n x = y.pow(str.length - i);\r\n POW_PRECISION = k;\r\n\r\n // Convert str as if an integer, then restore the fraction part by dividing the\r\n // result by its base raised to a power.\r\n\r\n y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n 10, baseOut, decimal);\r\n y.e = y.c.length;\r\n }\r\n\r\n // Convert the number as integer.\r\n\r\n xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n ? (alphabet = ALPHABET, decimal)\r\n : (alphabet = decimal, ALPHABET));\r\n\r\n // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n e = k = xc.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--k] == 0; xc.pop());\r\n\r\n // Zero?\r\n if (!xc[0]) return alphabet.charAt(0);\r\n\r\n // Does str represent an integer? If so, no need for the division.\r\n if (i < 0) {\r\n --e;\r\n } else {\r\n x.c = xc;\r\n x.e = e;\r\n\r\n // The sign is needed for correct rounding.\r\n x.s = sign;\r\n x = div(x, y, dp, rm, baseOut);\r\n xc = x.c;\r\n r = x.r;\r\n e = x.e;\r\n }\r\n\r\n // xc now represents str converted to baseOut.\r\n\r\n // THe index of the rounding digit.\r\n d = e + dp + 1;\r\n\r\n // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n i = xc[d];\r\n\r\n // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n k = baseOut / 2;\r\n r = r || d < 0 || xc[d + 1] != null;\r\n\r\n r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n // If the index of the rounding digit is not greater than zero, or xc represents\r\n // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n // such as 0.00001.\r\n if (d < 1 || !xc[0]) {\r\n\r\n // 1^-dp or 0\r\n str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n } else {\r\n\r\n // Truncate xc to the required number of decimal places.\r\n xc.length = d;\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (--baseOut; ++xc[--d] > baseOut;) {\r\n xc[d] = 0;\r\n\r\n if (!d) {\r\n ++e;\r\n xc = [1].concat(xc);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (k = xc.length; !xc[--k];);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n // Add leading zeros, decimal point and trailing zeros as required.\r\n str = toFixedPoint(str, e, alphabet.charAt(0));\r\n }\r\n\r\n // The caller will add the sign.\r\n return str;\r\n };\r\n })();\r\n\r\n\r\n // Perform division in the specified base. Called by div and convertBase.\r\n div = (function () {\r\n\r\n // Assume non-zero x and k.\r\n function multiply(x, k, base) {\r\n var m, temp, xlo, xhi,\r\n carry = 0,\r\n i = x.length,\r\n klo = k % SQRT_BASE,\r\n khi = k / SQRT_BASE | 0;\r\n\r\n for (x = x.slice(); i--;) {\r\n xlo = x[i] % SQRT_BASE;\r\n xhi = x[i] / SQRT_BASE | 0;\r\n m = khi * xlo + xhi * klo;\r\n temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n x[i] = temp % base;\r\n }\r\n\r\n if (carry) x = [carry].concat(x);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, cmp;\r\n\r\n if (aL != bL) {\r\n cmp = aL > bL ? 1 : -1;\r\n } else {\r\n\r\n for (i = cmp = 0; i < aL; i++) {\r\n\r\n if (a[i] != b[i]) {\r\n cmp = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n }\r\n\r\n // x: dividend, y: divisor.\r\n return function (x, y, dp, rm, base) {\r\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n yL, yz,\r\n s = x.s == y.s ? 1 : -1,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n return new BigNumber(\r\n\r\n // Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n );\r\n }\r\n\r\n q = new BigNumber(s);\r\n qc = q.c = [];\r\n e = x.e - y.e;\r\n s = dp + e + 1;\r\n\r\n if (!base) {\r\n base = BASE;\r\n e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n s = s / LOG_BASE | 0;\r\n }\r\n\r\n // Result exponent may be one less then the current value of e.\r\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n if (s < 0) {\r\n qc.push(1);\r\n more = true;\r\n } else {\r\n xL = xc.length;\r\n yL = yc.length;\r\n i = 0;\r\n s += 2;\r\n\r\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n n = mathfloor(base / (yc[0] + 1));\r\n\r\n // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n if (n > 1) {\r\n yc = multiply(yc, n, base);\r\n xc = multiply(xc, n, base);\r\n yL = yc.length;\r\n xL = xc.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xc.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL; rem[remL++] = 0);\r\n yz = yc.slice();\r\n yz = [0].concat(yz);\r\n yc0 = yc[0];\r\n if (yc[1] >= base / 2) yc0++;\r\n // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n do {\r\n n = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yc, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, n.\r\n\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // n is how many times the divisor goes into the current remainder.\r\n n = mathfloor(rem0 / yc0);\r\n\r\n // Algorithm:\r\n // product = divisor multiplied by trial digit (n).\r\n // Compare product and remainder.\r\n // If product is greater than remainder:\r\n // Subtract divisor from product, decrement trial digit.\r\n // Subtract product from remainder.\r\n // If product was less than remainder at the last compare:\r\n // Compare new remainder and divisor.\r\n // If remainder is greater than divisor:\r\n // Subtract divisor from remainder, increment trial digit.\r\n\r\n if (n > 1) {\r\n\r\n // n may be > base only when base is 3.\r\n if (n >= base) n = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiply(yc, n, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n // If product > remainder then trial digit n too high.\r\n // n is 1 too high about 5% of the time, and is not known to have\r\n // ever been more than 1 too high.\r\n while (compare(prod, rem, prodL, remL) == 1) {\r\n n--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n prodL = prod.length;\r\n cmp = 1;\r\n }\r\n } else {\r\n\r\n // n is 0 or 1, cmp is -1.\r\n // If n is 0, there is no need to compare yc and rem again below,\r\n // so change cmp to 1 to avoid it.\r\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n if (n == 0) {\r\n\r\n // divisor < remainder, so n must be at least 1.\r\n cmp = n = 1;\r\n }\r\n\r\n // product = divisor\r\n prod = yc.slice();\r\n prodL = prod.length;\r\n }\r\n\r\n if (prodL < remL) prod = [0].concat(prod);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n remL = rem.length;\r\n\r\n // If product was < remainder.\r\n if (cmp == -1) {\r\n\r\n // Compare divisor and new remainder.\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n // Trial digit n too low.\r\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n while (compare(yc, rem, yL, remL) < 1) {\r\n n++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yc, remL, base);\r\n remL = rem.length;\r\n }\r\n }\r\n } else if (cmp === 0) {\r\n n++;\r\n rem = [0];\r\n } // else cmp === 1 and n will be 0\r\n\r\n // Add the next digit, n, to the result array.\r\n qc[i++] = n;\r\n\r\n // Update the remainder.\r\n if (rem[0]) {\r\n rem[remL++] = xc[xi] || 0;\r\n } else {\r\n rem = [xc[xi]];\r\n remL = 1;\r\n }\r\n } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n more = rem[0] != null;\r\n\r\n // Leading zero?\r\n if (!qc[0]) qc.splice(0, 1);\r\n }\r\n\r\n if (base == BASE) {\r\n\r\n // To calculate q.e, first get the number of digits of qc[0].\r\n for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n // Caller is convertBase.\r\n } else {\r\n q.e = e;\r\n q.r = +more;\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n * notation rounded to the specified decimal places or significant digits.\r\n *\r\n * n: a BigNumber.\r\n * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n * rm: the rounding mode.\r\n * id: 1 (toExponential) or 2 (toPrecision).\r\n */\r\n function format(n, i, rm, id) {\r\n var c0, e, ne, len, str;\r\n\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n if (!n.c) return n.toString();\r\n\r\n c0 = n.c[0];\r\n ne = n.e;\r\n\r\n if (i == null) {\r\n str = coeffToString(n.c);\r\n str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n ? toExponential(str, ne)\r\n : toFixedPoint(str, ne, '0');\r\n } else {\r\n n = round(new BigNumber(n), i, rm);\r\n\r\n // n.e may have changed if the value was rounded up.\r\n e = n.e;\r\n\r\n str = coeffToString(n.c);\r\n len = str.length;\r\n\r\n // toPrecision returns exponential notation if the number of significant digits\r\n // specified is less than the number of digits necessary to represent the integer\r\n // part of the value in fixed-point notation.\r\n\r\n // Exponential notation.\r\n if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n // Append zeros?\r\n for (; len < i; str += '0', len++);\r\n str = toExponential(str, e);\r\n\r\n // Fixed-point notation.\r\n } else {\r\n i -= ne;\r\n str = toFixedPoint(str, e, '0');\r\n\r\n // Append zeros?\r\n if (e + 1 > len) {\r\n if (--i > 0) for (str += '.'; i--; str += '0');\r\n } else {\r\n i += e - len;\r\n if (i > 0) {\r\n if (e + 1 == len) str += '.';\r\n for (; i--; str += '0');\r\n }\r\n }\r\n }\r\n }\r\n\r\n return n.s < 0 && c0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Handle BigNumber.max and BigNumber.min.\r\n function maxOrMin(args, method) {\r\n var n,\r\n i = 1,\r\n m = new BigNumber(args[0]);\r\n\r\n for (; i < args.length; i++) {\r\n n = new BigNumber(args[i]);\r\n\r\n // If any number is NaN, return NaN.\r\n if (!n.s) {\r\n m = n;\r\n break;\r\n } else if (method.call(m, n)) {\r\n m = n;\r\n }\r\n }\r\n\r\n return m;\r\n }\r\n\r\n\r\n /*\r\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n * Called by minus, plus and times.\r\n */\r\n function normalise(n, c, e) {\r\n var i = 1,\r\n j = c.length;\r\n\r\n // Remove trailing zeros.\r\n for (; !c[--j]; c.pop());\r\n\r\n // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n // Overflow?\r\n if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n n.c = n.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n n.c = [n.e = 0];\r\n } else {\r\n n.e = e;\r\n n.c = c;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n\r\n // Handle values that fail the validity test in BigNumber.\r\n parseNumeric = (function () {\r\n var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n dotAfter = /^([^.]+)\\.$/,\r\n dotBefore = /^\\.([^.]+)$/,\r\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n return function (x, str, isNum, b) {\r\n var base,\r\n s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n // No exception on ±Infinity or NaN.\r\n if (isInfinityOrNaN.test(s)) {\r\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n } else {\r\n if (!isNum) {\r\n\r\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n s = s.replace(basePrefix, function (m, p1, p2) {\r\n base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n return !b || b == base ? p1 : m;\r\n });\r\n\r\n if (b) {\r\n base = b;\r\n\r\n // E.g. '1.' to '1', '.1' to '0.1'\r\n s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n }\r\n\r\n if (str != s) return new BigNumber(s, base);\r\n }\r\n\r\n // '[BigNumber Error] Not a number: {n}'\r\n // '[BigNumber Error] Not a base {b} number: {n}'\r\n if (BigNumber.DEBUG) {\r\n throw Error\r\n (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n }\r\n\r\n // NaN\r\n x.s = null;\r\n }\r\n\r\n x.c = x.e = null;\r\n }\r\n })();\r\n\r\n\r\n /*\r\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n * If r is truthy, it is known that there are more digits after the rounding digit.\r\n */\r\n function round(x, sd, rm, r) {\r\n var d, i, j, k, n, ni, rd,\r\n xc = x.c,\r\n pows10 = POWS_TEN;\r\n\r\n // if x is not Infinity or NaN...\r\n if (xc) {\r\n\r\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n // ni is the index of n within x.c.\r\n // d is the number of digits of n.\r\n // i is the index of rd within n including leading zeros.\r\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n out: {\r\n\r\n // Get the number of digits of the first element of xc.\r\n for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n i = sd - d;\r\n\r\n // If the rounding digit is in the first element of xc...\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n n = xc[ni = 0];\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = n / pows10[d - j - 1] % 10 | 0;\r\n } else {\r\n ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n if (ni >= xc.length) {\r\n\r\n if (r) {\r\n\r\n // Needed by sqrt.\r\n for (; xc.length <= ni; xc.push(0));\r\n n = rd = 0;\r\n d = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n n = k = xc[ni];\r\n\r\n // Get the number of digits of n.\r\n for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n // Get the index of rd within n.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within n, adjusted for leading zeros.\r\n // The number of leading zeros of n is given by LOG_BASE - d.\r\n j = i - LOG_BASE + d;\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;\r\n }\r\n }\r\n\r\n r = r || sd < 0 ||\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n // The expression n % pows10[d - j - 1] returns all digits of n to the right\r\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n r = rm < 4\r\n ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xc[0]) {\r\n xc.length = 0;\r\n\r\n if (r) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xc.length = ni;\r\n k = 1;\r\n ni--;\r\n } else {\r\n xc.length = ni + 1;\r\n k = pows10[LOG_BASE - i];\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of n.\r\n xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n }\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n for (; ;) {\r\n\r\n // If the digit to be rounded up is in the first element of xc...\r\n if (ni == 0) {\r\n\r\n // i will be the length of xc[0] before k is added.\r\n for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n j = xc[0] += k;\r\n for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xc[0] == BASE) xc[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xc[ni] += k;\r\n if (xc[ni] != BASE) break;\r\n xc[ni--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; xc[--i] === 0; xc.pop());\r\n }\r\n\r\n // Overflow? Infinity.\r\n if (x.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n\r\n // Underflow? Zero.\r\n } else if (x.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function valueOf(n) {\r\n var str,\r\n e = n.e;\r\n\r\n if (e === null) return n.toString();\r\n\r\n str = coeffToString(n.c);\r\n\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(str, e)\r\n : toFixedPoint(str, e, '0');\r\n\r\n return n.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new BigNumber(this);\r\n if (x.s < 0) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * 0 if they have the same value,\r\n * or null if the value of either is NaN.\r\n */\r\n P.comparedTo = function (y, b) {\r\n return compare(this, new BigNumber(y, b));\r\n };\r\n\r\n\r\n /*\r\n * If dp is undefined or null or true or false, return the number of decimal places of the\r\n * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n *\r\n * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.decimalPlaces = P.dp = function (dp, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), dp + x.e + 1, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last number.\r\n if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n if (n < 0) n = 0;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.dividedBy = P.div = function (y, b) {\r\n return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n * BigNumber by the value of BigNumber(y, b).\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n return div(this, new BigNumber(y, b), 0, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n *\r\n * If m is present, return the result modulo m.\r\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n *\r\n * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n *\r\n * n {number|string|BigNumber} The exponent. An integer.\r\n * [m] {number|string|BigNumber} The modulus.\r\n *\r\n * '[BigNumber Error] Exponent not an integer: {n}'\r\n */\r\n P.exponentiatedBy = P.pow = function (n, m) {\r\n var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n x = this;\r\n\r\n n = new BigNumber(n);\r\n\r\n // Allow NaN and ±Infinity, but not other non-integers.\r\n if (n.c && !n.isInteger()) {\r\n throw Error\r\n (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n }\r\n\r\n if (m != null) m = new BigNumber(m);\r\n\r\n // Exponent of MAX_SAFE_INTEGER is 15.\r\n nIsBig = n.e > 14;\r\n\r\n // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n // The sign of the result of pow when x is negative depends on the evenness of n.\r\n // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));\r\n return m ? y.mod(m) : y;\r\n }\r\n\r\n nIsNeg = n.s < 0;\r\n\r\n if (m) {\r\n\r\n // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n if (isModExp) x = x.mod(m);\r\n\r\n // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n // [1, 240000000]\r\n ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n // [80000000000000] [99999750000000]\r\n : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n // If x is negative and n is odd, k = -0, else k = 0.\r\n k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n // If x >= 1, k = ±Infinity.\r\n if (x.e > -1) k = 1 / k;\r\n\r\n // If n is negative return ±0, else return ±Infinity.\r\n return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n } else if (POW_PRECISION) {\r\n\r\n // Truncating each coefficient array to a length of k after each multiplication\r\n // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n // i.e. there will be a minimum of 28 guard digits retained.\r\n k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n }\r\n\r\n if (nIsBig) {\r\n half = new BigNumber(0.5);\r\n if (nIsNeg) n.s = 1;\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = Math.abs(+valueOf(n));\r\n nIsOdd = i % 2;\r\n }\r\n\r\n y = new BigNumber(ONE);\r\n\r\n // Performs 54 loop iterations for n of 9007199254740991.\r\n for (; ;) {\r\n\r\n if (nIsOdd) {\r\n y = y.times(x);\r\n if (!y.c) break;\r\n\r\n if (k) {\r\n if (y.c.length > k) y.c.length = k;\r\n } else if (isModExp) {\r\n y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (i) {\r\n i = mathfloor(i / 2);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n } else {\r\n n = n.times(half);\r\n round(n, n.e + 1, 1);\r\n\r\n if (n.e > 14) {\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = +valueOf(n);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n }\r\n }\r\n\r\n x = x.times(x);\r\n\r\n if (k) {\r\n if (x.c && x.c.length > k) x.c.length = k;\r\n } else if (isModExp) {\r\n x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (isModExp) return y;\r\n if (nIsNeg) y = ONE.div(y);\r\n\r\n return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n */\r\n P.integerValue = function (rm) {\r\n var n = new BigNumber(this);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n return round(n, n.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isEqualTo = P.eq = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n */\r\n P.isFinite = function () {\r\n return !!this.c;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isGreaterThan = P.gt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n */\r\n P.isInteger = function () {\r\n return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isLessThan = P.lt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is negative, otherwise return false.\r\n */\r\n P.isNegative = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is positive, otherwise return false.\r\n */\r\n P.isPositive = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n */\r\n P.isZero = function () {\r\n return !!this.c && this.c[0] == 0;\r\n };\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.minus = function (y, b) {\r\n var i, j, t, xLTy,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n ROUNDING_MODE == 3 ? -0 : 0);\r\n }\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Determine which is the bigger number.\r\n if (a = xe - ye) {\r\n\r\n if (xLTy = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n\r\n // Prepend zeros to equalise exponents.\r\n for (b = a; b--; t.push(0));\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n\r\n if (xc[b] != yc[b]) {\r\n xLTy = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xLTy) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n } \r\n\r\n b = (j = yc.length) - (i = xc.length);\r\n\r\n // Append zeros to xc if shorter.\r\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n if (b > 0) for (; b--; xc[i++] = 0);\r\n b = BASE - 1;\r\n\r\n // Subtract yc from xc.\r\n for (; j > a;) {\r\n\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i]; xc[i] = b);\r\n --xc[i];\r\n xc[j] += BASE;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n // Zero?\r\n if (!xc[0]) {\r\n\r\n // Following IEEE 754 (2008) 6.3,\r\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\r\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n // for finite x and y.\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n */\r\n P.modulo = P.mod = function (y, b) {\r\n var q, s,\r\n x = this;\r\n\r\n y = new BigNumber(y, b);\r\n\r\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n if (!x.c || !y.s || y.c && !y.c[0]) {\r\n return new BigNumber(NaN);\r\n\r\n // Return x if y is Infinity or x is zero.\r\n } else if (!y.c || x.c && !x.c[0]) {\r\n return new BigNumber(x);\r\n }\r\n\r\n if (MODULO_MODE == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // r = x - qy where 0 <= r < abs(y)\r\n s = y.s;\r\n y.s = 1;\r\n q = div(x, y, 0, 3);\r\n y.s = s;\r\n q.s *= s;\r\n } else {\r\n q = div(x, y, 0, MODULO_MODE);\r\n }\r\n\r\n y = x.minus(q.times(y));\r\n\r\n // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n * of BigNumber(y, b).\r\n */\r\n P.multipliedBy = P.times = function (y, b) {\r\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n base, sqrtBase,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new BigNumber(y, b)).c;\r\n\r\n // Either NaN, ±Infinity or ±0?\r\n if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n y.c = y.e = y.s = null;\r\n } else {\r\n y.s *= x.s;\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n if (!xc || !yc) {\r\n y.c = y.e = null;\r\n\r\n // Return ±0 if either is ±0.\r\n } else {\r\n y.c = [0];\r\n y.e = 0;\r\n }\r\n }\r\n\r\n return y;\r\n }\r\n\r\n e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n y.s *= x.s;\r\n xcL = xc.length;\r\n ycL = yc.length;\r\n\r\n // Ensure xc points to longer array and xcL to its length.\r\n if (xcL < ycL) {\r\n zc = xc;\r\n xc = yc;\r\n yc = zc;\r\n i = xcL;\r\n xcL = ycL;\r\n ycL = i;\r\n } \r\n\r\n // Initialise the result array with zeros.\r\n for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n base = BASE;\r\n sqrtBase = SQRT_BASE;\r\n\r\n for (i = ycL; --i >= 0;) {\r\n c = 0;\r\n ylo = yc[i] % sqrtBase;\r\n yhi = yc[i] / sqrtBase | 0;\r\n\r\n for (k = xcL, j = i + k; j > i;) {\r\n xlo = xc[--k] % sqrtBase;\r\n xhi = xc[k] / sqrtBase | 0;\r\n m = yhi * xlo + xhi * ylo;\r\n xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n zc[j--] = xlo % base;\r\n }\r\n\r\n zc[j] = c;\r\n }\r\n\r\n if (c) {\r\n ++e;\r\n } else {\r\n zc.splice(0, 1);\r\n }\r\n\r\n return normalise(y, zc, e);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n * i.e. multiplied by -1.\r\n */\r\n P.negated = function () {\r\n var x = new BigNumber(this);\r\n x.s = -x.s || null;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.plus = function (y, b) {\r\n var t,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Return ±Infinity if either ±Infinity.\r\n if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n // Either zero?\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--; t.push(0));\r\n t.reverse();\r\n }\r\n\r\n a = xc.length;\r\n b = yc.length;\r\n\r\n // Point xc to the longer array, and b to the shorter length.\r\n if (a - b < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n b = a;\r\n } \r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n for (a = 0; b;) {\r\n a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n }\r\n\r\n if (a) {\r\n xc = [a].concat(xc);\r\n ++ye;\r\n }\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n // ye = MAX_EXP + 1 possible\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * If sd is undefined or null or true or false, return the number of significant digits of\r\n * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n * If sd is true include integer-part trailing zeros in the count.\r\n *\r\n * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n * boolean: whether to count integer-part trailing zeros: true or false.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.precision = P.sd = function (sd, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (sd != null && sd !== !!sd) {\r\n intCheck(sd, 1, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), sd, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n v = c.length - 1;\r\n n = v * LOG_BASE + 1;\r\n\r\n if (v = c[v]) {\r\n\r\n // Subtract the number of trailing zeros of the last element.\r\n for (; v % 10 == 0; v /= 10, n--);\r\n\r\n // Add the number of digits of the first element.\r\n for (v = c[0]; v >= 10; v /= 10, n++);\r\n }\r\n\r\n if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n *\r\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n */\r\n P.shiftedBy = function (k) {\r\n intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n return this.times('1e' + k);\r\n };\r\n\r\n\r\n /*\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, r, rep, t,\r\n x = this,\r\n c = x.c,\r\n s = x.s,\r\n e = x.e,\r\n dp = DECIMAL_PLACES + 4,\r\n half = new BigNumber('0.5');\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !c || !c[0]) {\r\n return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n }\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+valueOf(x));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = coeffToString(c);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(+n);\r\n e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new BigNumber(n);\r\n } else {\r\n r = new BigNumber(s + '');\r\n }\r\n\r\n // Check for zero.\r\n // r could be zero if MIN_EXP is changed after the this value was created.\r\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n // coeffToString to throw.\r\n if (r.c[0]) {\r\n e = r.e;\r\n s = e + dp;\r\n if (s < 3) s = 0;\r\n\r\n // Newton-Raphson iteration.\r\n for (; ;) {\r\n t = r;\r\n r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n // The exponent of r may here be one less than the final result exponent,\r\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n // are indexed correctly.\r\n if (r.e < e) --s;\r\n n = n.slice(s - 3, s + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n // iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the\r\n // exact result as the nines may infinitely repeat.\r\n if (!rep) {\r\n round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n dp += 4;\r\n s += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n // result. If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in exponential notation and\r\n * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toExponential = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp++;\r\n }\r\n return format(this, dp, rm, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toFixed = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp = dp + this.e + 1;\r\n }\r\n return format(this, dp, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n * of the format or FORMAT object (see BigNumber.set).\r\n *\r\n * The formatting object may contain some or all of the properties shown below.\r\n *\r\n * FORMAT = {\r\n * prefix: '',\r\n * groupSize: 3,\r\n * secondaryGroupSize: 0,\r\n * groupSeparator: ',',\r\n * decimalSeparator: '.',\r\n * fractionGroupSize: 0,\r\n * fractionGroupSeparator: '\\xA0', // non-breaking space\r\n * suffix: ''\r\n * };\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n * [format] {object} Formatting options. See FORMAT pbject above.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n * '[BigNumber Error] Argument not an object: {format}'\r\n */\r\n P.toFormat = function (dp, rm, format) {\r\n var str,\r\n x = this;\r\n\r\n if (format == null) {\r\n if (dp != null && rm && typeof rm == 'object') {\r\n format = rm;\r\n rm = null;\r\n } else if (dp && typeof dp == 'object') {\r\n format = dp;\r\n dp = rm = null;\r\n } else {\r\n format = FORMAT;\r\n }\r\n } else if (typeof format != 'object') {\r\n throw Error\r\n (bignumberError + 'Argument not an object: ' + format);\r\n }\r\n\r\n str = x.toFixed(dp, rm);\r\n\r\n if (x.c) {\r\n var i,\r\n arr = str.split('.'),\r\n g1 = +format.groupSize,\r\n g2 = +format.secondaryGroupSize,\r\n groupSeparator = format.groupSeparator || '',\r\n intPart = arr[0],\r\n fractionPart = arr[1],\r\n isNeg = x.s < 0,\r\n intDigits = isNeg ? intPart.slice(1) : intPart,\r\n len = intDigits.length;\r\n\r\n if (g2) {\r\n i = g1;\r\n g1 = g2;\r\n g2 = i;\r\n len -= i;\r\n } \r\n\r\n if (g1 > 0 && len > 0) {\r\n i = len % g1 || g1;\r\n intPart = intDigits.substr(0, i);\r\n for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n if (isNeg) intPart = '-' + intPart;\r\n }\r\n\r\n str = fractionPart\r\n ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n '$&' + (format.fractionGroupSeparator || ''))\r\n : fractionPart)\r\n : intPart;\r\n }\r\n\r\n return (format.prefix || '') + str + (format.suffix || '');\r\n };\r\n\r\n\r\n /*\r\n * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n * fraction with an integer numerator and an integer denominator.\r\n * The denominator will be a positive non-zero value less than or equal to the specified\r\n * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n * the lowest value necessary to represent the number exactly.\r\n *\r\n * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n *\r\n * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n */\r\n P.toFraction = function (md) {\r\n var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n x = this,\r\n xc = x.c;\r\n\r\n if (md != null) {\r\n n = new BigNumber(md);\r\n\r\n // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n throw Error\r\n (bignumberError + 'Argument ' +\r\n (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n }\r\n }\r\n\r\n if (!xc) return new BigNumber(x);\r\n\r\n d = new BigNumber(ONE);\r\n n1 = d0 = new BigNumber(ONE);\r\n d1 = n0 = new BigNumber(ONE);\r\n s = coeffToString(xc);\r\n\r\n // Determine initial denominator.\r\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n e = d.e = s.length - x.e - 1;\r\n d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n exp = MAX_EXP;\r\n MAX_EXP = 1 / 0;\r\n n = new BigNumber(s);\r\n\r\n // n0 = d1 = 0\r\n n0.c[0] = 0;\r\n\r\n for (; ;) {\r\n q = div(n, d, 0, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.comparedTo(md) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n n1 = n0.plus(q.times(d2 = n1));\r\n n0 = d2;\r\n d = n.minus(q.times(d2 = d));\r\n n = d2;\r\n }\r\n\r\n d2 = div(md.minus(d0), d1, 0, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n e = e * 2;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n MAX_EXP = exp;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this BigNumber converted to a number primitive.\r\n */\r\n P.toNumber = function () {\r\n return +valueOf(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n * necessary to represent the integer part of the value in fixed-point notation, then use\r\n * exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n if (sd != null) intCheck(sd, 1, MAX);\r\n return format(this, sd, rm, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n * TO_EXP_NEG, return exponential notation.\r\n *\r\n * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n *\r\n * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n */\r\n P.toString = function (b) {\r\n var str,\r\n n = this,\r\n s = n.s,\r\n e = n.e;\r\n\r\n // Infinity or NaN?\r\n if (e === null) {\r\n if (s) {\r\n str = 'Infinity';\r\n if (s < 0) str = '-' + str;\r\n } else {\r\n str = 'NaN';\r\n }\r\n } else {\r\n if (b == null) {\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(coeffToString(n.c), e)\r\n : toFixedPoint(coeffToString(n.c), e, '0');\r\n } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n } else {\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n }\r\n\r\n if (s < 0 && n.c[0]) str = '-' + str;\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return as toString, but do not accept a base argument, and include the minus sign for\r\n * negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return valueOf(this);\r\n };\r\n\r\n\r\n P._isBigNumber = true;\r\n\r\n if (configObject != null) BigNumber.set(configObject);\r\n\r\n return BigNumber;\r\n }\r\n\r\n\r\n // PRIVATE HELPER FUNCTIONS\r\n\r\n // These functions don't need access to variables,\r\n // e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\n function bitFloor(n) {\r\n var i = n | 0;\r\n return n > 0 || n === i ? i : i - 1;\r\n }\r\n\r\n\r\n // Return a coefficient array as a string of base 10 digits.\r\n function coeffToString(a) {\r\n var s, z,\r\n i = 1,\r\n j = a.length,\r\n r = a[0] + '';\r\n\r\n for (; i < j;) {\r\n s = a[i++] + '';\r\n z = LOG_BASE - s.length;\r\n for (; z--; s = '0' + s);\r\n r += s;\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n return r.slice(0, j + 1 || 1);\r\n }\r\n\r\n\r\n // Compare the value of BigNumbers x and y.\r\n function compare(x, y) {\r\n var a, b,\r\n xc = x.c,\r\n yc = y.c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either NaN?\r\n if (!i || !j) return null;\r\n\r\n a = xc && !xc[0];\r\n b = yc && !yc[0];\r\n\r\n // Either zero?\r\n if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n a = i < 0;\r\n b = k == l;\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n // Compare exponents.\r\n if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n }\r\n\r\n\r\n /*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\n function intCheck(n, min, max, name) {\r\n if (n < min || n > max || n !== mathfloor(n)) {\r\n throw Error\r\n (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n : ' not a primitive number: ') + String(n));\r\n }\r\n }\r\n\r\n\r\n // Assumes finite n.\r\n function isOdd(n) {\r\n var k = n.c.length - 1;\r\n return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n }\r\n\r\n\r\n function toExponential(str, e) {\r\n return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n (e < 0 ? 'e' : 'e+') + e;\r\n }\r\n\r\n\r\n function toFixedPoint(str, e, z) {\r\n var len, zs;\r\n\r\n // Negative exponent?\r\n if (e < 0) {\r\n\r\n // Prepend zeros.\r\n for (zs = z + '.'; ++e; zs += z);\r\n str = zs + str;\r\n\r\n // Positive exponent\r\n } else {\r\n len = str.length;\r\n\r\n // Append zeros.\r\n if (++e > len) {\r\n for (zs = z, e -= len; --e; zs += z);\r\n str += zs;\r\n } else if (e < len) {\r\n str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n\r\n // EXPORT\r\n\r\n\r\n BigNumber = clone();\r\n BigNumber['default'] = BigNumber.BigNumber = BigNumber;\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () { return BigNumber; });\r\n\r\n // Node.js and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = BigNumber;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalObject) {\r\n globalObject = typeof self != 'undefined' && self ? self : window;\r\n }\r\n\r\n globalObject.BigNumber = BigNumber;\r\n }\r\n})(this);\r\n","export * from './Snackbar';\nexport * from './SnackbarItem';\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","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 */\nexport const 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 */\nexport const 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 */\nexport const closeDropdown = ({\n triggerElementId,\n dropdownContentId,\n onClose,\n}) => {\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 // Get fresh handle every time, resulting in more streamlined functionality for cypress\n const triggerButton = document.getElementById(triggerElementId);\n if (\n triggerButton &&\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 functionality\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 { 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","import { addSnackbarItem } from '../Snackbar';\n\n/**\n * @file Manages logic to validate file uploads client-side. In general, the\n * validations work by looping over input form fields with a type of file and\n * checking the size and format of the files upload by the user.\n */\n\n/**\n * An object containing the top level MIME type as the key and the max file\n * size in MB for the value. To use a different value than these defaults,\n * simply add a data-max-file-mb attribute to the input form field with the\n * max file size in MB. If that attribute is found, it takes priority over these\n * defaults.\n *\n * @constant {Object.}\n */\nconst MAX_FILE_SIZE_MB = Object.freeze({\n image: 25,\n video: 50,\n});\n\n/**\n * Permitted file types using the top level MIME type (i.e. image for\n * image/png). To specify permitted file types, simply add a\n * data-permitted-file-types attribute to the input form field as an Array of\n * strings specifying the top level MIME types that are permitted.\n *\n * @constant {string[]}\n */\nconst PERMITTED_FILE_TYPES = ['image'];\n\n/**\n * The maximum length of the file name to prevent errors on the backend when a\n * file name is too long.\n *\n * @constant {number}\n */\nconst MAX_FILE_NAME_LENGTH = 250;\n\n/**\n * Adds error messages in the form of a div with red text.\n *\n * @param {string} msg - The error message to be displayed to the user\n *\n * @returns {HTMLElement} The error element that was added to the DOM\n */\nfunction addErrorMessage(msg) {\n if (top.addSnackbarItem) {\n // The Comment editor's context (MarkdownToolbar component) doesn't have\n // access to the Snackbar element in the DOM, so it needs to use `top`\n top.addSnackbarItem({\n message: msg,\n addCloseButton: true,\n });\n } else {\n // The Post editor (Toolbar component) doesn't have access to\n // `top.addSnackbarItem` so we need to check to ensure if it's undefined\n addSnackbarItem({\n message: msg,\n addCloseButton: true,\n });\n }\n}\n\n/**\n * Handles errors for files that are too large.\n *\n * @param {object} fileSizeErrorHandler - A custom function to be ran after the default error handling\n * @param {number} fileSizeMb - The size of the file in MB\n * @param {?number} maxFileSizeMb - The max file size limit in MB\n */\nfunction handleFileSizeError(fileSizeErrorHandler, fileSizeMb, maxFileSizeMb) {\n if (fileSizeErrorHandler) {\n fileSizeErrorHandler();\n } else {\n let errorMessage = `File size too large (${fileSizeMb} MB).`;\n\n // If a user uploads a file type that we haven't defined a max size limit for then maxFileSizeMb\n // could be NaN\n if (maxFileSizeMb >= 0) {\n errorMessage += ` The limit is ${maxFileSizeMb} MB.`;\n }\n\n addErrorMessage(errorMessage);\n }\n}\n\n/**\n * Handles errors for files that are not a valid format.\n *\n * @param {object} fileSizeErrorHandler - A custom function to be ran after the default error handling\n * @param {string} fileType - The top level file type (i.e. image for image/png)\n * @param {string[]} permittedFileTypes - The top level file types (i.e. image for image/png) that are permitted\n */\nfunction handleFileTypeError(\n fileTypeErrorHandler,\n fileType,\n permittedFileTypes,\n) {\n if (fileTypeErrorHandler) {\n fileTypeErrorHandler();\n } else {\n const fileTypeBracketed =\n fileType && fileType.length !== 0 ? ` (${fileType})` : '';\n const errorMessage = `Invalid file format${fileTypeBracketed}. Only ${permittedFileTypes.join(\n ', ',\n )} files are permitted.`;\n addErrorMessage(errorMessage);\n }\n}\n\n/**\n * Handles errors for files with names that are too long.\n *\n * @param {object} fileNameLengthErrorHandler - A custom function to be ran after the default error handling\n * @param {number} maxFileNameLength - The max number of characters permitted for a file name\n */\nfunction handleFileNameLengthError(\n fileNameLengthErrorHandler,\n maxFileNameLength,\n) {\n if (fileNameLengthErrorHandler) {\n fileNameLengthErrorHandler();\n } else {\n const errorMessage = `File name is too long. It can't be longer than ${maxFileNameLength} characters.`;\n addErrorMessage(errorMessage);\n }\n}\n\n/**\n * Validates the file size and handles the error if it's invalid.\n *\n * @external File\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/File File}\n *\n * @param {File} file - The file attached by the user\n * @param {string} fileType - The top level file type (i.e. image for image/png)\n * @param {HTMLElement} fileInput - An input form field with type of file\n *\n * @returns {Boolean} Returns false if the file is too big. Otherwise, returns true.\n */\nfunction validateFileSize(file, fileType, fileInput) {\n let { maxFileSizeMb } = fileInput.dataset;\n\n const { fileSizeErrorHandler } = fileInput.dataset;\n\n const fileSizeMb = (file.size / (1024 * 1024)).toFixed(2);\n maxFileSizeMb = Number(maxFileSizeMb || MAX_FILE_SIZE_MB[fileType]);\n\n const isValidFileSize = fileSizeMb <= maxFileSizeMb;\n\n if (!isValidFileSize) {\n handleFileSizeError(fileSizeErrorHandler, fileSizeMb, maxFileSizeMb);\n }\n\n return isValidFileSize;\n}\n\n/**\n * Validates the file type and handles the error if it's invalid.\n *\n * @external File\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/File File}\n *\n * @param {File} file - The file attached by the user\n * @param {string} fileType - The top level file type (i.e. image for image/png)\n * @param {HTMLElement} fileInput - An input form field with type of file\n *\n * @returns {Boolean} Returns false if the files is an invalid format. Otherwise, returns true.\n */\nfunction validateFileType(file, fileType, fileInput) {\n let { permittedFileTypes } = fileInput.dataset;\n\n if (permittedFileTypes) {\n permittedFileTypes = JSON.parse(permittedFileTypes);\n }\n\n permittedFileTypes = permittedFileTypes || PERMITTED_FILE_TYPES;\n\n const { fileTypeErrorHandler } = fileInput.dataset;\n\n const isValidFileType = permittedFileTypes.includes(fileType);\n\n if (!isValidFileType) {\n handleFileTypeError(fileTypeErrorHandler, fileType, permittedFileTypes);\n }\n\n return isValidFileType;\n}\n\n/**\n * Validates the length of the file name and handles the error if it's invalid.\n *\n * @external File\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/File File}\n *\n * @param {File} file - The file attached by the user\n * @param {HTMLElement} fileInput - An input form field with type of file\n *\n * @returns {Boolean} Returns false if the file name is too long. Otherwise, returns true.\n */\nfunction validateFileNameLength(file, fileInput) {\n let { maxFileNameLength } = fileInput.dataset;\n\n maxFileNameLength = Number(maxFileNameLength || MAX_FILE_NAME_LENGTH);\n\n const { fileNameLengthErrorHandler } = fileInput.dataset;\n\n const isValidFileNameLength = file.name.length <= maxFileNameLength;\n\n if (!isValidFileNameLength) {\n handleFileNameLengthError(fileNameLengthErrorHandler, maxFileNameLength);\n }\n\n return isValidFileNameLength;\n}\n\n/**\n * This is the core function to handle validations of uploaded files. It loops\n * through all the uploaded files for the given fileInput and checks the file\n * size, file format, and file name length. If a file fails a validation, the\n * error is handled.\n *\n * @param {HTMLElement} fileInput - An input form field with type of file\n *\n * @returns {Boolean} Returns false if any files failed validations. Otherwise, returns true.\n */\nfunction validateFileInput(fileInput) {\n let isValidFileInput = true;\n\n const files = Array.from(fileInput.files);\n\n for (let i = 0; i < files.length; i += 1) {\n const file = files[i];\n const fileType = file.type.split('/')[0];\n\n const isValidFileSize = validateFileSize(file, fileType, fileInput);\n\n if (!isValidFileSize) {\n isValidFileInput = false;\n break;\n }\n\n const isValidFileType = validateFileType(file, fileType, fileInput);\n\n if (!isValidFileType) {\n isValidFileInput = false;\n break;\n }\n\n const isValidFileNameLength = validateFileNameLength(file, fileInput);\n\n if (!isValidFileNameLength) {\n isValidFileInput = false;\n break;\n }\n }\n\n return isValidFileInput;\n}\n\n/**\n * This function is designed to be exported in areas where we are doing more\n * custom implementations of file uploading using Preact. It can then be used\n * in Preact event handlers. It loops through all file input fields on the DOM\n * and validates any attached files.\n *\n * @returns {Boolean} Returns false if any files failed validations. Otherwise, returns true.\n */\nexport function validateFileInputs() {\n let validFileInputs = true;\n const fileInputs = document.querySelectorAll('input[type=\"file\"]');\n\n for (let i = 0; i < fileInputs.length; i += 1) {\n const fileInput = fileInputs[i];\n const validFileInput = validateFileInput(fileInput);\n\n if (!validFileInput) {\n validFileInputs = false;\n break;\n }\n }\n\n return validFileInputs;\n}\n\n// This is written so that it works automagically by just including this pack\n// in a view.\nconst fileInputs = document.querySelectorAll('input[type=\"file\"]');\n\nfileInputs.forEach((fileInput) => {\n fileInput.addEventListener('change', () => {\n validateFileInput(fileInput);\n });\n});\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport { defaultChildrenPropTypes } from '../common-prop-types';\nimport { Button } from '@crayons';\n\nexport const snackbarItemProps = {\n children: defaultChildrenPropTypes.isRequired,\n actions: PropTypes.arrayOf(\n PropTypes.shape({\n message: PropTypes.string.isRequired,\n handler: PropTypes.func.isRequired,\n lifespan: PropTypes.number.isRequired,\n }),\n ),\n};\n\nexport const SnackbarItem = ({ message, actions = [] }) => (\n
\n
\n {message}\n
\n
\n {actions.map(({ text, handler }) => (\n \n ))}\n
\n
\n);\n\nSnackbarItem.displayName = 'SnackbarItem';\n\nSnackbarItem.propTypes = snackbarItemProps.isRequired;\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 document = window.document,\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 document,\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, document]);\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","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","import { I18n } from 'i18n-js';\n\nconst i18n = new I18n();\n\nconst translationsDiv = document.getElementById('i18n-translations');\nif (translationsDiv) {\n const translations = JSON.parse(translationsDiv.dataset.translations);\n i18n.store(translations);\n}\ni18n.defaultLocale = 'en';\nconst { locale: userLocale } = document.body.dataset;\nif (userLocale) {\n i18n.locale = userLocale;\n}\nexport function locale(term) {\n return i18n.t(term);\n}\n\nexport function localeArray(term) {\n return `${i18n.t(term)}`.match(/^\\[missing.*translation\\]$/)\n ? []\n : i18n.t(term);\n}\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames/bind';\nimport { FocusTrap } from '../../shared/components/focusTrap';\nimport { defaultChildrenPropTypes } from '../../common-prop-types';\nimport { ButtonNew as Button } from '@crayons';\nimport CloseIcon from '@images/x.svg';\n\nexport const Modal = ({\n children,\n size,\n className,\n title,\n prompt,\n sheet,\n centered,\n noBackdrop,\n showHeader = true,\n sheetAlign = 'center',\n backdropDismissible = false,\n allowOverflow = false,\n onClose = () => {},\n focusTrapSelector = '.crayons-modal__box',\n document = window.document,\n}) => {\n const classes = classNames('crayons-modal', {\n [`crayons-modal--${size}`]: size && size !== 'medium',\n [`crayons-modal--${sheetAlign}`]: sheet && sheetAlign !== 'center',\n 'crayons-modal--sheet': sheet,\n 'crayons-modal--prompt': prompt,\n 'crayons-modal--centered': centered && prompt,\n 'crayons-modal--bg-dismissible': !noBackdrop && backdropDismissible,\n 'crayons-modal--overflow-visible': allowOverflow,\n [className]: className,\n });\n\n return (\n \n
\n \n {showHeader && (\n
\n

{title}

\n \n
\n )}\n
{children}
\n
\n {!noBackdrop && (\n \n )}\n \n \n );\n};\n\nModal.displayName = 'Modal';\n\nModal.propTypes = {\n children: defaultChildrenPropTypes.isRequired,\n className: PropTypes.string,\n title: PropTypes.string.isRequired,\n backdrop: PropTypes.bool,\n backdropDismissible: PropTypes.bool,\n prompt: PropTypes.bool,\n centered: PropTypes.bool,\n onClose: PropTypes.func,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n focusTrapSelector: PropTypes.string,\n sheet: PropTypes.bool,\n sheetAlign: PropTypes.oneOf(['center', 'left', 'right']),\n showHeader: PropTypes.bool,\n};\n","import { validateFileInputs } from '../packs/validateFileInputs';\n\nexport function previewArticle(payload, successCb, failureCb) {\n fetch('/articles/preview', {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'X-CSRF-Token': window.csrfToken,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n article_body: payload,\n }),\n credentials: 'same-origin',\n })\n .then(async (response) => {\n const payload = await response.json();\n\n if (response.status !== 200) {\n throw payload;\n }\n\n return payload;\n })\n .then(successCb)\n .catch(failureCb);\n}\n\nexport function getArticle() {}\n\nfunction processPayload(payload) {\n const {\n /* eslint-disable no-unused-vars */\n previewShowing,\n helpShowing,\n previewResponse,\n helpHTML,\n imageManagementShowing,\n moreConfigShowing,\n errors,\n /* eslint-enable no-unused-vars */\n ...neededPayload\n } = payload;\n return neededPayload;\n}\n\nexport function submitArticle({ payload, onSuccess, onError }) {\n const method = payload.id ? 'PUT' : 'POST';\n const url = payload.id ? `/articles/${payload.id}` : '/articles';\n fetch(url, {\n method,\n headers: {\n Accept: 'application/json',\n 'X-CSRF-Token': window.csrfToken,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n article: processPayload(payload),\n }),\n credentials: 'same-origin',\n })\n .then((response) => response.json())\n .then((response) => {\n if (response.current_state_path) {\n onSuccess();\n window.location.replace(response.current_state_path);\n } else {\n onError(response);\n }\n })\n .catch(onError);\n}\n\nfunction generateUploadFormdata(payload) {\n const token = window.csrfToken;\n const formData = new FormData();\n formData.append('authenticity_token', token);\n\n Object.entries(payload.image).forEach(([_, value]) =>\n formData.append('image[]', value),\n );\n\n return formData;\n}\n\nexport function generateMainImage({ payload, successCb, failureCb, signal }) {\n fetch('/image_uploads', {\n method: 'POST',\n headers: {\n 'X-CSRF-Token': window.csrfToken,\n },\n body: generateUploadFormdata(payload),\n credentials: 'same-origin',\n signal,\n })\n .then((response) => response.json())\n .then((json) => {\n if (json.error) {\n throw new Error(json.error);\n }\n const { links } = json;\n const { image } = payload;\n return successCb({ links, image });\n })\n .catch((message) => failureCb(message));\n}\n\n/**\n * Processes images for upload.\n *\n * @param {FileList} images Images to be uploaded.\n * @param {Function} handleImageSuccess The handler that runs when the image is uploaded successfully.\n * @param {Function} handleImageFailure The handler that runs when the image upload fails.\n */\nexport function processImageUpload(\n images,\n handleImageUploading,\n handleImageSuccess,\n handleImageFailure,\n) {\n // Currently only one image is supported for upload.\n if (images.length > 0 && validateFileInputs()) {\n const payload = { image: images };\n\n handleImageUploading();\n generateMainImage({\n payload,\n successCb: handleImageSuccess,\n failureCb: handleImageFailure,\n });\n }\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","// 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","export * from './Button';\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 { h } from 'preact';\n\nexport const Spinner = () => (\n \n \n \n);\n","import { h, Component } from 'preact';\nimport PropTypes from 'prop-types';\nimport { SnackbarItem } from './SnackbarItem';\n\nlet snackbarItems = [];\n\nexport function addSnackbarItem(snackbarItem) {\n if (!Array.isArray(snackbarItem.actions)) {\n snackbarItem.actions = []; // eslint-disable-line no-param-reassign\n }\n\n snackbarItems.push(snackbarItem);\n}\n\nexport class Snackbar extends Component {\n state = {\n snacks: [],\n };\n\n pollingId;\n\n paused = false;\n\n pauseLifespan;\n\n resumeLifespan;\n\n componentDidMount() {\n this.initializePolling();\n }\n\n componentDidUpdate() {\n if (!this.pauseLifespan) {\n this.pauseLifespan = (_event) => {\n this.paused = true;\n };\n\n this.resumeLifespan = (event) => {\n event.stopPropagation();\n this.paused = false;\n };\n\n this.element.addEventListener('mouseover', this.pauseLifespan);\n this.element.addEventListener('mouseout', this.resumeLifespan, true);\n }\n }\n\n componentWillUnmount() {\n if (this.element) {\n this.element.removeEventListener('mouseover', this.pauseLifespan);\n this.element.addEventListener('mouseout', this.resumeLifespan);\n }\n }\n\n initializePolling() {\n const { pollingTime, lifespan } = this.props;\n\n this.pollingId = setInterval(() => {\n if (snackbarItems.length > 0) {\n // Need to add the lifespan to snackbar items because each second that goes by, we\n // decrease the lifespan until it is no more.\n const newSnacks = snackbarItems.map((snackbarItem) => ({\n ...snackbarItem,\n lifespan,\n }));\n\n snackbarItems = [];\n\n this.updateSnackbarItems(newSnacks);\n\n // Start the lifespan countdowns for each new snackbar item.\n newSnacks.forEach((snack) => {\n // eslint-disable-next-line no-param-reassign\n snack.lifespanTimeoutId = setTimeout(() => {\n this.decreaseLifespan(snack);\n }, 1000);\n\n if (snack.addCloseButton) {\n // Adds an optional close button if addDefaultACtion is true.\n snack.actions.push({\n text: 'Dismiss',\n handler: () => {\n this.setState((prevState) => {\n return {\n prevState,\n snacks: prevState.snacks.filter(\n (potentialSnackToFilterOut) =>\n potentialSnackToFilterOut !== snack,\n ),\n };\n });\n },\n });\n }\n });\n }\n }, pollingTime);\n }\n\n updateSnackbarItems(newSnacks) {\n this.setState((prevState) => {\n let updatedSnacks = [...prevState.snacks, ...newSnacks];\n\n if (updatedSnacks.length > 3) {\n const snacksToBeDiscarded = updatedSnacks.slice(\n 0,\n updatedSnacks.length - 3,\n );\n\n snacksToBeDiscarded.forEach(({ lifespanTimeoutId }) => {\n clearTimeout(lifespanTimeoutId);\n });\n\n updatedSnacks = updatedSnacks.slice(updatedSnacks.length - 3);\n }\n\n return { ...prevState, snacks: updatedSnacks };\n });\n }\n\n decreaseLifespan(snack) {\n /* eslint-disable no-param-reassign */\n if (!this.paused && snack.lifespan === 0) {\n clearTimeout(snack.lifespanTimeoutId);\n\n this.setState((prevState) => {\n const snacks = prevState.snacks.filter(\n (currentSnack) => currentSnack !== snack,\n );\n\n return {\n ...prevState,\n snacks,\n };\n });\n\n return;\n }\n\n if (!this.paused) {\n snack.lifespan -= 1;\n }\n\n snack.lifespanTimeoutId = setTimeout(() => {\n this.decreaseLifespan(snack);\n }, 1000);\n /* eslint-enable no-param-reassign */\n }\n\n render() {\n const { snacks } = this.state;\n\n return (\n 0 ? 'crayons-snackbar' : 'hidden'}\n ref={(element) => {\n this.element = element;\n }}\n >\n {snacks.map(({ message, actions = [] }, index) => (\n \n ))}\n \n );\n }\n}\n\nSnackbar.defaultProps = {\n lifespan: 5,\n pollingTime: 300,\n};\n\nSnackbar.displayName = 'Snackbar';\n\nSnackbar.propTypes = {\n lifespan: PropTypes.number,\n pollingTime: PropTypes.number,\n};\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\n\n/**\n * Component used to display user details in the Autocomplete dropdown\n *\n * @param {object} props\n * @param {string} props.name The user's name\n * @param {string} props.profile_image_90 The src of the user's profile image\n * @param {string} props.username The user's username\n */\nexport const UserListItemContent = ({ name, profile_image_90, username }) => (\n
\n \n \"\"\n \n\n
\n

{name}

\n

{`@${username}`}

\n
\n
\n);\n\nUserListItemContent.propTypes = {\n name: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired,\n profile_image_90: PropTypes.string.isRequired,\n};\n","import { h } from 'preact';\nimport { useRef, useLayoutEffect, useReducer, useEffect } from 'preact/hooks';\nimport { forwardRef, createPortal } from 'preact/compat';\nimport { UserListItemContent } from './UserListItemContent';\nimport { useMediaQuery, BREAKPOINTS } from '@components/useMediaQuery';\nimport { isInViewport } from '@utilities/viewport';\n\nimport {\n useTextAreaAutoResize,\n getAutocompleteWordData,\n getCursorXY,\n} from '@utilities/textAreaUtils';\n\n// Used to ensure dropdown appears just below search text\nconst DROPDOWN_VERTICAL_OFFSET = '1.5rem';\nconst EMPTY_STATE_MESSAGE = 'No results found';\nconst MINIMUM_SEARCH_CHARS = 2;\n\nconst KEYS = {\n UP: 'ArrowUp',\n DOWN: 'ArrowDown',\n ENTER: 'Enter',\n ESCAPE: 'Escape',\n};\n\n/**\n * Helper function to copy all styles and attributes from the original textarea to the new autocomplete one\n *\n * @param {object} options\n * @param {element} options.originalTextArea The textarea DOM element that should be replaced/removed\n * @param {element} options.newTextArea The textarea DOM element containing the autocomplete functionality. It will receive all attributes and styles of the original node.\n */\nconst replaceTextArea = ({ originalTextArea, newTextArea }) => {\n const { attributes } = originalTextArea;\n const { cssText } = document.defaultView.getComputedStyle(\n originalTextArea,\n '',\n );\n\n // Make sure all attributes are copied over\n Object.keys(attributes).forEach((attributeKey) => {\n newTextArea.setAttribute(\n attributes[attributeKey].name,\n attributes[attributeKey].value,\n );\n });\n\n // Make sure all styles are copied over\n newTextArea.style.cssText = cssText;\n // Make sure no transition replays when the new textarea is mounted\n newTextArea.style.transition = 'none';\n // Copy any initial value\n newTextArea.value = originalTextArea.value;\n\n // We need to manually remove the original element, as Preact's diffing algorithm won't replace it in render\n originalTextArea.remove();\n};\n\n/**\n * Helper function to merge any additional ref passed to the textArea with the ref used internally by this component.\n *\n * @param {Array} refs Array of all references\n */\nconst mergeInputRefs = (refs) => (value) => {\n refs.forEach((ref) => {\n if (ref) {\n ref.current = value;\n }\n });\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case 'setIsComboboxMode':\n return { ...state, isComboboxMode: action.payload };\n case 'setSuggestions':\n return { ...state, suggestions: action.payload };\n case 'setDropdownPositionPoints':\n return { ...state, dropdownPositionPoints: action.payload };\n case 'setActiveDescendentIndex':\n return { ...state, activeDescendentIndex: action.payload };\n case 'setSuppressPopover':\n return { ...state, suppressPopover: action.payload };\n case 'setEmptyStateMessage':\n return { ...state, emptyStateMessage: action.payload };\n case 'setIgnoreBlur':\n return { ...state, ignoreBlur: action.payload };\n case 'exitComboboxMode':\n return {\n ...state,\n suggestions: [],\n activeDescendentIndex: null,\n isComboboxMode: false,\n };\n\n default:\n return state;\n }\n};\n\n/**\n * Renders a textarea with enhanced autocomplete functionality.\n * Autocomplete searching will start when user types the given trigger character, with suggestions fetched via fetchSuggestions callback.\n * Can optionally replace an existing textarea, passed as the replaceElement prop.\n */\nexport const AutocompleteTriggerTextArea = forwardRef(\n (\n {\n id,\n triggerCharacter,\n autoResize = false,\n onChange,\n onBlur,\n fetchSuggestions,\n searchInstructionsMessage,\n maxSuggestions,\n replaceElement,\n ...inputProps\n },\n forwardedRef,\n ) => {\n const [state, dispatch] = useReducer(reducer, {\n isComboboxMode: false,\n suggestions: [],\n dropdownPositionPoints: {\n x: 0,\n y: 0,\n },\n activeDescendentIndex: null,\n suppressPopover: false,\n emptyStateMessage: searchInstructionsMessage,\n ignoreBlur: false,\n });\n\n const {\n isComboboxMode,\n suggestions,\n dropdownPositionPoints,\n activeDescendentIndex,\n suppressPopover,\n emptyStateMessage,\n ignoreBlur,\n } = state;\n\n const isSmallScreen = useMediaQuery(`(max-width: ${BREAKPOINTS.Small}px)`);\n\n const inputRef = useRef(null);\n const popoverRef = useRef(null);\n const wrapperRef = useRef(null);\n\n const { setTextArea, setAdditionalElements } = useTextAreaAutoResize();\n\n useEffect(() => {\n if (activeDescendentIndex !== null) {\n const { current: popover } = popoverRef;\n const activeItem = popover?.querySelector('[aria-selected=\"true\"]');\n if (!popover || !activeItem) {\n return;\n }\n\n if (!isInViewport({ element: activeItem })) {\n activeItem.scrollIntoView(false);\n }\n }\n }, [activeDescendentIndex]);\n\n useLayoutEffect(() => {\n if (autoResize && inputRef.current) {\n setTextArea(inputRef.current);\n setAdditionalElements([wrapperRef.current]);\n }\n }, [autoResize, setTextArea, setAdditionalElements]);\n\n useLayoutEffect(() => {\n const { current: enhancedTextArea } = inputRef;\n\n if (enhancedTextArea && replaceElement) {\n replaceTextArea({\n originalTextArea: replaceElement,\n newTextArea: enhancedTextArea,\n });\n enhancedTextArea.focus({ preventScroll: true });\n }\n }, [replaceElement]);\n\n const handleInputChange = () => {\n const { current: currentInput } = inputRef;\n\n const {\n isTriggered: isSearching,\n indexOfAutocompleteStart: indexOfSearchStart,\n } = getAutocompleteWordData({\n textArea: currentInput,\n triggerCharacter,\n });\n\n dispatch({ type: 'setIsComboboxMode', payload: isSearching });\n\n if (!isSearching) {\n dispatch({ type: 'setSuggestions', payload: [] });\n return;\n }\n\n // Fetch suggestions\n const { selectionStart, value: currentValue } = currentInput;\n\n // Search term begins after the triggerCharacter\n const searchTermStartPosition = indexOfSearchStart + 1;\n\n const searchTerm = currentValue.substring(\n searchTermStartPosition,\n selectionStart,\n );\n\n if (searchTerm.length >= MINIMUM_SEARCH_CHARS) {\n fetchSuggestions(searchTerm).then((suggestions) => {\n if (maxSuggestions && suggestions.length > maxSuggestions) {\n dispatch({\n type: 'setSuggestions',\n payload: suggestions.slice(0, maxSuggestions),\n });\n return;\n }\n dispatch({ type: 'setSuggestions', payload: suggestions });\n });\n\n dispatch({\n type: 'setEmptyStateMessage',\n payload: EMPTY_STATE_MESSAGE,\n });\n } else {\n dispatch({\n type: 'setEmptyStateMessage',\n payload: searchInstructionsMessage,\n });\n }\n\n // Ensure dropdown is properly positioned\n const { x: cursorX, y } = getCursorXY({\n input: currentInput,\n selectionPoint: indexOfSearchStart,\n });\n const textAreaX = currentInput.offsetLeft;\n\n // On small screens always show dropdown at start of textarea\n const dropdownX = isSmallScreen ? textAreaX : cursorX;\n\n dispatch({\n type: 'setDropdownPositionPoints',\n payload: { x: dropdownX, y },\n });\n };\n\n const handleKeyDown = (e) => {\n // If we are not in combobox mode, ignore\n if (!isComboboxMode) {\n return;\n }\n\n switch (e.key) {\n case KEYS.DOWN:\n e.preventDefault();\n\n if (\n activeDescendentIndex !== null &&\n activeDescendentIndex < suggestions.length - 1\n ) {\n dispatch({\n type: 'setActiveDescendentIndex',\n payload: activeDescendentIndex + 1,\n });\n } else {\n dispatch({ type: 'setActiveDescendentIndex', payload: 0 });\n }\n break;\n case KEYS.UP:\n e.preventDefault();\n dispatch({\n type: 'setActiveDescendentIndex',\n payload:\n activeDescendentIndex >= 1\n ? activeDescendentIndex - 1\n : suggestions.length - 1,\n });\n\n break;\n case KEYS.ENTER:\n e.preventDefault();\n if (activeDescendentIndex !== null) {\n selectSuggestion(suggestions[activeDescendentIndex]);\n }\n break;\n case KEYS.ESCAPE:\n e.preventDefault();\n // Temporarily close the popover until next keypress\n dispatch({ type: 'setSuppressPopover', payload: true });\n\n return;\n }\n dispatch({ type: 'setSuppressPopover', payload: false });\n };\n\n // If a user clicks away from an in-progress search, we can assume they no longer wish to keep searching\n const handleTextAreaClicked = () => dispatch({ type: 'exitComboboxMode' });\n\n // The textarea blurs when an option is clicked from the dropdown suggestions, in which case we don't want to\n // trigger the behaviour for the user having left the textarea completely, hence the `ignoreBlur` boolean.\n const handleBlur = () => {\n if (!ignoreBlur) {\n dispatch({ type: 'exitComboboxMode' });\n return;\n }\n dispatch({ type: 'setIgnoreBlur', payload: false });\n };\n\n const selectSuggestion = (suggestion) => {\n const { current: currentInput } = inputRef;\n const { indexOfAutocompleteStart: indexOfSearchStart } =\n getAutocompleteWordData({\n textArea: currentInput,\n triggerCharacter,\n });\n\n const currentSearchTerm = currentInput.value.substring(\n indexOfSearchStart,\n currentInput.selectionStart,\n );\n\n // We try to update the textArea with document.execCommand (so that the change is added to undo queue),\n // which requires the contentEditable attribute to be true. The value is later toggled back to 'false'.\n currentInput.contentEditable = 'true';\n // Input blurs when user clicks an option with the mouse\n currentInput.focus();\n currentInput.setSelectionRange(\n indexOfSearchStart,\n indexOfSearchStart + currentSearchTerm.length,\n );\n\n try {\n document.execCommand(\n 'insertText',\n false,\n `${triggerCharacter}${suggestion.value} `,\n );\n } catch {\n // In the event of any error using execCommand, we make sure the text area updates (but undo queue will not)\n const { value: currentValue } = currentInput;\n const newTextAreaValue = `${currentValue.substring(\n 0,\n indexOfSearchStart,\n )}${triggerCharacter}${suggestion.value}${currentValue.substring(\n indexOfSearchStart + currentSearchTerm.length,\n )} `;\n currentInput.value = newTextAreaValue;\n }\n\n currentInput.contentEditable = 'false';\n\n // Clear suggestions\n dispatch({ type: 'exitComboboxMode' });\n };\n\n const comboboxProps = isComboboxMode\n ? {\n role: 'combobox',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': isComboboxMode,\n 'aria-owns': `${id}-listbox`,\n 'aria-activedescendant': `${id}-suggestion-${activeDescendentIndex}`,\n }\n : {};\n\n return (\n \n {/* We use an assertive live region to alert screen reader users typing will now result in a search */}\n \n {isComboboxMode ? searchInstructionsMessage : ''}\n \n\n {\n onChange?.(e);\n handleInputChange(e);\n }}\n onBlur={(e) => {\n onBlur?.(e);\n handleBlur();\n }}\n onKeyDown={handleKeyDown}\n onClick={handleTextAreaClicked}\n />\n {isComboboxMode && !suppressPopover\n ? createPortal(\n \n {suggestions && suggestions.length > 0 ? (\n
    \n {suggestions.map((suggestion, index) => (\n // Disabled as the key handler is attached to the textarea\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n selectSuggestion(suggestion)}\n onMouseDown={() =>\n dispatch({ type: 'setIgnoreBlur', payload: true })\n }\n >\n \n \n ))}\n
\n ) : (\n \n {emptyStateMessage}\n \n )}\n ,\n document.querySelector('body'),\n )\n : null}\n \n );\n },\n);\n","import { h } from 'preact';\nimport PropTypes from 'prop-types';\nimport { ButtonNew as Button } from '@crayons';\nimport CopyIcon from '@images/copy.svg';\n\nfunction linksToMarkdownForm(imageLinks) {\n return imageLinks\n .map((imageLink) => `![Image description](${imageLink})`)\n .join('\\n');\n}\n\nexport const ClipboardButton = ({\n onCopy,\n imageUrls,\n showCopyMessage = false,\n}) => (\n
\n \n \n {showCopyMessage ? 'Copied!' : 'Copy...'}\n \n
\n);\n\nClipboardButton.displayName = 'ClipboardButton';\n\nClipboardButton.propTypes = {\n onCopy: PropTypes.func.isRequired,\n imageUrls: PropTypes.arrayOf(PropTypes.string).isRequired,\n showCopyMessage: PropTypes.bool.isRequired,\n};\n","import { Fragment, h } from 'preact';\nimport { useReducer, useEffect, useState } from 'preact/hooks';\nimport { generateMainImage } from '../actions';\nimport { validateFileInputs } from '../../packs/validateFileInputs';\nimport { addSnackbarItem } from '../../Snackbar';\nimport { ClipboardButton } from './ClipboardButton';\nimport { copyToClipboard, isNativeIOS } from '@utilities/runtime';\nimport { ButtonNew as Button, Spinner, Icon } from '@crayons';\nimport ImageIcon from '@images/image.svg';\nimport CancelIcon from '@images/x.svg';\n\nconst SpinnerOrCancel = () => (\n \n \n \n \n);\n\nfunction imageUploaderReducer(state, action) {\n const { type, payload } = action;\n\n switch (type) {\n case 'uploading_image':\n return {\n ...state,\n uploadErrorMessage: null,\n uploadingImage: true,\n insertionImageUrls: [],\n };\n\n case 'upload_error':\n return {\n ...state,\n insertionImageUrls: [],\n uploadErrorMessage: payload.errorMessage,\n uploadingImage: false,\n };\n\n case 'upload_image_success':\n return {\n ...state,\n insertionImageUrls: payload.insertionImageUrls,\n uploadingImage: false,\n uploadErrorMessage: null,\n };\n\n default:\n return state;\n }\n}\n\nfunction initNativeImagePicker(e) {\n e.preventDefault();\n window.ForemMobile?.injectNativeMessage('imageUpload', {\n action: 'imageUpload',\n });\n}\n\nconst NativeIosV1ImageUpload = ({ uploadingImage }) => (\n \n {!uploadingImage && (\n \n Upload image\n \n )}\n \n);\n\n/**\n * The V2 editor uses a toolbar button press to trigger a visually hidden file input.\n *\n * @param {object} props\n * @param {object} props.buttonProps Any props to be added to the trigger button\n * @param {function} props.handleInsertionImageUpload Callback to handle image upload\n * @param {boolean} props.uploadingImage Is an image currently being uploaded\n * @param {boolean} props.useNativeUpload Should iOS native upload functionality be used\n * @param {function} props.handleNativeMessage Callback for iOS native upload message handling\n * @param {string} props.uploadErrorMessage Error message to be displayed\n *\n */\nconst V2EditorImageUpload = ({\n buttonProps,\n handleInsertionImageUpload,\n uploadingImage,\n useNativeUpload,\n handleNativeMessage,\n uploadErrorMessage,\n}) => {\n useEffect(() => {\n if (uploadErrorMessage) {\n addSnackbarItem({\n message: uploadErrorMessage,\n addCloseButton: true,\n });\n }\n }, [uploadErrorMessage]);\n\n const [abortRequestController, setAbortRequestController] = useState(null);\n\n const startNewRequest = (e) => {\n const controller = new AbortController();\n setAbortRequestController(controller);\n handleInsertionImageUpload(e, controller.signal);\n };\n\n const cancelRequest = () => {\n abortRequestController.abort();\n setAbortRequestController(null);\n };\n\n const { tooltip: actionTooltip } = buttonProps;\n\n return (\n \n {useNativeUpload ? (\n \n ) : (\n \n )}\n {uploadingImage ? (\n \n ) : (\n {\n buttonProps.onClick?.(e);\n useNativeUpload\n ? initNativeImagePicker(e)\n : document.getElementById('image-upload-field').click();\n }}\n aria-label=\"Upload image\"\n tooltip={actionTooltip}\n />\n )}\n \n );\n};\n\n/**\n * The V1 Editor uses a more detailed image upload UI, displaying errors and markdown text inline\n *\n * @param {object} props\n * @param {boolean} props.uploadingImage Is an image currently being uploaded\n * @param {boolean} props.useNativeUpload Should iOS native upload functionality be used\n * @param {function} props.handleNativeMessage Callback for iOS native upload message handling\n * @param {function} props.handleInsertionImageUpload Callback to handle image upload\n * @param {string[]} props.insertionImageUrls URLs of successfully uploaded images\n * @param {string} props.uploadErrorMessage Error message to be displayed\n *\n * @returns\n */\nconst V1EditorImageUpload = ({\n uploadingImage,\n useNativeUpload,\n handleNativeMessage,\n handleInsertionImageUpload,\n insertionImageUrls,\n uploadErrorMessage,\n}) => {\n const [showCopiedImageText, setShowCopiedImageText] = useState(false);\n\n useEffect(() => {\n if (uploadingImage) {\n setShowCopiedImageText(false);\n }\n }, [uploadingImage]);\n\n const copyText = () => {\n const imageMarkdownInput = document.getElementById(\n 'image-markdown-copy-link-input',\n );\n\n copyToClipboard(imageMarkdownInput.value)\n .then(() => {\n setShowCopiedImageText(true);\n })\n .catch((error) => {\n addSnackbarItem({\n message: error,\n addCloseButton: true,\n });\n Honeybadger.notify(error);\n });\n };\n return (\n
\n {uploadingImage && (\n \n Uploading...\n \n )}\n\n {useNativeUpload ? (\n \n ) : uploadingImage ? null : (\n \n \n \n )}\n\n {insertionImageUrls.length > 0 && (\n \n )}\n\n {uploadErrorMessage ? (\n {uploadErrorMessage}\n ) : null}\n
\n );\n};\n\n/**\n * Image Uploader feature for editor forms\n *\n * @param {object} props\n * @param {string} props.editorVersion The current editor version being used\n * @param {object} props.buttonProps Any additional props to be added to upload image button (v2 editor only)\n * @param {function} props.onImageUploadStart Callback for when image upload begins\n * @param {function} props.onImageUploadSuccess Callback for when image upload succeeds\n * @param {function} props.onImageUploadError Callback for when image upload fails\n *\n */\nexport const ImageUploader = ({\n editorVersion = 'v2',\n buttonProps = {},\n onImageUploadStart,\n onImageUploadSuccess,\n onImageUploadError,\n}) => {\n useEffect(() => {\n // Native Bridge messages come through ForemMobile events\n document.addEventListener('ForemMobile', handleNativeMessage);\n\n // Cleanup afterwards\n return () =>\n document.removeEventListener('ForemMobile', handleNativeMessage);\n });\n\n const [state, dispatch] = useReducer(imageUploaderReducer, {\n insertionImageUrls: [],\n uploadErrorMessage: null,\n uploadingImage: false,\n });\n\n const { uploadingImage, uploadErrorMessage, insertionImageUrls } = state;\n\n function onUploadError(error) {\n onImageUploadError?.();\n dispatch({\n type: 'upload_error',\n payload: { errorMessage: error.message },\n });\n }\n\n function handleInsertionImageUpload(e, abortSignal) {\n const { files } = e.target;\n\n if (files.length > 0 && validateFileInputs()) {\n const payload = { image: files };\n dispatch({\n type: 'uploading_image',\n });\n\n onImageUploadStart?.();\n generateMainImage({\n payload,\n successCb: handleInsertImageUploadSuccess,\n failureCb: onUploadError,\n signal: abortSignal,\n });\n }\n }\n\n function handleInsertImageUploadSuccess(response) {\n dispatch({\n type: 'upload_image_success',\n payload: { insertionImageUrls: response.links },\n });\n\n onImageUploadSuccess?.(`![Image description](${response.links})`);\n\n document.getElementById('upload-success-info').innerText =\n 'image upload complete';\n }\n\n function handleNativeMessage(e) {\n const message = JSON.parse(e.detail);\n if (message.namespace !== 'imageUpload') {\n return;\n }\n\n switch (message.action) {\n case 'uploading':\n onImageUploadStart?.();\n dispatch({\n type: 'uploading_image',\n });\n break;\n case 'error':\n onImageUploadError?.();\n dispatch({\n type: 'upload_error',\n payload: { errorMessage: message.error },\n });\n break;\n case 'success':\n onImageUploadSuccess?.(`![Image description](${message.link})`);\n dispatch({\n type: 'upload_image_success',\n payload: { insertionImageUrls: [message.link] },\n });\n break;\n }\n }\n\n // When the component is rendered in an environment that supports a native\n // image picker for image upload we want to add the aria-label attr and the\n // onClick event to the UI button. This event will kick off the native UX.\n // The props are unwrapped (using spread operator) in the button below\n const useNativeUpload = isNativeIOS('imageUpload');\n\n return (\n \n \n\n {editorVersion === 'v2' ? (\n \n ) : (\n \n )}\n \n );\n};\n\nImageUploader.displayName = 'ImageUploader';\n","const MAX_RETRIES = 30;\nconst RETRY_INTERVAL = 250;\n\nexport function getCSRFToken() {\n const promise = new Promise((resolve, reject) => {\n // eslint-disable-next-line consistent-return\n let i = 0;\n const waitingOnCSRF = setInterval(() => {\n const metaTag = document.querySelector(\"meta[name='csrf-token']\");\n i += 1;\n\n if (metaTag) {\n clearInterval(waitingOnCSRF);\n const authToken = metaTag.getAttribute('content');\n return resolve(authToken);\n }\n\n if (i === MAX_RETRIES) {\n clearInterval(waitingOnCSRF);\n Honeybadger.notify(\n `Could not locate CSRF metatag ${JSON.stringify(\n localStorage.current_user,\n )}`,\n );\n return reject(new Error('Could not locate CSRF meta tag on the page.'));\n }\n }, RETRY_INTERVAL);\n });\n return promise;\n}\n","import { getCSRFToken } from './csrfToken';\n\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","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\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","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var map = {\n\t\"./af\": 45,\n\t\"./af.js\": 45,\n\t\"./ar\": 46,\n\t\"./ar-dz\": 47,\n\t\"./ar-dz.js\": 47,\n\t\"./ar-kw\": 48,\n\t\"./ar-kw.js\": 48,\n\t\"./ar-ly\": 49,\n\t\"./ar-ly.js\": 49,\n\t\"./ar-ma\": 50,\n\t\"./ar-ma.js\": 50,\n\t\"./ar-sa\": 51,\n\t\"./ar-sa.js\": 51,\n\t\"./ar-tn\": 52,\n\t\"./ar-tn.js\": 52,\n\t\"./ar.js\": 46,\n\t\"./az\": 53,\n\t\"./az.js\": 53,\n\t\"./be\": 54,\n\t\"./be.js\": 54,\n\t\"./bg\": 55,\n\t\"./bg.js\": 55,\n\t\"./bm\": 56,\n\t\"./bm.js\": 56,\n\t\"./bn\": 57,\n\t\"./bn-bd\": 58,\n\t\"./bn-bd.js\": 58,\n\t\"./bn.js\": 57,\n\t\"./bo\": 59,\n\t\"./bo.js\": 59,\n\t\"./br\": 60,\n\t\"./br.js\": 60,\n\t\"./bs\": 61,\n\t\"./bs.js\": 61,\n\t\"./ca\": 62,\n\t\"./ca.js\": 62,\n\t\"./cs\": 63,\n\t\"./cs.js\": 63,\n\t\"./cv\": 64,\n\t\"./cv.js\": 64,\n\t\"./cy\": 65,\n\t\"./cy.js\": 65,\n\t\"./da\": 66,\n\t\"./da.js\": 66,\n\t\"./de\": 67,\n\t\"./de-at\": 68,\n\t\"./de-at.js\": 68,\n\t\"./de-ch\": 69,\n\t\"./de-ch.js\": 69,\n\t\"./de.js\": 67,\n\t\"./dv\": 70,\n\t\"./dv.js\": 70,\n\t\"./el\": 71,\n\t\"./el.js\": 71,\n\t\"./en-au\": 72,\n\t\"./en-au.js\": 72,\n\t\"./en-ca\": 73,\n\t\"./en-ca.js\": 73,\n\t\"./en-gb\": 74,\n\t\"./en-gb.js\": 74,\n\t\"./en-ie\": 75,\n\t\"./en-ie.js\": 75,\n\t\"./en-il\": 76,\n\t\"./en-il.js\": 76,\n\t\"./en-in\": 77,\n\t\"./en-in.js\": 77,\n\t\"./en-nz\": 78,\n\t\"./en-nz.js\": 78,\n\t\"./en-sg\": 79,\n\t\"./en-sg.js\": 79,\n\t\"./eo\": 80,\n\t\"./eo.js\": 80,\n\t\"./es\": 81,\n\t\"./es-do\": 82,\n\t\"./es-do.js\": 82,\n\t\"./es-mx\": 83,\n\t\"./es-mx.js\": 83,\n\t\"./es-us\": 84,\n\t\"./es-us.js\": 84,\n\t\"./es.js\": 81,\n\t\"./et\": 85,\n\t\"./et.js\": 85,\n\t\"./eu\": 86,\n\t\"./eu.js\": 86,\n\t\"./fa\": 87,\n\t\"./fa.js\": 87,\n\t\"./fi\": 88,\n\t\"./fi.js\": 88,\n\t\"./fil\": 89,\n\t\"./fil.js\": 89,\n\t\"./fo\": 90,\n\t\"./fo.js\": 90,\n\t\"./fr\": 91,\n\t\"./fr-ca\": 92,\n\t\"./fr-ca.js\": 92,\n\t\"./fr-ch\": 93,\n\t\"./fr-ch.js\": 93,\n\t\"./fr.js\": 91,\n\t\"./fy\": 94,\n\t\"./fy.js\": 94,\n\t\"./ga\": 95,\n\t\"./ga.js\": 95,\n\t\"./gd\": 96,\n\t\"./gd.js\": 96,\n\t\"./gl\": 97,\n\t\"./gl.js\": 97,\n\t\"./gom-deva\": 98,\n\t\"./gom-deva.js\": 98,\n\t\"./gom-latn\": 99,\n\t\"./gom-latn.js\": 99,\n\t\"./gu\": 100,\n\t\"./gu.js\": 100,\n\t\"./he\": 101,\n\t\"./he.js\": 101,\n\t\"./hi\": 102,\n\t\"./hi.js\": 102,\n\t\"./hr\": 103,\n\t\"./hr.js\": 103,\n\t\"./hu\": 104,\n\t\"./hu.js\": 104,\n\t\"./hy-am\": 105,\n\t\"./hy-am.js\": 105,\n\t\"./id\": 106,\n\t\"./id.js\": 106,\n\t\"./is\": 107,\n\t\"./is.js\": 107,\n\t\"./it\": 108,\n\t\"./it-ch\": 109,\n\t\"./it-ch.js\": 109,\n\t\"./it.js\": 108,\n\t\"./ja\": 110,\n\t\"./ja.js\": 110,\n\t\"./jv\": 111,\n\t\"./jv.js\": 111,\n\t\"./ka\": 112,\n\t\"./ka.js\": 112,\n\t\"./kk\": 113,\n\t\"./kk.js\": 113,\n\t\"./km\": 114,\n\t\"./km.js\": 114,\n\t\"./kn\": 115,\n\t\"./kn.js\": 115,\n\t\"./ko\": 116,\n\t\"./ko.js\": 116,\n\t\"./ku\": 117,\n\t\"./ku.js\": 117,\n\t\"./ky\": 118,\n\t\"./ky.js\": 118,\n\t\"./lb\": 119,\n\t\"./lb.js\": 119,\n\t\"./lo\": 120,\n\t\"./lo.js\": 120,\n\t\"./lt\": 121,\n\t\"./lt.js\": 121,\n\t\"./lv\": 122,\n\t\"./lv.js\": 122,\n\t\"./me\": 123,\n\t\"./me.js\": 123,\n\t\"./mi\": 124,\n\t\"./mi.js\": 124,\n\t\"./mk\": 125,\n\t\"./mk.js\": 125,\n\t\"./ml\": 126,\n\t\"./ml.js\": 126,\n\t\"./mn\": 127,\n\t\"./mn.js\": 127,\n\t\"./mr\": 128,\n\t\"./mr.js\": 128,\n\t\"./ms\": 129,\n\t\"./ms-my\": 130,\n\t\"./ms-my.js\": 130,\n\t\"./ms.js\": 129,\n\t\"./mt\": 131,\n\t\"./mt.js\": 131,\n\t\"./my\": 132,\n\t\"./my.js\": 132,\n\t\"./nb\": 133,\n\t\"./nb.js\": 133,\n\t\"./ne\": 134,\n\t\"./ne.js\": 134,\n\t\"./nl\": 135,\n\t\"./nl-be\": 136,\n\t\"./nl-be.js\": 136,\n\t\"./nl.js\": 135,\n\t\"./nn\": 137,\n\t\"./nn.js\": 137,\n\t\"./oc-lnc\": 138,\n\t\"./oc-lnc.js\": 138,\n\t\"./pa-in\": 139,\n\t\"./pa-in.js\": 139,\n\t\"./pl\": 140,\n\t\"./pl.js\": 140,\n\t\"./pt\": 141,\n\t\"./pt-br\": 142,\n\t\"./pt-br.js\": 142,\n\t\"./pt.js\": 141,\n\t\"./ro\": 143,\n\t\"./ro.js\": 143,\n\t\"./ru\": 144,\n\t\"./ru.js\": 144,\n\t\"./sd\": 145,\n\t\"./sd.js\": 145,\n\t\"./se\": 146,\n\t\"./se.js\": 146,\n\t\"./si\": 147,\n\t\"./si.js\": 147,\n\t\"./sk\": 148,\n\t\"./sk.js\": 148,\n\t\"./sl\": 149,\n\t\"./sl.js\": 149,\n\t\"./sq\": 150,\n\t\"./sq.js\": 150,\n\t\"./sr\": 151,\n\t\"./sr-cyrl\": 152,\n\t\"./sr-cyrl.js\": 152,\n\t\"./sr.js\": 151,\n\t\"./ss\": 153,\n\t\"./ss.js\": 153,\n\t\"./sv\": 154,\n\t\"./sv.js\": 154,\n\t\"./sw\": 155,\n\t\"./sw.js\": 155,\n\t\"./ta\": 156,\n\t\"./ta.js\": 156,\n\t\"./te\": 157,\n\t\"./te.js\": 157,\n\t\"./tet\": 158,\n\t\"./tet.js\": 158,\n\t\"./tg\": 159,\n\t\"./tg.js\": 159,\n\t\"./th\": 160,\n\t\"./th.js\": 160,\n\t\"./tk\": 161,\n\t\"./tk.js\": 161,\n\t\"./tl-ph\": 162,\n\t\"./tl-ph.js\": 162,\n\t\"./tlh\": 163,\n\t\"./tlh.js\": 163,\n\t\"./tr\": 164,\n\t\"./tr.js\": 164,\n\t\"./tzl\": 165,\n\t\"./tzl.js\": 165,\n\t\"./tzm\": 166,\n\t\"./tzm-latn\": 167,\n\t\"./tzm-latn.js\": 167,\n\t\"./tzm.js\": 166,\n\t\"./ug-cn\": 168,\n\t\"./ug-cn.js\": 168,\n\t\"./uk\": 169,\n\t\"./uk.js\": 169,\n\t\"./ur\": 170,\n\t\"./ur.js\": 170,\n\t\"./uz\": 171,\n\t\"./uz-latn\": 172,\n\t\"./uz-latn.js\": 172,\n\t\"./uz.js\": 171,\n\t\"./vi\": 173,\n\t\"./vi.js\": 173,\n\t\"./x-pseudo\": 174,\n\t\"./x-pseudo.js\": 174,\n\t\"./yo\": 175,\n\t\"./yo.js\": 175,\n\t\"./zh-cn\": 176,\n\t\"./zh-cn.js\": 176,\n\t\"./zh-hk\": 177,\n\t\"./zh-hk.js\": 177,\n\t\"./zh-mo\": 178,\n\t\"./zh-mo.js\": 178,\n\t\"./zh-tw\": 179,\n\t\"./zh-tw.js\": 179\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 216;","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","import uniq from \"lodash/uniq\";\nexport const defaultLocaleResolver = (i18n, locale) => {\n const locales = [];\n const list = [];\n locales.push(locale);\n if (!locale) {\n locales.push(i18n.locale);\n }\n if (i18n.enableFallback) {\n locales.push(i18n.defaultLocale);\n }\n locales\n .filter(Boolean)\n .map((entry) => entry.toString())\n .forEach(function (currentLocale) {\n if (!list.includes(currentLocale)) {\n list.push(currentLocale);\n }\n if (!i18n.enableFallback) {\n return;\n }\n const codes = currentLocale.split(\"-\");\n if (codes.length === 3) {\n list.push(`${codes[0]}-${codes[1]}`);\n }\n list.push(codes[0]);\n });\n return uniq(list);\n};\nexport class Locales {\n constructor(i18n) {\n this.i18n = i18n;\n this.registry = {};\n this.register(\"default\", defaultLocaleResolver);\n }\n register(locale, localeResolver) {\n if (typeof localeResolver !== \"function\") {\n const result = localeResolver;\n localeResolver = (() => result);\n }\n this.registry[locale] = localeResolver;\n }\n get(locale) {\n let locales = this.registry[locale] ||\n this.registry[this.i18n.locale] ||\n this.registry.default;\n if (typeof locales === \"function\") {\n locales = locales(this.i18n, locale);\n }\n if (!(locales instanceof Array)) {\n locales = [locales];\n }\n return locales;\n }\n}\n//# sourceMappingURL=Locales.js.map","export const defaultPluralizer = (_i18n, count) => {\n switch (count) {\n case 0:\n return [\"zero\", \"other\"];\n case 1:\n return [\"one\"];\n default:\n return [\"other\"];\n }\n};\nexport class Pluralization {\n constructor(i18n) {\n this.i18n = i18n;\n this.registry = {};\n this.register(\"default\", defaultPluralizer);\n }\n register(locale, pluralizer) {\n this.registry[locale] = pluralizer;\n }\n get(locale) {\n return (this.registry[locale] ||\n this.registry[this.i18n.locale] ||\n this.registry[\"default\"]);\n }\n}\n//# sourceMappingURL=Pluralization.js.map","import camelCase from \"lodash/camelCase\";\nexport function camelCaseKeys(target) {\n if (!target) {\n return {};\n }\n return Object.keys(target).reduce((buffer, key) => {\n buffer[camelCase(key)] = target[key];\n return buffer;\n }, {});\n}\n//# sourceMappingURL=camelCaseKeys.js.map","export function isSet(value) {\n return value !== undefined && value !== null;\n}\n//# sourceMappingURL=isSet.js.map","import BigNumber from \"bignumber.js\";\nvar RoundingModeMap;\n(function (RoundingModeMap) {\n RoundingModeMap[RoundingModeMap[\"up\"] = BigNumber.ROUND_UP] = \"up\";\n RoundingModeMap[RoundingModeMap[\"down\"] = BigNumber.ROUND_DOWN] = \"down\";\n RoundingModeMap[RoundingModeMap[\"truncate\"] = BigNumber.ROUND_DOWN] = \"truncate\";\n RoundingModeMap[RoundingModeMap[\"halfUp\"] = BigNumber.ROUND_HALF_UP] = \"halfUp\";\n RoundingModeMap[RoundingModeMap[\"default\"] = BigNumber.ROUND_HALF_UP] = \"default\";\n RoundingModeMap[RoundingModeMap[\"halfDown\"] = BigNumber.ROUND_HALF_DOWN] = \"halfDown\";\n RoundingModeMap[RoundingModeMap[\"halfEven\"] = BigNumber.ROUND_HALF_EVEN] = \"halfEven\";\n RoundingModeMap[RoundingModeMap[\"banker\"] = BigNumber.ROUND_HALF_EVEN] = \"banker\";\n RoundingModeMap[RoundingModeMap[\"ceiling\"] = BigNumber.ROUND_CEIL] = \"ceiling\";\n RoundingModeMap[RoundingModeMap[\"ceil\"] = BigNumber.ROUND_CEIL] = \"ceil\";\n RoundingModeMap[RoundingModeMap[\"floor\"] = BigNumber.ROUND_FLOOR] = \"floor\";\n})(RoundingModeMap || (RoundingModeMap = {}));\nexport function expandRoundMode(roundMode) {\n var _a;\n return ((_a = RoundingModeMap[roundMode]) !== null && _a !== void 0 ? _a : RoundingModeMap.default);\n}\n//# sourceMappingURL=expandRoundMode.js.map","import BigNumber from \"bignumber.js\";\nimport { expandRoundMode } from \"./expandRoundMode\";\nfunction digitCount(numeric) {\n if (numeric.isZero()) {\n return 1;\n }\n return Math.floor(Math.log10(numeric.abs().toNumber()) + 1);\n}\nfunction getAbsolutePrecision(numeric, { precision, significant }) {\n if (significant && precision !== null && precision > 0) {\n return precision - digitCount(numeric);\n }\n return precision;\n}\nexport function roundNumber(numeric, options) {\n const precision = getAbsolutePrecision(numeric, options);\n if (precision === null) {\n return numeric.toString();\n }\n const roundMode = expandRoundMode(options.roundMode);\n if (precision >= 0) {\n return numeric.toFixed(precision, roundMode);\n }\n const rounder = Math.pow(10, Math.abs(precision));\n numeric = new BigNumber(numeric.div(rounder).toFixed(0, roundMode)).times(rounder);\n return numeric.toString();\n}\n//# sourceMappingURL=roundNumber.js.map","import BigNumber from \"bignumber.js\";\nimport repeat from \"lodash/repeat\";\nimport { roundNumber } from \"./roundNumber\";\nfunction replaceInFormat(format, { formattedNumber, unit }) {\n return format.replace(\"%n\", formattedNumber).replace(\"%u\", unit);\n}\nfunction computeSignificand({ significand, whole, precision, }) {\n if (whole === \"0\" || precision === null) {\n return significand;\n }\n const limit = Math.max(0, precision - whole.length);\n return (significand !== null && significand !== void 0 ? significand : \"\").substr(0, limit);\n}\nexport function formatNumber(input, options) {\n var _a, _b, _c;\n const originalNumber = new BigNumber(input);\n if (options.raise && !originalNumber.isFinite()) {\n throw new Error(`\"${input}\" is not a valid numeric value`);\n }\n const roundedNumber = roundNumber(originalNumber, options);\n const numeric = new BigNumber(roundedNumber);\n const isNegative = numeric.lt(0);\n const isZero = numeric.isZero();\n let [whole, significand] = roundedNumber.split(\".\");\n const buffer = [];\n let formattedNumber;\n const positiveFormat = (_a = options.format) !== null && _a !== void 0 ? _a : \"%n\";\n const negativeFormat = (_b = options.negativeFormat) !== null && _b !== void 0 ? _b : `-${positiveFormat}`;\n const format = isNegative && !isZero ? negativeFormat : positiveFormat;\n whole = whole.replace(\"-\", \"\");\n while (whole.length > 0) {\n buffer.unshift(whole.substr(Math.max(0, whole.length - 3), 3));\n whole = whole.substr(0, whole.length - 3);\n }\n whole = buffer.join(\"\");\n formattedNumber = buffer.join(options.delimiter);\n if (options.significant) {\n significand = computeSignificand({\n whole,\n significand,\n precision: options.precision,\n });\n }\n else {\n significand = significand !== null && significand !== void 0 ? significand : repeat(\"0\", (_c = options.precision) !== null && _c !== void 0 ? _c : 0);\n }\n if (options.stripInsignificantZeros && significand) {\n significand = significand.replace(/0+$/, \"\");\n }\n if (originalNumber.isNaN()) {\n formattedNumber = input.toString();\n }\n if (significand && originalNumber.isFinite()) {\n formattedNumber += (options.separator || \".\") + significand;\n }\n return replaceInFormat(format, {\n formattedNumber,\n unit: options.unit,\n });\n}\n//# sourceMappingURL=formatNumber.js.map","export function getFullScope(i18n, scope, options) {\n let result = \"\";\n if (scope instanceof String || typeof scope === \"string\") {\n result = scope;\n }\n if (scope instanceof Array) {\n result = scope.join(i18n.defaultSeparator);\n }\n if (options.scope) {\n result = [options.scope, result].join(i18n.defaultSeparator);\n }\n return result;\n}\n//# sourceMappingURL=getFullScope.js.map","export function inferType(instance) {\n var _a, _b;\n if (instance === null) {\n return \"null\";\n }\n const type = typeof instance;\n if (type !== \"object\") {\n return type;\n }\n return ((_b = (_a = instance === null || instance === void 0 ? void 0 : instance.constructor) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()) || \"object\";\n}\n//# sourceMappingURL=inferType.js.map","import { isSet } from \"./isSet\";\nexport function interpolate(i18n, message, options) {\n options = Object.keys(options).reduce((buffer, key) => {\n buffer[i18n.transformKey(key)] = options[key];\n return buffer;\n }, {});\n const matches = message.match(i18n.placeholder);\n if (!matches) {\n return message;\n }\n while (matches.length) {\n let value;\n const placeholder = matches.shift();\n const name = placeholder.replace(i18n.placeholder, \"$1\");\n if (isSet(options[name])) {\n value = options[name].toString().replace(/\\$/gm, \"_#$#_\");\n }\n else if (name in options) {\n value = i18n.nullPlaceholder(i18n, placeholder, message, options);\n }\n else {\n value = i18n.missingPlaceholder(i18n, placeholder, message, options);\n }\n const regex = new RegExp(placeholder.replace(/\\{/gm, \"\\\\{\").replace(/\\}/gm, \"\\\\}\"));\n message = message.replace(regex, value);\n }\n return message.replace(/_#\\$#_/g, \"$\");\n}\n//# sourceMappingURL=interpolate.js.map","import get from \"lodash/get\";\nimport { isSet } from \"./isSet\";\nimport { getFullScope } from \"./getFullScope\";\nimport { inferType } from \"./inferType\";\nexport function lookup(i18n, scope, options = {}) {\n options = Object.assign({}, options);\n const locale = \"locale\" in options ? options.locale : i18n.locale;\n const localeType = inferType(locale);\n const locales = i18n.locales\n .get(localeType === \"string\" ? locale : typeof locale)\n .slice();\n scope = getFullScope(i18n, scope, options)\n .split(i18n.defaultSeparator)\n .map((component) => i18n.transformKey(component))\n .join(\".\");\n const entries = locales.map((locale) => get(i18n.translations, [locale, scope].join(\".\")));\n entries.push(options.defaultValue);\n return entries.find((entry) => isSet(entry));\n}\n//# sourceMappingURL=lookup.js.map","import BigNumber from \"bignumber.js\";\nimport sortBy from \"lodash/sortBy\";\nimport zipObject from \"lodash/zipObject\";\nimport { getFullScope } from \"./getFullScope\";\nimport { lookup } from \"./lookup\";\nimport { roundNumber } from \"./roundNumber\";\nimport { inferType } from \"./inferType\";\nconst DECIMAL_UNITS = {\n \"0\": \"unit\",\n \"1\": \"ten\",\n \"2\": \"hundred\",\n \"3\": \"thousand\",\n \"6\": \"million\",\n \"9\": \"billion\",\n \"12\": \"trillion\",\n \"15\": \"quadrillion\",\n \"-1\": \"deci\",\n \"-2\": \"centi\",\n \"-3\": \"mili\",\n \"-6\": \"micro\",\n \"-9\": \"nano\",\n \"-12\": \"pico\",\n \"-15\": \"femto\",\n};\nconst INVERTED_DECIMAL_UNITS = zipObject(Object.values(DECIMAL_UNITS), Object.keys(DECIMAL_UNITS).map((key) => parseInt(key, 10)));\nexport function numberToHuman(i18n, input, options) {\n const roundOptions = {\n roundMode: options.roundMode,\n precision: options.precision,\n significant: options.significant,\n };\n let units;\n if (inferType(options.units) === \"string\") {\n const scope = options.units;\n units = lookup(i18n, scope);\n if (!units) {\n throw new Error(`The scope \"${i18n.locale}${i18n.defaultSeparator}${getFullScope(i18n, scope, {})}\" couldn't be found`);\n }\n }\n else {\n units = options.units;\n }\n let formattedNumber = roundNumber(new BigNumber(input), roundOptions);\n const unitExponents = (units) => sortBy(Object.keys(units).map((name) => INVERTED_DECIMAL_UNITS[name]), (numeric) => numeric * -1);\n const calculateExponent = (num, units) => {\n const exponent = num.isZero()\n ? 0\n : Math.floor(Math.log10(num.abs().toNumber()));\n return unitExponents(units).find((exp) => exponent >= exp) || 0;\n };\n const determineUnit = (units, exponent) => {\n const expName = DECIMAL_UNITS[exponent.toString()];\n return units[expName] || \"\";\n };\n const exponent = calculateExponent(new BigNumber(formattedNumber), units);\n const unit = determineUnit(units, exponent);\n formattedNumber = roundNumber(new BigNumber(formattedNumber).div(Math.pow(10, exponent)), roundOptions);\n if (options.stripInsignificantZeros) {\n let [whole, significand] = formattedNumber.split(\".\");\n significand = (significand || \"\").replace(/0+$/, \"\");\n formattedNumber = whole;\n if (significand) {\n formattedNumber += `${options.separator}${significand}`;\n }\n }\n return options.format\n .replace(\"%n\", formattedNumber || \"0\")\n .replace(\"%u\", unit)\n .trim();\n}\n//# sourceMappingURL=numberToHuman.js.map","import BigNumber from \"bignumber.js\";\nimport { roundNumber } from \"./roundNumber\";\nimport { expandRoundMode } from \"./expandRoundMode\";\nconst STORAGE_UNITS = [\"byte\", \"kb\", \"mb\", \"gb\", \"tb\", \"pb\", \"eb\"];\nexport function numberToHumanSize(i18n, input, options) {\n const roundMode = expandRoundMode(options.roundMode);\n const base = 1024;\n const num = new BigNumber(input).abs();\n const smallerThanBase = num.lt(base);\n let numberToBeFormatted;\n const computeExponent = (numeric, units) => {\n const max = units.length - 1;\n const exp = new BigNumber(Math.log(numeric.toNumber()))\n .div(Math.log(base))\n .integerValue(BigNumber.ROUND_DOWN)\n .toNumber();\n return Math.min(max, exp);\n };\n const storageUnitKey = (units) => {\n const keyEnd = smallerThanBase ? \"byte\" : units[exponent];\n return `number.human.storage_units.units.${keyEnd}`;\n };\n const exponent = computeExponent(num, STORAGE_UNITS);\n if (smallerThanBase) {\n numberToBeFormatted = num.integerValue();\n }\n else {\n numberToBeFormatted = new BigNumber(roundNumber(num.div(Math.pow(base, exponent)), {\n significant: options.significant,\n precision: options.precision,\n roundMode: options.roundMode,\n }));\n }\n const format = i18n.translate(\"number.human.storage_units.format\", {\n defaultValue: \"%n %u\",\n });\n const unit = i18n.translate(storageUnitKey(STORAGE_UNITS), {\n count: num.integerValue().toNumber(),\n });\n let formattedNumber = numberToBeFormatted.toFixed(options.precision, roundMode);\n if (options.stripInsignificantZeros) {\n formattedNumber = formattedNumber\n .replace(/(\\..*?)0+$/, \"$1\")\n .replace(/\\.$/, \"\");\n }\n return format.replace(\"%n\", formattedNumber).replace(\"%u\", unit);\n}\n//# sourceMappingURL=numberToHumanSize.js.map","export function parseDate(input) {\n if (input instanceof Date) {\n return input;\n }\n if (typeof input === \"number\") {\n const date = new Date();\n date.setTime(input);\n return date;\n }\n const matches = new String(input).match(/(\\d{4})-(\\d{2})-(\\d{2})(?:[ T](\\d{2}):(\\d{2}):(\\d{2})(?:[.,](\\d{1,3}))?)?(Z|\\+00:?00)?/);\n if (matches) {\n const parts = matches.slice(1, 8).map((match) => parseInt(match, 10) || 0);\n parts[1] -= 1;\n const [year, month, day, hour, minute, second, milliseconds] = parts;\n const timezone = matches[8];\n if (timezone) {\n return new Date(Date.UTC(year, month, day, hour, minute, second, milliseconds));\n }\n else {\n return new Date(year, month, day, hour, minute, second, milliseconds);\n }\n }\n if (input.match(/([A-Z][a-z]{2}) ([A-Z][a-z]{2}) (\\d+) (\\d+:\\d+:\\d+) ([+-]\\d+) (\\d+)/)) {\n const date = new Date();\n date.setTime(Date.parse([RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$6, RegExp.$4, RegExp.$5].join(\" \")));\n }\n const date = new Date();\n date.setTime(Date.parse(input));\n return date;\n}\n//# sourceMappingURL=parseDate.js.map","import { isSet } from \"./isSet\";\nimport { lookup } from \"./lookup\";\nexport function pluralize({ i18n, count, scope, options, baseScope, }) {\n options = Object.assign({}, options);\n let translations;\n let message;\n if (typeof scope === \"object\" && scope) {\n translations = scope;\n }\n else {\n translations = lookup(i18n, scope, options);\n }\n if (!translations) {\n return i18n.missingTranslation.get(scope, options);\n }\n const pluralizer = i18n.pluralization.get(options.locale);\n const keys = pluralizer(i18n, count);\n const missingKeys = [];\n while (keys.length) {\n const key = keys.shift();\n if (isSet(translations[key])) {\n message = translations[key];\n break;\n }\n missingKeys.push(key);\n }\n if (!isSet(message)) {\n return i18n.missingTranslation.get(baseScope.split(i18n.defaultSeparator).concat([missingKeys[0]]), options);\n }\n options.count = count;\n return i18n.interpolate(i18n, message, options);\n}\n//# sourceMappingURL=pluralize.js.map","import isArray from \"lodash/isArray\";\nimport isObject from \"lodash/isObject\";\nimport flattenDeep from \"lodash/flattenDeep\";\nclass PropertyFlatList {\n constructor(target) {\n this.target = target;\n }\n call() {\n const keys = flattenDeep(Object.keys(this.target).map((key) => this.compute(this.target[key], key)));\n keys.sort();\n return keys;\n }\n compute(value, path) {\n if (!isArray(value) && isObject(value)) {\n return Object.keys(value).map((key) => this.compute(value[key], `${path}.${key}`));\n }\n else {\n return path;\n }\n }\n}\nexport function propertyFlatList(target) {\n return new PropertyFlatList(target).call();\n}\n//# sourceMappingURL=propertyFlatList.js.map","const DEFAULT_OPTIONS = {\n meridian: { am: \"AM\", pm: \"PM\" },\n dayNames: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n abbrDayNames: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n monthNames: [\n null,\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n abbrMonthNames: [\n null,\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n};\nexport function strftime(date, format, options = {}) {\n const { abbrDayNames, dayNames, abbrMonthNames, monthNames, meridian: AM_PM, } = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n if (isNaN(date.getTime())) {\n throw new Error(\"strftime() requires a valid date object, but received an invalid date.\");\n }\n const weekDay = date.getDay();\n const day = date.getDate();\n const year = date.getFullYear();\n const month = date.getMonth() + 1;\n const hour = date.getHours();\n let hour12 = hour;\n const meridian = hour > 11 ? \"pm\" : \"am\";\n const secs = date.getSeconds();\n const mins = date.getMinutes();\n const offset = date.getTimezoneOffset();\n const absOffsetHours = Math.floor(Math.abs(offset / 60));\n const absOffsetMinutes = Math.abs(offset) - absOffsetHours * 60;\n const timezoneoffset = (offset > 0 ? \"-\" : \"+\") +\n (absOffsetHours.toString().length < 2\n ? \"0\" + absOffsetHours\n : absOffsetHours) +\n (absOffsetMinutes.toString().length < 2\n ? \"0\" + absOffsetMinutes\n : absOffsetMinutes);\n if (hour12 > 12) {\n hour12 = hour12 - 12;\n }\n else if (hour12 === 0) {\n hour12 = 12;\n }\n format = format.replace(\"%a\", abbrDayNames[weekDay]);\n format = format.replace(\"%A\", dayNames[weekDay]);\n format = format.replace(\"%b\", abbrMonthNames[month]);\n format = format.replace(\"%B\", monthNames[month]);\n format = format.replace(\"%d\", day.toString().padStart(2, \"0\"));\n format = format.replace(\"%e\", day.toString());\n format = format.replace(\"%-d\", day.toString());\n format = format.replace(\"%H\", hour.toString().padStart(2, \"0\"));\n format = format.replace(\"%-H\", hour.toString());\n format = format.replace(\"%k\", hour.toString());\n format = format.replace(\"%I\", hour12.toString().padStart(2, \"0\"));\n format = format.replace(\"%-I\", hour12.toString());\n format = format.replace(\"%l\", hour12.toString());\n format = format.replace(\"%m\", month.toString().padStart(2, \"0\"));\n format = format.replace(\"%-m\", month.toString());\n format = format.replace(\"%M\", mins.toString().padStart(2, \"0\"));\n format = format.replace(\"%-M\", mins.toString());\n format = format.replace(\"%p\", AM_PM[meridian]);\n format = format.replace(\"%P\", AM_PM[meridian].toLowerCase());\n format = format.replace(\"%S\", secs.toString().padStart(2, \"0\"));\n format = format.replace(\"%-S\", secs.toString());\n format = format.replace(\"%w\", weekDay.toString());\n format = format.replace(\"%y\", year.toString().padStart(2, \"0\").substr(-2));\n format = format.replace(\"%-y\", year.toString().padStart(2, \"0\").substr(-2).replace(/^0+/, \"\"));\n format = format.replace(\"%Y\", year.toString());\n format = format.replace(/%z/i, timezoneoffset);\n return format;\n}\n//# sourceMappingURL=strftime.js.map","import range from \"lodash/range\";\nimport { parseDate } from \"./parseDate\";\nconst within = (start, end, actual) => actual >= start && actual <= end;\nexport function timeAgoInWords(i18n, fromTime, toTime, options = {}) {\n const scope = options.scope || \"datetime.distance_in_words\";\n const t = (name, count = 0) => i18n.t(name, { count, scope });\n fromTime = parseDate(fromTime);\n toTime = parseDate(toTime);\n let fromInSeconds = fromTime.getTime() / 1000;\n let toInSeconds = toTime.getTime() / 1000;\n if (fromInSeconds > toInSeconds) {\n [fromTime, toTime, fromInSeconds, toInSeconds] = [\n toTime,\n fromTime,\n toInSeconds,\n fromInSeconds,\n ];\n }\n const distanceInSeconds = Math.round(toInSeconds - fromInSeconds);\n const distanceInMinutes = Math.round((toInSeconds - fromInSeconds) / 60);\n const distanceInHours = distanceInMinutes / 60;\n const distanceInDays = distanceInHours / 24;\n const distanceInHoursRounded = Math.round(distanceInMinutes / 60);\n const distanceInDaysRounded = Math.round(distanceInDays);\n const distanceInMonthsRounded = Math.round(distanceInDaysRounded / 30);\n if (within(0, 1, distanceInMinutes)) {\n if (!options.includeSeconds) {\n return distanceInMinutes === 0\n ? t(\"less_than_x_minutes\", 1)\n : t(\"x_minutes\", distanceInMinutes);\n }\n if (within(0, 4, distanceInSeconds)) {\n return t(\"less_than_x_seconds\", 5);\n }\n if (within(5, 9, distanceInSeconds)) {\n return t(\"less_than_x_seconds\", 10);\n }\n if (within(10, 19, distanceInSeconds)) {\n return t(\"less_than_x_seconds\", 20);\n }\n if (within(20, 39, distanceInSeconds)) {\n return t(\"half_a_minute\");\n }\n if (within(40, 59, distanceInSeconds)) {\n return t(\"less_than_x_minutes\", 1);\n }\n return t(\"x_minutes\", 1);\n }\n if (within(2, 44, distanceInMinutes)) {\n return t(\"x_minutes\", distanceInMinutes);\n }\n if (within(45, 89, distanceInMinutes)) {\n return t(\"about_x_hours\", 1);\n }\n if (within(90, 1439, distanceInMinutes)) {\n return t(\"about_x_hours\", distanceInHoursRounded);\n }\n if (within(1440, 2519, distanceInMinutes)) {\n return t(\"x_days\", 1);\n }\n if (within(2520, 43199, distanceInMinutes)) {\n return t(\"x_days\", distanceInDaysRounded);\n }\n if (within(43200, 86399, distanceInMinutes)) {\n return t(\"about_x_months\", Math.round(distanceInMinutes / 43200));\n }\n if (within(86400, 525599, distanceInMinutes)) {\n return t(\"x_months\", distanceInMonthsRounded);\n }\n let fromYear = fromTime.getFullYear();\n if (fromTime.getMonth() + 1 >= 3) {\n fromYear += 1;\n }\n let toYear = toTime.getFullYear();\n if (toTime.getMonth() + 1 < 3) {\n toYear -= 1;\n }\n const leapYears = fromYear > toYear\n ? 0\n : range(fromYear, toYear).filter((year) => new Date(year, 1, 29).getMonth() == 1).length;\n const minutesInYear = 525600;\n const minuteOffsetForLeapYear = leapYears * 1440;\n const minutesWithOffset = distanceInMinutes - minuteOffsetForLeapYear;\n const distanceInYears = Math.trunc(minutesWithOffset / minutesInYear);\n const diff = parseFloat((minutesWithOffset / minutesInYear - distanceInYears).toPrecision(3));\n if (diff < 0.25) {\n return t(\"about_x_years\", distanceInYears);\n }\n if (diff < 0.75) {\n return t(\"over_x_years\", distanceInYears);\n }\n return t(\"almost_x_years\", distanceInYears + 1);\n}\n//# sourceMappingURL=timeAgoInWords.js.map","import { getFullScope, inferType } from \"./helpers\";\nexport const guessStrategy = function (i18n, scope) {\n if (scope instanceof Array) {\n scope = scope.join(i18n.defaultSeparator);\n }\n const message = scope.split(i18n.defaultSeparator).slice(-1)[0];\n return (i18n.missingTranslationPrefix +\n message\n .replace(\"_\", \" \")\n .replace(/([a-z])([A-Z])/g, (_match, p1, p2) => `${p1} ${p2.toLowerCase()}`));\n};\nexport const messageStrategy = (i18n, scope, options) => {\n const fullScope = getFullScope(i18n, scope, options);\n const locale = \"locale\" in options ? options.locale : i18n.locale;\n const localeType = inferType(locale);\n const fullScopeWithLocale = [\n localeType == \"string\" ? locale : localeType,\n fullScope,\n ].join(i18n.defaultSeparator);\n return `[missing \"${fullScopeWithLocale}\" translation]`;\n};\nexport const errorStrategy = (i18n, scope, options) => {\n const fullScope = getFullScope(i18n, scope, options);\n const fullScopeWithLocale = [i18n.locale, fullScope].join(i18n.defaultSeparator);\n throw new Error(`Missing translation: ${fullScopeWithLocale}`);\n};\nexport class MissingTranslation {\n constructor(i18n) {\n this.i18n = i18n;\n this.registry = {};\n this.register(\"guess\", guessStrategy);\n this.register(\"message\", messageStrategy);\n this.register(\"error\", errorStrategy);\n }\n register(name, strategy) {\n this.registry[name] = strategy;\n }\n get(scope, options) {\n var _a;\n return this.registry[(_a = options.missingBehavior) !== null && _a !== void 0 ? _a : this.i18n.missingBehavior](this.i18n, scope, options);\n }\n}\n//# sourceMappingURL=MissingTranslation.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport get from \"lodash/get\";\nimport has from \"lodash/has\";\nimport set from \"lodash/set\";\nimport { Locales } from \"./Locales\";\nimport { Pluralization } from \"./Pluralization\";\nimport { MissingTranslation } from \"./MissingTranslation\";\nimport { camelCaseKeys, createTranslationOptions, formatNumber, getFullScope, inferType, interpolate, isSet, lookup, numberToDelimited, numberToHuman, numberToHumanSize, parseDate, pluralize, propertyFlatList, strftime, timeAgoInWords, } from \"./helpers\";\nconst DEFAULT_I18N_OPTIONS = {\n defaultLocale: \"en\",\n locale: \"en\",\n defaultSeparator: \".\",\n placeholder: /(?:\\{\\{|%\\{)(.*?)(?:\\}\\}?)/gm,\n enableFallback: false,\n missingBehavior: \"message\",\n missingTranslationPrefix: \"\",\n missingPlaceholder: (_i18n, placeholder) => `[missing \"${placeholder}\" value]`,\n nullPlaceholder: (i18n, placeholder, message, options) => i18n.missingPlaceholder(i18n, placeholder, message, options),\n transformKey: (key) => key,\n};\nexport class I18n {\n constructor(translations = {}, options = {}) {\n this._locale = DEFAULT_I18N_OPTIONS.locale;\n this._defaultLocale = DEFAULT_I18N_OPTIONS.defaultLocale;\n this._version = 0;\n this.onChangeHandlers = [];\n this.translations = {};\n this.t = this.translate;\n this.p = this.pluralize;\n this.l = this.localize;\n this.distanceOfTimeInWords = this.timeAgoInWords;\n const { locale, enableFallback, missingBehavior, missingTranslationPrefix, missingPlaceholder, nullPlaceholder, defaultLocale, defaultSeparator, placeholder, transformKey, } = Object.assign(Object.assign({}, DEFAULT_I18N_OPTIONS), options);\n this.locale = locale;\n this.defaultLocale = defaultLocale;\n this.defaultSeparator = defaultSeparator;\n this.enableFallback = enableFallback;\n this.locale = locale;\n this.missingBehavior = missingBehavior;\n this.missingTranslationPrefix = missingTranslationPrefix;\n this.missingPlaceholder = missingPlaceholder;\n this.nullPlaceholder = nullPlaceholder;\n this.placeholder = placeholder;\n this.pluralization = new Pluralization(this);\n this.locales = new Locales(this);\n this.missingTranslation = new MissingTranslation(this);\n this.transformKey = transformKey;\n this.interpolate = interpolate;\n this.store(translations);\n }\n store(translations) {\n const map = propertyFlatList(translations);\n map.forEach((path) => set(this.translations, path, get(translations, path)));\n this.hasChanged();\n }\n get locale() {\n return this._locale || this.defaultLocale || \"en\";\n }\n set locale(newLocale) {\n if (typeof newLocale !== \"string\") {\n throw new Error(`Expected newLocale to be a string; got ${inferType(newLocale)}`);\n }\n const changed = this._locale !== newLocale;\n this._locale = newLocale;\n if (changed) {\n this.hasChanged();\n }\n }\n get defaultLocale() {\n return this._defaultLocale || \"en\";\n }\n set defaultLocale(newLocale) {\n if (typeof newLocale !== \"string\") {\n throw new Error(`Expected newLocale to be a string; got ${inferType(newLocale)}`);\n }\n const changed = this._defaultLocale !== newLocale;\n this._defaultLocale = newLocale;\n if (changed) {\n this.hasChanged();\n }\n }\n translate(scope, options) {\n options = Object.assign({}, options);\n const translationOptions = createTranslationOptions(this, scope, options);\n let translation;\n const hasFoundTranslation = translationOptions.some((translationOption) => {\n if (isSet(translationOption.scope)) {\n translation = lookup(this, translationOption.scope, options);\n }\n else if (isSet(translationOption.message)) {\n translation = translationOption.message;\n }\n return translation !== undefined && translation !== null;\n });\n if (!hasFoundTranslation) {\n return this.missingTranslation.get(scope, options);\n }\n if (typeof translation === \"string\") {\n translation = this.interpolate(this, translation, options);\n }\n else if (typeof translation === \"object\" &&\n translation &&\n isSet(options.count)) {\n translation = pluralize({\n i18n: this,\n count: options.count || 0,\n scope: translation,\n options,\n baseScope: getFullScope(this, scope, options),\n });\n }\n if (options && translation instanceof Array) {\n translation = translation.map((entry) => typeof entry === \"string\"\n ? interpolate(this, entry, options)\n : entry);\n }\n return translation;\n }\n pluralize(count, scope, options) {\n return pluralize({\n i18n: this,\n count,\n scope,\n options: Object.assign({}, options),\n baseScope: getFullScope(this, scope, options !== null && options !== void 0 ? options : {}),\n });\n }\n localize(type, value, options) {\n options = Object.assign({}, options);\n if (value === undefined || value === null) {\n return \"\";\n }\n switch (type) {\n case \"currency\":\n return this.numberToCurrency(value);\n case \"number\":\n return formatNumber(value, Object.assign({ delimiter: \",\", precision: 3, separator: \".\", significant: false, stripInsignificantZeros: false }, lookup(this, \"number.format\")));\n case \"percentage\":\n return this.numberToPercentage(value);\n default: {\n let localizedValue;\n if (type.match(/^(date|time)/)) {\n localizedValue = this.toTime(type, value);\n }\n else {\n localizedValue = value.toString();\n }\n return interpolate(this, localizedValue, options);\n }\n }\n }\n toTime(scope, input) {\n const date = parseDate(input);\n const format = lookup(this, scope);\n if (date.toString().match(/invalid/i)) {\n return date.toString();\n }\n if (!format) {\n return date.toString();\n }\n return this.strftime(date, format);\n }\n numberToCurrency(input, options = {}) {\n return formatNumber(input, Object.assign(Object.assign(Object.assign({ delimiter: \",\", format: \"%u%n\", precision: 2, separator: \".\", significant: false, stripInsignificantZeros: false, unit: \"$\" }, camelCaseKeys(this.get(\"number.format\"))), camelCaseKeys(this.get(\"number.currency.format\"))), options));\n }\n numberToPercentage(input, options = {}) {\n return formatNumber(input, Object.assign(Object.assign(Object.assign({ delimiter: \"\", format: \"%n%\", precision: 3, stripInsignificantZeros: false, separator: \".\", significant: false }, camelCaseKeys(this.get(\"number.format\"))), camelCaseKeys(this.get(\"number.percentage.format\"))), options));\n }\n numberToHumanSize(input, options = {}) {\n return numberToHumanSize(this, input, Object.assign(Object.assign(Object.assign({ delimiter: \"\", precision: 3, significant: true, stripInsignificantZeros: true, units: {\n billion: \"Billion\",\n million: \"Million\",\n quadrillion: \"Quadrillion\",\n thousand: \"Thousand\",\n trillion: \"Trillion\",\n unit: \"\",\n } }, camelCaseKeys(this.get(\"number.human.format\"))), camelCaseKeys(this.get(\"number.human.storage_units\"))), options));\n }\n numberToHuman(input, options = {}) {\n return numberToHuman(this, input, Object.assign(Object.assign(Object.assign({ delimiter: \"\", separator: \".\", precision: 3, significant: true, stripInsignificantZeros: true, format: \"%n %u\", roundMode: \"default\", units: {\n billion: \"Billion\",\n million: \"Million\",\n quadrillion: \"Quadrillion\",\n thousand: \"Thousand\",\n trillion: \"Trillion\",\n unit: \"\",\n } }, camelCaseKeys(this.get(\"number.human.format\"))), camelCaseKeys(this.get(\"number.human.decimal_units\"))), options));\n }\n numberToRounded(input, options) {\n return formatNumber(input, Object.assign({ unit: \"\", precision: 3, significant: false, separator: \".\", delimiter: \"\", stripInsignificantZeros: false }, options));\n }\n numberToDelimited(input, options = {}) {\n return numberToDelimited(input, Object.assign({ delimiterPattern: /(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, delimiter: \",\", separator: \".\" }, options));\n }\n withLocale(locale, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n const originalLocale = this.locale;\n try {\n this.locale = locale;\n yield callback();\n }\n finally {\n this.locale = originalLocale;\n }\n });\n }\n strftime(date, format, options = {}) {\n return strftime(date, format, Object.assign(Object.assign(Object.assign({}, camelCaseKeys(lookup(this, \"date\"))), { meridian: {\n am: lookup(this, \"time.am\") || \"AM\",\n pm: lookup(this, \"time.pm\") || \"PM\",\n } }), options));\n }\n update(path, override, options = { strict: false }) {\n if (options.strict && !has(this.translations, path)) {\n throw new Error(`The path \"${path}\" is not currently defined`);\n }\n const currentNode = get(this.translations, path);\n const currentType = inferType(currentNode);\n const overrideType = inferType(override);\n if (options.strict && currentType !== overrideType) {\n throw new Error(`The current type for \"${path}\" is \"${currentType}\", but you're trying to override it with \"${overrideType}\"`);\n }\n let newNode;\n if (overrideType === \"object\") {\n newNode = Object.assign(Object.assign({}, currentNode), override);\n }\n else {\n newNode = override;\n }\n set(this.translations, path, newNode);\n this.hasChanged();\n }\n toSentence(items, options = {}) {\n const { wordsConnector, twoWordsConnector, lastWordConnector } = Object.assign(Object.assign({ wordsConnector: \", \", twoWordsConnector: \" and \", lastWordConnector: \", and \" }, camelCaseKeys(lookup(this, \"support.array\"))), options);\n const size = items.length;\n switch (size) {\n case 0:\n return \"\";\n case 1:\n return `${items[0]}`;\n case 2:\n return items.join(twoWordsConnector);\n default:\n return [\n items.slice(0, size - 1).join(wordsConnector),\n lastWordConnector,\n items[size - 1],\n ].join(\"\");\n }\n }\n timeAgoInWords(fromTime, toTime, options = {}) {\n return timeAgoInWords(this, fromTime, toTime, options);\n }\n onChange(callback) {\n this.onChangeHandlers.push(callback);\n return () => {\n this.onChangeHandlers.splice(this.onChangeHandlers.indexOf(callback), 1);\n };\n }\n get version() {\n return this._version;\n }\n formatNumber(input, options) {\n return formatNumber(input, options);\n }\n get(scope) {\n return lookup(this, scope);\n }\n runCallbacks() {\n this.onChangeHandlers.forEach((callback) => callback(this));\n }\n hasChanged() {\n this._version += 1;\n this.runCallbacks();\n }\n}\n//# sourceMappingURL=I18n.js.map","import { isSet } from \"./isSet\";\nexport function createTranslationOptions(i18n, scope, options) {\n let translationOptions = [{ scope }];\n if (isSet(options.defaults)) {\n translationOptions = translationOptions.concat(options.defaults);\n }\n if (isSet(options.defaultValue)) {\n const message = typeof options.defaultValue === \"function\"\n ? options.defaultValue(i18n, scope, options)\n : options.defaultValue;\n translationOptions.push({ message });\n delete options.defaultValue;\n }\n return translationOptions;\n}\n//# sourceMappingURL=createTranslationOptions.js.map","import BigNumber from \"bignumber.js\";\nexport function numberToDelimited(input, options) {\n const numeric = new BigNumber(input);\n if (!numeric.isFinite()) {\n return input.toString();\n }\n if (!options.delimiterPattern.global) {\n throw new Error(`options.delimiterPattern must be a global regular expression; received ${options.delimiterPattern}`);\n }\n let [left, right] = numeric.toString().split(\".\");\n left = left.replace(options.delimiterPattern, (digitToDelimiter) => `${digitToDelimiter}${options.delimiter}`);\n return [left, right].filter(Boolean).join(options.separator);\n}\n//# sourceMappingURL=numberToDelimited.js.map","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","var capitalize = require('./capitalize'),\n createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nmodule.exports = camelCase;\n","var baseRepeat = require('./_baseRepeat'),\n isIterateeCall = require('./_isIterateeCall'),\n toInteger = require('./toInteger'),\n toString = require('./toString');\n\n/**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\nfunction repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n}\n\nmodule.exports = repeat;\n","var baseFlatten = require('./_baseFlatten'),\n baseOrderBy = require('./_baseOrderBy'),\n baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","var assignValue = require('./_assignValue'),\n baseZipObject = require('./_baseZipObject');\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n}\n\nmodule.exports = zipObject;\n","var baseFlatten = require('./_baseFlatten');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n}\n\nmodule.exports = flattenDeep;\n","var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","var toString = require('./toString'),\n upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","var castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nmodule.exports = createCaseFirst;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","var deburrLetter = require('./_deburrLetter'),\n toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n","var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor;\n\n/**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\nfunction baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n}\n\nmodule.exports = baseRepeat;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayMap = require('./_arrayMap'),\n baseGet = require('./_baseGet'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n baseSortBy = require('./_baseSortBy'),\n baseUnary = require('./_baseUnary'),\n compareMultiple = require('./_compareMultiple'),\n identity = require('./identity'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nmodule.exports = baseOrderBy;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nmodule.exports = baseSortBy;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nmodule.exports = compareAscending;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n}\n\nmodule.exports = baseZipObject;\n","var baseRange = require('./_baseRange'),\n isIterateeCall = require('./_isIterateeCall'),\n toFinite = require('./toFinite');\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\nmodule.exports = createRange;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\nmodule.exports = baseRange;\n","import PropTypes from 'prop-types';\nimport { h } from 'preact';\nimport { forwardRef } from 'preact/compat';\nimport { locale } from '../utilities/locale';\nimport { ButtonNew as Button } from '@crayons';\nimport SearchIcon from '@images/search.svg';\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 mscElement = 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 && mscElement !== 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 (mscElement) {\n const form = mscElement.querySelector('form');\n // We remove the child form expecting that createPortal adds the new form on each re-render\n form && mscElement.removeChild(form);\n }\n\n // Since, passing the reference to same element will not cause the component to re-render\n // we CLONE & REPLACE the element with the clone & pass the clone's reference, so that useState\n // will re-render the component.\n const mscElementClone = mscElement ? mscElement.cloneNode(true) : null;\n\n if (mscElementClone) {\n const mscElementParent = mscElement.parentElement;\n unmountComponentAtNode(mscElement);\n mscElementParent.prepend(mscElementClone);\n }\n\n setMobileSearchContainer(mscElementClone);\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 { SearchFormSync } from '../Search/SearchFormSync';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const root = document.getElementById('header-search');\n\n render(, root);\n});\n"],"sourceRoot":""}