--> TEXT)\n if (morphedNodeType === ELEMENT_NODE) {\n if (toNodeType === ELEMENT_NODE) {\n if (!compareNodeNames(fromNode, toNode)) {\n onNodeDiscarded(fromNode);\n morphedNode = moveChildren(fromNode, createElementNS(toNode.nodeName, toNode.namespaceURI));\n }\n } else {\n // Going from an element node to a text node\n morphedNode = toNode;\n }\n } else if (morphedNodeType === TEXT_NODE || morphedNodeType === COMMENT_NODE) { // Text or comment node\n if (toNodeType === morphedNodeType) {\n if (morphedNode.nodeValue !== toNode.nodeValue) {\n morphedNode.nodeValue = toNode.nodeValue;\n }\n\n return morphedNode;\n } else {\n // Text node to something else\n morphedNode = toNode;\n }\n }\n }\n\n if (morphedNode === toNode) {\n // The \"to node\" was not compatible with the \"from node\" so we had to\n // toss out the \"from node\" and use the \"to node\"\n onNodeDiscarded(fromNode);\n } else {\n if (toNode.isSameNode && toNode.isSameNode(morphedNode)) {\n return;\n }\n\n morphEl(morphedNode, toNode, childrenOnly);\n\n // We now need to loop over any keyed nodes that might need to be\n // removed. We only do the removal if we know that the keyed node\n // never found a match. When a keyed node is matched up we remove\n // it out of fromNodesLookup and we use fromNodesLookup to determine\n // if a keyed node has been matched up or not\n if (keyedRemovalList) {\n for (var i=0, len=keyedRemovalList.length; i
{\n const tagContainers = document.querySelectorAll(\".js-tags-container\");\n const config = {\n plugins: [\"remove_button\"],\n create: true,\n render: {\n no_results: null\n }\n };\n tagContainers.forEach((container) => new TomSelect(container, config));\n});\n","import Tribute from \"src/decidim/vendor/tribute\";\n$(() => {\n const $hashtagContainer = $(\".js-hashtags\");\n const nodatafound = $hashtagContainer.attr(\"data-noresults\");\n if ($hashtagContainer.parent().hasClass(\"editor\")) {\n return;\n }\n let noMatchTemplate = null;\n if (nodatafound) {\n noMatchTemplate = () => `${nodatafound}`;\n }\n let remoteSearch = function(text, cb) {\n $.post(window.Decidim.config.get(\"api_path\"), { query: `{hashtags(name:\"${text}\") {name}}` }).then((response) => {\n let data = response.data.hashtags || {};\n cb(data);\n }).fail(function() {\n cb([]);\n }).always(() => {\n const $parent = $(tribute.current.element).parent();\n $parent.addClass(\"is-active\");\n const $tribute = $parent.find(\".tribute-container\");\n $tribute.removeAttr(\"style\");\n });\n };\n let tribute = new Tribute({\n trigger: \"#\",\n values: function(text, cb) {\n remoteSearch(text, (hashtags) => cb(hashtags));\n },\n positionMenu: true,\n menuContainer: null,\n fillAttr: \"name\",\n noMatchTemplate,\n lookup: (item) => item.name,\n selectTemplate: function(item) {\n if (typeof item === \"undefined\") {\n return null;\n }\n return `#${item.original.name}`;\n },\n menuItemTemplate: function(item) {\n let tpl = `${item.original.name}`;\n return tpl;\n }\n });\n $hashtagContainer.on(\"focusin\", (event) => {\n tribute.menuContainer = event.target.parentNode;\n });\n $hashtagContainer.on(\"focusout\", (event) => {\n let $parent = $(event.target).parent();\n if ($parent.hasClass(\"is-active\")) {\n $parent.removeClass(\"is-active\");\n }\n });\n $hashtagContainer.on(\"input\", (event) => {\n let $parent = $(event.target).parent();\n if (tribute.isActive) {\n let $tribute = $(\".tribute-container\");\n $tribute.appendTo($parent);\n $parent.addClass(\"is-active\");\n } else {\n $parent.removeClass(\"is-active\");\n }\n });\n});\n","import Tribute from \"src/decidim/vendor/tribute\";\nconst mentionsInitializer = () => {\n const $mentionContainer = $(\".js-mentions\");\n const nodatafound = $mentionContainer.attr(\"data-noresults\");\n if ($mentionContainer.parent().hasClass(\"editor\")) {\n return;\n }\n let noMatchTemplate = null;\n if (nodatafound) {\n noMatchTemplate = () => `${nodatafound}`;\n }\n const debounce = function(callback, wait) {\n let timeout = null;\n return (...args) => {\n const context = this;\n clearTimeout(timeout);\n timeout = setTimeout(() => callback.apply(context, args), wait);\n };\n };\n let remoteSearch = function(text, cb) {\n let query = `{users(filter:{wildcard:\"${text}\"}){nickname,name,avatarUrl,__typename,...on UserGroup{membersCount}}}`;\n $.post(window.Decidim.config.get(\"api_path\"), { query }).then((response) => {\n let data = response.data.users || {};\n cb(data);\n }).fail(function() {\n cb([]);\n }).always(() => {\n const $parent = $(tribute.current.element).parent();\n $parent.addClass(\"is-active\");\n const $tribute = $parent.find(\".tribute-container\");\n $tribute.removeAttr(\"style\");\n });\n };\n let tribute = new Tribute({\n trigger: \"@\",\n // avoid overloading the API if the user types too fast\n values: debounce(function(text, cb) {\n remoteSearch(text, (users) => cb(users));\n }, 250),\n positionMenu: true,\n menuContainer: null,\n allowSpaces: true,\n menuItemLimit: 5,\n fillAttr: \"nickname\",\n selectClass: \"highlight\",\n noMatchTemplate,\n lookup: (item) => item.nickname + item.name,\n selectTemplate: function(item) {\n if (typeof item === \"undefined\") {\n return null;\n }\n return item.original.nickname;\n },\n menuItemTemplate: function(item) {\n let svg = \"\";\n if (window.Decidim && item.original.__typename === \"UserGroup\") {\n const iconsPath = window.Decidim.config.get(\"icons_path\");\n svg = `${item.original.membersCount}x `;\n }\n return `\n
\n ${item.original.nickname}\n ${item.original.name}\n ${svg}\n `;\n }\n });\n let setupEvents = function($element) {\n $element.on(\"focusin\", (event) => {\n tribute.menuContainer = event.target.parentNode;\n });\n $element.on(\"focusout\", (event) => {\n let $parent = $(event.target).parent();\n if ($parent.hasClass(\"is-active\")) {\n $parent.removeClass(\"is-active\");\n }\n });\n $element.on(\"input\", (event) => {\n let $parent = $(event.target).parent();\n if (tribute.isActive) {\n let $tribute = $(\".tribute-container\");\n $tribute.appendTo($parent);\n $parent.addClass(\"is-active\");\n } else {\n $parent.removeClass(\"is-active\");\n }\n });\n };\n setupEvents($mentionContainer);\n $(document).on(\"attach-mentions-element\", (event, element) => {\n if (!element) {\n return;\n }\n tribute.attach(element);\n if (tribute.menu && !document.body.contains(tribute.menu)) {\n tribute.range.getDocument().body.appendChild(tribute.menu);\n }\n setupEvents($(element));\n });\n tribute.attach($mentionContainer);\n};\n$(() => mentionsInitializer());\n","var __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\nimport AutoCompleteJS from \"@tarekraafat/autocomplete.js\";\nimport \"@tarekraafat/autocomplete.js/dist/css/autoComplete.02.css\";\nexport default class AutoComplete {\n constructor(el, options = {}) {\n this.element = el;\n this.stickySelectedSpan = null;\n this.clearStickySelectionSpan = null;\n this.stickyHiddenInput = null;\n this.promptDiv = null;\n const thresholdTemp = options.threshold || 2;\n this.options = Object.assign({\n // Defines name of the hidden input (e.g. assembly_member[user_id])\n name: null,\n // Placeholder of the visible input field\n placeholder: \"\",\n // Defines what happens after user has selected value from suggestions\n // sticky - Allows selecting a single value and not editing the value after selected (e.g. as the admin autocomplete fields)\n // single - Allows selecting a single value and editing the selected text after the selection (e.g. geocoding field)\n // multi - Allows selecting multiple values\n // null (default) - Disable selection event handling in this class\n mode: null,\n // Defines if we show input help (e.g. \"Type at least three characters to search\") or not.\n searchPrompt: false,\n // Defines search prompt message, only shown if showPrompt is enabled!\n searchPromptText: `Type at least ${thresholdTemp} characters to search`,\n // Defines items that are selected already when page is loaded before user selects them. (e.g. when form submit fails)\n selected: null,\n // Defines how many characters input has to have before we start searching\n threshold: thresholdTemp,\n // Defines how many results to show in the autocomplete selection list\n // by maximum.\n maxResults: 10,\n // Defines the data keys against which to match the user input when\n // searching through the results. For example, when the following\n // data is returned by the API:\n // { id: 123, name: \"John\", nickname: \"john\", __typename: \"User\" }\n //\n // You can define the data keys array as [\"name\", \"nickname\"] in\n // which case the results shown to user would be only those that\n // have matching text in these defined fields.\n dataMatchKeys: null,\n // The data source is a method that gets the callback parameter as\n // its first argument which should be called with the results array\n // once they are returned by the API.\n // For example:\n // (query, callback) => {\n // (async () => {\n // const results = await callAjax(`/api/url?query=${query}`);\n // callback(results);\n // })();\n // }\n //\n // Signature: (callback: Function)\n dataSource: () => [],\n // Filters the data list returned by the data source before it is shown\n // to the user. Can be used e.g. to hide already selected values from\n // the list.\n dataFilter: null,\n // Delay in milliseconds how long to wait after user action before\n // doing a backend request.\n delay: 200,\n // Allows modifying the suggested list before they are displayed\n // Signature: (element: HTMLElement, value: Object)\n modifyList: null,\n // Allows modifying the suggested items before they are displayed in the list\n // Signature: (element: HTMLElement, value: Object)\n modifyResult: null\n }, options);\n this.autocomplete = new AutoCompleteJS({\n selector: () => this.element,\n diacritics: true,\n placeHolder: options.placeholder,\n // Delay (milliseconds) before autocomplete engine starts. It is preventing many queries when user is typing fast.\n debounce: 200,\n threshold: this.options.threshold,\n data: {\n keys: this.options.dataMatchKeys,\n src: (query) => __async(this, null, function* () {\n const fetchResults = () => {\n return new Promise((resolve) => {\n this.options.dataSource(query, resolve);\n });\n };\n try {\n return yield fetchResults();\n } catch (error) {\n return error;\n }\n }),\n filter: (list) => {\n const results = list.filter(\n (item, idx, arr) => {\n return arr.findIndex((val) => val.value === item.value) === idx;\n }\n );\n if (this.options.dataFilter) {\n return this.options.dataFilter(results);\n }\n return results;\n }\n },\n resultsList: {\n maxResults: this.options.maxResults,\n element: (item, data) => {\n if (!this.options.modifyList) {\n return;\n }\n this.options.modifyList(item, data);\n }\n },\n resultItem: {\n element: (item, data) => {\n if (!this.options.modifyResult) {\n return;\n }\n this.options.modifyResult(item, data.value);\n }\n },\n events: {\n input: {\n blur: () => {\n this.promptDiv.style.display = \"none\";\n }\n }\n }\n });\n this.acWrapper = this.element.closest(\".autoComplete_wrapper\");\n this.element.ac = this.autocomplete;\n const stopPropagation = (event) => {\n event.stopPropagation();\n };\n this.element.addEventListener(\"close\", stopPropagation);\n this.element.addEventListener(\"open\", stopPropagation);\n this.createPromptDiv();\n switch (this.options.mode) {\n case \"sticky\":\n this.createStickySelect(this.options.name);\n break;\n case \"multi\":\n this.createMultiSelect(this.options.name);\n break;\n default:\n }\n }\n setInput(value) {\n this.autocomplete.input.value = value;\n }\n handleEvent(event) {\n switch (this.options.mode) {\n case \"single\":\n this.setInput(event.detail.selection.value[event.detail.selection.key]);\n break;\n case \"sticky\":\n this.handleStickyEvents(event);\n break;\n case \"multi\":\n this.handleMultiEvents(event);\n break;\n default:\n }\n }\n handleMultiEvents(event) {\n switch (event.type) {\n case \"selection\":\n this.addMultiSelectItem(event.detail.selection);\n break;\n default:\n }\n }\n handleStickyEvents(event) {\n switch (event.type) {\n case \"selection\":\n this.addStickySelectItem(event.detail.selection);\n break;\n case \"click\":\n if (event.target === this.clearStickySelectionSpan) {\n this.removeStickySelection();\n }\n break;\n case \"keyup\":\n if (this.stickyHiddenInput.value !== \"\" && event.target === this.element && ([\"Escape\", \"Backspace\", \"Delete\"].includes(event.key) || /^[a-z0-9]$/i.test(event.key))) {\n this.removeStickySelection();\n } else if (this.options.searchPrompt) {\n if (this.stickyHiddenInput.value === \"\" && this.element.value.length < this.options.threshold) {\n this.promptDiv.style.display = \"block\";\n } else {\n this.promptDiv.style.display = \"none\";\n }\n }\n break;\n default:\n }\n }\n createHiddenInput(value) {\n const hiddenInput = document.createElement(\"input\");\n hiddenInput.name = this.options.name;\n hiddenInput.type = \"hidden\";\n if (value) {\n hiddenInput.value = value;\n }\n this.acWrapper.prepend(hiddenInput);\n return hiddenInput;\n }\n removeStickySelection() {\n this.stickyHiddenInput.value = \"\";\n this.element.placeholder = this.options.placeholder;\n this.clearStickySelectionSpan.style.display = \"none\";\n this.stickySelectedSpan.style.display = \"none\";\n }\n addStickySelectItem(selection) {\n this.stickyHiddenInput.value = selection.value.value;\n this.element.placeholder = \"\";\n this.stickySelectedSpan.innerHTML = selection.value[selection.key];\n this.stickySelectedSpan.style.display = \"block\";\n this.clearStickySelectionSpan.style.display = \"block\";\n this.setInput(\"\");\n }\n addMultiSelectItem(selection) {\n this.setInput(\"\");\n const chosen = document.createElement(\"span\");\n chosen.classList.add(\"label\", \"primary\", \"autocomplete__selected-item\", \"multi\");\n chosen.innerHTML = selection.value[selection.key];\n const clearSelection = document.createElement(\"span\");\n clearSelection.classList.add(\"clear-multi-selection\");\n clearSelection.innerHTML = \"×\";\n clearSelection.setAttribute(\"data-remove\", selection.value.value);\n clearSelection.addEventListener(\"click\", (evt) => {\n const hiddenInput = this.acWrapper.querySelector(`input[type='hidden'][value='${selection.value.value}']`);\n if (hiddenInput) {\n hiddenInput.remove();\n evt.target.parentElement.remove();\n }\n });\n chosen.appendChild(clearSelection);\n const multiSelectWrapper = this.acWrapper.querySelector(\".multiselect\");\n const inputContainer = multiSelectWrapper.querySelector(\"span.input-container\");\n multiSelectWrapper.insertBefore(chosen, inputContainer);\n this.createHiddenInput(selection.value.value);\n }\n createStickySelect() {\n this.stickySelectedSpan = document.createElement(\"span\");\n this.stickySelectedSpan.classList.add(\"autocomplete__selected-item\", \"sticky\");\n this.stickySelectedSpan.style.display = \"none\";\n this.stickySelectedSpan.addEventListener(\"click\", () => this.element.focus());\n this.stickyHiddenInput = this.createHiddenInput();\n this.clearStickySelectionSpan = document.createElement(\"span\");\n this.clearStickySelectionSpan.className = \"clear-sticky-selection\";\n this.clearStickySelectionSpan.innerHTML = \"×\";\n this.clearStickySelectionSpan.style.display = \"none\";\n this.clearStickySelectionSpan.addEventListener(\"click\", this);\n this.element.addEventListener(\"selection\", this);\n this.element.addEventListener(\"keyup\", this);\n this.acWrapper.insertBefore(this.clearStickySelectionSpan, this.element);\n this.acWrapper.insertBefore(this.stickySelectedSpan, this.element);\n if (this.options.selected) {\n this.addStickySelectItem(this.options.selected);\n }\n }\n createMultiSelect() {\n const multiSelectWrapper = document.createElement(\"div\");\n multiSelectWrapper.classList.add(\"multiselect\");\n const inputContainer = document.createElement(\"span\");\n inputContainer.classList.add(\"input-container\");\n multiSelectWrapper.appendChild(inputContainer);\n this.acWrapper.prepend(multiSelectWrapper);\n inputContainer.appendChild(this.element);\n this.element.addEventListener(\"selection\", this);\n multiSelectWrapper.addEventListener(\"click\", () => {\n this.element.focus();\n });\n if (this.options.selected) {\n this.options.selected.forEach((selection) => {\n this.addMultiSelectItem(selection);\n });\n }\n }\n createPromptDiv() {\n this.promptDiv = document.createElement(\"div\");\n this.promptDiv.classList.add(\"search-prompt\");\n this.promptDiv.style.display = \"none\";\n this.promptDiv.innerHTML = this.options.searchPromptText;\n this.acWrapper.appendChild(this.promptDiv);\n }\n}\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nconst DEFAULT_ATTRIBUTES = {\n role: \"img\",\n \"aria-hidden\": \"true\"\n};\nexport default function icon(iconKey, attributes = {}) {\n const iconAttributes = __spreadValues(__spreadValues({}, DEFAULT_ATTRIBUTES), attributes);\n const htmlAttributes = { width: \"0.75em\", height: \"0.75em\" };\n Object.keys(iconAttributes).forEach((key) => {\n const newKey = key.replace(/([A-Z])/g, (ucw) => `-${ucw[0].toLowerCase()}`);\n if (typeof htmlAttributes[key] === \"undefined\") {\n htmlAttributes[newKey] = iconAttributes[key];\n } else {\n htmlAttributes[newKey] = `${htmlAttributes[newKey]} ${iconAttributes[key]}`;\n }\n });\n const svg = document.createElement(\"svg\");\n const use = document.createElement(\"use\");\n const title = document.createElement(\"title\");\n title.innerHTML = iconAttributes.title || iconAttributes.ariaLabel || iconKey;\n use.setAttribute(\"href\", `${window.Decidim.config.get(\"icons_path\")}#ri-${iconKey}`);\n Object.entries(htmlAttributes).forEach(([key, value]) => svg.setAttribute(key, value));\n svg.appendChild(title);\n svg.appendChild(use);\n return svg.outerHTML;\n}\n","import AutoComplete from \"src/decidim/autocomplete\";\nimport icon from \"src/decidim/icon\";\nconst updateSubmitButton = ($fieldContainer, $selectedItems) => {\n const $form = $fieldContainer.closest(\"form\");\n if ($form.length < 1) {\n return;\n }\n const $submitButton = $form.find(\"button[type='submit']\");\n if ($selectedItems.children().length === 0) {\n $submitButton.prop(\"disabled\", true);\n } else {\n $submitButton.prop(\"disabled\", false);\n }\n};\n$(() => {\n const $fieldContainer = $(\".js-multiple-mentions\");\n if ($fieldContainer.length < 1) {\n return;\n }\n const allMessages = window.Decidim.config.get(\"messages\");\n const messages = allMessages.mentionsModal || {};\n const $searchInput = $(\"input\", $fieldContainer);\n const $selectedItems = $(`ul.${$searchInput.data().selected}`);\n const options = $fieldContainer.data();\n let selected = [];\n const removeLabel = messages.removeRecipient || \"Remove recipient %name%\";\n let emptyFocusElement = $fieldContainer[0].querySelector(\".empty-list\");\n if (!emptyFocusElement) {\n emptyFocusElement = document.createElement(\"div\");\n emptyFocusElement.tabIndex = \"-1\";\n emptyFocusElement.className = \"empty-list\";\n $selectedItems.before(emptyFocusElement);\n }\n updateSubmitButton($fieldContainer, $selectedItems);\n const autoComplete = new AutoComplete($searchInput[0], {\n dataMatchKeys: [\"name\", \"nickname\"],\n dataSource: (query, callback) => {\n $.post(window.Decidim.config.get(\"api_path\"), {\n \"query\": `\n {\n users(filter:{wildcard:\"${query}\",excludeIds:[]})\n {\n id,nickname,name,avatarUrl,__typename,...on UserGroup{membersCount},...on User{\n directMessagesEnabled\n }\n }\n }`\n }).then((response) => {\n callback(response.data.users);\n });\n },\n dataFilter: (list) => {\n return list.filter(\n (item) => !selected.includes(item.value.id)\n );\n },\n modifyResult: (element, value) => {\n $(element).html(`\n
\n ${value.nickname}\n ${value.name}\n `);\n if (value.directMessagesEnabled === \"false\") {\n $(element).addClass(\"disabled\");\n $(element).append(`${$searchInput.data().directMessagesDisabled}`);\n }\n if (value.membersCount) {\n $(element).append(`${value.membersCount}x ${icon(\"group-2-fill\")}`);\n }\n }\n });\n $searchInput.on(\"selection\", (event) => {\n const feedback = event.detail;\n const selection = feedback.selection;\n const id = selection.value.id;\n if (selected.length >= 9 || selection.value.directMessagesEnabled === \"false\") {\n return;\n }\n const label = removeLabel.replace(\"%name%\", selection.value.name);\n $selectedItems.append(`\n \n \n
\n ${selection.value.name}\n \n \n `);\n autoComplete.setInput(\"\");\n selected.push(id);\n updateSubmitButton($fieldContainer, $selectedItems);\n $selectedItems.find(`*[data-remove=\"${id}\"]`).on(\"keypress click\", (evt) => {\n const target = evt.currentTarget.parentNode;\n if (target.tagName === \"LI\") {\n const focusElement = target.nextElementSibling || target.previousElementSibling || emptyFocusElement;\n selected = selected.filter((identifier) => identifier !== id);\n target.remove();\n updateSubmitButton($fieldContainer, $selectedItems);\n focusElement.focus();\n }\n });\n });\n});\n","let callbacks = {};\nexport default function registerCallback(callbackId, callback) {\n callbacks[callbackId] = callback;\n}\nconst unregisterCallback = (callbackId) => {\n callbacks[callbackId] = null;\n};\nconst pushState = (url, state2 = null) => {\n if (window.history) {\n window.history.pushState(state2, null, url);\n }\n};\nconst replaceState = (url, state2 = null) => {\n if (window.history) {\n window.history.replaceState(state2, null, url);\n }\n};\nconst state = () => {\n if (window.history) {\n return window.history.state;\n }\n return null;\n};\nwindow.onpopstate = (event) => {\n if (event.isTrusted) {\n for (let callbackId in callbacks) {\n if (callbacks.hasOwnProperty(callbackId)) {\n callbacks[callbackId](event.state);\n }\n }\n }\n};\nexport { registerCallback, unregisterCallback, pushState, replaceState, state };\n","import select from \"select\";\nconst CLIPBOARD_COPY_TIMEOUT = 5e3;\n$(() => {\n $(document).on(\"click\", \"[data-clipboard-copy]\", (ev) => {\n const $el = $(ev.currentTarget);\n if (!$el.data(\"clipboard-copy\") || $el.data(\"clipboard-copy\").length < 1) {\n return;\n }\n const $input = $($el.data(\"clipboard-copy\"));\n if ($input.length < 1 || !$input.is(\"input, textarea, select\")) {\n return;\n }\n const selectedText = select($input[0]);\n if (!selectedText || selectedText.length < 1) {\n return;\n }\n const $temp = $(``).css({\n width: 1,\n height: 1\n });\n $el.after($temp);\n $temp.select();\n const copyDone = () => {\n $temp.remove();\n $el.focus();\n };\n try {\n if (!document.execCommand(\"copy\")) {\n return;\n }\n } catch (err) {\n copyDone();\n return;\n }\n copyDone();\n const label = $el.data(\"clipboard-copy-label\");\n if (label) {\n let to = $el.data(\"clipboard-copy-label-timeout\");\n if (to) {\n clearTimeout(to);\n }\n if (!$el.data(\"clipboard-copy-label-original\")) {\n $el.data(\"clipboard-copy-label-original\", $el.html());\n }\n $el.html(label);\n to = setTimeout(() => {\n $el.html($el.data(\"clipboard-copy-label-original\"));\n $el.removeData(\"clipboard-copy-label-original\");\n $el.removeData(\"clipboard-copy-label-timeout\");\n }, CLIPBOARD_COPY_TIMEOUT);\n $el.data(\"clipboard-copy-label-timeout\", to);\n }\n let message = $el.data(\"clipboard-copy-message\");\n if (message) {\n let $msg = $el.data(\"clipboard-message-element\");\n if ($msg) {\n if ($msg.html() === message) {\n message += \" \";\n }\n } else {\n $msg = $('');\n $el.after($msg);\n $el.data(\"clipboard-message-element\", $msg);\n }\n $msg.html(message);\n }\n });\n});\n","import \"@zeitiger/appendaround\";\n$(() => {\n let $appendableElements = $(\".js-append\");\n $appendableElements.appendAround();\n});\n","import icon from \"src/decidim/icon\";\nexport default class PasswordToggler {\n constructor(password) {\n this.password = password;\n this.input = this.password.querySelector('input[type=\"password\"]');\n this.form = this.input.closest(\"form\");\n this.texts = {\n showPassword: this.password.getAttribute(\"data-show-password\") || \"Show password\",\n hidePassword: this.password.getAttribute(\"data-hide-password\") || \"Hide password\",\n hiddenPassword: this.password.getAttribute(\"data-hidden-password\") || \"Your password is hidden\",\n shownPassword: this.password.getAttribute(\"data-shown-password\") || \"Your password is shown\"\n };\n this.icons = {\n show: icon(\"eye-line\"),\n hide: icon(\"eye-off-line\")\n };\n }\n // Call init() to hide the password confirmation and add a \"view password\" inline button\n init() {\n this.createControls();\n this.button.addEventListener(\"click\", (evt) => {\n this.toggleVisibility(evt);\n });\n this.form.addEventListener(\"submit\", () => {\n this.hidePassword();\n });\n }\n // Call destroy() to switch back to the original password box\n destroy() {\n this.button.removeEventListener(\"click\");\n this.input.removeEventListener(\"change\");\n this.form.removeEventListener(\"submit\");\n const input = this.input.detach();\n this.inputGroup.replaceWith(input);\n }\n createControls() {\n this.createButton();\n this.createStatusText();\n this.addInputGroupWrapperAsParent();\n }\n createButton() {\n const button = document.createElement(\"button\");\n button.setAttribute(\"type\", \"button\");\n button.setAttribute(\"aria-controls\", this.input.getAttribute(\"id\"));\n button.setAttribute(\"aria-label\", this.texts.showPassword);\n button.innerHTML = this.icons.show;\n this.button = button;\n }\n createStatusText() {\n const statusText = document.createElement(\"span\");\n statusText.classList.add(\"sr-only\");\n statusText.setAttribute(\"aria-live\", \"polite\");\n statusText.textContent = this.texts.hiddenPassword;\n this.statusText = statusText;\n }\n addInputGroupWrapperAsParent() {\n const inputGroupWrapper = document.createElement(\"div\");\n inputGroupWrapper.classList.add(\"input-group__password\");\n this.input.parentNode.replaceChild(inputGroupWrapper, this.input);\n inputGroupWrapper.appendChild(this.input);\n this.input.before(this.button);\n const formError = this.password.querySelector(\".form-error\");\n if (formError) {\n this.input.after(formError);\n }\n }\n toggleVisibility(evt) {\n evt.preventDefault();\n if (this.isText()) {\n this.hidePassword();\n } else {\n this.showPassword();\n }\n }\n showPassword() {\n this.statusText.textContent = this.texts.shownPassword;\n this.button.setAttribute(\"aria-label\", this.texts.hidePassword);\n this.button.innerHTML = this.icons.hide;\n this.input.setAttribute(\"type\", \"text\");\n }\n hidePassword() {\n this.statusText.textContent = this.texts.hiddenPassword;\n this.button.setAttribute(\"aria-label\", this.texts.showPassword);\n this.button.innerHTML = this.icons.show;\n this.input.setAttribute(\"type\", \"password\");\n }\n isText() {\n return this.input.getAttribute(\"type\") === \"text\";\n }\n}\n","import PasswordToggler from \"src/decidim/password_toggler\";\n$(() => {\n const $userRegistrationForm = $(\"#register-form\");\n const $userGroupFields = $userRegistrationForm.find(\".user-group-fields\");\n const userPassword = document.querySelector(\".user-password\");\n const inputSelector = 'input[name=\"user[sign_up_as]\"]';\n const newsletterSelector = 'input[type=\"checkbox\"][name=\"user[newsletter]\"]';\n const $newsletterModal = $(\"#sign-up-newsletter-modal\");\n const setGroupFieldsVisibility = (value) => {\n if (value === \"user\") {\n $userGroupFields.hide();\n } else {\n $userGroupFields.show();\n }\n };\n const checkNewsletter = (check) => {\n $userRegistrationForm.find(newsletterSelector).prop(\"checked\", check);\n $newsletterModal.data(\"continue\", true);\n window.Decidim.currentDialogs[\"sign-up-newsletter-modal\"].close();\n $userRegistrationForm.submit();\n };\n setGroupFieldsVisibility($userRegistrationForm.find(`${inputSelector}:checked`).val());\n $userRegistrationForm.on(\"change\", inputSelector, (event) => {\n const value = event.target.value;\n setGroupFieldsVisibility(value);\n });\n $userRegistrationForm.on(\"submit\", (event) => {\n const newsletterChecked = $userRegistrationForm.find(newsletterSelector);\n if (!$newsletterModal.data(\"continue\")) {\n if (!newsletterChecked.prop(\"checked\")) {\n event.preventDefault();\n window.Decidim.currentDialogs[\"sign-up-newsletter-modal\"].open();\n }\n }\n });\n $newsletterModal.find(\"[data-check]\").on(\"click\", (event) => {\n checkNewsletter($(event.target).data(\"check\"));\n });\n if (userPassword) {\n new PasswordToggler(userPassword).init();\n }\n});\n","import PasswordToggler from \"src/decidim/password_toggler\";\nconst initializeAccountForm = () => {\n const newPasswordPanel = document.getElementById(\"panel-password\");\n const oldPasswordPanel = document.getElementById(\"panel-old-password\");\n const emailField = document.querySelector(\"input[type='email']\");\n if (!newPasswordPanel || !emailField) {\n return;\n }\n const originalEmail = emailField.dataset.original;\n let emailChanged = originalEmail !== emailField.value;\n let newPwVisible = false;\n const toggleNewPassword = () => {\n const input = newPasswordPanel.querySelector(\"input\");\n if (newPwVisible) {\n input.required = true;\n } else {\n input.required = false;\n input.value = \"\";\n }\n };\n const toggleOldPassword = () => {\n if (!oldPasswordPanel) {\n return;\n }\n const input = oldPasswordPanel.querySelector(\"input\");\n if (emailChanged || newPwVisible) {\n oldPasswordPanel.classList.remove(\"hidden\");\n input.required = true;\n } else {\n oldPasswordPanel.classList.add(\"hidden\");\n input.required = false;\n }\n };\n const observer = new MutationObserver(() => {\n let ariaHiddenValue = newPasswordPanel.getAttribute(\"aria-hidden\");\n newPwVisible = ariaHiddenValue === \"false\";\n toggleNewPassword();\n toggleOldPassword();\n });\n observer.observe(newPasswordPanel, { attributes: true });\n emailField.addEventListener(\"change\", () => {\n emailChanged = emailField.value !== originalEmail;\n toggleOldPassword();\n });\n};\nconst initializeDeleteAccount = () => {\n const $deleteAccountForm = $(\".delete-account\");\n const $deleteAccountModalForm = $(\".delete-account-modal\");\n if ($deleteAccountForm.length < 1) {\n return;\n }\n const $openModalButton = $(\".open-modal-button\");\n $openModalButton.on(\"click\", (event) => {\n try {\n const reasonValue = $deleteAccountForm.find(\"textarea#delete_account_delete_reason\").val();\n $deleteAccountModalForm.find(\"input#delete_account_delete_reason\").val(reasonValue);\n } catch (error) {\n console.error(error);\n }\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n};\nconst initializeOldPasswordToggler = () => {\n const oldUserPassword = document.querySelector(\".old-user-password\");\n if (oldUserPassword) {\n new PasswordToggler(oldUserPassword).init();\n }\n};\n$(() => {\n initializeAccountForm();\n initializeDeleteAccount();\n initializeOldPasswordToggler();\n});\n","import Rails from \"@rails/ujs\";\ndocument.addEventListener(\"ajax:beforeSend\", (ev) => {\n if (!ev.target.matches(\"form[data-remote]\")) {\n return;\n }\n ev.target.querySelectorAll(\"[type=submit]\").forEach((submit) => {\n submit.disabled = true;\n });\n});\ndocument.addEventListener(\"ajax:complete\", (ev) => {\n if (!ev.target.matches(\"form[data-remote]\")) {\n return;\n }\n ev.target.querySelectorAll(\"[type=submit]\").forEach((submit) => {\n submit.disabled = false;\n });\n});\n$(document).on(\"submit\", \"form[data-remote][data-abide]\", (ev) => {\n ev.preventDefault();\n if (ev.target.querySelectorAll(\"[data-invalid]\").length > 0) {\n return;\n }\n Reflect.apply(Rails.handleRemote, ev.target, [ev]);\n});\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","import {utcFormat} from \"./defaultLocale.js\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat.js\";\nimport {utcParse} from \"./defaultLocale.js\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import { select, pointer } from \"d3-selection\";\nimport { min, max, extent, ascending, bisector } from \"d3-array\";\nimport { scaleTime, scaleLinear } from \"d3-scale\";\nimport { axisLeft, axisBottom } from \"d3-axis\";\nimport { timeMonth } from \"d3-time\";\nimport { timeFormat, isoParse } from \"d3-time-format\";\nimport { area, line } from \"d3-shape\";\nexport default function areachart(opts = {}) {\n const parseData = (data2) => {\n data2.forEach((d) => {\n d.key = isoParse(d.key);\n d.value = Number(d.value);\n });\n return data2.sort((x2, y2) => ascending(x2.key, y2.key));\n };\n const aggregate = (agg) => agg.map((item, index, array) => {\n if (index > 0) {\n item.value += array[index - 1].value;\n }\n return item;\n });\n let data = parseData(opts.data);\n let title = opts.title;\n let objectName = opts.objectName || \"\";\n let container = select(opts.container);\n let showAxis = opts.axis || false;\n let ratio = (opts.ratio || \"\").split(\":\").reduce((a, b) => a / b) || 4 / 3;\n let showTooltip = Object.is(opts.tip, void 0) ? true : opts.tip;\n let cumulative = opts.agg || false;\n if (cumulative) {\n data = aggregate(data);\n }\n let margin = {\n top: 40,\n right: 0,\n bottom: 0,\n left: 0\n };\n let width = Number(container.node().getBoundingClientRect().width) - margin.left - margin.right;\n let height = width / ratio - margin.top - margin.bottom;\n let titlePadding = min([width / 10, 32]);\n let x = scaleTime().range([0, width]);\n let y = scaleLinear().range([height, 0]);\n let _area = area().x((d) => x(d.key)).y0(height).y1((d) => y(d.value));\n let valueline = line().x((d) => x(d.key)).y((d) => y(d.value));\n let svg = container.append(\"svg\").attr(\"width\", width + margin.left + margin.right).attr(\"height\", height + margin.top + margin.bottom).append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n x.domain(extent(data, (d) => d.key));\n y.domain([0, max(data, (d) => d.value)]).nice();\n let topLine = svg.append(\"path\").data([data]).attr(\"class\", \"line\").attr(\"d\", valueline);\n svg.append(\"path\").data([data]).attr(\"class\", \"area\").attr(\"d\", _area);\n if (showTooltip) {\n let circle = svg.append(\"circle\").attr(\"class\", \"circle\").attr(\"r\", 6).style(\"display\", \"none\");\n let tooltip = select(\"body\").append(\"div\").attr(\"id\", `${container.node().id}-metric-tooltip`).style(\"opacity\", 0);\n svg.on(\"mouseover\", () => {\n circle.style(\"display\", null);\n tooltip.style(\"opacity\", 1);\n }).on(\"mouseout\", () => {\n circle.style(\"display\", \"none\");\n tooltip.style(\"opacity\", 0);\n }).on(\"mousemove\", function(event) {\n let x0 = x.invert(pointer(event)[0]);\n let i = bisector((d2) => d2.key).left(data, x0, 1);\n let d0 = data[i - 1];\n let d1 = data[i];\n let d = x0 - d0.key > d1.key - x0 ? d1 : d0;\n let coords = {\n x: window.pageXOffset + container.node().getBoundingClientRect().left,\n y: window.pageYOffset + container.node().getBoundingClientRect().top\n };\n let tooltipContent = `\n \n ${timeFormat(\"%e %B %Y\")(d.key)}
\n ${d.value.toLocaleString()} ${objectName}\n
`;\n circle.attr(\"transform\", `translate(${x(d.key)},${y(d.value)})`);\n tooltip.html(tooltipContent).style(\"left\", `${coords.x + x(d.key)}px`).style(\"top\", `${coords.y + y(d.value)}px`);\n });\n }\n if (showAxis) {\n let xAxis = axisBottom(x).ticks(timeMonth).tickFormat(timeFormat(\"%b %y\")).tickSize(-height);\n let yAxis = axisLeft(y).ticks(5).tickSize(8);\n let _xAxis = (g2) => {\n g2.call(xAxis);\n g2.select(\".domain\").remove();\n g2.selectAll(\".tick line\").attr(\"class\", \"dashed\");\n g2.selectAll(\".tick text\").attr(\"y\", 6);\n };\n let _yAxis = (g2) => {\n g2.call(yAxis);\n g2.select(\".domain\").remove();\n g2.select(\".tick:first-of-type\").remove();\n g2.selectAll(\".tick text\").attr(\"text-anchor\", \"start\").attr(\"x\", 6);\n };\n svg.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(_xAxis);\n svg.append(\"g\").call(_yAxis);\n let g = svg.append(\"g\").data([data]).attr(\"transform\", (d) => `translate(${x(d[d.length - 1].key)},${y(d[d.length - 1].value)})`);\n g.append(\"circle\").attr(\"class\", \"circle\").attr(\"r\", 8);\n g.append(\"text\").attr(\"class\", \"sum\").attr(\"text-anchor\", \"end\").attr(\"dx\", -8 * 2).text((d) => d[d.length - 1].value.toLocaleString());\n } else {\n let g = svg.append(\"g\").attr(\"text-anchor\", \"start\").attr(\"transform\", `translate(${titlePadding},${titlePadding})`);\n let titleLines = 0;\n if (title.length) {\n g.append(\"text\").attr(\"x\", 0).attr(\"y\", 0).attr(\"class\", \"title\").text(title).call(function(fulltext, wrapwidth, start = 0) {\n fulltext.each(function() {\n let text = select(this);\n let word = \"\";\n let words = text.text().split(/\\s+/).reverse();\n let _line = [];\n let lineNumber = 0;\n let lineHeight = 1.1;\n let _x = text.attr(\"x\");\n let _y = text.attr(\"y\");\n let dy = 0;\n let tspan = text.text(null).append(\"tspan\").attr(\"x\", _x).attr(\"y\", _y).attr(\"dy\", `${dy}em`);\n while (word = words.pop()) {\n _line.push(word);\n tspan.text(_line.join(\" \"));\n if (tspan.node().getComputedTextLength() > wrapwidth) {\n _line.pop();\n tspan.text(_line.join(\" \"));\n _line = [word];\n tspan = text.append(\"tspan\").attr(\"x\", _x).attr(\"y\", _y).attr(\"dy\", `${++lineNumber * lineHeight + dy}em`).text(word);\n }\n }\n titleLines = lineNumber * lineHeight;\n });\n }, width - titlePadding * 2);\n }\n let fontSize = parseFloat(getComputedStyle(g.node()).fontSize);\n g.append(\"text\").attr(\"x\", 0).attr(\"dy\", title.length ? titlePadding * 2 + titleLines * fontSize : titlePadding * 1.25).attr(\"class\", \"sum\").text(data[data.length - 1].value.toLocaleString());\n }\n}\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nimport areachart from \"src/decidim/vizzs/areachart\";\n$(() => {\n const metricsData = {};\n const metricsContainer = {};\n const metricsParams = {};\n const query = () => {\n let metricsQuery = `metrics(names: ${metricsParams.names}, space_type: \"${metricsParams.spaceType}\", space_id: ${metricsParams.spaceId}) { name history { key value } }`;\n return { query: `{ ${metricsQuery} }` };\n };\n const parameterize = (metrics) => {\n metricsParams.names = JSON.stringify(metrics || []);\n metricsParams.spaceType = $(\"#metrics #metrics-space_type\").val() || null;\n metricsParams.spaceId = $(\"#metrics #metrics-space_id\").val() || null;\n };\n const fetch = (metrics) => $.post(window.Decidim.config.get(\"api_path\"), query(metrics));\n const downloadMetricData = (event) => {\n event.preventDefault();\n let metricName = $(event.target).parents(\".metric-downloader\").data(\"metric\");\n let csvContent = \"data:text/csv;charset=utf-8,\";\n csvContent += \"key,value\\r\\n\";\n metricsData[metricName].forEach((metricData) => {\n csvContent += `${metricData.key},${metricData.value}\\r\n`;\n });\n let link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodeURI(csvContent));\n link.setAttribute(\"download\", `${metricName}_metric_data.csv`);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n $(\".metric-chart:visible\").each((_index, container) => {\n metricsContainer[$(container).data(\"metric\")] = container;\n });\n $(\".metric-downloader\").each((_index, container) => {\n container.onclick = downloadMetricData;\n });\n if (!$.isEmptyObject(metricsContainer)) {\n parameterize(Object.keys(metricsContainer));\n fetch().then((response) => {\n if (response.data) {\n $.each(response.data.metrics, (_index, metricData) => {\n let container = metricsContainer[metricData.name];\n if (metricData.history.length === 0) {\n $(container).remove();\n return;\n }\n let info = $(container).data(\"info\");\n metricsData[metricData.name] = $.extend(true, [], metricData.history);\n areachart(__spreadValues({\n container: `#${container.id}`,\n data: metricData.history,\n title: info.title,\n objectName: info.object\n }, $(container).data()));\n });\n } else if (response.errors) {\n console.log(\"Something wrong happened when fetching metrics:\");\n $.each(response.errors, (_index, error) => {\n console.log(error.message);\n });\n $(\"#metrics\").remove();\n }\n }).fail((err) => {\n console.log(`Something wrong happened when fetching metrics: ${err.statusText}`);\n $(\"#metrics\").remove();\n });\n }\n});\n","import dayjs from \"dayjs\";\n$(() => {\n let sessionTimeOutEnabled = true;\n const $timeoutModal = $(\"#timeoutModal\");\n const timeoutInSeconds = parseInt($timeoutModal.data(\"session-timeout\"), 10);\n const secondsUntilTimeoutPath = $timeoutModal.data(\"seconds-until-timeout-path\");\n const heartbeatPath = $timeoutModal.data(\"heartbeat-path\");\n const interval = parseInt($timeoutModal.data(\"session-timeout-interval\"), 10);\n const preventTimeOutSeconds = $timeoutModal.data(\"prevent-timeout-seconds\");\n let endsAt = dayjs().add(timeoutInSeconds, \"seconds\");\n let lastAction = dayjs();\n const $continueSessionButton = $(\"#continueSession\");\n let lastActivityCheck = dayjs();\n const activityCheckInterval = 5 * 60;\n const preventTimeOutUntil = dayjs().add(preventTimeOutSeconds, \"seconds\");\n $continueSessionButton.on(\"click\", () => {\n window.Decidim.currentDialogs.timeoutModal.close();\n $(\".reveal-overlay\").css(\"display\", \"none\");\n lastActivityCheck = dayjs();\n });\n if (isNaN(interval)) {\n return;\n }\n if (!timeoutInSeconds) {\n return;\n }\n const disableSessionTimeout = () => {\n sessionTimeOutEnabled = false;\n };\n const enableSessionTimeout = () => {\n sessionTimeOutEnabled = true;\n };\n const setTimer = (secondsUntilExpiration) => {\n if (!secondsUntilExpiration) {\n return;\n }\n endsAt = dayjs().add(secondsUntilExpiration, \"seconds\");\n };\n const sessionTimeLeft = () => {\n return $.ajax({\n method: \"GET\",\n url: secondsUntilTimeoutPath,\n contentType: \"application/json\",\n headers: {\n \"X-CSRF-Token\": $(\"meta[name=csrf-token]\").attr(\"content\")\n }\n });\n };\n const heartbeat = () => {\n return $.ajax({\n method: \"POST\",\n url: heartbeatPath,\n contentType: \"application/javascript\"\n });\n };\n const userBeenActiveSince = (seconds) => {\n return (dayjs() - lastAction) / 1e3 < seconds;\n };\n const exitInterval = setInterval(() => {\n const timeSinceLastActivityCheckInSeconds = Math.round((dayjs() - lastActivityCheck) / 1e3);\n if (!window.Decidim.currentDialogs.timeoutModal.isOpen && timeSinceLastActivityCheckInSeconds >= activityCheckInterval) {\n lastActivityCheck = dayjs();\n if (userBeenActiveSince(activityCheckInterval)) {\n heartbeat();\n return;\n }\n }\n const timeRemaining = Math.round((endsAt - dayjs()) / 1e3);\n if (timeRemaining > 170) {\n return;\n }\n if (dayjs() < preventTimeOutUntil) {\n heartbeat();\n return;\n }\n sessionTimeLeft().then((result) => {\n const secondsUntilSessionExpires = result.seconds_remaining;\n setTimer(secondsUntilSessionExpires);\n if (!sessionTimeOutEnabled) {\n heartbeat();\n } else if (secondsUntilSessionExpires <= 90) {\n $timeoutModal.find(\"#reveal-hidden-sign-out\")[0].click();\n } else if (secondsUntilSessionExpires <= 150) {\n window.Decidim.currentDialogs.timeoutModal.open();\n }\n });\n }, interval);\n $(document).mousemove(() => {\n lastAction = dayjs();\n });\n $(document).scroll(() => {\n lastAction = dayjs();\n });\n $(document).keypress(() => {\n lastAction = dayjs();\n });\n $(document).on(\"ajax:complete\", () => {\n setTimer(timeoutInSeconds);\n });\n $(document).ajaxComplete((_event, _xhr, settings) => {\n if (settings && settings.url === secondsUntilTimeoutPath) {\n return;\n }\n setTimer(timeoutInSeconds);\n });\n window.addEventListener(\"beforeunload\", () => {\n clearInterval(exitInterval);\n return;\n });\n window.Decidim.enableSessionTimeout = enableSessionTimeout;\n window.Decidim.disableSessionTimeout = disableSessionTimeout;\n});\n","import Rails from \"@rails/ujs\";\nclass ConfirmDialog {\n constructor(sourceElement) {\n this.$modal = $(\"#confirm-modal\");\n this.$source = sourceElement;\n this.$content = $(\"[data-confirm-modal-content]\", this.$modal);\n this.$buttonConfirm = $(\"[data-confirm-ok]\", this.$modal);\n this.$buttonCancel = $(\"[data-confirm-cancel]\", this.$modal);\n window.Decidim.currentDialogs[\"confirm-modal\"].open();\n }\n confirm(message) {\n this.$content.html(message);\n this.$buttonConfirm.off(\"click\");\n this.$buttonCancel.off(\"click\");\n return new Promise((resolve) => {\n this.$buttonConfirm.on(\"click\", (ev) => {\n ev.preventDefault();\n window.Decidim.currentDialogs[\"confirm-modal\"].close();\n resolve(true);\n this.$source.focus();\n });\n this.$buttonCancel.on(\"click\", (ev) => {\n ev.preventDefault();\n window.Decidim.currentDialogs[\"confirm-modal\"].close();\n resolve(false);\n this.$source.focus();\n });\n });\n }\n}\nconst allowAction = (ev, element) => {\n const message = $(element).data(\"confirm\");\n if (!message) {\n return true;\n }\n if (!Rails.fire(element, \"confirm\")) {\n return false;\n }\n const dialog = new ConfirmDialog(\n $(element)\n );\n dialog.confirm(message).then((answer) => {\n const completed = Rails.fire(element, \"confirm:complete\", [answer]);\n if (answer && completed) {\n $(element).data(\"confirm\", null);\n $(element).removeAttr(\"data-confirm\");\n if (ev.type === \"click\" && ($(element).is('button[type=\"submit\"]') || $(element).is('input[type=\"submit\"]'))) {\n $(element).parents(\"form\").submit();\n } else {\n let origEv = ev.originalEvent || ev;\n let newEv = origEv;\n if (typeof Event === \"function\") {\n newEv = new origEv.constructor(origEv.type, origEv);\n }\n ev.target.dispatchEvent(newEv);\n }\n }\n });\n return false;\n};\nconst handleConfirm = (ev, element) => {\n if (!allowAction(ev, element)) {\n Rails.stopEverything(ev);\n }\n};\nconst getMatchingEventTarget = (ev, selector) => {\n let target = ev.target;\n while (!(!(target instanceof Element) || Rails.matches(target, selector))) {\n target = target.parentNode;\n }\n if (target instanceof Element) {\n return target;\n }\n return null;\n};\nconst handleDocumentEvent = (ev, matchSelectors) => {\n return matchSelectors.some((currentSelector) => {\n let target = getMatchingEventTarget(ev, currentSelector);\n if (target === null) {\n return false;\n }\n handleConfirm(ev, target);\n return true;\n });\n};\ndocument.addEventListener(\"click\", (ev) => {\n return handleDocumentEvent(ev, [\n Rails.linkClickSelector,\n Rails.buttonClickSelector,\n Rails.formInputClickSelector\n ]);\n});\ndocument.addEventListener(\"change\", (ev) => {\n return handleDocumentEvent(ev, [Rails.inputChangeSelector]);\n});\ndocument.addEventListener(\"submit\", (ev) => {\n return handleDocumentEvent(ev, [Rails.formSubmitSelector]);\n});\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n $(Rails.formInputClickSelector).on(\"click.confirm\", (ev) => {\n handleConfirm(ev, getMatchingEventTarget(ev, Rails.formInputClickSelector));\n });\n});\n","import { pushState, registerCallback } from \"src/decidim/history\";\nconst initializeListingOptionsMenu = (options) => {\n $(document).on(\"click\", `${options.containerSelector} a`, (event) => {\n const $target = $(event.target);\n $target.parents(\".menu\").find(\"a:first\").text($target.text());\n pushState($target.attr(\"href\"));\n });\n registerCallback(options.callbackName, () => {\n const url = window.location.toString();\n const match = url.match(/${options.urlParameter}=([^&]*)/);\n const $targetMenu = $(`${options.containerSelector} .menu`);\n let value = $targetMenu.find(\".menu a:first\").data(options.dataAttribute);\n if (match) {\n value = match[1];\n }\n const linkText = $targetMenu.find(`.menu a[data-${options.dataAttribute}=\"${value}\"]`).text();\n $targetMenu.find(\"a:first\").text(linkText);\n });\n};\n$(() => {\n initializeListingOptionsMenu({\n containerSelector: \".order-by\",\n callbackName: \"orders\",\n urlParameter: \"order\",\n dataAttribute: \"order\"\n });\n initializeListingOptionsMenu({\n containerSelector: \".results-per-page\",\n callbackName: \"results_per_page\",\n urlParameter: \"per_page\",\n dataAttribute: \"per-page-option\"\n });\n});\n","import dayjs from \"dayjs\";\n$(() => {\n const $impersonationWarning = $(\"[data-impersonation-warning]\");\n if ($impersonationWarning.length) {\n const endsAt = dayjs($impersonationWarning.data(\"session-ends-at\"));\n const exitInterval = setInterval(() => {\n const diff = (endsAt - dayjs()) / 6e4;\n const diffInMinutes = Math.round(diff);\n $impersonationWarning.find(\".minutes\").html(diffInMinutes);\n if (diff <= 0) {\n window.location.reload();\n }\n }, 1e3);\n window.addEventListener(\"beforeunload\", () => {\n clearInterval(exitInterval);\n return;\n });\n }\n});\n","var sparkMd5 = {\n exports: {}\n};\n\n(function(module, exports) {\n (function(factory) {\n {\n module.exports = factory();\n }\n })((function(undefined$1) {\n var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n function md5cycle(x, k) {\n var a = x[0], b = x[1], c = x[2], d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\", j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n return s;\n }\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function() {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function(from, to) {\n var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n if (to !== undefined$1) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [], length = hex.length, x;\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n function SparkMD5() {\n this.reset();\n }\n SparkMD5.prototype.append = function(str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n SparkMD5.prototype.appendBinary = function(contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length, i;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n SparkMD5.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.prototype.reset = function() {\n this._buff = \"\";\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.prototype.getState = function() {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n SparkMD5.prototype.setState = function(state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n SparkMD5.prototype.destroy = function() {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n SparkMD5.prototype._finish = function(tail, length) {\n var i = length, tmp, lo, hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n SparkMD5.hash = function(str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n SparkMD5.hashBinary = function(content, raw) {\n var hash = md51(content), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n SparkMD5.ArrayBuffer = function() {\n this.reset();\n };\n SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n this._length += arr.byteLength;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.ArrayBuffer.prototype.reset = function() {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.getState = function() {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n }));\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\n\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nclass FileChecksum {\n static create(file, callback) {\n const instance = new FileChecksum(file);\n instance.create(callback);\n }\n constructor(file) {\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n create(callback) {\n this.callback = callback;\n this.md5Buffer = new SparkMD5.ArrayBuffer;\n this.fileReader = new FileReader;\n this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n this.readNextChunk();\n }\n fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n if (!this.readNextChunk()) {\n const binaryDigest = this.md5Buffer.end(true);\n const base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n fileReaderDidError(event) {\n this.callback(`Error reading ${this.file.name}`);\n }\n readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n const start = this.chunkIndex * this.chunkSize;\n const end = Math.min(start + this.chunkSize, this.file.size);\n const bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n}\n\nfunction getMetaValue(name) {\n const element = findElement(document.head, `meta[name=\"${name}\"]`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nfunction findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n const elements = root.querySelectorAll(selector);\n return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type, eventInit = {}) {\n const {disabled: disabled} = element;\n const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n const event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n return event;\n}\n\nfunction toArray(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n}\n\nclass BlobRecord {\n constructor(file, checksum, url, customHeaders = {}) {\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest;\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n Object.keys(customHeaders).forEach((headerKey => {\n this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n }));\n const csrfToken = getMetaValue(\"csrf-token\");\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n }\n get status() {\n return this.xhr.status;\n }\n get response() {\n const {responseType: responseType, response: response} = this.xhr;\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n const {response: response} = this;\n const {direct_upload: direct_upload} = response;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n requestDidError(event) {\n this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n }\n toJSON() {\n const result = {};\n for (const key in this.attributes) {\n result[key] = this.attributes[key];\n }\n return result;\n }\n}\n\nclass BlobUpload {\n constructor(blob) {\n this.blob = blob;\n this.file = blob.file;\n const {url: url, headers: headers} = blob.directUploadData;\n this.xhr = new XMLHttpRequest;\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n for (const key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n }\n create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n requestDidLoad(event) {\n const {status: status, response: response} = this.xhr;\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n requestDidError(event) {\n this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n }\n}\n\nlet id = 0;\n\nclass DirectUpload {\n constructor(file, url, delegate, customHeaders = {}) {\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n this.customHeaders = customHeaders;\n }\n create(callback) {\n FileChecksum.create(this.file, ((error, checksum) => {\n if (error) {\n callback(error);\n return;\n }\n const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create((error => {\n if (error) {\n callback(error);\n } else {\n const upload = new BlobUpload(blob);\n notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create((error => {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n }));\n }\n }));\n }));\n }\n}\n\nfunction notify(object, methodName, ...messages) {\n if (object && typeof object[methodName] == \"function\") {\n return object[methodName](...messages);\n }\n}\n\nclass DirectUploadController {\n constructor(input, file) {\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n start(callback) {\n const hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(((error, attributes) => {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n this.dispatch(\"end\");\n callback(error);\n }));\n }\n uploadRequestDidProgress(event) {\n const progress = event.loaded / event.total * 100;\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n get url() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n dispatch(name, detail = {}) {\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, `direct-upload:${name}`, {\n detail: detail\n });\n }\n dispatchError(error) {\n const event = this.dispatch(\"error\", {\n error: error\n });\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n directUploadWillStoreFileWithXHR(xhr) {\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n }\n}\n\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nclass DirectUploadsController {\n constructor(form) {\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n }\n start(callback) {\n const controllers = this.createDirectUploadControllers();\n const startNextController = () => {\n const controller = controllers.shift();\n if (controller) {\n controller.start((error => {\n if (error) {\n callback(error);\n this.dispatch(\"end\");\n } else {\n startNextController();\n }\n }));\n } else {\n callback();\n this.dispatch(\"end\");\n }\n };\n this.dispatch(\"start\");\n startNextController();\n }\n createDirectUploadControllers() {\n const controllers = [];\n this.inputs.forEach((input => {\n toArray(input.files).forEach((file => {\n const controller = new DirectUploadController(input, file);\n controllers.push(controller);\n }));\n }));\n return controllers;\n }\n dispatch(name, detail = {}) {\n return dispatchEvent(this.form, `direct-uploads:${name}`, {\n detail: detail\n });\n }\n}\n\nconst processingAttribute = \"data-direct-uploads-processing\";\n\nconst submitButtonsByForm = new WeakMap;\n\nlet started = false;\n\nfunction start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm, true);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n}\n\nfunction didClick(event) {\n const button = event.target.closest(\"button, input\");\n if (button && button.type === \"submit\" && button.form) {\n submitButtonsByForm.set(button.form, button);\n }\n}\n\nfunction didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n}\n\nfunction handleFormSubmissionEvent(event) {\n const form = event.target;\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n const controller = new DirectUploadsController(form);\n const {inputs: inputs} = controller;\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start((error => {\n form.removeAttribute(processingAttribute);\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n }));\n }\n}\n\nfunction submitForm(form) {\n let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n if (button) {\n const {disabled: disabled} = button;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n input.disabled = true;\n}\n\nfunction enable(input) {\n input.disabled = false;\n}\n\nfunction autostart() {\n if (window.ActiveStorage) {\n start();\n }\n}\n\nsetTimeout(autostart, 1);\n\nexport { DirectUpload, DirectUploadController, DirectUploadsController, start };\n","import { DirectUpload } from \"@rails/activestorage\";\nexport class Uploader {\n constructor(modal, options) {\n this.modal = modal;\n this.options = options;\n this.validationSent = false;\n this.errors = [];\n if (modal.options.maxFileSize && options.file.size > modal.options.maxFileSize) {\n this.errors = [modal.locales.file_size_too_large];\n } else {\n this.upload = new DirectUpload(options.file, options.url, this);\n }\n }\n validate(blobId) {\n const callback = (data) => {\n let errors = [];\n for (const [, value] of Object.entries(data)) {\n errors = errors.concat(value);\n }\n if (errors.length) {\n this.errors = errors;\n }\n };\n if (!this.validationSent) {\n let property = this.modal.options.addAttribute;\n if (this.modal.options.titled) {\n property = \"file\";\n }\n let url = this.modal.input.dataset.uploadValidationsUrl;\n const params = new URLSearchParams({\n resourceClass: this.modal.options.resourceClass,\n property,\n blob: blobId,\n formClass: this.modal.options.formObjectClass\n });\n return fetch(`${url}?${params}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\": $(\"meta[name=csrf-token]\").attr(\"content\")\n }\n }).then((response) => response.json()).then((data) => {\n this.validationSent = true;\n callback(data);\n });\n }\n return Promise.resolve();\n }\n // The following method come from @rails/activestorage\n // {@link https://edgeguides.rubyonrails.org/active_storage_overview.html#direct-upload-javascript-events Active Storage Rails guide}\n directUploadWillStoreFileWithXHR(request) {\n request.upload.addEventListener(\"progress\", ({ loaded, total }) => this.modal.setProgressBar(this.options.attachmentName, Math.floor(loaded / total * 100)));\n }\n}\n","export const truncateFilename = (filename, maxLength = 31) => {\n if (filename.length <= maxLength) {\n return filename;\n }\n const charactersFromBegin = Math.floor(maxLength / 2) - 3;\n const charactersFromEnd = maxLength - charactersFromBegin - 3;\n return `${filename.slice(0, charactersFromBegin)}...${filename.slice(-charactersFromEnd)}`;\n};\n","export const escapeHtml = (text) => {\n if (!text) {\n return \"\";\n }\n const el = document.createElement(\"div\");\n el.appendChild(document.createTextNode(text));\n return el.innerHTML;\n};\nexport const escapeQuotes = (text) => {\n if (!text) {\n return \"\";\n }\n return text.replace(/\"/g, \""\");\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\nimport { Uploader } from \"src/decidim/direct_uploads/uploader\";\nimport icon from \"src/decidim/icon\";\nimport { truncateFilename } from \"src/decidim/direct_uploads/upload_utility\";\nimport { escapeHtml, escapeQuotes } from \"src/decidim/utilities/text\";\nconst STATUS = {\n VALIDATED: \"validated\",\n ERROR: \"error\"\n};\nexport default class UploadModal {\n constructor(button, options = {}) {\n this.button = button;\n let providedOptions = {};\n try {\n providedOptions = JSON.parse(button.dataset.upload);\n } catch (_e) {\n }\n this.options = Object.assign(providedOptions, options);\n this.modal = document.querySelector(`#${button.dataset.dialogOpen}`);\n this.saveButton = this.modal.querySelector(\"button[data-dropzone-save]\");\n this.cancelButton = this.modal.querySelector(\"button[data-dropzone-cancel]\");\n this.modalTitle = this.modal.querySelector(\"[data-dialog-title]\");\n this.dropZone = this.modal.querySelector(\"[data-dropzone]\");\n this.emptyItems = this.modal.querySelector(\"[data-dropzone-no-items]\");\n this.uploadItems = this.modal.querySelector(\"[data-dropzone-items]\");\n this.input = this.dropZone.querySelector(\"input\");\n this.items = [];\n this.attachmentCounter = 0;\n this.locales = JSON.parse(this.uploadItems.dataset.locales);\n this.updateDropZone();\n }\n uploadFiles(files) {\n if (this.options.multiple) {\n Array.from(files).forEach((file) => this.uploadFile(file));\n } else if (!this.uploadItems.children.length) {\n this.uploadFile(files[0]);\n }\n }\n uploadFile(file) {\n const uploader = new Uploader(this, {\n file,\n url: this.input.dataset.directUploadUrl,\n attachmentName: file.name\n });\n const item = this.createUploadItem(file, uploader.errors);\n this.uploadItems.appendChild(item);\n if (uploader.errors.length) {\n this.updateDropZone();\n } else {\n uploader.upload.create((error, blob) => {\n if (error) {\n uploader.errors = [error];\n this.uploadItems.replaceChild(this.createUploadItem(file, [error], { value: 100 }), item);\n this.updateDropZone();\n } else {\n file.hiddenField = blob.signed_id;\n uploader.validate(blob.signed_id).then(() => {\n if (uploader.errors.length) {\n this.uploadItems.replaceChild(this.createUploadItem(file, uploader.errors, { value: 100 }), item);\n } else {\n this.items.push(file);\n this.autoloadImage(item, file);\n }\n this.updateDropZone();\n });\n }\n });\n }\n }\n autoloadImage(container, file) {\n if (!/image/.test(file.type)) {\n return;\n }\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = ({ target: { result } }) => {\n const img = container.querySelector(\"img\");\n img.src = result;\n };\n }\n preloadFiles(element) {\n return __async(this, null, function* () {\n const { src } = element.querySelector(\"img\") || {};\n let buffer = \"\";\n let type = \"\";\n if (src) {\n buffer = yield fetch(src).then((res) => res.arrayBuffer());\n type = \"image/*\";\n }\n const file = new File([buffer], element.dataset.filename, { type });\n const item = this.createUploadItem(file, [], __spreadProps(__spreadValues({}, element.dataset), { value: 100 }));\n file.attachmentId = element.dataset.attachmentId;\n file.hiddenField = element.dataset.hiddenField;\n this.items.push(file);\n this.uploadItems.appendChild(item);\n this.autoloadImage(item, file);\n this.updateDropZone();\n });\n }\n getOrdinalNumber() {\n const nextOrdinalNumber = this.attachmentCounter;\n this.attachmentCounter += 1;\n return nextOrdinalNumber;\n }\n updateDropZone() {\n const { children: files } = this.uploadItems;\n const inputHasFiles = files.length > 0;\n this.uploadItems.hidden = !inputHasFiles;\n this.saveButton.disabled = Array.from(files).filter(({ dataset: { state } }) => state === STATUS.ERROR).length > 0;\n const continueUpload = !files.length || this.options.multiple;\n this.input.disabled = !continueUpload;\n if (continueUpload) {\n this.emptyItems.classList.remove(\"is-disabled\");\n this.emptyItems.querySelector(\"label\").removeAttribute(\"disabled\");\n } else {\n this.emptyItems.classList.add(\"is-disabled\");\n this.emptyItems.querySelector(\"label\").disabled = true;\n }\n }\n createUploadItem(file, errors, opts = {}) {\n const okTemplate = `\n
\n ${escapeHtml(truncateFilename(file.name))}\n `;\n const errorTemplate = `\n ${icon(\"error-warning-line\")}
\n \n
${escapeHtml(truncateFilename(file.name))}\n
${this.locales.validation_error}\n
${errors.map((error) => `- ${error}
`).join(\"\\n\")}
\n
\n `;\n const titleTemplate = `\n
\n \n
\n \n ${escapeHtml(truncateFilename(file.name))}\n
\n
\n \n \n
\n
\n `;\n let state = STATUS.VALIDATED;\n let content = okTemplate;\n let template = \"ok\";\n if (errors.length) {\n state = STATUS.ERROR;\n content = errorTemplate;\n template = \"error\";\n }\n if (!errors.length && this.options.titled) {\n content = titleTemplate;\n template = \"titled\";\n }\n const attachmentId = opts.attachmentId ? `data-attachment-id=\"${opts.attachmentId}\"` : \"\";\n const fullTemplate = `\n \n \n ${content.trim()}\n \n
\n \n `;\n const div = document.createElement(\"div\");\n div.innerHTML = fullTemplate.trim();\n const container = div.firstChild;\n container.querySelector(\"button\").addEventListener(\"click\", this.handleButtonClick.bind(this));\n return container;\n }\n handleButtonClick({ currentTarget }) {\n const item = currentTarget.closest(\"[data-filename]\");\n const { filename } = item.dataset;\n item.remove();\n const ix = this.items.findIndex(({ name }) => name === filename);\n if (ix > -1) {\n this.items[ix].removable = true;\n }\n this.updateDropZone();\n }\n setProgressBar(name, value) {\n this.uploadItems.querySelector(`[data-filename=\"${escapeQuotes(name)}\"] progress`).value = value;\n }\n updateAddAttachmentsButton() {\n if (this.uploadItems.children.length === 0) {\n this.button.innerHTML = this.modalTitle.dataset.addlabel;\n } else {\n this.button.innerHTML = this.modalTitle.dataset.editlabel;\n }\n const requiredCheckbox = this.button.nextElementSibling;\n if (requiredCheckbox) {\n requiredCheckbox.checked = this.uploadItems.children.length > 0;\n }\n }\n cleanAllFiles() {\n this.items = [];\n this.uploadItems.textContent = \"\";\n this.updateDropZone();\n }\n}\n","import UploadModal from \"src/decidim/direct_uploads/upload_modal\";\nimport { truncateFilename } from \"src/decidim/direct_uploads/upload_utility\";\nimport { escapeHtml, escapeQuotes } from \"src/decidim/utilities/text\";\nconst updateModalTitle = (modal) => {\n if (modal.uploadItems.children.length === 0) {\n modal.modalTitle.innerHTML = modal.modalTitle.dataset.addlabel;\n } else {\n modal.modalTitle.innerHTML = modal.modalTitle.dataset.editlabel;\n }\n modal.updateDropZone();\n};\nconst updateActiveUploads = (modal) => {\n const defaultFile = document.getElementById(`default-active-${modal.modal.id}`);\n if (defaultFile) {\n defaultFile.remove();\n }\n const files = document.querySelector(`[data-active-uploads=${modal.modal.id}]`);\n const previousId = Array.from(files.querySelectorAll(\"[type=hidden][id]\"));\n const isMultiple = modal.options.multiple;\n files.textContent = \"\";\n const [removeFiles, addFiles] = [modal.items.filter(({ removable }) => removable), modal.items.filter(({ removable }) => !removable)];\n addFiles.forEach((file, ix) => {\n let title = truncateFilename(file.name, 19);\n let hidden = \"\";\n if (file.hiddenField) {\n const fileField = isMultiple ? `${modal.options.resourceName}[${modal.options.addAttribute}][${ix}][file]` : `${modal.options.resourceName}[${modal.options.addAttribute}]`;\n hidden = ``;\n } else {\n const fileField = isMultiple ? `${modal.options.resourceName}[${modal.options.addAttribute}][${ix}][id]` : `${modal.options.resourceName}[${modal.options.addAttribute}]`;\n const attributes = Array.from(previousId.find(({ id }) => id === file.attachmentId).attributes).reduce((acc, { name, value }) => `${acc} ${name}=\"${value}\"`, \"\");\n hidden = ``;\n hidden += ``;\n }\n if (modal.options.titled) {\n const titleValue = modal.modal.querySelectorAll('input[type=\"text\"]')[ix].value;\n const titleField = `${modal.options.resourceName}[${modal.options.addAttribute}][${ix}][title]`;\n hidden += ``;\n title = titleValue;\n }\n const attachmentIdOrHiddenField = file.attachmentId ? `data-attachment-id=\"${file.attachmentId}\"` : `data-hidden-field=\"${file.hiddenField}\"`;\n const template = `\n \n ${/image/.test(file.type) && `
` || \"\"}\n
${escapeHtml(title)} (${escapeHtml(truncateFilename(file.name))})\n ${hidden}\n
\n `;\n const div = document.createElement(\"div\");\n div.innerHTML = template.trim();\n const container = div.firstChild;\n modal.autoloadImage(container, file);\n files.appendChild(container);\n });\n removeFiles.forEach(() => {\n const div = document.createElement(\"div\");\n div.innerHTML = ``;\n files.appendChild(div.firstChild);\n });\n modal.updateAddAttachmentsButton();\n};\nconst highlightDropzone = (modal) => {\n modal.emptyItems.classList.add(\"is-dragover\");\n modal.uploadItems.classList.add(\"is-dragover\");\n};\nconst resetDropzone = (modal) => {\n modal.emptyItems.classList.remove(\"is-dragover\");\n modal.uploadItems.classList.remove(\"is-dragover\");\n};\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const attachmentButtons = document.querySelectorAll(\"button[data-upload]\");\n attachmentButtons.forEach((attachmentButton) => {\n const modal = new UploadModal(attachmentButton);\n const files = document.querySelector(`[data-active-uploads=${modal.modal.id}]`);\n [...files.children].forEach((child) => modal.preloadFiles(child));\n modal.input.addEventListener(\"change\", (event) => modal.uploadFiles(event.target.files));\n modal.button.addEventListener(\"click\", (event) => event.preventDefault() || modal.items.length === 0 && [...files.children].forEach((child) => child.tagName === \"DIV\" && modal.preloadFiles(child)) || updateModalTitle(modal));\n modal.dropZone.addEventListener(\"dragover\", (event) => event.preventDefault() || highlightDropzone(modal));\n modal.dropZone.addEventListener(\"dragleave\", () => resetDropzone(modal));\n modal.dropZone.addEventListener(\"drop\", (event) => event.preventDefault() || resetDropzone(modal) || modal.uploadFiles(event.dataTransfer.files));\n modal.saveButton.addEventListener(\"click\", (event) => event.preventDefault() || updateActiveUploads(modal));\n modal.cancelButton.addEventListener(\"click\", (event) => event.preventDefault() || modal.cleanAllFiles());\n });\n});\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import Cookies from \"js-cookie\";\nclass ConsentManager {\n // Options should contain the following keys:\n // - modal - HTML element of the data consent modal (e.g. \"Foo bar
\")\n // - categories - Available data consent categories (e.g. [\"essential\", \"preferences\", \"analytics\", \"marketing\"])\n // - cookieName - Name of the cookie saved in the browser (e.g. \"decidim-consent\")\n // - warningElement - HTML element to be shown when user has not given the necessary data consent to display the content.\n constructor(options) {\n this.modal = options.modal;\n this.categories = options.categories;\n this.cookieName = options.cookieName;\n this.cookie = Cookies.get(this.cookieName);\n this.warningElement = options.warningElement;\n if (this.cookie) {\n this.updateState(JSON.parse(this.cookie));\n } else {\n this.updateState({});\n }\n }\n updateState(newState) {\n this.state = newState;\n Cookies.set(this.cookieName, JSON.stringify(this.state), {\n domain: document.location.host.split(\":\")[0],\n sameSite: \"Lax\",\n expires: 365,\n secure: window.location.protocol === \"https:\"\n });\n this.updateModalSelections();\n this.triggerState();\n }\n triggerJavaScripts() {\n document.querySelectorAll(\"script[type='text/plain'][data-consent]\").forEach((script) => {\n if (this.state[script.dataset.consent]) {\n const activeScript = document.createElement(\"script\");\n if (script.src.length > 0) {\n activeScript.src = script.src;\n } else {\n activeScript.innerHTML = script.innerHTML;\n }\n script.parentNode.replaceChild(activeScript, script);\n }\n });\n const event = new CustomEvent(\"dataconsent\", { detail: this.state });\n document.dispatchEvent(event);\n }\n triggerIframes() {\n if (this.allAccepted()) {\n document.querySelectorAll(\".disabled-iframe\").forEach((original) => {\n if (original.childNodes && original.childNodes.length) {\n const content = Array.from(original.childNodes).find((childNode) => {\n return childNode.nodeType === Node.COMMENT_NODE;\n });\n if (!content) {\n return;\n }\n const newElement = document.createElement(\"div\");\n newElement.innerHTML = content.nodeValue;\n original.parentNode.replaceChild(newElement.firstElementChild, original);\n }\n });\n } else {\n document.querySelectorAll(\"iframe\").forEach((original) => {\n const newElement = document.createElement(\"div\");\n newElement.className = \"disabled-iframe\";\n newElement.appendChild(document.createComment(`${original.outerHTML}`));\n original.parentNode.replaceChild(newElement, original);\n });\n }\n }\n triggerWarnings() {\n document.querySelectorAll(\".disabled-iframe\").forEach((original) => {\n if (original.querySelector(\"[data-dataconsent-warning]\")) {\n return;\n }\n let cloned = this.warningElement.cloneNode(true);\n cloned.classList.remove(\"hide\");\n cloned.hidden = false;\n original.appendChild(cloned);\n });\n }\n triggerState() {\n this.triggerJavaScripts();\n this.triggerIframes();\n this.triggerWarnings();\n }\n allAccepted() {\n return this.categories.every((category) => {\n return this.state[category] === true;\n });\n }\n updateModalSelections() {\n const categoryElements = this.modal.querySelectorAll(\"[data-id]\");\n categoryElements.forEach((categoryEl) => {\n const categoryInput = categoryEl.querySelector(\"input\");\n if (this.state && this.state[categoryInput.name]) {\n categoryInput.checked = true;\n } else if (!categoryInput.disabled) {\n categoryInput.checked = false;\n }\n });\n }\n saveSettings(newState) {\n this.updateState(newState);\n }\n acceptAll() {\n const newState = {};\n this.categories.forEach((category) => {\n newState[category] = true;\n });\n this.updateState(newState);\n }\n rejectAll() {\n this.updateState({\n essential: true\n });\n }\n getState() {\n return this.state;\n }\n}\nexport default ConsentManager;\n","import ConsentManager from \"src/decidim/data_consent/consent_manager\";\nconst initDialog = (manager) => {\n if (Object.keys(manager.state).length > 0) {\n return;\n }\n const dialogWrapper = document.querySelector(\"#dc-dialog-wrapper\");\n dialogWrapper.hidden = false;\n const acceptAllButton = dialogWrapper.querySelector(\"#dc-dialog-accept\");\n const rejectAllButton = dialogWrapper.querySelector(\"#dc-dialog-reject\");\n const settingsButton = dialogWrapper.querySelector(\"#dc-dialog-settings\");\n acceptAllButton.addEventListener(\"click\", () => {\n manager.acceptAll();\n dialogWrapper.hidden = true;\n });\n rejectAllButton.addEventListener(\"click\", () => {\n manager.rejectAll();\n dialogWrapper.hidden = true;\n });\n settingsButton.addEventListener(\"click\", () => {\n dialogWrapper.hidden = true;\n });\n};\nconst initModal = (manager) => {\n const acceptAllButton = manager.modal.querySelector(\"#dc-modal-accept\");\n const rejectAllButton = manager.modal.querySelector(\"#dc-modal-reject\");\n const saveSettingsButton = manager.modal.querySelector(\"#dc-modal-save\");\n acceptAllButton.addEventListener(\"click\", () => {\n manager.acceptAll();\n });\n rejectAllButton.addEventListener(\"click\", () => {\n manager.rejectAll();\n });\n saveSettingsButton.addEventListener(\"click\", () => {\n let newState = {};\n manager.categories.forEach((category) => {\n const accepted = manager.modal.querySelector(`input[name='${category}']`).checked;\n if (accepted) {\n newState[category] = true;\n }\n });\n manager.saveSettings(newState);\n });\n};\nconst initDisabledIframes = (manager) => {\n const disabledIframes = document.querySelectorAll(\".disabled-iframe\");\n if (manager.allAccepted()) {\n disabledIframes.forEach((elem) => {\n const iframe = document.createElement(\"iframe\");\n iframe.setAttribute(\"src\", elem.getAttribute(\"src\"));\n iframe.className = elem.classList.toString();\n iframe.setAttribute(\"allowfullscreen\", elem.getAttribute(\"allowfullscreen\"));\n iframe.setAttribute(\"frameborder\", elem.getAttribute(\"frameborder\"));\n elem.parentElement.appendChild(iframe);\n elem.remove();\n });\n }\n};\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const modal = document.querySelector(\"#dc-modal\");\n if (!modal) {\n return;\n }\n const categories = [...modal.querySelectorAll(\"[data-id]\")].map((el) => el.dataset.id);\n const manager = new ConsentManager({\n modal,\n categories,\n cookieName: window.Decidim.config.get(\"consent_cookie_name\"),\n warningElement: document.querySelector(\"[data-dataconsent-warning]\")\n });\n initDisabledIframes(manager);\n initModal(manager, categories);\n initDialog(manager);\n});\n","import { screens } from \"tailwindcss/defaultTheme\";\nlet prevScroll = window.scrollY;\nconst stickyHeader = document.querySelector(\"[data-sticky-header]\");\nconst footer = document.querySelector(\"footer\");\nconst stickyButtons = document.querySelectorAll(\"[data-sticky-buttons]\");\nconst isElementInViewport = (element) => {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight);\n};\nconst adjustCtasButtons = () => {\n if (!stickyButtons || !stickyButtons.length) {\n return;\n }\n let visibleButtons = Array.from(stickyButtons).filter(isElementInViewport);\n if (visibleButtons.length > 0) {\n const marginBottom = Math.max(...visibleButtons.map((ctasButton) => ctasButton.offsetHeight));\n footer.style.marginBottom = `${marginBottom}px`;\n } else {\n footer.style.marginBottom = 0;\n }\n};\nconst fixMenuBarContainerMargin = () => {\n if (!stickyHeader) {\n return;\n }\n const isMaxScreenSize = (key) => {\n return window.matchMedia(`(max-width: ${screens[key]})`).matches;\n };\n const menuBarContainer = document.querySelector(\"#menu-bar-container\");\n const marginTop = isMaxScreenSize(\"md\") ? stickyHeader.offsetHeight : 0;\n menuBarContainer.style.marginTop = `${marginTop}px`;\n};\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n fixMenuBarContainerMargin();\n});\nwindow.addEventListener(\"resize\", () => {\n fixMenuBarContainerMargin();\n});\nif (stickyHeader) {\n document.addEventListener(\"scroll\", () => {\n fixMenuBarContainerMargin();\n const header = document.getElementById(\"main-bar\").offsetParent;\n if (header && window.getComputedStyle(stickyHeader).position === \"fixed\") {\n let currentScroll = window.scrollY;\n let goingDown = prevScroll > currentScroll;\n let change = Math.abs(prevScroll - currentScroll);\n if (change > 5) {\n if (goingDown || currentScroll < stickyHeader.offsetHeight) {\n stickyHeader.style.top = 0;\n } else {\n stickyHeader.style.top = `-${stickyHeader.offsetHeight}px`;\n }\n prevScroll = currentScroll;\n }\n adjustCtasButtons();\n }\n });\n document.addEventListener(\"on:toggle\", () => {\n adjustCtasButtons();\n });\n}\n;\n","import { p as promiseResolve, b as bootstrapLazy } from './index-2c898150.js';\n\n/*\n Stencil Client Patch Esm v2.18.1 | MIT Licensed | https://stenciljs.com\n */\nconst patchEsm = () => {\n return promiseResolve();\n};\n\nconst defineCustomElements = (win, options) => {\n if (typeof window === 'undefined') return Promise.resolve();\n return patchEsm().then(() => {\n return bootstrapLazy([[\"wc-datepicker\",[[2,\"wc-datepicker\",{\"clearButtonContent\":[1,\"clear-button-content\"],\"disabled\":[4],\"disableDate\":[16],\"elementClassName\":[1,\"element-class-name\"],\"firstDayOfWeek\":[2,\"first-day-of-week\"],\"range\":[4],\"labels\":[16],\"locale\":[1],\"nextMonthButtonContent\":[1,\"next-month-button-content\"],\"nextYearButtonContent\":[1,\"next-year-button-content\"],\"previousMonthButtonContent\":[1,\"previous-month-button-content\"],\"previousYearButtonContent\":[1,\"previous-year-button-content\"],\"showClearButton\":[4,\"show-clear-button\"],\"showMonthStepper\":[4,\"show-month-stepper\"],\"showTodayButton\":[4,\"show-today-button\"],\"showYearStepper\":[4,\"show-year-stepper\"],\"startDate\":[1,\"start-date\"],\"todayButtonContent\":[1,\"today-button-content\"],\"value\":[1040],\"currentDate\":[32],\"hoveredDate\":[32],\"weekdays\":[32]}]]]], options);\n });\n};\n\nexport { defineCustomElements };\n","\n(function(){if(\"undefined\"!==typeof window&&void 0!==window.Reflect&&void 0!==window.customElements){var a=HTMLElement;window.HTMLElement=function(){return Reflect.construct(a,[],this.constructor)};HTMLElement.prototype=a.prototype;HTMLElement.prototype.constructor=HTMLElement;Object.setPrototypeOf(HTMLElement,a)}})();\nexport * from '../esm/polyfills/index.js';\nexport * from '../esm/loader.js';\n","export const setHour = (value, format) => {\n const hour = value.split(\":\")[0];\n if (format === 12) {\n if (Number(hour) > 12) {\n return Number(hour) - 12;\n }\n ;\n if (Number(hour) === 0) {\n return 12;\n }\n ;\n return Number(hour);\n }\n ;\n return Number(hour);\n};\nexport const setMinute = (value) => {\n const minute = value.split(\":\")[1];\n return Number(minute);\n};\nexport const formatInputDate = (date, formats) => {\n const dateList = date.split(\"-\");\n const year = dateList[0];\n const month = dateList[1];\n const day = dateList[2];\n if (formats.order === \"d-m-y\") {\n return `${day}${formats.separator}${month}${formats.separator}${year}`;\n } else if (formats.order === \"y-m-d\") {\n return `${year}${formats.separator}${month}${formats.separator}${day}`;\n }\n ;\n return `${month}${formats.separator}${day}${formats.separator}${year}`;\n};\nexport const formatInputTime = (time, format, input) => {\n const timeList = time.split(\":\");\n let hour = timeList[0];\n const minute = timeList[1];\n if (format === 12) {\n if (Number(hour) === 12) {\n document.getElementById(`period_pm_${input.id}`).checked = true;\n } else if (Number(hour) > 12 && Number(hour) < 22) {\n hour = `0${Number(hour) - 12}`;\n document.getElementById(`period_pm_${input.id}`).checked = true;\n } else if (Number(hour) >= 22) {\n hour = `${Number(hour) - 12}`;\n document.getElementById(`period_pm_${input.id}`).checked = true;\n } else if (Number(hour) === 0) {\n hour = \"12\";\n }\n return `${hour}:${minute}`;\n }\n ;\n return time;\n};\nexport const changeHourDisplay = (change, hour, format) => {\n let value = null;\n if (change === \"increase\") {\n if (format === 24) {\n if (hour === 23) {\n value = 0;\n } else {\n value = hour + 1;\n }\n ;\n } else if (format === 12) {\n if (hour === 12) {\n value = 1;\n } else {\n value = hour + 1;\n }\n }\n } else if (change === \"decrease\") {\n if (format === 24) {\n if (hour === 0) {\n value = 23;\n } else {\n value = hour - 1;\n }\n ;\n } else if (format === 12) {\n if (hour === 1) {\n value = 12;\n } else {\n value = hour - 1;\n }\n }\n }\n ;\n return value;\n};\nexport const changeMinuteDisplay = (change, minute) => {\n let value = null;\n if (change === \"increase\") {\n if (minute === 59) {\n value = 0;\n } else {\n value = minute + 1;\n }\n ;\n } else if (change === \"decrease\") {\n if (minute === 0) {\n value = 59;\n } else {\n value = minute - 1;\n }\n ;\n }\n ;\n return value;\n};\nlet displayMinute = null;\nlet displayHour = null;\nconst preFix = 0;\nexport const hourDisplay = (hour) => {\n if (hour < 10) {\n displayHour = `${preFix}${hour}`;\n } else {\n displayHour = hour;\n }\n ;\n return displayHour;\n};\nexport const minuteDisplay = (minute) => {\n if (minute < 10) {\n displayMinute = `${preFix}${minute}`;\n } else {\n displayMinute = minute;\n }\n ;\n return displayMinute;\n};\nexport const updateTimeValue = (time, hour, minute) => {\n time.value = `${hourDisplay(hour)}:${minuteDisplay(minute)}`;\n};\nexport const formatDate = (value, formats) => {\n let newValue = value;\n const splitValue = value.split(formats.separator);\n if (formats.order === \"d-m-y\") {\n newValue = `${splitValue[1]}/${splitValue[0]}/${splitValue[2]}`;\n } else if (formats.order === \"y-m-d\") {\n newValue = `${splitValue[1]}/${splitValue[2]}/${splitValue[0]}`;\n }\n ;\n const date = new Date(newValue);\n let day = date.getDate();\n let month = date.getMonth() + 1;\n let year = date.getFullYear();\n if (day < 10) {\n day = `0${day}`;\n }\n ;\n if (month < 10) {\n month = `0${month}`;\n }\n ;\n return `${year}-${month}-${day}`;\n};\nexport const formatTime = (value, format, inputname) => {\n if (format === 12) {\n const splitValue = value.split(\":\");\n let hour = splitValue[0];\n const minute = splitValue[1];\n if (document.getElementById(`period_am_${inputname}`).checked) {\n switch (hour) {\n case \"12\":\n hour = \"00\";\n return `${hour}:${minute}`;\n default:\n return value;\n }\n ;\n } else if (document.getElementById(`period_pm_${inputname}`).checked) {\n if (Number(hour) > 0 && Number(hour) < 12) {\n hour = `${Number(hour) + 12}`;\n }\n ;\n return `${hour}:${minute}`;\n }\n ;\n }\n ;\n return value;\n};\nexport const updateInputValue = (input, formats, time) => {\n input.value = `${formatDate(document.querySelector(`#${input.id}_date`).value, formats)}T${formatTime(time.value, formats.time, input.id)}`;\n};\nexport const dateToPicker = (value, formats) => {\n let formatArray = value.split(formats.separator);\n let formatValue = value;\n if (formats.order === \"d-m-y\") {\n formatValue = `${formatArray[1]}/${formatArray[0]}/${formatArray[2]}`;\n } else if (formats.order === \"y-m-d\") {\n formatValue = `${formatArray[1]}/${formatArray[2]}/${formatArray[0]}`;\n }\n ;\n return formatValue;\n};\nexport const displayDate = (value, formats) => {\n let day = value.getDate();\n let month = value.getMonth() + 1;\n const year = value.getFullYear();\n if (day < 10) {\n day = `0${day}`;\n }\n if (month < 10) {\n month = `0${month}`;\n }\n if (formats.order === \"d-m-y\") {\n return `${day}${formats.separator}${month}${formats.separator}${year}`;\n } else if (formats.order === \"y-m-d\") {\n return `${year}${formats.separator}${month}${formats.separator}${day}`;\n }\n ;\n return `${month}${formats.separator}${day}${formats.separator}${year}`;\n};\nexport const calculateDatepickerPos = (datePicker) => {\n return document.body.clientHeight - (datePicker.getBoundingClientRect().top + window.scrollY) - (document.querySelector(\".item__edit-sticky\").clientHeight + datePicker.clientHeight);\n};\n","export const timeKeyDownListener = (time) => {\n time.addEventListener(\"keydown\", (event) => {\n switch (event.key) {\n case \"ArrowUp\":\n break;\n case \"ArrowDown\":\n break;\n case \"ArrowLeft\":\n break;\n case \"ArrowRight\":\n break;\n case \"Backspace\":\n break;\n case \"Tab\":\n break;\n case \":\":\n break;\n default:\n if (/[0-9]/.test(event.key)) {\n break;\n } else if (event.ctrlKey === true || event.altKey === true) {\n break;\n } else {\n event.preventDefault();\n }\n ;\n }\n ;\n });\n};\nexport const timeBeforeInputListener = (time) => {\n time.addEventListener(\"beforeinput\", (event) => {\n if (time.value.length >= 5 && event.inputType === \"insertText\" && event.target.selectionStart === event.target.selectionEnd) {\n event.preventDefault();\n }\n ;\n });\n};\nexport const dateKeyDownListener = (date) => {\n date.addEventListener(\"keydown\", (event) => {\n switch (event.key) {\n case \"ArrowUp\":\n break;\n case \"ArrowDown\":\n break;\n case \"ArrowLeft\":\n break;\n case \"ArrowRight\":\n break;\n case \"Backspace\":\n break;\n case \"Tab\":\n break;\n case \"Delete\":\n break;\n case \".\":\n break;\n case \"/\":\n break;\n default:\n if (/[0-9]/.test(event.key)) {\n break;\n } else if (event.ctrlKey === true || event.altKey === true) {\n break;\n } else {\n event.preventDefault();\n }\n ;\n }\n ;\n });\n};\nexport const dateBeforeInputListener = (date) => {\n date.addEventListener(\"beforeinput\", (event) => {\n if (date.value.length >= 10 && event.inputType === \"insertText\" && event.target.selectionStart === event.target.selectionEnd) {\n event.preventDefault();\n }\n ;\n });\n};\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nexport const getMessages = (key = null) => {\n const allMessages = window.Decidim.config.get(\"messages\");\n if (key === null) {\n return allMessages;\n }\n let messages = allMessages;\n key.split(\".\").forEach((part) => messages = messages[part] || {});\n return messages;\n};\nexport const createDictionary = (messages, prefix = \"\") => {\n let final = {};\n Object.keys(messages).forEach((key) => {\n if (typeof messages[key] === \"object\") {\n final = __spreadValues(__spreadValues({}, final), createDictionary(messages[key], `${prefix}${key}.`));\n } else if (key === \"\") {\n final[(prefix == null ? void 0 : prefix.replace(/\\.$/, \"\")) || \"\"] = messages[key];\n } else {\n final[`${prefix}${key}`] = messages[key];\n }\n });\n return final;\n};\nexport const getDictionary = (key) => {\n return createDictionary(getMessages(key));\n};\n","import icon from \"src/decidim/icon\";\nimport { dateToPicker, formatDate, displayDate, formatTime, calculateDatepickerPos } from \"src/decidim/datepicker/datepicker_functions\";\nimport { dateKeyDownListener, dateBeforeInputListener } from \"src/decidim/datepicker/datepicker_listeners\";\nimport { getDictionary } from \"src/decidim/i18n\";\nexport default function generateDatePicker(input, row, formats) {\n const i18n = getDictionary(\"date.buttons\");\n const dateColumn = document.createElement(\"div\");\n dateColumn.setAttribute(\"class\", \"datepicker__date-column\");\n const date = document.createElement(\"input\");\n date.setAttribute(\"id\", `${input.id}_date`);\n date.setAttribute(\"type\", \"text\");\n const calendar = document.createElement(\"button\");\n calendar.innerHTML = icon(\"calendar-line\");\n calendar.setAttribute(\"class\", \"datepicker__calendar-button\");\n calendar.setAttribute(\"type\", \"button\");\n dateColumn.appendChild(date);\n dateColumn.appendChild(calendar);\n row.append(dateColumn);\n const datePickerContainer = document.createElement(\"div\");\n datePickerContainer.setAttribute(\"class\", \"datepicker__container\");\n datePickerContainer.style.display = \"none\";\n const datePicker = document.createElement(\"wc-datepicker\");\n datePicker.setAttribute(\"id\", `${date.id}_datepicker`);\n datePicker.setAttribute(\"locale\", `${document.documentElement.getAttribute(\"lang\") || \"en\"}`);\n datePickerContainer.appendChild(datePicker);\n const closeCalendar = document.createElement(\"button\");\n closeCalendar.innerText = i18n.close;\n closeCalendar.setAttribute(\"class\", \"datepicker__close-calendar button button__transparent-secondary button__xs\");\n closeCalendar.setAttribute(\"type\", \"button\");\n const pickCalendar = document.createElement(\"button\");\n pickCalendar.innerText = i18n.select;\n pickCalendar.setAttribute(\"class\", \"datepicker__pick-calendar button button__secondary button__xs\");\n pickCalendar.setAttribute(\"disabled\", true);\n pickCalendar.setAttribute(\"type\", \"button\");\n datePickerContainer.appendChild(pickCalendar);\n datePickerContainer.appendChild(closeCalendar);\n dateColumn.appendChild(datePickerContainer);\n let prevDate = null;\n let defaultTime = input.getAttribute(\"default_time\") || \"00:00\";\n const datePickerDisplay = (event) => {\n if (!dateColumn.contains(event.target)) {\n datePickerContainer.style.display = \"none\";\n document.removeEventListener(\"click\", datePickerDisplay);\n }\n ;\n };\n dateKeyDownListener(date);\n dateBeforeInputListener(date);\n date.addEventListener(\"paste\", (event) => {\n event.preventDefault();\n const value = event.clipboardData.getData(\"text/plain\");\n if (/^[0-9/.-]+$/.test(value)) {\n date.value = value.replaceAll(/[/.-]/g, formats.separator);\n if (input.type === \"date\") {\n input.value = `${formatDate(date.value, formats)}`;\n } else if (input.type === \"datetime-local\") {\n input.value = `${formatDate(date.value, formats)}T${formatTime(document.querySelector(`#${input.id}_time`).value, formats.time, input.id) || defaultTime}`;\n }\n ;\n }\n ;\n });\n date.addEventListener(\"focus\", () => {\n datePickerContainer.style.display = \"none\";\n });\n date.addEventListener(\"keyup\", () => {\n if (date.value.length === 10) {\n date.value = date.value.replaceAll(/[/.-]/g, formats.separator);\n prevDate = dateToPicker(date.value, formats);\n if (input.type === \"date\") {\n input.value = `${formatDate(date.value, formats)}`;\n } else if (input.type === \"datetime-local\") {\n input.value = `${formatDate(date.value, formats)}T${formatTime(document.querySelector(`#${input.id}_time`).value, formats.time, input.id) || defaultTime}`;\n }\n ;\n }\n ;\n });\n let pickedDate = null;\n datePicker.addEventListener(\"selectDate\", (event) => {\n pickCalendar.removeAttribute(\"disabled\");\n pickedDate = event.detail;\n });\n pickCalendar.addEventListener(\"click\", (event) => {\n event.preventDefault();\n date.value = displayDate(datePicker.value, formats);\n prevDate = pickedDate;\n if (input.type === \"date\") {\n input.value = `${pickedDate}`;\n } else if (input.type === \"datetime-local\") {\n input.value = `${pickedDate}T${formatTime(document.querySelector(`#${input.id}_time`).value, formats.time, input.id) || defaultTime}`;\n }\n ;\n datePickerContainer.style.display = \"none\";\n });\n calendar.addEventListener(\"click\", (event) => {\n event.preventDefault();\n if (input.value !== \"\") {\n if (input.type === \"date\") {\n prevDate = input.value;\n } else if (input.type === \"datetime-local\") {\n prevDate = input.value.split(\"T\")[0];\n }\n ;\n }\n ;\n if (prevDate !== null && new Date(prevDate).toString() !== \"Invalid Date\") {\n datePicker.value = new Date(prevDate);\n }\n ;\n pickedDate = null;\n datePickerContainer.style.display = \"block\";\n document.addEventListener(\"click\", datePickerDisplay);\n if (document.querySelector(\".item__edit-sticky\")) {\n const datePickerPos = calculateDatepickerPos(datePicker);\n if (datePickerPos < 0) {\n const layoutWrapper = document.querySelector(\".layout-wrapper\");\n layoutWrapper.style.height = `${layoutWrapper.clientHeight - datePickerPos}px`;\n }\n ;\n }\n ;\n });\n closeCalendar.addEventListener(\"click\", (event) => {\n event.preventDefault();\n datePickerContainer.style.display = \"none\";\n });\n}\n;\n","import icon from \"src/decidim/icon\";\nimport { changeHourDisplay, changeMinuteDisplay, formatDate, hourDisplay, minuteDisplay, formatTime, setHour, setMinute, updateTimeValue, updateInputValue } from \"src/decidim/datepicker/datepicker_functions\";\nimport { timeKeyDownListener, timeBeforeInputListener } from \"src/decidim/datepicker/datepicker_listeners\";\nimport { getDictionary } from \"src/decidim/i18n\";\nexport default function generateTimePicker(input, row, formats) {\n const i18n = getDictionary(\"time.buttons\");\n const timeColumn = document.createElement(\"div\");\n timeColumn.setAttribute(\"class\", \"datepicker__time-column\");\n const time = document.createElement(\"input\");\n time.setAttribute(\"id\", `${input.id}_time`);\n time.setAttribute(\"type\", \"text\");\n const clock = document.createElement(\"button\");\n clock.innerHTML = icon(\"time-line\");\n clock.setAttribute(\"class\", \"datepicker__clock-button\");\n clock.setAttribute(\"type\", \"button\");\n timeColumn.appendChild(time);\n timeColumn.appendChild(clock);\n row.append(timeColumn);\n const hourColumn = document.createElement(\"div\");\n hourColumn.setAttribute(\"class\", \"datepicker__hour-column\");\n const hours = document.createElement(\"input\");\n hours.setAttribute(\"class\", \"datepicker__hour-picker\");\n hours.setAttribute(\"readonly\", \"true\");\n hours.setAttribute(\"disabled\", \"true\");\n const hourUp = document.createElement(\"button\");\n hourUp.setAttribute(\"class\", \"datepicker__hour-up\");\n hourUp.innerHTML = icon(\"arrow-drop-up-line\", { class: \"w-10 h-6 pr-1\" });\n hourUp.setAttribute(\"type\", \"button\");\n const hourDown = document.createElement(\"button\");\n hourDown.setAttribute(\"class\", \"datepicker__hour-down\");\n hourDown.innerHTML = icon(\"arrow-drop-down-line\", { class: \"w-10 h-6 pr-1\" });\n hourDown.setAttribute(\"type\", \"button\");\n hourColumn.appendChild(hours);\n hourColumn.appendChild(hourUp);\n hourColumn.appendChild(hourDown);\n const minuteColumn = document.createElement(\"div\");\n minuteColumn.setAttribute(\"class\", \"datepicker__minute-column\");\n const minutes = document.createElement(\"input\");\n minutes.setAttribute(\"class\", \"datepicker__minute-picker\");\n minutes.setAttribute(\"readonly\", \"true\");\n minutes.setAttribute(\"disabled\", \"true\");\n const minuteUp = document.createElement(\"button\");\n minuteUp.setAttribute(\"class\", \"datepicker__minute-up\");\n minuteUp.innerHTML = icon(\"arrow-drop-up-line\", { class: \"w-10 h-6 pr-1\" });\n minuteUp.setAttribute(\"type\", \"button\");\n const minuteDown = document.createElement(\"button\");\n minuteDown.setAttribute(\"class\", \"datepicker__minute-down\");\n minuteDown.innerHTML = icon(\"arrow-drop-down-line\", { class: \"w-10 h-6 pr-1\" });\n minuteDown.setAttribute(\"type\", \"button\");\n minuteColumn.appendChild(minutes);\n minuteColumn.appendChild(minuteUp);\n minuteColumn.appendChild(minuteDown);\n const timeRow = document.createElement(\"div\");\n timeRow.setAttribute(\"class\", \"datepicker__time-row\");\n timeRow.appendChild(hourColumn);\n timeRow.appendChild(minuteColumn);\n if (formats.time === 12) {\n const periodColumn = document.createElement(\"div\");\n periodColumn.setAttribute(\"class\", \"datepicker__period-column\");\n const periodAm = document.createElement(\"input\");\n periodAm.setAttribute(\"type\", \"radio\");\n periodAm.setAttribute(\"name\", `period_${input.id}`);\n periodAm.setAttribute(\"id\", `period_am_${input.id}`);\n periodAm.setAttribute(\"class\", \"datepicker__period-am\");\n const periodAmLabel = document.createElement(\"span\");\n periodAmLabel.innerText = \"AM\";\n const periodPm = document.createElement(\"input\");\n periodPm.setAttribute(\"type\", \"radio\");\n periodPm.setAttribute(\"name\", `period_${input.id}`);\n periodPm.setAttribute(\"id\", `period_pm_${input.id}`);\n periodPm.setAttribute(\"class\", \"datepicker__period-pm\");\n const periodPmLabel = document.createElement(\"span\");\n periodPmLabel.innerText = \"PM\";\n periodColumn.appendChild(periodAm);\n periodColumn.appendChild(periodAmLabel);\n periodColumn.appendChild(periodPm);\n periodColumn.appendChild(periodPmLabel);\n timeColumn.appendChild(periodColumn);\n periodAm.addEventListener(\"click\", () => {\n input.value = `${formatDate(document.querySelector(`#${input.id}_date`).value, formats)}T${formatTime(time.value, formats.time, input.id)}`;\n });\n periodPm.addEventListener(\"click\", () => {\n input.value = `${formatDate(document.querySelector(`#${input.id}_date`).value, formats)}T${formatTime(time.value, formats.time, input.id)}`;\n });\n }\n ;\n const hourLabel = document.createElement(\"span\");\n hourLabel.innerText = \"Hour\";\n const hourLabelContainer = document.createElement(\"div\");\n hourLabelContainer.setAttribute(\"class\", \"datepicker__hour-label-container\");\n hourLabelContainer.appendChild(hourLabel);\n const minuteLabel = document.createElement(\"span\");\n minuteLabel.innerText = \"Minute\";\n const minuteLabelContainer = document.createElement(\"div\");\n minuteLabelContainer.setAttribute(\"class\", \"datepicker__minute-label-container\");\n minuteLabelContainer.appendChild(minuteLabel);\n const labels = document.createElement(\"div\");\n labels.setAttribute(\"class\", \"datepicker__label-row\");\n labels.appendChild(hourLabelContainer);\n labels.appendChild(minuteLabelContainer);\n const timePicker = document.createElement(\"div\");\n timePicker.setAttribute(\"id\", `${time.id}_timepicker`);\n timePicker.setAttribute(\"class\", \"datepicker__time-frame\");\n timePicker.style.display = \"none\";\n timePicker.appendChild(timeRow);\n timePicker.appendChild(labels);\n const closeClock = document.createElement(\"button\");\n closeClock.innerText = i18n.close;\n closeClock.setAttribute(\"class\", \"datepicker__close-clock button button__transparent-secondary button__xs\");\n closeClock.setAttribute(\"type\", \"button\");\n const resetClock = document.createElement(\"button\");\n resetClock.innerText = i18n.reset;\n resetClock.setAttribute(\"class\", \"datepicker__reset-clock button button__xs button__text-secondary\");\n resetClock.setAttribute(\"type\", \"button\");\n const selectClock = document.createElement(\"button\");\n selectClock.innerText = i18n.select;\n selectClock.setAttribute(\"class\", \"datepicker__select-clock button button__secondary button__xs\");\n selectClock.setAttribute(\"type\", \"button\");\n timePicker.appendChild(resetClock);\n timePicker.appendChild(selectClock);\n timePicker.appendChild(closeClock);\n clock.after(timePicker);\n const timePickerDisplay = (event) => {\n if (!timeColumn.contains(event.target)) {\n timePicker.style.display = \"none\";\n document.removeEventListener(\"click\", timePickerDisplay);\n }\n };\n let hour = 0;\n if (formats.time === 12) {\n hour = 1;\n }\n ;\n let minute = 0;\n if (input.value !== \"\") {\n hour = setHour(input.value.split(\"T\")[1], formats.time);\n minute = setMinute(input.value.split(\"T\")[1]);\n }\n ;\n time.addEventListener(\"focus\", () => {\n timePicker.style.display = \"none\";\n });\n time.addEventListener(\"paste\", (event) => {\n event.preventDefault();\n const value = event.clipboardData.getData(\"text/plain\");\n let formatGuard = /^([0-9]|0[0-9]|1[0-9]|2[0-3])(.|:)[0-5][0-9]/.test(value);\n if (formats.time === 12) {\n formatGuard = /^([0-9]|0[0-9]|1[0-2])(.|:)[0-5][0-9]/.test(value);\n }\n ;\n if (formatGuard) {\n if (/(^[0-9])(.|:)[0-5][0-9]/.test(value)) {\n hour = Number(value[0]);\n minute = Number(`${value[2]}${value[3]}`);\n } else if (/(^0[0-9])(.|:)[0-5][0-9]/.test(value)) {\n hour = Number(value[1]);\n minute = Number(`${value[3]}${value[4]}`);\n } else {\n hour = Number(`${value[0]}${value[1]}`);\n minute = Number(`${value[3]}${value[4]}`);\n }\n hours.value = hourDisplay(hour);\n minutes.value = minuteDisplay(minute);\n time.value = `${hourDisplay(hour)}:${minuteDisplay(minute)}`;\n input.value = `${formatDate(document.querySelector(`#${input.id}_date`).value, formats)}T${formatTime(time.value, formats.time, input.id)}`;\n }\n });\n timeKeyDownListener(time);\n timeBeforeInputListener(time);\n time.addEventListener(\"keyup\", () => {\n if (time.value.length === 5) {\n const inputHour = time.value.split(\":\")[0];\n const inputMinute = time.value.split(\":\")[1];\n if (formats.time === 12 && Number(inputHour) <= 12 && Number(inputMinute) <= 59 || formats.time === 24 && Number(inputHour) <= 23 && Number(inputMinute) <= 59) {\n hour = Number(inputHour);\n minute = Number(inputMinute);\n hours.value = hourDisplay(hour);\n minutes.value = minuteDisplay(minute);\n input.value = `${formatDate(document.querySelector(`#${input.id}_date`).value, formats)}T${formatTime(time.value, formats.time, input.id)}`;\n }\n ;\n } else if (time.value.length === 0) {\n hours.value = \"\";\n minutes.value = \"\";\n }\n ;\n });\n resetClock.addEventListener(\"click\", (event) => {\n event.preventDefault();\n if (formats.time === 24) {\n hour = 0;\n } else {\n hour = 1;\n }\n minute = 0;\n hours.value = hourDisplay(hour);\n minutes.value = minuteDisplay(minute);\n time.value = \"\";\n });\n closeClock.addEventListener(\"click\", (event) => {\n event.preventDefault();\n timePicker.style.display = \"none\";\n });\n selectClock.addEventListener(\"click\", (event) => {\n event.preventDefault();\n updateTimeValue(time, hour, minute);\n updateInputValue(input, formats, time);\n timePicker.style.display = \"none\";\n });\n clock.addEventListener(\"click\", (event) => {\n event.preventDefault();\n timePicker.style.display = \"block\";\n document.addEventListener(\"click\", timePickerDisplay);\n hours.value = hourDisplay(hour);\n minutes.value = minuteDisplay(minute);\n });\n hourUp.addEventListener(\"click\", (event) => {\n event.preventDefault();\n hour = changeHourDisplay(\"increase\", hour, formats.time);\n hours.value = hourDisplay(hour);\n });\n hourDown.addEventListener(\"click\", (event) => {\n event.preventDefault();\n hour = changeHourDisplay(\"decrease\", hour, formats.time);\n hours.value = hourDisplay(hour);\n });\n minuteUp.addEventListener(\"click\", (event) => {\n event.preventDefault();\n minute = changeMinuteDisplay(\"increase\", minute);\n minutes.value = minuteDisplay(minute);\n });\n minuteDown.addEventListener(\"click\", (event) => {\n event.preventDefault();\n minute = changeMinuteDisplay(\"decrease\", minute);\n minutes.value = minuteDisplay(minute);\n });\n}\n;\n","import { defineCustomElements } from \"wc-datepicker/dist/loader\";\nimport generateDatePicker from \"src/decidim/datepicker/generate_datepicker\";\nimport generateTimePicker from \"src/decidim/datepicker/generate_timepicker\";\nimport { formatInputDate, formatInputTime } from \"src/decidim/datepicker/datepicker_functions\";\nimport { getDictionary } from \"src/decidim/i18n\";\nexport default function formDatePicker(input) {\n const i18nDate = getDictionary(\"date.formats\");\n const i18nDateHelp = getDictionary(\"date.formats.help\");\n const i18nTime = getDictionary(\"time\");\n const i18nTimeHelp = getDictionary(\"time.formats.help\");\n const formats = { order: i18nDate.order, separator: i18nDate.separator, time: i18nTime.clock_format || 24 };\n if (!customElements.get(\"wc-datepicker\")) {\n defineCustomElements();\n }\n ;\n if (!input.id) {\n input.id = \"demo-datepicker\";\n }\n ;\n input.style.display = \"none\";\n const label = input.closest(\"label\");\n const row = document.createElement(\"div\");\n row.setAttribute(\"id\", `${input.id}_datepicker_row`);\n row.setAttribute(\"class\", \"datepicker__datepicker-row\");\n const helpTextContainer = document.createElement(\"div\");\n helpTextContainer.setAttribute(\"class\", \"datepicker__help-text-container\");\n const helpTextDate = document.createElement(\"span\");\n helpTextDate.setAttribute(\"class\", \"help-text datepicker__help-date\");\n helpTextDate.innerText = i18nDateHelp.date_format;\n const helpTextTime = document.createElement(\"span\");\n helpTextTime.setAttribute(\"class\", \"help-text datepicker__help-time\");\n helpTextTime.innerText = i18nTimeHelp.time_format;\n helpTextContainer.appendChild(helpTextDate);\n if (label) {\n label.after(row);\n } else {\n input.after(row);\n }\n ;\n generateDatePicker(input, row, formats);\n if (input.type === \"datetime-local\") {\n generateTimePicker(input, row, formats);\n helpTextContainer.appendChild(helpTextTime);\n }\n ;\n if (!input.getAttribute(\"hide_help\")) {\n row.before(helpTextContainer);\n }\n ;\n if (formats.time === 12) {\n document.getElementById(`period_am_${input.id}`).checked = true;\n }\n ;\n const inputFieldValue = document.getElementById(`${input.id}`).value;\n if (inputFieldValue !== \"\") {\n if (input.type === \"datetime-local\") {\n const dateTimeValue = inputFieldValue.split(\"T\");\n const date = dateTimeValue[0];\n const time = dateTimeValue[1];\n document.getElementById(`${input.id}_date`).value = formatInputDate(date, formats, input);\n document.getElementById(`${input.id}_time`).value = formatInputTime(time, formats.time, input);\n } else if (input.type === \"date\") {\n document.getElementById(`${input.id}_date`).value = formatInputDate(inputFieldValue, formats, input);\n }\n ;\n }\n ;\n if (document.querySelector('button[name=\"commit\"]')) {\n document.querySelector('button[name=\"commit\"]').addEventListener(\"click\", () => {\n if (input.classList.contains(\"is-invalid-input\")) {\n document.getElementById(`${input.id}_date`).classList.add(\"is-invalid-input\");\n document.getElementById(`${input.id}_time`).classList.add(\"is-invalid-input\");\n input.parentElement.querySelectorAll(\".form-error\").forEach((error) => {\n document.getElementById(`${input.id}_datepicker_row`).after(error);\n });\n }\n ;\n });\n }\n ;\n}\n;\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nexport default class Configuration {\n constructor() {\n this.config = {};\n }\n set(key, value = null) {\n if (typeof key === \"object\") {\n this.config = __spreadValues(__spreadValues({}, this.config), key);\n } else {\n this.config[key] = value;\n }\n }\n get(key) {\n return this.config[key];\n }\n}\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nimport icon from \"src/decidim/icon\";\nconst DEFAULT_MESSAGES = {\n externalLink: \"External link\",\n opensInNewTab: \"Opens in new tab\"\n};\nlet MESSAGES = DEFAULT_MESSAGES;\nexport default class ExternalLink {\n static configureMessages(messages) {\n MESSAGES = __spreadValues(__spreadValues({}, DEFAULT_MESSAGES), messages);\n }\n constructor(node) {\n if (node.closest(\".editor-container\")) {\n return;\n }\n if (!node.querySelector(\"span[data-external-link]\")) {\n if (node.dataset.externalLink === \"text-only\") {\n this.setupTextOnly(node);\n } else {\n this.setup(node);\n }\n }\n }\n setup(node) {\n const span = document.createElement(\"span\");\n span.dataset.externalLink = true;\n span.innerHTML = `${this.generateIcon()}${this.generateScreenReaderLabel(node)}`;\n span.classList.add(\"inline-block\", \"mx-0.5\");\n return node.appendChild(span);\n }\n setupTextOnly(node) {\n const dummy = document.createElement(\"span\");\n dummy.innerHTML = this.generateScreenReaderLabel(node);\n return node.appendChild(dummy.firstChild);\n }\n generateIcon() {\n return icon(\"external-link-line\", { class: \"fill-current\" });\n }\n generateScreenReaderLabel(node) {\n let text = MESSAGES.opensInNewTab;\n if (this._isExternalLink(node)) {\n text = MESSAGES.externalLink;\n }\n return `(${text})`;\n }\n _isExternalLink(node) {\n const externalMatches = [\n // Links to the internal link page /link?external_url=https%3A%2F%2Fdecidim.org\n new RegExp(\"^/link\\\\?external_url=\"),\n // Links starting with http/s and not to the current host\n new RegExp(`^https?://((?!${location.host}).)+`)\n ];\n const href = node.getAttribute(\"href\") || \"\";\n return externalMatches.some((regexp) => href.match(regexp));\n }\n}\n","export default function updateExternalDomainLinks(element) {\n if (window.location.pathname === \"/link\") {\n return;\n }\n if (!element.hasAttribute(\"href\") || element.closest(\".editor-container\")) {\n return;\n }\n if (element.dataset.externalDomainLink === \"false\") {\n return;\n }\n const parts = element.href.match(/^(([a-z]+):)?\\/\\/([^/:]+)(:[0-9]*)?(\\/.*)?$/) || null;\n if (!parts) {\n return;\n }\n const domain = parts[3].replace(/^www\\./, \"\");\n const allowlist = window.Decidim.config.get(\"external_domain_allowlist\") || [];\n if (allowlist.includes(domain)) {\n return;\n }\n const externalHref = `/link?external_url=${encodeURIComponent(element.href)}`;\n element.href = externalHref;\n element.dataset.remote = true;\n}\n","export default function(node = document) {\n const element = node.querySelector(\"[data-scroll-last-child]\");\n if (element && element.children.length) {\n const lastChild = [...element.children].pop();\n window.scrollTo({ top: lastChild.offsetTop, behavior: \"smooth\" });\n }\n}\n","const COUNT_KEY = \"%count%\";\nconst SR_ANNOUNCE_THRESHOLD_RATIO = 0.1;\nconst SR_ANNOUNCE_EVERY_THRESHOLD = 10;\nconst DEFAULT_MESSAGES = {\n charactersAtLeast: {\n one: `at least ${COUNT_KEY} character`,\n other: `at least ${COUNT_KEY} characters`\n },\n charactersLeft: {\n one: `${COUNT_KEY} character left`,\n other: `${COUNT_KEY} characters left`\n }\n};\nlet MESSAGES = DEFAULT_MESSAGES;\nexport default class InputCharacterCounter {\n static configureMessages(messages) {\n MESSAGES = $.extend(DEFAULT_MESSAGES, messages);\n }\n constructor(input) {\n this.$input = input;\n this.$target = $(this.$input.data(\"remaining-characters\"));\n this.minCharacters = parseInt(this.$input.attr(\"minlength\"), 10);\n this.maxCharacters = parseInt(this.$input.attr(\"maxlength\"), 10);\n this.describeByCounter = this.$input.attr(\"type\") !== \"hidden\" && typeof this.$input.attr(\"aria-describedby\") === \"undefined\";\n if (this.maxCharacters > 10) {\n if (this.maxCharacters > 100) {\n this.announceThreshold = Math.floor(this.maxCharacters * SR_ANNOUNCE_THRESHOLD_RATIO);\n } else {\n this.announceThreshold = 10;\n }\n this.announceEveryThreshold = SR_ANNOUNCE_EVERY_THRESHOLD;\n } else {\n this.announceThreshold = 1;\n this.announceEveryThreshold = 1;\n }\n let targetId = this.$target.attr(\"id\");\n if (typeof targetId === \"undefined\") {\n if (this.$input.attr(\"id\") && this.$input.attr(\"id\").length > 0) {\n targetId = `${this.$input.attr(\"id\")}_characters`;\n } else {\n targetId = `characters_${Math.random().toString(36).substr(2, 9)}`;\n }\n }\n if (this.$target.length > 0) {\n this.$target.attr(\"id\", targetId);\n } else {\n const span = document.createElement(\"span\");\n span.id = targetId;\n span.className = \"input-character-counter__text\";\n this.$target = $(span);\n const container = document.createElement(\"span\");\n container.className = \"input-character-counter__container\";\n container.appendChild(span);\n if (this.$input.parent().is(\".editor\")) {\n this.$input.parent().append(container);\n } else {\n const wrapper = document.createElement(\"span\");\n wrapper.className = \"input-character-counter\";\n this.$input.next(\".form-error\").addBack().wrapAll(wrapper);\n this.$input.after(container);\n }\n }\n if (this.$target.length > 0 && (this.maxCharacters > 0 || this.minCharacters > 0)) {\n const screenReaderId = `${targetId}_sr`;\n this.$srTarget = $(`#${screenReaderId}`);\n if (!this.$srTarget.length) {\n this.$srTarget = $(\n ``\n );\n this.$target.before(this.$srTarget);\n }\n this.$target.attr(\"aria-hidden\", \"true\");\n this.$userInput = this.$input;\n if (this.$input.parent().is(\".editor\")) {\n setTimeout(() => {\n this.editor = this.$input.siblings(\".editor-container\")[0].querySelector(\".ProseMirror\").editor;\n this.$userInput = $(this.editor.view.dom);\n this.initialize();\n });\n } else {\n this.initialize();\n }\n }\n }\n initialize() {\n this.updateInputLength();\n this.previousInputLength = this.inputLength;\n this.bindEvents();\n this.setDescribedBy(true);\n }\n setDescribedBy(active) {\n if (!this.describeByCounter) {\n return;\n }\n if (active) {\n this.$userInput.attr(\"aria-describedby\", this.$srTarget.attr(\"id\"));\n } else {\n this.$userInput.removeAttr(\"aria-describedby\");\n }\n }\n bindEvents() {\n if (this.editor) {\n this.editor.on(\"update\", () => {\n this.handleInput();\n });\n } else {\n this.$userInput.on(\"input\", () => {\n this.handleInput();\n });\n }\n this.$userInput.on(\"keyup\", () => {\n this.updateStatus();\n });\n this.$userInput.on(\"focus\", () => {\n this.updateScreenReaderStatus();\n });\n this.$userInput.on(\"blur\", () => {\n this.updateScreenReaderStatus();\n this.setDescribedBy(true);\n });\n if (this.$userInput.get(0) !== null) {\n this.$userInput.get(0).addEventListener(\"emoji.added\", () => {\n this.updateStatus();\n });\n }\n this.updateStatus();\n this.updateScreenReaderStatus();\n }\n getInputLength() {\n return this.inputLength;\n }\n updateInputLength() {\n this.previousInputLength = this.inputLength;\n if (this.editor) {\n this.inputLength = this.editor.storage.characterCount.characters();\n } else {\n this.inputLength = this.$input.val().length;\n }\n }\n handleInput() {\n this.updateInputLength();\n this.checkScreenReaderUpdate();\n this.setDescribedBy(false);\n }\n /**\n * This compares the current inputLength to the previous value and decides\n * whether the user is currently adding or deleting characters from the view.\n *\n * @returns {String} The input direction either \"ins\" for insert or \"del\" for\n * delete.\n */\n getInputDirection() {\n if (this.inputLength < this.previousInputLength) {\n return \"del\";\n }\n return \"ins\";\n }\n getScreenReaderLength() {\n const currentLength = this.getInputLength();\n if (this.maxCharacters < 10) {\n return currentLength;\n } else if (this.maxCharacters - currentLength <= this.announceEveryThreshold) {\n return currentLength;\n }\n const srLength = currentLength - currentLength % this.announceThreshold;\n if (this.getInputDirection() === \"del\") {\n if (srLength === currentLength) {\n return srLength;\n } else if (this.maxCharacters - srLength === this.announceThreshold) {\n return this.announcedAt || currentLength;\n } else if (srLength < currentLength) {\n return srLength + this.announceThreshold;\n }\n } else if (srLength < this.announcedAt) {\n return this.announcedAt;\n }\n return srLength;\n }\n getMessages(currentLength = null) {\n const showMessages = [];\n let inputLength = currentLength;\n if (inputLength === null) {\n inputLength = this.getInputLength();\n }\n if (this.minCharacters > 0) {\n let message = MESSAGES.charactersAtLeast.other;\n if (this.minCharacters === 1) {\n message = MESSAGES.charactersAtLeast.one;\n }\n showMessages.push(message.replace(COUNT_KEY, this.minCharacters));\n }\n if (this.maxCharacters > 0) {\n const remaining = this.maxCharacters - inputLength;\n let message = MESSAGES.charactersLeft.other;\n if (remaining === 1) {\n message = MESSAGES.charactersLeft.one;\n }\n this.$userInput[0].dispatchEvent(\n new CustomEvent(\"characterCounter\", { detail: { remaining } })\n );\n showMessages.push(message.replace(COUNT_KEY, remaining));\n }\n return showMessages;\n }\n updateStatus() {\n this.$target.text(this.getMessages().join(\", \"));\n }\n checkScreenReaderUpdate() {\n if (this.maxCharacters < 1) {\n return;\n }\n const currentLength = this.getScreenReaderLength();\n if (currentLength === this.announcedAt) {\n return;\n }\n this.announcedAt = currentLength;\n this.updateScreenReaderStatus(currentLength);\n }\n updateScreenReaderStatus(currentLength = null) {\n this.$srTarget.text(this.getMessages(currentLength).join(\", \"));\n }\n}\nconst createCharacterCounter = ($input) => {\n if (typeof $input !== \"undefined\" && $input.length) {\n $input.data(\"remaining-characters-counter\", new InputCharacterCounter($input));\n }\n};\nexport { InputCharacterCounter, createCharacterCounter };\n","const DEFAULT_MESSAGES = {\n correctErrors: \"There are errors on the form, please correct them.\"\n};\nlet MESSAGES = DEFAULT_MESSAGES;\nexport default class FormValidator {\n static configureMessages(messages) {\n MESSAGES = $.extend(DEFAULT_MESSAGES, messages);\n }\n constructor(form) {\n this.$form = form;\n this.$form.on(\"form-error.decidim\", () => {\n this.handleError();\n });\n }\n handleError() {\n this.announceFormError();\n $(\".is-invalid-input:first\", this.$form).focus();\n }\n /**\n * This announces immediately to the screen reader that there are errors on\n * the form that need to be fixed. Does not work on all screen readers but\n * works e.g. in Windows+Firefox+NVDA and macOS+Safari+VoiceOver\n * combinations.\n *\n * @returns {undefined}\n */\n announceFormError() {\n let $announce = $(\".sr-announce\", this.$form);\n if ($announce.length > 0) {\n $announce.remove();\n }\n $announce = $(\"\");\n $announce.attr(\"class\", \"sr-announce sr-only\");\n $announce.attr(\"aria-live\", \"assertive\");\n this.$form.prepend($announce);\n setTimeout(() => {\n $announce.text(MESSAGES.correctErrors);\n }, 100);\n }\n}\n$(() => {\n $(\"form\").each((_i, el) => {\n $(el).data(\"form-validator\", new FormValidator($(el)));\n });\n $(document).on(\"forminvalid.zf.abide\", function(_ev, form) {\n form.trigger(\"form-error.decidim\");\n });\n});\n","export default function delayed(context, func, wait) {\n let timeout = null;\n return function(...args) {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n timeout = null;\n Reflect.apply(func, context, args);\n }, wait);\n };\n}\n","export default class CheckBoxesTree {\n constructor() {\n this.checkboxesTree = Array.from(document.querySelectorAll(\"[data-checkboxes-tree]\"));\n if (!this.checkboxesTree.length) {\n return;\n }\n this.checkboxesLeaf = Array.from(document.querySelectorAll(\"[data-children-checkbox] input\"));\n this.checkboxesTree.forEach((input) => input.addEventListener(\"click\", (event) => this.checkTheCheckBoxes(event.target)));\n this.checkboxesLeaf.forEach((input) => input.addEventListener(\"change\", (event) => this.checkTheCheckParent(event.target)));\n this.checkboxesLeaf.forEach((input) => this.checkTheCheckParent(input));\n }\n /**\n * Set checkboxes as checked if included in given values\n * @public\n * @param {Array} checkboxes - array of checkboxes to check\n * @param {Array} values - values of checkboxes that should be checked\n * @returns {Void} - Returns nothing.\n */\n updateChecked(checkboxes, values) {\n checkboxes.each((_idx, checkbox) => {\n if (checkbox.value === \"\" && values.length === 1 || checkbox.value !== \"\" && values.includes(checkbox.value)) {\n checkbox.checked = true;\n this.checkTheCheckBoxes(checkbox);\n this.checkTheCheckParent(checkbox);\n }\n });\n }\n /**\n * Set the container form(s) for the component, to disable ignored filters before submitting them\n * @public\n * @param {query} theForm - form or forms where the component will be used\n * @returns {Void} - Returns nothing.\n */\n setContainerForm(theForm) {\n theForm.on(\"submit ajax:before\", () => {\n theForm.find(\".ignore-filters input, input.ignore-filter\").each((_idx, elem) => {\n elem.disabled = true;\n });\n });\n theForm.on(\"ajax:send\", () => {\n theForm.find(\".ignore-filters input, input.ignore-filter\").each((_idx, elem) => {\n elem.disabled = false;\n });\n });\n }\n /**\n * Handles the click action on any checkbox.\n * @private\n * @param {Input} target - the input that has been checked\n * @returns {Void} - Returns nothing.\n */\n checkTheCheckBoxes(target) {\n const targetChecks = target.dataset.checkboxesTree;\n const checkStatus = target.checked;\n const allChecks = document.querySelectorAll(`[data-children-checkbox$=\"${targetChecks}\"] input`);\n allChecks.forEach((input) => {\n input.checked = checkStatus;\n input.indeterminate = false;\n input.classList.add(\"ignore-filter\");\n if (input.dataset.checkboxesTree) {\n this.checkTheCheckBoxes(input);\n }\n });\n }\n /**\n * Update children checkboxes state when the current selection changes\n * @private\n * @param {Input} input - the checkbox to check its parent\n * @returns {Void} - Returns nothing.\n */\n checkTheCheckParent(input) {\n const key = input.parentNode.dataset.childrenCheckbox;\n const parentCheck = this.checkboxesTree.find(({ id }) => new RegExp(`${key}$`, \"i\").test(id));\n if (typeof parentCheck === \"undefined\") {\n return;\n }\n const totalCheckSiblings = this.checkboxesLeaf.filter((node) => node.parentNode.dataset.childrenCheckbox === key);\n const checkedSiblings = totalCheckSiblings.filter((checkbox) => checkbox.checked);\n const indeterminateSiblings = totalCheckSiblings.filter((checkbox) => checkbox.indeterminate);\n if (checkedSiblings.length === 0 && indeterminateSiblings.length === 0) {\n parentCheck.checked = false;\n parentCheck.indeterminate = false;\n } else if (checkedSiblings.length === totalCheckSiblings.length && indeterminateSiblings.length === 0) {\n parentCheck.checked = true;\n parentCheck.indeterminate = false;\n } else {\n parentCheck.checked = false;\n parentCheck.indeterminate = true;\n }\n totalCheckSiblings.forEach((sibling) => {\n if (parentCheck.indeterminate && !sibling.indeterminate) {\n sibling.classList.remove(\"ignore-filter\");\n } else {\n sibling.classList.add(\"ignore-filter\");\n }\n });\n if (\"childrenCheckbox\" in parentCheck.parentNode.dataset) {\n this.checkTheCheckParent(parentCheck);\n }\n }\n}\n","import delayed from \"src/decidim/delayed\";\nimport CheckBoxesTree from \"src/decidim/check_boxes_tree\";\nimport { registerCallback, unregisterCallback, pushState, replaceState, state } from \"src/decidim/history\";\nexport default class FormFilterComponent {\n constructor($form) {\n this.$form = $form;\n this.id = this.$form.attr(\"id\") || this._getUID();\n this.mounted = false;\n this.changeEvents = true;\n this.theCheckBoxesTree = new CheckBoxesTree();\n this._updateInitialState();\n this._onFormChange = delayed(this, this._onFormChange.bind(this));\n this._onPopState = this._onPopState.bind(this);\n if (window.Decidim.PopStateHandler) {\n this.popStateSubmitter = false;\n } else {\n this.popStateSubmitter = true;\n window.Decidim.PopStateHandler = this.id;\n }\n }\n /**\n * Handles the logic for unmounting the component\n * @public\n * @returns {Void} - Returns nothing\n */\n unmountComponent() {\n if (this.mounted) {\n this.mounted = false;\n this.$form.off(\"change\", \"input, select\", this._onFormChange);\n unregisterCallback(`filters-${this.id}`);\n }\n }\n /**\n * Handles the logic for mounting the component\n * @public\n * @returns {Void} - Returns nothing\n */\n mountComponent() {\n if (this.$form.length > 0 && !this.mounted) {\n this.mounted = true;\n let queue = 0;\n let contentContainer = $(\"main\");\n if (contentContainer.length === 0 && this.$form.data(\"remoteFill\")) {\n contentContainer = this.$form.data(\"remoteFill\");\n }\n this.$form.on(\"change\", \"input:not([data-disable-dynamic-change]), select:not([data-disable-dynamic-change])\", this._onFormChange);\n this.currentFormRequest = null;\n this.$form.on(\"ajax:beforeSend\", (e) => {\n if (this.currentFormRequest) {\n this.currentFormRequest.abort();\n }\n this.currentFormRequest = e.originalEvent.detail[0];\n queue += 1;\n if (queue > 0 && contentContainer.length > 0 && !contentContainer.hasClass(\"spinner-container\")) {\n contentContainer.addClass(\"spinner-container\");\n }\n });\n $(document).on(\"ajax:success\", () => {\n queue -= 1;\n if (queue <= 0 && contentContainer.length > 0) {\n contentContainer.removeClass(\"spinner-container\");\n }\n });\n $(document).on(\"ajax:error\", () => {\n queue -= 1;\n if (queue <= 0 && contentContainer.length > 0) {\n contentContainer.removeClass(\"spinner-container\");\n }\n this.$form.find(\".spinner-container\").addClass(\"hide\");\n });\n this.theCheckBoxesTree.setContainerForm(this.$form);\n registerCallback(`filters-${this.id}`, (currentState) => {\n this._onPopState(currentState);\n });\n }\n }\n /**\n * Sets path in the browser history with the initial filters state, to allow to restoring it when using browser history.\n * @private\n * @returns {Void} - Returns nothing.\n */\n _updateInitialState() {\n const [initialPath, initialState] = this._currentStateAndPath();\n initialState._path = initialPath;\n replaceState(null, initialState);\n }\n /**\n * Finds the current location.\n * @param {boolean} withHost - include the host part in the returned location\n * @private\n * @returns {String} - Returns the current location.\n */\n _getLocation(withHost = true) {\n const currentState = state();\n let path = \"\";\n if (currentState && currentState._path) {\n path = currentState._path;\n } else {\n path = window.location.pathname + window.location.search + window.location.hash;\n }\n if (withHost) {\n return window.location.origin + path;\n }\n return path;\n }\n /**\n * Parse current location and get filter values.\n * @private\n * @returns {Object} - An object where a key correspond to a filter field\n * and the value is the current value for the filter.\n */\n _parseLocationFilterValues() {\n let regexpResult = decodeURIComponent(this._getLocation()).match(/filter\\[([^\\]]*)\\](?:\\[\\])?=([^&]*)/g);\n if (regexpResult) {\n const filterParams = regexpResult.reduce((acc, result) => {\n const [, key, array, value] = result.match(/filter\\[([^\\]]*)\\](\\[\\])?=([^&]*)/);\n if (array) {\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(value);\n } else {\n acc[key] = value;\n }\n return acc;\n }, {});\n return filterParams;\n }\n return null;\n }\n /**\n * Parse current location and get the current order.\n * @private\n * @returns {string} - The current order\n */\n _parseLocationOrderValue() {\n const url = this._getLocation();\n const match = url.match(/order=([^&]*)/);\n const $orderMenu = this.$form.find(\".order-by .menu\");\n let order = $orderMenu.find(\".menu a:first\").data(\"order\");\n if (match) {\n order = match[1];\n }\n return order;\n }\n /**\n * Clears the form to start with a clean state.\n * @private\n * @returns {Void} - Returns nothing.\n */\n _clearForm() {\n this.$form.find(\"input[type=checkbox]\").each((index, element) => {\n element.checked = element.indeterminate = false;\n });\n this.$form.find(\"input[type=radio]\").attr(\"checked\", false);\n this.$form.find(\"fieldset input[type=radio]:first\").each(function() {\n $(this)[0].checked = true;\n });\n }\n /**\n * Handles the logic when going back to a previous state in the filter form.\n * @private\n * @returns {Void} - Returns nothing.\n */\n _onPopState() {\n this.changeEvents = false;\n this._clearForm();\n const filterParams = this._parseLocationFilterValues();\n const currentOrder = this._parseLocationOrderValue();\n this.$form.find(\"input.order_filter\").val(currentOrder);\n if (filterParams) {\n const fieldIds = Object.keys(filterParams);\n fieldIds.forEach((fieldName) => {\n let value = filterParams[fieldName];\n if (Array.isArray(value)) {\n let checkboxes = this.$form.find(`input[type=checkbox][name=\"filter[${fieldName}][]\"]`);\n this.theCheckBoxesTree.updateChecked(checkboxes, value);\n } else {\n this.$form.find(`*[name=\"filter[${fieldName}]\"]`).each((index, element) => {\n switch (element.type) {\n case \"hidden\":\n break;\n case \"radio\":\n case \"checkbox\":\n element.checked = value === element.value;\n break;\n default:\n element.value = value;\n }\n });\n }\n });\n }\n if (this.popStateSubmitter) {\n Rails.fire(this.$form[0], \"submit\");\n }\n this.changeEvents = true;\n }\n /**\n * Handles the logic to update the current location after a form change event.\n * @private\n * @returns {Void} - Returns nothing.\n */\n _onFormChange() {\n if (!this.changeEvents) {\n return;\n }\n const [newPath, newState] = this._currentStateAndPath();\n const path = this._getLocation(false);\n if (newPath === path) {\n return;\n }\n Rails.fire(this.$form[0], \"submit\");\n pushState(newPath, newState);\n this._saveFilters(newPath);\n }\n /**\n * Calculates the path and the state associated to the filters inputs.\n * @private\n * @returns {Array} - Returns an array with the path and the state for the current filters state.\n */\n _currentStateAndPath() {\n const formAction = this.$form.attr(\"action\");\n const params = this.$form.find(\"input:not(.ignore-filter)\").serialize();\n let path = \"\";\n let currentState = {};\n if (formAction.indexOf(\"?\") < 0) {\n path = `${formAction}?${params}`;\n } else {\n path = `${formAction}&${params}`;\n }\n return [path, currentState];\n }\n /**\n * Generates a unique identifier for the form.\n * @private\n * @returns {String} - Returns a unique identifier\n */\n _getUID() {\n return `filter-form-${(/* @__PURE__ */ new Date()).getUTCMilliseconds()}-${Math.floor(Math.random() * 1e7)}`;\n }\n /**\n * Saves the changed filters on sessionStorage API.\n * @private\n * @param {string} pathWithQueryStrings - path with all the query strings for filter. To be used with backToListLink().\n * @returns {Void} - Returns nothing.\n */\n _saveFilters(pathWithQueryStrings) {\n if (!window.sessionStorage) {\n return;\n }\n const pathName = this.$form.attr(\"action\");\n sessionStorage.setItem(\"filteredParams\", JSON.stringify({ [pathName]: pathWithQueryStrings }));\n }\n}\n","function $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $c770c458706daa72$export$2e2bcd8739ae039(obj, key, value) {\n if (key in obj) Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n else obj[key] = value;\n return obj;\n}\n\n\nvar $fb96b826c0c5f37a$var$n, $fb96b826c0c5f37a$export$41c562ebe57d11e2, $fb96b826c0c5f37a$var$u, $fb96b826c0c5f37a$export$a8257692ac88316c, $fb96b826c0c5f37a$var$t, $fb96b826c0c5f37a$var$r, $fb96b826c0c5f37a$var$o, $fb96b826c0c5f37a$var$f, $fb96b826c0c5f37a$var$e = {}, $fb96b826c0c5f37a$var$c = [], $fb96b826c0c5f37a$var$s = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\nfunction $fb96b826c0c5f37a$var$a(n1, l1) {\n for(var u1 in l1)n1[u1] = l1[u1];\n return n1;\n}\nfunction $fb96b826c0c5f37a$var$h(n2) {\n var l2 = n2.parentNode;\n l2 && l2.removeChild(n2);\n}\nfunction $fb96b826c0c5f37a$export$c8a8987d4410bf2d(l3, u2, i1) {\n var t1, r1, o1, f1 = {};\n for(o1 in u2)\"key\" == o1 ? t1 = u2[o1] : \"ref\" == o1 ? r1 = u2[o1] : f1[o1] = u2[o1];\n if (arguments.length > 2 && (f1.children = arguments.length > 3 ? $fb96b826c0c5f37a$var$n.call(arguments, 2) : i1), \"function\" == typeof l3 && null != l3.defaultProps) for(o1 in l3.defaultProps)void 0 === f1[o1] && (f1[o1] = l3.defaultProps[o1]);\n return $fb96b826c0c5f37a$var$y(l3, f1, t1, r1, null);\n}\nfunction $fb96b826c0c5f37a$var$y(n3, i2, t2, r2, o2) {\n var f2 = {\n type: n3,\n props: i2,\n key: t2,\n ref: r2,\n __k: null,\n __: null,\n __b: 0,\n __e: null,\n __d: void 0,\n __c: null,\n __h: null,\n constructor: void 0,\n __v: null == o2 ? ++$fb96b826c0c5f37a$var$u : o2\n };\n return null == o2 && null != $fb96b826c0c5f37a$export$41c562ebe57d11e2.vnode && $fb96b826c0c5f37a$export$41c562ebe57d11e2.vnode(f2), f2;\n}\nfunction $fb96b826c0c5f37a$export$7d1e3a5e95ceca43() {\n return {\n current: null\n };\n}\nfunction $fb96b826c0c5f37a$export$ffb0004e005737fa(n4) {\n return n4.children;\n}\nfunction $fb96b826c0c5f37a$export$16fa2f45be04daa8(n5, l4) {\n this.props = n5, this.context = l4;\n}\nfunction $fb96b826c0c5f37a$var$k(n6, l5) {\n if (null == l5) return n6.__ ? $fb96b826c0c5f37a$var$k(n6.__, n6.__.__k.indexOf(n6) + 1) : null;\n for(var u3; l5 < n6.__k.length; l5++)if (null != (u3 = n6.__k[l5]) && null != u3.__e) return u3.__e;\n return \"function\" == typeof n6.type ? $fb96b826c0c5f37a$var$k(n6) : null;\n}\nfunction $fb96b826c0c5f37a$var$b(n7) {\n var l6, u4;\n if (null != (n7 = n7.__) && null != n7.__c) {\n for(n7.__e = n7.__c.base = null, l6 = 0; l6 < n7.__k.length; l6++)if (null != (u4 = n7.__k[l6]) && null != u4.__e) {\n n7.__e = n7.__c.base = u4.__e;\n break;\n }\n return $fb96b826c0c5f37a$var$b(n7);\n }\n}\nfunction $fb96b826c0c5f37a$var$m(n8) {\n (!n8.__d && (n8.__d = !0) && $fb96b826c0c5f37a$var$t.push(n8) && !$fb96b826c0c5f37a$var$g.__r++ || $fb96b826c0c5f37a$var$o !== $fb96b826c0c5f37a$export$41c562ebe57d11e2.debounceRendering) && (($fb96b826c0c5f37a$var$o = $fb96b826c0c5f37a$export$41c562ebe57d11e2.debounceRendering) || $fb96b826c0c5f37a$var$r)($fb96b826c0c5f37a$var$g);\n}\nfunction $fb96b826c0c5f37a$var$g() {\n for(var n9; $fb96b826c0c5f37a$var$g.__r = $fb96b826c0c5f37a$var$t.length;)n9 = $fb96b826c0c5f37a$var$t.sort(function(n10, l7) {\n return n10.__v.__b - l7.__v.__b;\n }), $fb96b826c0c5f37a$var$t = [], n9.some(function(n11) {\n var l8, u5, i3, t3, r3, o3;\n n11.__d && (r3 = (t3 = (l8 = n11).__v).__e, (o3 = l8.__P) && (u5 = [], (i3 = $fb96b826c0c5f37a$var$a({}, t3)).__v = t3.__v + 1, $fb96b826c0c5f37a$var$j(o3, t3, i3, l8.__n, void 0 !== o3.ownerSVGElement, null != t3.__h ? [\n r3\n ] : null, u5, null == r3 ? $fb96b826c0c5f37a$var$k(t3) : r3, t3.__h), $fb96b826c0c5f37a$var$z(u5, t3), t3.__e != r3 && $fb96b826c0c5f37a$var$b(t3)));\n });\n}\nfunction $fb96b826c0c5f37a$var$w(n12, l9, u6, i4, t4, r4, o4, f3, s1, a1) {\n var h1, v1, p1, _1, b1, m1, g1, w1 = i4 && i4.__k || $fb96b826c0c5f37a$var$c, A1 = w1.length;\n for(u6.__k = [], h1 = 0; h1 < l9.length; h1++)if (null != (_1 = u6.__k[h1] = null == (_1 = l9[h1]) || \"boolean\" == typeof _1 ? null : \"string\" == typeof _1 || \"number\" == typeof _1 || \"bigint\" == typeof _1 ? $fb96b826c0c5f37a$var$y(null, _1, null, null, _1) : Array.isArray(_1) ? $fb96b826c0c5f37a$var$y($fb96b826c0c5f37a$export$ffb0004e005737fa, {\n children: _1\n }, null, null, null) : _1.__b > 0 ? $fb96b826c0c5f37a$var$y(_1.type, _1.props, _1.key, null, _1.__v) : _1)) {\n if (_1.__ = u6, _1.__b = u6.__b + 1, null === (p1 = w1[h1]) || p1 && _1.key == p1.key && _1.type === p1.type) w1[h1] = void 0;\n else for(v1 = 0; v1 < A1; v1++){\n if ((p1 = w1[v1]) && _1.key == p1.key && _1.type === p1.type) {\n w1[v1] = void 0;\n break;\n }\n p1 = null;\n }\n $fb96b826c0c5f37a$var$j(n12, _1, p1 = p1 || $fb96b826c0c5f37a$var$e, t4, r4, o4, f3, s1, a1), b1 = _1.__e, (v1 = _1.ref) && p1.ref != v1 && (g1 || (g1 = []), p1.ref && g1.push(p1.ref, null, _1), g1.push(v1, _1.__c || b1, _1)), null != b1 ? (null == m1 && (m1 = b1), \"function\" == typeof _1.type && _1.__k === p1.__k ? _1.__d = s1 = $fb96b826c0c5f37a$var$x(_1, s1, n12) : s1 = $fb96b826c0c5f37a$var$P(n12, _1, p1, w1, b1, s1), \"function\" == typeof u6.type && (u6.__d = s1)) : s1 && p1.__e == s1 && s1.parentNode != n12 && (s1 = $fb96b826c0c5f37a$var$k(p1));\n }\n for(u6.__e = m1, h1 = A1; h1--;)null != w1[h1] && (\"function\" == typeof u6.type && null != w1[h1].__e && w1[h1].__e == u6.__d && (u6.__d = $fb96b826c0c5f37a$var$k(i4, h1 + 1)), $fb96b826c0c5f37a$var$N(w1[h1], w1[h1]));\n if (g1) for(h1 = 0; h1 < g1.length; h1++)$fb96b826c0c5f37a$var$M(g1[h1], g1[++h1], g1[++h1]);\n}\nfunction $fb96b826c0c5f37a$var$x(n13, l10, u7) {\n for(var i5, t5 = n13.__k, r5 = 0; t5 && r5 < t5.length; r5++)(i5 = t5[r5]) && (i5.__ = n13, l10 = \"function\" == typeof i5.type ? $fb96b826c0c5f37a$var$x(i5, l10, u7) : $fb96b826c0c5f37a$var$P(u7, i5, i5, t5, i5.__e, l10));\n return l10;\n}\nfunction $fb96b826c0c5f37a$export$47e4c5b300681277(n14, l11) {\n return l11 = l11 || [], null == n14 || \"boolean\" == typeof n14 || (Array.isArray(n14) ? n14.some(function(n15) {\n $fb96b826c0c5f37a$export$47e4c5b300681277(n15, l11);\n }) : l11.push(n14)), l11;\n}\nfunction $fb96b826c0c5f37a$var$P(n16, l12, u8, i6, t6, r6) {\n var o5, f4, e1;\n if (void 0 !== l12.__d) o5 = l12.__d, l12.__d = void 0;\n else if (null == u8 || t6 != r6 || null == t6.parentNode) n: if (null == r6 || r6.parentNode !== n16) n16.appendChild(t6), o5 = null;\n else {\n for(f4 = r6, e1 = 0; (f4 = f4.nextSibling) && e1 < i6.length; e1 += 2)if (f4 == t6) break n;\n n16.insertBefore(t6, r6), o5 = r6;\n }\n return void 0 !== o5 ? o5 : t6.nextSibling;\n}\nfunction $fb96b826c0c5f37a$var$C(n17, l13, u9, i7, t7) {\n var r7;\n for(r7 in u9)\"children\" === r7 || \"key\" === r7 || r7 in l13 || $fb96b826c0c5f37a$var$H(n17, r7, null, u9[r7], i7);\n for(r7 in l13)t7 && \"function\" != typeof l13[r7] || \"children\" === r7 || \"key\" === r7 || \"value\" === r7 || \"checked\" === r7 || u9[r7] === l13[r7] || $fb96b826c0c5f37a$var$H(n17, r7, l13[r7], u9[r7], i7);\n}\nfunction $fb96b826c0c5f37a$var$$(n18, l14, u10) {\n \"-\" === l14[0] ? n18.setProperty(l14, u10) : n18[l14] = null == u10 ? \"\" : \"number\" != typeof u10 || $fb96b826c0c5f37a$var$s.test(l14) ? u10 : u10 + \"px\";\n}\nfunction $fb96b826c0c5f37a$var$H(n19, l15, u11, i8, t8) {\n var r8;\n n: if (\"style\" === l15) {\n if (\"string\" == typeof u11) n19.style.cssText = u11;\n else {\n if (\"string\" == typeof i8 && (n19.style.cssText = i8 = \"\"), i8) for(l15 in i8)u11 && l15 in u11 || $fb96b826c0c5f37a$var$$(n19.style, l15, \"\");\n if (u11) for(l15 in u11)i8 && u11[l15] === i8[l15] || $fb96b826c0c5f37a$var$$(n19.style, l15, u11[l15]);\n }\n } else if (\"o\" === l15[0] && \"n\" === l15[1]) r8 = l15 !== (l15 = l15.replace(/Capture$/, \"\")), l15 = l15.toLowerCase() in n19 ? l15.toLowerCase().slice(2) : l15.slice(2), n19.l || (n19.l = {}), n19.l[l15 + r8] = u11, u11 ? i8 || n19.addEventListener(l15, r8 ? $fb96b826c0c5f37a$var$T : $fb96b826c0c5f37a$var$I, r8) : n19.removeEventListener(l15, r8 ? $fb96b826c0c5f37a$var$T : $fb96b826c0c5f37a$var$I, r8);\n else if (\"dangerouslySetInnerHTML\" !== l15) {\n if (t8) l15 = l15.replace(/xlink[H:h]/, \"h\").replace(/sName$/, \"s\");\n else if (\"href\" !== l15 && \"list\" !== l15 && \"form\" !== l15 && \"tabIndex\" !== l15 && \"download\" !== l15 && l15 in n19) try {\n n19[l15] = null == u11 ? \"\" : u11;\n break n;\n } catch (n) {}\n \"function\" == typeof u11 || (null != u11 && (!1 !== u11 || \"a\" === l15[0] && \"r\" === l15[1]) ? n19.setAttribute(l15, u11) : n19.removeAttribute(l15));\n }\n}\nfunction $fb96b826c0c5f37a$var$I(n20) {\n this.l[n20.type + !1]($fb96b826c0c5f37a$export$41c562ebe57d11e2.event ? $fb96b826c0c5f37a$export$41c562ebe57d11e2.event(n20) : n20);\n}\nfunction $fb96b826c0c5f37a$var$T(n21) {\n this.l[n21.type + !0]($fb96b826c0c5f37a$export$41c562ebe57d11e2.event ? $fb96b826c0c5f37a$export$41c562ebe57d11e2.event(n21) : n21);\n}\nfunction $fb96b826c0c5f37a$var$j(n22, u12, i9, t9, r9, o6, f5, e2, c1) {\n var s2, h2, v2, y1, p2, k1, b2, m2, g2, x1, A2, P1 = u12.type;\n if (void 0 !== u12.constructor) return null;\n null != i9.__h && (c1 = i9.__h, e2 = u12.__e = i9.__e, u12.__h = null, o6 = [\n e2\n ]), (s2 = $fb96b826c0c5f37a$export$41c562ebe57d11e2.__b) && s2(u12);\n try {\n n: if (\"function\" == typeof P1) {\n if (m2 = u12.props, g2 = (s2 = P1.contextType) && t9[s2.__c], x1 = s2 ? g2 ? g2.props.value : s2.__ : t9, i9.__c ? b2 = (h2 = u12.__c = i9.__c).__ = h2.__E : (\"prototype\" in P1 && P1.prototype.render ? u12.__c = h2 = new P1(m2, x1) : (u12.__c = h2 = new $fb96b826c0c5f37a$export$16fa2f45be04daa8(m2, x1), h2.constructor = P1, h2.render = $fb96b826c0c5f37a$var$O), g2 && g2.sub(h2), h2.props = m2, h2.state || (h2.state = {}), h2.context = x1, h2.__n = t9, v2 = h2.__d = !0, h2.__h = []), null == h2.__s && (h2.__s = h2.state), null != P1.getDerivedStateFromProps && (h2.__s == h2.state && (h2.__s = $fb96b826c0c5f37a$var$a({}, h2.__s)), $fb96b826c0c5f37a$var$a(h2.__s, P1.getDerivedStateFromProps(m2, h2.__s))), y1 = h2.props, p2 = h2.state, v2) null == P1.getDerivedStateFromProps && null != h2.componentWillMount && h2.componentWillMount(), null != h2.componentDidMount && h2.__h.push(h2.componentDidMount);\n else {\n if (null == P1.getDerivedStateFromProps && m2 !== y1 && null != h2.componentWillReceiveProps && h2.componentWillReceiveProps(m2, x1), !h2.__e && null != h2.shouldComponentUpdate && !1 === h2.shouldComponentUpdate(m2, h2.__s, x1) || u12.__v === i9.__v) {\n h2.props = m2, h2.state = h2.__s, u12.__v !== i9.__v && (h2.__d = !1), h2.__v = u12, u12.__e = i9.__e, u12.__k = i9.__k, u12.__k.forEach(function(n23) {\n n23 && (n23.__ = u12);\n }), h2.__h.length && f5.push(h2);\n break n;\n }\n null != h2.componentWillUpdate && h2.componentWillUpdate(m2, h2.__s, x1), null != h2.componentDidUpdate && h2.__h.push(function() {\n h2.componentDidUpdate(y1, p2, k1);\n });\n }\n h2.context = x1, h2.props = m2, h2.state = h2.__s, (s2 = $fb96b826c0c5f37a$export$41c562ebe57d11e2.__r) && s2(u12), h2.__d = !1, h2.__v = u12, h2.__P = n22, s2 = h2.render(h2.props, h2.state, h2.context), h2.state = h2.__s, null != h2.getChildContext && (t9 = $fb96b826c0c5f37a$var$a($fb96b826c0c5f37a$var$a({}, t9), h2.getChildContext())), v2 || null == h2.getSnapshotBeforeUpdate || (k1 = h2.getSnapshotBeforeUpdate(y1, p2)), A2 = null != s2 && s2.type === $fb96b826c0c5f37a$export$ffb0004e005737fa && null == s2.key ? s2.props.children : s2, $fb96b826c0c5f37a$var$w(n22, Array.isArray(A2) ? A2 : [\n A2\n ], u12, i9, t9, r9, o6, f5, e2, c1), h2.base = u12.__e, u12.__h = null, h2.__h.length && f5.push(h2), b2 && (h2.__E = h2.__ = null), h2.__e = !1;\n } else null == o6 && u12.__v === i9.__v ? (u12.__k = i9.__k, u12.__e = i9.__e) : u12.__e = $fb96b826c0c5f37a$var$L(i9.__e, u12, i9, t9, r9, o6, f5, c1);\n (s2 = $fb96b826c0c5f37a$export$41c562ebe57d11e2.diffed) && s2(u12);\n } catch (n24) {\n u12.__v = null, (c1 || null != o6) && (u12.__e = e2, u12.__h = !!c1, o6[o6.indexOf(e2)] = null), $fb96b826c0c5f37a$export$41c562ebe57d11e2.__e(n24, u12, i9);\n }\n}\nfunction $fb96b826c0c5f37a$var$z(n25, u13) {\n $fb96b826c0c5f37a$export$41c562ebe57d11e2.__c && $fb96b826c0c5f37a$export$41c562ebe57d11e2.__c(u13, n25), n25.some(function(u14) {\n try {\n n25 = u14.__h, u14.__h = [], n25.some(function(n26) {\n n26.call(u14);\n });\n } catch (n27) {\n $fb96b826c0c5f37a$export$41c562ebe57d11e2.__e(n27, u14.__v);\n }\n });\n}\nfunction $fb96b826c0c5f37a$var$L(l16, u15, i10, t10, r10, o7, f6, c2) {\n var s3, a2, v3, y2 = i10.props, p3 = u15.props, d1 = u15.type, _2 = 0;\n if (\"svg\" === d1 && (r10 = !0), null != o7) {\n for(; _2 < o7.length; _2++)if ((s3 = o7[_2]) && \"setAttribute\" in s3 == !!d1 && (d1 ? s3.localName === d1 : 3 === s3.nodeType)) {\n l16 = s3, o7[_2] = null;\n break;\n }\n }\n if (null == l16) {\n if (null === d1) return document.createTextNode(p3);\n l16 = r10 ? document.createElementNS(\"http://www.w3.org/2000/svg\", d1) : document.createElement(d1, p3.is && p3), o7 = null, c2 = !1;\n }\n if (null === d1) y2 === p3 || c2 && l16.data === p3 || (l16.data = p3);\n else {\n if (o7 = o7 && $fb96b826c0c5f37a$var$n.call(l16.childNodes), a2 = (y2 = i10.props || $fb96b826c0c5f37a$var$e).dangerouslySetInnerHTML, v3 = p3.dangerouslySetInnerHTML, !c2) {\n if (null != o7) for(y2 = {}, _2 = 0; _2 < l16.attributes.length; _2++)y2[l16.attributes[_2].name] = l16.attributes[_2].value;\n (v3 || a2) && (v3 && (a2 && v3.__html == a2.__html || v3.__html === l16.innerHTML) || (l16.innerHTML = v3 && v3.__html || \"\"));\n }\n if ($fb96b826c0c5f37a$var$C(l16, p3, y2, r10, c2), v3) u15.__k = [];\n else if (_2 = u15.props.children, $fb96b826c0c5f37a$var$w(l16, Array.isArray(_2) ? _2 : [\n _2\n ], u15, i10, t10, r10 && \"foreignObject\" !== d1, o7, f6, o7 ? o7[0] : i10.__k && $fb96b826c0c5f37a$var$k(i10, 0), c2), null != o7) for(_2 = o7.length; _2--;)null != o7[_2] && $fb96b826c0c5f37a$var$h(o7[_2]);\n c2 || (\"value\" in p3 && void 0 !== (_2 = p3.value) && (_2 !== y2.value || _2 !== l16.value || \"progress\" === d1 && !_2) && $fb96b826c0c5f37a$var$H(l16, \"value\", _2, y2.value, !1), \"checked\" in p3 && void 0 !== (_2 = p3.checked) && _2 !== l16.checked && $fb96b826c0c5f37a$var$H(l16, \"checked\", _2, y2.checked, !1));\n }\n return l16;\n}\nfunction $fb96b826c0c5f37a$var$M(n28, u16, i11) {\n try {\n \"function\" == typeof n28 ? n28(u16) : n28.current = u16;\n } catch (n29) {\n $fb96b826c0c5f37a$export$41c562ebe57d11e2.__e(n29, i11);\n }\n}\nfunction $fb96b826c0c5f37a$var$N(n30, u17, i12) {\n var t11, r11;\n if ($fb96b826c0c5f37a$export$41c562ebe57d11e2.unmount && $fb96b826c0c5f37a$export$41c562ebe57d11e2.unmount(n30), (t11 = n30.ref) && (t11.current && t11.current !== n30.__e || $fb96b826c0c5f37a$var$M(t11, null, u17)), null != (t11 = n30.__c)) {\n if (t11.componentWillUnmount) try {\n t11.componentWillUnmount();\n } catch (n31) {\n $fb96b826c0c5f37a$export$41c562ebe57d11e2.__e(n31, u17);\n }\n t11.base = t11.__P = null;\n }\n if (t11 = n30.__k) for(r11 = 0; r11 < t11.length; r11++)t11[r11] && $fb96b826c0c5f37a$var$N(t11[r11], u17, \"function\" != typeof n30.type);\n i12 || null == n30.__e || $fb96b826c0c5f37a$var$h(n30.__e), n30.__e = n30.__d = void 0;\n}\nfunction $fb96b826c0c5f37a$var$O(n32, l, u18) {\n return this.constructor(n32, u18);\n}\nfunction $fb96b826c0c5f37a$export$b3890eb0ae9dca99(u19, i13, t12) {\n var r12, o8, f7;\n $fb96b826c0c5f37a$export$41c562ebe57d11e2.__ && $fb96b826c0c5f37a$export$41c562ebe57d11e2.__(u19, i13), o8 = (r12 = \"function\" == typeof t12) ? null : t12 && t12.__k || i13.__k, f7 = [], $fb96b826c0c5f37a$var$j(i13, u19 = (!r12 && t12 || i13).__k = $fb96b826c0c5f37a$export$c8a8987d4410bf2d($fb96b826c0c5f37a$export$ffb0004e005737fa, null, [\n u19\n ]), o8 || $fb96b826c0c5f37a$var$e, $fb96b826c0c5f37a$var$e, void 0 !== i13.ownerSVGElement, !r12 && t12 ? [\n t12\n ] : o8 ? null : i13.firstChild ? $fb96b826c0c5f37a$var$n.call(i13.childNodes) : null, f7, !r12 && t12 ? t12 : o8 ? o8.__e : i13.firstChild, r12), $fb96b826c0c5f37a$var$z(f7, u19);\n}\nfunction $fb96b826c0c5f37a$export$fa8d919ba61d84db(n33, l17) {\n $fb96b826c0c5f37a$export$b3890eb0ae9dca99(n33, l17, $fb96b826c0c5f37a$export$fa8d919ba61d84db);\n}\nfunction $fb96b826c0c5f37a$export$e530037191fcd5d7(l18, u20, i14) {\n var t13, r13, o9, f8 = $fb96b826c0c5f37a$var$a({}, l18.props);\n for(o9 in u20)\"key\" == o9 ? t13 = u20[o9] : \"ref\" == o9 ? r13 = u20[o9] : f8[o9] = u20[o9];\n return arguments.length > 2 && (f8.children = arguments.length > 3 ? $fb96b826c0c5f37a$var$n.call(arguments, 2) : i14), $fb96b826c0c5f37a$var$y(l18.type, f8, t13 || l18.key, r13 || l18.ref, null);\n}\nfunction $fb96b826c0c5f37a$export$fd42f52fd3ae1109(n34, l19) {\n var u21 = {\n __c: l19 = \"__cC\" + $fb96b826c0c5f37a$var$f++,\n __: n34,\n Consumer: function(n35, l20) {\n return n35.children(l20);\n },\n Provider: function(n36) {\n var u22, i15;\n return this.getChildContext || (u22 = [], (i15 = {})[l19] = this, this.getChildContext = function() {\n return i15;\n }, this.shouldComponentUpdate = function(n37) {\n this.props.value !== n37.value && u22.some($fb96b826c0c5f37a$var$m);\n }, this.sub = function(n38) {\n u22.push(n38);\n var l21 = n38.componentWillUnmount;\n n38.componentWillUnmount = function() {\n u22.splice(u22.indexOf(n38), 1), l21 && l21.call(n38);\n };\n }), n36.children;\n }\n };\n return u21.Provider.__ = u21.Consumer.contextType = u21;\n}\n$fb96b826c0c5f37a$var$n = $fb96b826c0c5f37a$var$c.slice, $fb96b826c0c5f37a$export$41c562ebe57d11e2 = {\n __e: function(n39, l22) {\n for(var u23, i16, t14; l22 = l22.__;)if ((u23 = l22.__c) && !u23.__) try {\n if ((i16 = u23.constructor) && null != i16.getDerivedStateFromError && (u23.setState(i16.getDerivedStateFromError(n39)), t14 = u23.__d), null != u23.componentDidCatch && (u23.componentDidCatch(n39), t14 = u23.__d), t14) return u23.__E = u23;\n } catch (l23) {\n n39 = l23;\n }\n throw n39;\n }\n}, $fb96b826c0c5f37a$var$u = 0, $fb96b826c0c5f37a$export$a8257692ac88316c = function(n40) {\n return null != n40 && void 0 === n40.constructor;\n}, $fb96b826c0c5f37a$export$16fa2f45be04daa8.prototype.setState = function(n41, l24) {\n var u24;\n u24 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = $fb96b826c0c5f37a$var$a({}, this.state), \"function\" == typeof n41 && (n41 = n41($fb96b826c0c5f37a$var$a({}, u24), this.props)), n41 && $fb96b826c0c5f37a$var$a(u24, n41), null != n41 && this.__v && (l24 && this.__h.push(l24), $fb96b826c0c5f37a$var$m(this));\n}, $fb96b826c0c5f37a$export$16fa2f45be04daa8.prototype.forceUpdate = function(n42) {\n this.__v && (this.__e = !0, n42 && this.__h.push(n42), $fb96b826c0c5f37a$var$m(this));\n}, $fb96b826c0c5f37a$export$16fa2f45be04daa8.prototype.render = $fb96b826c0c5f37a$export$ffb0004e005737fa, $fb96b826c0c5f37a$var$t = [], $fb96b826c0c5f37a$var$r = \"function\" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, $fb96b826c0c5f37a$var$g.__r = 0, $fb96b826c0c5f37a$var$f = 0;\n\n\n\nvar $bd9dd35321b03dd4$var$o = 0;\nfunction $bd9dd35321b03dd4$export$34b9dba7ce09269b(_1, e1, n, t, f) {\n var l, s, u = {};\n for(s in e1)\"ref\" == s ? l = e1[s] : u[s] = e1[s];\n var a = {\n type: _1,\n props: u,\n key: n,\n ref: l,\n __k: null,\n __: null,\n __b: 0,\n __e: null,\n __d: void 0,\n __c: null,\n __h: null,\n constructor: void 0,\n __v: --$bd9dd35321b03dd4$var$o,\n __source: t,\n __self: f\n };\n if (\"function\" == typeof _1 && (l = _1.defaultProps)) for(s in l)void 0 === u[s] && (u[s] = l[s]);\n return (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).vnode && (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).vnode(a), a;\n}\n\n\n\nfunction $f72b75cf796873c7$var$set(key, value) {\n try {\n window.localStorage[`emoji-mart.${key}`] = JSON.stringify(value);\n } catch (error) {}\n}\nfunction $f72b75cf796873c7$var$get(key) {\n try {\n const value = window.localStorage[`emoji-mart.${key}`];\n if (value) return JSON.parse(value);\n } catch (error) {}\n}\nvar $f72b75cf796873c7$export$2e2bcd8739ae039 = {\n set: $f72b75cf796873c7$var$set,\n get: $f72b75cf796873c7$var$get\n};\n\n\nconst $c84d045dcc34faf5$var$CACHE = new Map();\nconst $c84d045dcc34faf5$var$VERSIONS = [\n {\n v: 15,\n emoji: \"\\uD83E\\uDEE8\"\n },\n {\n v: 14,\n emoji: \"\\uD83E\\uDEE0\"\n },\n {\n v: 13.1,\n emoji: \"\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B\\uFE0F\"\n },\n {\n v: 13,\n emoji: \"\\uD83E\\uDD78\"\n },\n {\n v: 12.1,\n emoji: \"\\uD83E\\uDDD1\\u200D\\uD83E\\uDDB0\"\n },\n {\n v: 12,\n emoji: \"\\uD83E\\uDD71\"\n },\n {\n v: 11,\n emoji: \"\\uD83E\\uDD70\"\n },\n {\n v: 5,\n emoji: \"\\uD83E\\uDD29\"\n },\n {\n v: 4,\n emoji: \"\\uD83D\\uDC71\\u200D\\u2640\\uFE0F\"\n },\n {\n v: 3,\n emoji: \"\\uD83E\\uDD23\"\n },\n {\n v: 2,\n emoji: \"\\uD83D\\uDC4B\\uD83C\\uDFFB\"\n },\n {\n v: 1,\n emoji: \"\\uD83D\\uDE43\"\n }, \n];\nfunction $c84d045dcc34faf5$var$latestVersion() {\n for (const { v: v , emoji: emoji } of $c84d045dcc34faf5$var$VERSIONS){\n if ($c84d045dcc34faf5$var$isSupported(emoji)) return v;\n }\n}\nfunction $c84d045dcc34faf5$var$noCountryFlags() {\n if ($c84d045dcc34faf5$var$isSupported(\"\\uD83C\\uDDE8\\uD83C\\uDDE6\")) return false;\n return true;\n}\nfunction $c84d045dcc34faf5$var$isSupported(emoji) {\n if ($c84d045dcc34faf5$var$CACHE.has(emoji)) return $c84d045dcc34faf5$var$CACHE.get(emoji);\n const supported = $c84d045dcc34faf5$var$isEmojiSupported(emoji);\n $c84d045dcc34faf5$var$CACHE.set(emoji, supported);\n return supported;\n}\n// https://github.com/koala-interactive/is-emoji-supported\nconst $c84d045dcc34faf5$var$isEmojiSupported = (()=>{\n let ctx = null;\n try {\n if (!navigator.userAgent.includes(\"jsdom\")) ctx = document.createElement(\"canvas\").getContext(\"2d\", {\n willReadFrequently: true\n });\n } catch {}\n // Not in browser env\n if (!ctx) return ()=>false;\n const CANVAS_HEIGHT = 25;\n const CANVAS_WIDTH = 20;\n const textSize = Math.floor(CANVAS_HEIGHT / 2);\n // Initialize convas context\n ctx.font = textSize + \"px Arial, Sans-Serif\";\n ctx.textBaseline = \"top\";\n ctx.canvas.width = CANVAS_WIDTH * 2;\n ctx.canvas.height = CANVAS_HEIGHT;\n return (unicode)=>{\n ctx.clearRect(0, 0, CANVAS_WIDTH * 2, CANVAS_HEIGHT);\n // Draw in red on the left\n ctx.fillStyle = \"#FF0000\";\n ctx.fillText(unicode, 0, 22);\n // Draw in blue on right\n ctx.fillStyle = \"#0000FF\";\n ctx.fillText(unicode, CANVAS_WIDTH, 22);\n const a = ctx.getImageData(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT).data;\n const count = a.length;\n let i = 0;\n // Search the first visible pixel\n for(; i < count && !a[i + 3]; i += 4);\n // No visible pixel\n if (i >= count) return false;\n // Emoji has immutable color, so we check the color of the emoji in two different colors\n // the result show be the same.\n const x = CANVAS_WIDTH + i / 4 % CANVAS_WIDTH;\n const y = Math.floor(i / 4 / CANVAS_WIDTH);\n const b = ctx.getImageData(x, y, 1, 1).data;\n if (a[i] !== b[0] || a[i + 2] !== b[2]) return false;\n // Some emojis are a contraction of different ones, so if it's not\n // supported, it will show multiple characters\n if (ctx.measureText(unicode).width >= CANVAS_WIDTH) return false;\n // Supported\n return true;\n };\n})();\nvar $c84d045dcc34faf5$export$2e2bcd8739ae039 = {\n latestVersion: $c84d045dcc34faf5$var$latestVersion,\n noCountryFlags: $c84d045dcc34faf5$var$noCountryFlags\n};\n\n\n\nconst $b22cfd0a55410b4f$var$DEFAULTS = [\n \"+1\",\n \"grinning\",\n \"kissing_heart\",\n \"heart_eyes\",\n \"laughing\",\n \"stuck_out_tongue_winking_eye\",\n \"sweat_smile\",\n \"joy\",\n \"scream\",\n \"disappointed\",\n \"unamused\",\n \"weary\",\n \"sob\",\n \"sunglasses\",\n \"heart\", \n];\nlet $b22cfd0a55410b4f$var$Index = null;\nfunction $b22cfd0a55410b4f$var$add(emoji) {\n $b22cfd0a55410b4f$var$Index || ($b22cfd0a55410b4f$var$Index = (0, $f72b75cf796873c7$export$2e2bcd8739ae039).get(\"frequently\") || {});\n const emojiId = emoji.id || emoji;\n if (!emojiId) return;\n $b22cfd0a55410b4f$var$Index[emojiId] || ($b22cfd0a55410b4f$var$Index[emojiId] = 0);\n $b22cfd0a55410b4f$var$Index[emojiId] += 1;\n (0, $f72b75cf796873c7$export$2e2bcd8739ae039).set(\"last\", emojiId);\n (0, $f72b75cf796873c7$export$2e2bcd8739ae039).set(\"frequently\", $b22cfd0a55410b4f$var$Index);\n}\nfunction $b22cfd0a55410b4f$var$get({ maxFrequentRows: maxFrequentRows , perLine: perLine }) {\n if (!maxFrequentRows) return [];\n $b22cfd0a55410b4f$var$Index || ($b22cfd0a55410b4f$var$Index = (0, $f72b75cf796873c7$export$2e2bcd8739ae039).get(\"frequently\"));\n let emojiIds = [];\n if (!$b22cfd0a55410b4f$var$Index) {\n $b22cfd0a55410b4f$var$Index = {};\n for(let i in $b22cfd0a55410b4f$var$DEFAULTS.slice(0, perLine)){\n const emojiId = $b22cfd0a55410b4f$var$DEFAULTS[i];\n $b22cfd0a55410b4f$var$Index[emojiId] = perLine - i;\n emojiIds.push(emojiId);\n }\n return emojiIds;\n }\n const max = maxFrequentRows * perLine;\n const last = (0, $f72b75cf796873c7$export$2e2bcd8739ae039).get(\"last\");\n for(let emojiId in $b22cfd0a55410b4f$var$Index)emojiIds.push(emojiId);\n emojiIds.sort((a, b)=>{\n const aScore = $b22cfd0a55410b4f$var$Index[b];\n const bScore = $b22cfd0a55410b4f$var$Index[a];\n if (aScore == bScore) return a.localeCompare(b);\n return aScore - bScore;\n });\n if (emojiIds.length > max) {\n const removedIds = emojiIds.slice(max);\n emojiIds = emojiIds.slice(0, max);\n for (let removedId of removedIds){\n if (removedId == last) continue;\n delete $b22cfd0a55410b4f$var$Index[removedId];\n }\n if (last && emojiIds.indexOf(last) == -1) {\n delete $b22cfd0a55410b4f$var$Index[emojiIds[emojiIds.length - 1]];\n emojiIds.splice(-1, 1, last);\n }\n (0, $f72b75cf796873c7$export$2e2bcd8739ae039).set(\"frequently\", $b22cfd0a55410b4f$var$Index);\n }\n return emojiIds;\n}\nvar $b22cfd0a55410b4f$export$2e2bcd8739ae039 = {\n add: $b22cfd0a55410b4f$var$add,\n get: $b22cfd0a55410b4f$var$get,\n DEFAULTS: $b22cfd0a55410b4f$var$DEFAULTS\n};\n\n\nvar $8d50d93417ef682a$exports = {};\n$8d50d93417ef682a$exports = JSON.parse('{\"search\":\"Search\",\"search_no_results_1\":\"Oh no!\",\"search_no_results_2\":\"That emoji couldn\\u2019t be found\",\"pick\":\"Pick an emoji\\u2026\",\"add_custom\":\"Add custom emoji\",\"categories\":{\"activity\":\"Activity\",\"custom\":\"Custom\",\"flags\":\"Flags\",\"foods\":\"Food & Drink\",\"frequent\":\"Frequently used\",\"nature\":\"Animals & Nature\",\"objects\":\"Objects\",\"people\":\"Smileys & People\",\"places\":\"Travel & Places\",\"search\":\"Search Results\",\"symbols\":\"Symbols\"},\"skins\":{\"1\":\"Default\",\"2\":\"Light\",\"3\":\"Medium-Light\",\"4\":\"Medium\",\"5\":\"Medium-Dark\",\"6\":\"Dark\",\"choose\":\"Choose default skin tone\"}}');\n\n\nvar $b247ea80b67298d5$export$2e2bcd8739ae039 = {\n autoFocus: {\n value: false\n },\n dynamicWidth: {\n value: false\n },\n emojiButtonColors: {\n value: null\n },\n emojiButtonRadius: {\n value: \"100%\"\n },\n emojiButtonSize: {\n value: 36\n },\n emojiSize: {\n value: 24\n },\n emojiVersion: {\n value: 15,\n choices: [\n 1,\n 2,\n 3,\n 4,\n 5,\n 11,\n 12,\n 12.1,\n 13,\n 13.1,\n 14,\n 15\n ]\n },\n exceptEmojis: {\n value: []\n },\n icons: {\n value: \"auto\",\n choices: [\n \"auto\",\n \"outline\",\n \"solid\"\n ]\n },\n locale: {\n value: \"en\",\n choices: [\n \"en\",\n \"ar\",\n \"be\",\n \"cs\",\n \"de\",\n \"es\",\n \"fa\",\n \"fi\",\n \"fr\",\n \"hi\",\n \"it\",\n \"ja\",\n \"ko\",\n \"nl\",\n \"pl\",\n \"pt\",\n \"ru\",\n \"sa\",\n \"tr\",\n \"uk\",\n \"vi\",\n \"zh\", \n ]\n },\n maxFrequentRows: {\n value: 4\n },\n navPosition: {\n value: \"top\",\n choices: [\n \"top\",\n \"bottom\",\n \"none\"\n ]\n },\n noCountryFlags: {\n value: false\n },\n noResultsEmoji: {\n value: null\n },\n perLine: {\n value: 9\n },\n previewEmoji: {\n value: null\n },\n previewPosition: {\n value: \"bottom\",\n choices: [\n \"top\",\n \"bottom\",\n \"none\"\n ]\n },\n searchPosition: {\n value: \"sticky\",\n choices: [\n \"sticky\",\n \"static\",\n \"none\"\n ]\n },\n set: {\n value: \"native\",\n choices: [\n \"native\",\n \"apple\",\n \"facebook\",\n \"google\",\n \"twitter\"\n ]\n },\n skin: {\n value: 1,\n choices: [\n 1,\n 2,\n 3,\n 4,\n 5,\n 6\n ]\n },\n skinTonePosition: {\n value: \"preview\",\n choices: [\n \"preview\",\n \"search\",\n \"none\"\n ]\n },\n theme: {\n value: \"auto\",\n choices: [\n \"auto\",\n \"light\",\n \"dark\"\n ]\n },\n // Data\n categories: null,\n categoryIcons: null,\n custom: null,\n data: null,\n i18n: null,\n // Callbacks\n getImageURL: null,\n getSpritesheetURL: null,\n onAddCustomEmoji: null,\n onClickOutside: null,\n onEmojiSelect: null,\n // Deprecated\n stickySearch: {\n deprecated: true,\n value: true\n }\n};\n\n\n\nlet $7adb23b0109cc36a$export$dbe3113d60765c1a = null;\nlet $7adb23b0109cc36a$export$2d0294657ab35f1b = null;\nconst $7adb23b0109cc36a$var$fetchCache = {};\nasync function $7adb23b0109cc36a$var$fetchJSON(src) {\n if ($7adb23b0109cc36a$var$fetchCache[src]) return $7adb23b0109cc36a$var$fetchCache[src];\n const response = await fetch(src);\n const json = await response.json();\n $7adb23b0109cc36a$var$fetchCache[src] = json;\n return json;\n}\nlet $7adb23b0109cc36a$var$promise = null;\nlet $7adb23b0109cc36a$var$initiated = false;\nlet $7adb23b0109cc36a$var$initCallback = null;\nlet $7adb23b0109cc36a$var$initialized = false;\nfunction $7adb23b0109cc36a$export$2cd8252107eb640b(options, { caller: caller } = {}) {\n $7adb23b0109cc36a$var$promise || ($7adb23b0109cc36a$var$promise = new Promise((resolve)=>{\n $7adb23b0109cc36a$var$initCallback = resolve;\n }));\n if (options) $7adb23b0109cc36a$var$_init(options);\n else if (caller && !$7adb23b0109cc36a$var$initialized) console.warn(`\\`${caller}\\` requires data to be initialized first. Promise will be pending until \\`init\\` is called.`);\n return $7adb23b0109cc36a$var$promise;\n}\nasync function $7adb23b0109cc36a$var$_init(props) {\n $7adb23b0109cc36a$var$initialized = true;\n let { emojiVersion: emojiVersion , set: set , locale: locale } = props;\n emojiVersion || (emojiVersion = (0, $b247ea80b67298d5$export$2e2bcd8739ae039).emojiVersion.value);\n set || (set = (0, $b247ea80b67298d5$export$2e2bcd8739ae039).set.value);\n locale || (locale = (0, $b247ea80b67298d5$export$2e2bcd8739ae039).locale.value);\n if (!$7adb23b0109cc36a$export$2d0294657ab35f1b) {\n $7adb23b0109cc36a$export$2d0294657ab35f1b = (typeof props.data === \"function\" ? await props.data() : props.data) || await $7adb23b0109cc36a$var$fetchJSON(`https://cdn.jsdelivr.net/npm/@emoji-mart/data@latest/sets/${emojiVersion}/${set}.json`);\n $7adb23b0109cc36a$export$2d0294657ab35f1b.emoticons = {};\n $7adb23b0109cc36a$export$2d0294657ab35f1b.natives = {};\n $7adb23b0109cc36a$export$2d0294657ab35f1b.categories.unshift({\n id: \"frequent\",\n emojis: []\n });\n for(const alias in $7adb23b0109cc36a$export$2d0294657ab35f1b.aliases){\n const emojiId = $7adb23b0109cc36a$export$2d0294657ab35f1b.aliases[alias];\n const emoji = $7adb23b0109cc36a$export$2d0294657ab35f1b.emojis[emojiId];\n if (!emoji) continue;\n emoji.aliases || (emoji.aliases = []);\n emoji.aliases.push(alias);\n }\n $7adb23b0109cc36a$export$2d0294657ab35f1b.originalCategories = $7adb23b0109cc36a$export$2d0294657ab35f1b.categories;\n } else $7adb23b0109cc36a$export$2d0294657ab35f1b.categories = $7adb23b0109cc36a$export$2d0294657ab35f1b.categories.filter((c)=>{\n const isCustom = !!c.name;\n if (!isCustom) return true;\n return false;\n });\n $7adb23b0109cc36a$export$dbe3113d60765c1a = (typeof props.i18n === \"function\" ? await props.i18n() : props.i18n) || (locale == \"en\" ? (0, (/*@__PURE__*/$parcel$interopDefault($8d50d93417ef682a$exports))) : await $7adb23b0109cc36a$var$fetchJSON(`https://cdn.jsdelivr.net/npm/@emoji-mart/data@latest/i18n/${locale}.json`));\n if (props.custom) for(let i in props.custom){\n i = parseInt(i);\n const category = props.custom[i];\n const prevCategory = props.custom[i - 1];\n if (!category.emojis || !category.emojis.length) continue;\n category.id || (category.id = `custom_${i + 1}`);\n category.name || (category.name = $7adb23b0109cc36a$export$dbe3113d60765c1a.categories.custom);\n if (prevCategory && !category.icon) category.target = prevCategory.target || prevCategory;\n $7adb23b0109cc36a$export$2d0294657ab35f1b.categories.push(category);\n for (const emoji of category.emojis)$7adb23b0109cc36a$export$2d0294657ab35f1b.emojis[emoji.id] = emoji;\n }\n if (props.categories) $7adb23b0109cc36a$export$2d0294657ab35f1b.categories = $7adb23b0109cc36a$export$2d0294657ab35f1b.originalCategories.filter((c)=>{\n return props.categories.indexOf(c.id) != -1;\n }).sort((c1, c2)=>{\n const i1 = props.categories.indexOf(c1.id);\n const i2 = props.categories.indexOf(c2.id);\n return i1 - i2;\n });\n let latestVersionSupport = null;\n let noCountryFlags = null;\n if (set == \"native\") {\n latestVersionSupport = (0, $c84d045dcc34faf5$export$2e2bcd8739ae039).latestVersion();\n noCountryFlags = props.noCountryFlags || (0, $c84d045dcc34faf5$export$2e2bcd8739ae039).noCountryFlags();\n }\n let categoryIndex = $7adb23b0109cc36a$export$2d0294657ab35f1b.categories.length;\n let resetSearchIndex = false;\n while(categoryIndex--){\n const category = $7adb23b0109cc36a$export$2d0294657ab35f1b.categories[categoryIndex];\n if (category.id == \"frequent\") {\n let { maxFrequentRows: maxFrequentRows , perLine: perLine } = props;\n maxFrequentRows = maxFrequentRows >= 0 ? maxFrequentRows : (0, $b247ea80b67298d5$export$2e2bcd8739ae039).maxFrequentRows.value;\n perLine || (perLine = (0, $b247ea80b67298d5$export$2e2bcd8739ae039).perLine.value);\n category.emojis = (0, $b22cfd0a55410b4f$export$2e2bcd8739ae039).get({\n maxFrequentRows: maxFrequentRows,\n perLine: perLine\n });\n }\n if (!category.emojis || !category.emojis.length) {\n $7adb23b0109cc36a$export$2d0294657ab35f1b.categories.splice(categoryIndex, 1);\n continue;\n }\n const { categoryIcons: categoryIcons } = props;\n if (categoryIcons) {\n const icon = categoryIcons[category.id];\n if (icon && !category.icon) category.icon = icon;\n }\n let emojiIndex = category.emojis.length;\n while(emojiIndex--){\n const emojiId = category.emojis[emojiIndex];\n const emoji = emojiId.id ? emojiId : $7adb23b0109cc36a$export$2d0294657ab35f1b.emojis[emojiId];\n const ignore = ()=>{\n category.emojis.splice(emojiIndex, 1);\n };\n if (!emoji || props.exceptEmojis && props.exceptEmojis.includes(emoji.id)) {\n ignore();\n continue;\n }\n if (latestVersionSupport && emoji.version > latestVersionSupport) {\n ignore();\n continue;\n }\n if (noCountryFlags && category.id == \"flags\") {\n if (!(0, $e6eae5155b87f591$export$bcb25aa587e9cb13).includes(emoji.id)) {\n ignore();\n continue;\n }\n }\n if (!emoji.search) {\n resetSearchIndex = true;\n emoji.search = \",\" + [\n [\n emoji.id,\n false\n ],\n [\n emoji.name,\n true\n ],\n [\n emoji.keywords,\n false\n ],\n [\n emoji.emoticons,\n false\n ], \n ].map(([strings, split])=>{\n if (!strings) return;\n return (Array.isArray(strings) ? strings : [\n strings\n ]).map((string)=>{\n return (split ? string.split(/[-|_|\\s]+/) : [\n string\n ]).map((s)=>s.toLowerCase());\n }).flat();\n }).flat().filter((a)=>a && a.trim()).join(\",\");\n if (emoji.emoticons) for (const emoticon of emoji.emoticons){\n if ($7adb23b0109cc36a$export$2d0294657ab35f1b.emoticons[emoticon]) continue;\n $7adb23b0109cc36a$export$2d0294657ab35f1b.emoticons[emoticon] = emoji.id;\n }\n let skinIndex = 0;\n for (const skin of emoji.skins){\n if (!skin) continue;\n skinIndex++;\n const { native: native } = skin;\n if (native) {\n $7adb23b0109cc36a$export$2d0294657ab35f1b.natives[native] = emoji.id;\n emoji.search += `,${native}`;\n }\n const skinShortcodes = skinIndex == 1 ? \"\" : `:skin-tone-${skinIndex}:`;\n skin.shortcodes = `:${emoji.id}:${skinShortcodes}`;\n }\n }\n }\n }\n if (resetSearchIndex) (0, $c4d155af13ad4d4b$export$2e2bcd8739ae039).reset();\n $7adb23b0109cc36a$var$initCallback();\n}\nfunction $7adb23b0109cc36a$export$75fe5f91d452f94b(props, defaultProps, element) {\n props || (props = {});\n const _props = {};\n for(let k in defaultProps)_props[k] = $7adb23b0109cc36a$export$88c9ddb45cea7241(k, props, defaultProps, element);\n return _props;\n}\nfunction $7adb23b0109cc36a$export$88c9ddb45cea7241(propName, props, defaultProps, element) {\n const defaults = defaultProps[propName];\n let value = element && element.getAttribute(propName) || (props[propName] != null && props[propName] != undefined ? props[propName] : null);\n if (!defaults) return value;\n if (value != null && defaults.value && typeof defaults.value != typeof value) {\n if (typeof defaults.value == \"boolean\") value = value == \"false\" ? false : true;\n else value = defaults.value.constructor(value);\n }\n if (defaults.transform && value) value = defaults.transform(value);\n if (value == null || defaults.choices && defaults.choices.indexOf(value) == -1) value = defaults.value;\n return value;\n}\n\n\nconst $c4d155af13ad4d4b$var$SHORTCODES_REGEX = /^(?:\\:([^\\:]+)\\:)(?:\\:skin-tone-(\\d)\\:)?$/;\nlet $c4d155af13ad4d4b$var$Pool = null;\nfunction $c4d155af13ad4d4b$var$get(emojiId) {\n if (emojiId.id) return emojiId;\n return (0, $7adb23b0109cc36a$export$2d0294657ab35f1b).emojis[emojiId] || (0, $7adb23b0109cc36a$export$2d0294657ab35f1b).emojis[(0, $7adb23b0109cc36a$export$2d0294657ab35f1b).aliases[emojiId]] || (0, $7adb23b0109cc36a$export$2d0294657ab35f1b).emojis[(0, $7adb23b0109cc36a$export$2d0294657ab35f1b).natives[emojiId]];\n}\nfunction $c4d155af13ad4d4b$var$reset() {\n $c4d155af13ad4d4b$var$Pool = null;\n}\nasync function $c4d155af13ad4d4b$var$search(value, { maxResults: maxResults , caller: caller } = {}) {\n if (!value || !value.trim().length) return null;\n maxResults || (maxResults = 90);\n await (0, $7adb23b0109cc36a$export$2cd8252107eb640b)(null, {\n caller: caller || \"SearchIndex.search\"\n });\n const values = value.toLowerCase().replace(/(\\w)-/, \"$1 \").split(/[\\s|,]+/).filter((word, i, words)=>{\n return word.trim() && words.indexOf(word) == i;\n });\n if (!values.length) return;\n let pool = $c4d155af13ad4d4b$var$Pool || ($c4d155af13ad4d4b$var$Pool = Object.values((0, $7adb23b0109cc36a$export$2d0294657ab35f1b).emojis));\n let results, scores;\n for (const value1 of values){\n if (!pool.length) break;\n results = [];\n scores = {};\n for (const emoji of pool){\n if (!emoji.search) continue;\n const score = emoji.search.indexOf(`,${value1}`);\n if (score == -1) continue;\n results.push(emoji);\n scores[emoji.id] || (scores[emoji.id] = 0);\n scores[emoji.id] += emoji.id == value1 ? 0 : score + 1;\n }\n pool = results;\n }\n if (results.length < 2) return results;\n results.sort((a, b)=>{\n const aScore = scores[a.id];\n const bScore = scores[b.id];\n if (aScore == bScore) return a.id.localeCompare(b.id);\n return aScore - bScore;\n });\n if (results.length > maxResults) results = results.slice(0, maxResults);\n return results;\n}\nvar $c4d155af13ad4d4b$export$2e2bcd8739ae039 = {\n search: $c4d155af13ad4d4b$var$search,\n get: $c4d155af13ad4d4b$var$get,\n reset: $c4d155af13ad4d4b$var$reset,\n SHORTCODES_REGEX: $c4d155af13ad4d4b$var$SHORTCODES_REGEX\n};\n\n\nconst $e6eae5155b87f591$export$bcb25aa587e9cb13 = [\n \"checkered_flag\",\n \"crossed_flags\",\n \"pirate_flag\",\n \"rainbow-flag\",\n \"transgender_flag\",\n \"triangular_flag_on_post\",\n \"waving_black_flag\",\n \"waving_white_flag\", \n];\n\n\nfunction $693b183b0a78708f$export$9cb4719e2e525b7a(a, b) {\n return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((val, index)=>val == b[index]);\n}\nasync function $693b183b0a78708f$export$e772c8ff12451969(frames = 1) {\n for(let _ in [\n ...Array(frames).keys()\n ])await new Promise(requestAnimationFrame);\n}\nfunction $693b183b0a78708f$export$d10ac59fbe52a745(emoji, { skinIndex: skinIndex = 0 } = {}) {\n const skin = emoji.skins[skinIndex] || (()=>{\n skinIndex = 0;\n return emoji.skins[skinIndex];\n })();\n const emojiData = {\n id: emoji.id,\n name: emoji.name,\n native: skin.native,\n unified: skin.unified,\n keywords: emoji.keywords,\n shortcodes: skin.shortcodes || emoji.shortcodes\n };\n if (emoji.skins.length > 1) emojiData.skin = skinIndex + 1;\n if (skin.src) emojiData.src = skin.src;\n if (emoji.aliases && emoji.aliases.length) emojiData.aliases = emoji.aliases;\n if (emoji.emoticons && emoji.emoticons.length) emojiData.emoticons = emoji.emoticons;\n return emojiData;\n}\nasync function $693b183b0a78708f$export$5ef5574deca44bc0(nativeString) {\n const results = await (0, $c4d155af13ad4d4b$export$2e2bcd8739ae039).search(nativeString, {\n maxResults: 1,\n caller: \"getEmojiDataFromNative\"\n });\n if (!results || !results.length) return null;\n const emoji = results[0];\n let skinIndex = 0;\n for (let skin of emoji.skins){\n if (skin.native == nativeString) break;\n skinIndex++;\n }\n return $693b183b0a78708f$export$d10ac59fbe52a745(emoji, {\n skinIndex: skinIndex\n });\n}\n\n\n\n\n\nconst $fcccfb36ed0cde68$var$categories = {\n activity: {\n outline: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M12 0C5.373 0 0 5.372 0 12c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.628-5.372-12-12-12m9.949 11H17.05c.224-2.527 1.232-4.773 1.968-6.113A9.966 9.966 0 0 1 21.949 11M13 11V2.051a9.945 9.945 0 0 1 4.432 1.564c-.858 1.491-2.156 4.22-2.392 7.385H13zm-2 0H8.961c-.238-3.165-1.536-5.894-2.393-7.385A9.95 9.95 0 0 1 11 2.051V11zm0 2v8.949a9.937 9.937 0 0 1-4.432-1.564c.857-1.492 2.155-4.221 2.393-7.385H11zm4.04 0c.236 3.164 1.534 5.893 2.392 7.385A9.92 9.92 0 0 1 13 21.949V13h2.04zM4.982 4.887C5.718 6.227 6.726 8.473 6.951 11h-4.9a9.977 9.977 0 0 1 2.931-6.113M2.051 13h4.9c-.226 2.527-1.233 4.771-1.969 6.113A9.972 9.972 0 0 1 2.051 13m16.967 6.113c-.735-1.342-1.744-3.586-1.968-6.113h4.899a9.961 9.961 0 0 1-2.931 6.113\"\n })\n }),\n solid: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M16.17 337.5c0 44.98 7.565 83.54 13.98 107.9C35.22 464.3 50.46 496 174.9 496c9.566 0 19.59-.4707 29.84-1.271L17.33 307.3C16.53 317.6 16.17 327.7 16.17 337.5zM495.8 174.5c0-44.98-7.565-83.53-13.98-107.9c-4.688-17.54-18.34-31.23-36.04-35.95C435.5 27.91 392.9 16 337 16c-9.564 0-19.59 .4707-29.84 1.271l187.5 187.5C495.5 194.4 495.8 184.3 495.8 174.5zM26.77 248.8l236.3 236.3c142-36.1 203.9-150.4 222.2-221.1L248.9 26.87C106.9 62.96 45.07 177.2 26.77 248.8zM256 335.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L164.7 283.3C161.6 280.2 160 276.1 160 271.1c0-8.529 6.865-16 16-16c4.095 0 8.189 1.562 11.31 4.688l64.01 64C254.4 327.8 256 331.9 256 335.1zM304 287.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L212.7 235.3C209.6 232.2 208 228.1 208 223.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01C302.5 279.8 304 283.9 304 287.1zM256 175.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01c3.125 3.125 4.688 7.219 4.688 11.31c0 9.133-7.468 16-16 16c-4.094 0-8.189-1.562-11.31-4.688l-64.01-64.01C257.6 184.2 256 180.1 256 175.1z\"\n })\n })\n },\n custom: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 448 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M417.1 368c-5.937 10.27-16.69 16-27.75 16c-5.422 0-10.92-1.375-15.97-4.281L256 311.4V448c0 17.67-14.33 32-31.1 32S192 465.7 192 448V311.4l-118.3 68.29C68.67 382.6 63.17 384 57.75 384c-11.06 0-21.81-5.734-27.75-16c-8.828-15.31-3.594-34.88 11.72-43.72L159.1 256L41.72 187.7C26.41 178.9 21.17 159.3 29.1 144C36.63 132.5 49.26 126.7 61.65 128.2C65.78 128.7 69.88 130.1 73.72 132.3L192 200.6V64c0-17.67 14.33-32 32-32S256 46.33 256 64v136.6l118.3-68.29c3.838-2.213 7.939-3.539 12.07-4.051C398.7 126.7 411.4 132.5 417.1 144c8.828 15.31 3.594 34.88-11.72 43.72L288 256l118.3 68.28C421.6 333.1 426.8 352.7 417.1 368z\"\n })\n }),\n flags: {\n outline: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M0 0l6.084 24H8L1.916 0zM21 5h-4l-1-4H4l3 12h3l1 4h13L21 5zM6.563 3h7.875l2 8H8.563l-2-8zm8.832 10l-2.856 1.904L12.063 13h3.332zM19 13l-1.5-6h1.938l2 8H16l3-2z\"\n })\n }),\n solid: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M64 496C64 504.8 56.75 512 48 512h-32C7.25 512 0 504.8 0 496V32c0-17.75 14.25-32 32-32s32 14.25 32 32V496zM476.3 0c-6.365 0-13.01 1.35-19.34 4.233c-45.69 20.86-79.56 27.94-107.8 27.94c-59.96 0-94.81-31.86-163.9-31.87C160.9 .3055 131.6 4.867 96 15.75v350.5c32-9.984 59.87-14.1 84.85-14.1c73.63 0 124.9 31.78 198.6 31.78c31.91 0 68.02-5.971 111.1-23.09C504.1 355.9 512 344.4 512 332.1V30.73C512 11.1 495.3 0 476.3 0z\"\n })\n })\n },\n foods: {\n outline: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M17 4.978c-1.838 0-2.876.396-3.68.934.513-1.172 1.768-2.934 4.68-2.934a1 1 0 0 0 0-2c-2.921 0-4.629 1.365-5.547 2.512-.064.078-.119.162-.18.244C11.73 1.838 10.798.023 9.207.023 8.579.022 7.85.306 7 .978 5.027 2.54 5.329 3.902 6.492 4.999 3.609 5.222 0 7.352 0 12.969c0 4.582 4.961 11.009 9 11.009 1.975 0 2.371-.486 3-1 .629.514 1.025 1 3 1 4.039 0 9-6.418 9-11 0-5.953-4.055-8-7-8M8.242 2.546c.641-.508.943-.523.965-.523.426.169.975 1.405 1.357 3.055-1.527-.629-2.741-1.352-2.98-1.846.059-.112.241-.356.658-.686M15 21.978c-1.08 0-1.21-.109-1.559-.402l-.176-.146c-.367-.302-.816-.452-1.266-.452s-.898.15-1.266.452l-.176.146c-.347.292-.477.402-1.557.402-2.813 0-7-5.389-7-9.009 0-5.823 4.488-5.991 5-5.991 1.939 0 2.484.471 3.387 1.251l.323.276a1.995 1.995 0 0 0 2.58 0l.323-.276c.902-.78 1.447-1.251 3.387-1.251.512 0 5 .168 5 6 0 3.617-4.187 9-7 9\"\n })\n }),\n solid: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M481.9 270.1C490.9 279.1 496 291.3 496 304C496 316.7 490.9 328.9 481.9 337.9C472.9 346.9 460.7 352 448 352H64C51.27 352 39.06 346.9 30.06 337.9C21.06 328.9 16 316.7 16 304C16 291.3 21.06 279.1 30.06 270.1C39.06 261.1 51.27 256 64 256H448C460.7 256 472.9 261.1 481.9 270.1zM475.3 388.7C478.3 391.7 480 395.8 480 400V416C480 432.1 473.3 449.3 461.3 461.3C449.3 473.3 432.1 480 416 480H96C79.03 480 62.75 473.3 50.75 461.3C38.74 449.3 32 432.1 32 416V400C32 395.8 33.69 391.7 36.69 388.7C39.69 385.7 43.76 384 48 384H464C468.2 384 472.3 385.7 475.3 388.7zM50.39 220.8C45.93 218.6 42.03 215.5 38.97 211.6C35.91 207.7 33.79 203.2 32.75 198.4C31.71 193.5 31.8 188.5 32.99 183.7C54.98 97.02 146.5 32 256 32C365.5 32 457 97.02 479 183.7C480.2 188.5 480.3 193.5 479.2 198.4C478.2 203.2 476.1 207.7 473 211.6C469.1 215.5 466.1 218.6 461.6 220.8C457.2 222.9 452.3 224 447.3 224H64.67C59.73 224 54.84 222.9 50.39 220.8zM372.7 116.7C369.7 119.7 368 123.8 368 128C368 131.2 368.9 134.3 370.7 136.9C372.5 139.5 374.1 141.6 377.9 142.8C380.8 143.1 384 144.3 387.1 143.7C390.2 143.1 393.1 141.6 395.3 139.3C397.6 137.1 399.1 134.2 399.7 131.1C400.3 128 399.1 124.8 398.8 121.9C397.6 118.1 395.5 116.5 392.9 114.7C390.3 112.9 387.2 111.1 384 111.1C379.8 111.1 375.7 113.7 372.7 116.7V116.7zM244.7 84.69C241.7 87.69 240 91.76 240 96C240 99.16 240.9 102.3 242.7 104.9C244.5 107.5 246.1 109.6 249.9 110.8C252.8 111.1 256 112.3 259.1 111.7C262.2 111.1 265.1 109.6 267.3 107.3C269.6 105.1 271.1 102.2 271.7 99.12C272.3 96.02 271.1 92.8 270.8 89.88C269.6 86.95 267.5 84.45 264.9 82.7C262.3 80.94 259.2 79.1 256 79.1C251.8 79.1 247.7 81.69 244.7 84.69V84.69zM116.7 116.7C113.7 119.7 112 123.8 112 128C112 131.2 112.9 134.3 114.7 136.9C116.5 139.5 118.1 141.6 121.9 142.8C124.8 143.1 128 144.3 131.1 143.7C134.2 143.1 137.1 141.6 139.3 139.3C141.6 137.1 143.1 134.2 143.7 131.1C144.3 128 143.1 124.8 142.8 121.9C141.6 118.1 139.5 116.5 136.9 114.7C134.3 112.9 131.2 111.1 128 111.1C123.8 111.1 119.7 113.7 116.7 116.7L116.7 116.7z\"\n })\n })\n },\n frequent: {\n outline: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M13 4h-2l-.001 7H9v2h2v2h2v-2h4v-2h-4z\"\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\"\n })\n ]\n }),\n solid: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512zM232 256C232 264 236 271.5 242.7 275.1L338.7 339.1C349.7 347.3 364.6 344.3 371.1 333.3C379.3 322.3 376.3 307.4 365.3 300L280 243.2V120C280 106.7 269.3 96 255.1 96C242.7 96 231.1 106.7 231.1 120L232 256z\"\n })\n })\n },\n nature: {\n outline: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M15.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 15.5 8M8.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 8.5 8\"\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M18.933 0h-.027c-.97 0-2.138.787-3.018 1.497-1.274-.374-2.612-.51-3.887-.51-1.285 0-2.616.133-3.874.517C7.245.79 6.069 0 5.093 0h-.027C3.352 0 .07 2.67.002 7.026c-.039 2.479.276 4.238 1.04 5.013.254.258.882.677 1.295.882.191 3.177.922 5.238 2.536 6.38.897.637 2.187.949 3.2 1.102C8.04 20.6 8 20.795 8 21c0 1.773 2.35 3 4 3 1.648 0 4-1.227 4-3 0-.201-.038-.393-.072-.586 2.573-.385 5.435-1.877 5.925-7.587.396-.22.887-.568 1.104-.788.763-.774 1.079-2.534 1.04-5.013C23.929 2.67 20.646 0 18.933 0M3.223 9.135c-.237.281-.837 1.155-.884 1.238-.15-.41-.368-1.349-.337-3.291.051-3.281 2.478-4.972 3.091-5.031.256.015.731.27 1.265.646-1.11 1.171-2.275 2.915-2.352 5.125-.133.546-.398.858-.783 1.313M12 22c-.901 0-1.954-.693-2-1 0-.654.475-1.236 1-1.602V20a1 1 0 1 0 2 0v-.602c.524.365 1 .947 1 1.602-.046.307-1.099 1-2 1m3-3.48v.02a4.752 4.752 0 0 0-1.262-1.02c1.092-.516 2.239-1.334 2.239-2.217 0-1.842-1.781-2.195-3.977-2.195-2.196 0-3.978.354-3.978 2.195 0 .883 1.148 1.701 2.238 2.217A4.8 4.8 0 0 0 9 18.539v-.025c-1-.076-2.182-.281-2.973-.842-1.301-.92-1.838-3.045-1.853-6.478l.023-.041c.496-.826 1.49-1.45 1.804-3.102 0-2.047 1.357-3.631 2.362-4.522C9.37 3.178 10.555 3 11.948 3c1.447 0 2.685.192 3.733.57 1 .9 2.316 2.465 2.316 4.48.313 1.651 1.307 2.275 1.803 3.102.035.058.068.117.102.178-.059 5.967-1.949 7.01-4.902 7.19m6.628-8.202c-.037-.065-.074-.13-.113-.195a7.587 7.587 0 0 0-.739-.987c-.385-.455-.648-.768-.782-1.313-.076-2.209-1.241-3.954-2.353-5.124.531-.376 1.004-.63 1.261-.647.636.071 3.044 1.764 3.096 5.031.027 1.81-.347 3.218-.37 3.235\"\n })\n ]\n }),\n solid: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 576 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M332.7 19.85C334.6 8.395 344.5 0 356.1 0C363.6 0 370.6 3.52 375.1 9.502L392 32H444.1C456.8 32 469.1 37.06 478.1 46.06L496 64H552C565.3 64 576 74.75 576 88V112C576 156.2 540.2 192 496 192H426.7L421.6 222.5L309.6 158.5L332.7 19.85zM448 64C439.2 64 432 71.16 432 80C432 88.84 439.2 96 448 96C456.8 96 464 88.84 464 80C464 71.16 456.8 64 448 64zM416 256.1V480C416 497.7 401.7 512 384 512H352C334.3 512 320 497.7 320 480V364.8C295.1 377.1 268.8 384 240 384C211.2 384 184 377.1 160 364.8V480C160 497.7 145.7 512 128 512H96C78.33 512 64 497.7 64 480V249.8C35.23 238.9 12.64 214.5 4.836 183.3L.9558 167.8C-3.331 150.6 7.094 133.2 24.24 128.1C41.38 124.7 58.76 135.1 63.05 152.2L66.93 167.8C70.49 182 83.29 191.1 97.97 191.1H303.8L416 256.1z\"\n })\n })\n },\n objects: {\n outline: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M12 0a9 9 0 0 0-5 16.482V21s2.035 3 5 3 5-3 5-3v-4.518A9 9 0 0 0 12 0zm0 2c3.86 0 7 3.141 7 7s-3.14 7-7 7-7-3.141-7-7 3.14-7 7-7zM9 17.477c.94.332 1.946.523 3 .523s2.06-.19 3-.523v.834c-.91.436-1.925.689-3 .689a6.924 6.924 0 0 1-3-.69v-.833zm.236 3.07A8.854 8.854 0 0 0 12 21c.965 0 1.888-.167 2.758-.451C14.155 21.173 13.153 22 12 22c-1.102 0-2.117-.789-2.764-1.453z\"\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M14.745 12.449h-.004c-.852-.024-1.188-.858-1.577-1.824-.421-1.061-.703-1.561-1.182-1.566h-.009c-.481 0-.783.497-1.235 1.537-.436.982-.801 1.811-1.636 1.791l-.276-.043c-.565-.171-.853-.691-1.284-1.794-.125-.313-.202-.632-.27-.913-.051-.213-.127-.53-.195-.634C7.067 9.004 7.039 9 6.99 9A1 1 0 0 1 7 7h.01c1.662.017 2.015 1.373 2.198 2.134.486-.981 1.304-2.058 2.797-2.075 1.531.018 2.28 1.153 2.731 2.141l.002-.008C14.944 8.424 15.327 7 16.979 7h.032A1 1 0 1 1 17 9h-.011c-.149.076-.256.474-.319.709a6.484 6.484 0 0 1-.311.951c-.429.973-.79 1.789-1.614 1.789\"\n })\n ]\n }),\n solid: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 384 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z\"\n })\n })\n },\n people: {\n outline: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\"\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M8 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 8 7M16 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 16 7M15.232 15c-.693 1.195-1.87 2-3.349 2-1.477 0-2.655-.805-3.347-2H15m3-2H6a6 6 0 1 0 12 0\"\n })\n ]\n }),\n solid: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM176.4 160C158.7 160 144.4 174.3 144.4 192C144.4 209.7 158.7 224 176.4 224C194 224 208.4 209.7 208.4 192C208.4 174.3 194 160 176.4 160zM336.4 224C354 224 368.4 209.7 368.4 192C368.4 174.3 354 160 336.4 160C318.7 160 304.4 174.3 304.4 192C304.4 209.7 318.7 224 336.4 224z\"\n })\n })\n },\n places: {\n outline: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M6.5 12C5.122 12 4 13.121 4 14.5S5.122 17 6.5 17 9 15.879 9 14.5 7.878 12 6.5 12m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5M17.5 12c-1.378 0-2.5 1.121-2.5 2.5s1.122 2.5 2.5 2.5 2.5-1.121 2.5-2.5-1.122-2.5-2.5-2.5m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5\"\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M22.482 9.494l-1.039-.346L21.4 9h.6c.552 0 1-.439 1-.992 0-.006-.003-.008-.003-.008H23c0-1-.889-2-1.984-2h-.642l-.731-1.717C19.262 3.012 18.091 2 16.764 2H7.236C5.909 2 4.738 3.012 4.357 4.283L3.626 6h-.642C1.889 6 1 7 1 8h.003S1 8.002 1 8.008C1 8.561 1.448 9 2 9h.6l-.043.148-1.039.346a2.001 2.001 0 0 0-1.359 2.097l.751 7.508a1 1 0 0 0 .994.901H3v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h6v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h1.096a.999.999 0 0 0 .994-.901l.751-7.508a2.001 2.001 0 0 0-1.359-2.097M6.273 4.857C6.402 4.43 6.788 4 7.236 4h9.527c.448 0 .834.43.963.857L19.313 9H4.688l1.585-4.143zM7 21H5v-1h2v1zm12 0h-2v-1h2v1zm2.189-3H2.811l-.662-6.607L3 11h18l.852.393L21.189 18z\"\n })\n ]\n }),\n solid: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M39.61 196.8L74.8 96.29C88.27 57.78 124.6 32 165.4 32H346.6C387.4 32 423.7 57.78 437.2 96.29L472.4 196.8C495.6 206.4 512 229.3 512 256V448C512 465.7 497.7 480 480 480H448C430.3 480 416 465.7 416 448V400H96V448C96 465.7 81.67 480 64 480H32C14.33 480 0 465.7 0 448V256C0 229.3 16.36 206.4 39.61 196.8V196.8zM109.1 192H402.9L376.8 117.4C372.3 104.6 360.2 96 346.6 96H165.4C151.8 96 139.7 104.6 135.2 117.4L109.1 192zM96 256C78.33 256 64 270.3 64 288C64 305.7 78.33 320 96 320C113.7 320 128 305.7 128 288C128 270.3 113.7 256 96 256zM416 320C433.7 320 448 305.7 448 288C448 270.3 433.7 256 416 256C398.3 256 384 270.3 384 288C384 305.7 398.3 320 416 320z\"\n })\n })\n },\n symbols: {\n outline: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M0 0h11v2H0zM4 11h3V6h4V4H0v2h4zM15.5 17c1.381 0 2.5-1.116 2.5-2.493s-1.119-2.493-2.5-2.493S13 13.13 13 14.507 14.119 17 15.5 17m0-2.986c.276 0 .5.222.5.493 0 .272-.224.493-.5.493s-.5-.221-.5-.493.224-.493.5-.493M21.5 19.014c-1.381 0-2.5 1.116-2.5 2.493S20.119 24 21.5 24s2.5-1.116 2.5-2.493-1.119-2.493-2.5-2.493m0 2.986a.497.497 0 0 1-.5-.493c0-.271.224-.493.5-.493s.5.222.5.493a.497.497 0 0 1-.5.493M22 13l-9 9 1.513 1.5 8.99-9.009zM17 11c2.209 0 4-1.119 4-2.5V2s.985-.161 1.498.949C23.01 4.055 23 6 23 6s1-1.119 1-3.135C24-.02 21 0 21 0h-2v6.347A5.853 5.853 0 0 0 17 6c-2.209 0-4 1.119-4 2.5s1.791 2.5 4 2.5M10.297 20.482l-1.475-1.585a47.54 47.54 0 0 1-1.442 1.129c-.307-.288-.989-1.016-2.045-2.183.902-.836 1.479-1.466 1.729-1.892s.376-.871.376-1.336c0-.592-.273-1.178-.818-1.759-.546-.581-1.329-.871-2.349-.871-1.008 0-1.79.293-2.344.879-.556.587-.832 1.181-.832 1.784 0 .813.419 1.748 1.256 2.805-.847.614-1.444 1.208-1.794 1.784a3.465 3.465 0 0 0-.523 1.833c0 .857.308 1.56.924 2.107.616.549 1.423.823 2.42.823 1.173 0 2.444-.379 3.813-1.137L8.235 24h2.819l-2.09-2.383 1.333-1.135zm-6.736-6.389a1.02 1.02 0 0 1 .73-.286c.31 0 .559.085.747.254a.849.849 0 0 1 .283.659c0 .518-.419 1.112-1.257 1.784-.536-.651-.805-1.231-.805-1.742a.901.901 0 0 1 .302-.669M3.74 22c-.427 0-.778-.116-1.057-.349-.279-.232-.418-.487-.418-.766 0-.594.509-1.288 1.527-2.083.968 1.134 1.717 1.946 2.248 2.438-.921.507-1.686.76-2.3.76\"\n })\n }),\n solid: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M500.3 7.251C507.7 13.33 512 22.41 512 31.1V175.1C512 202.5 483.3 223.1 447.1 223.1C412.7 223.1 383.1 202.5 383.1 175.1C383.1 149.5 412.7 127.1 447.1 127.1V71.03L351.1 90.23V207.1C351.1 234.5 323.3 255.1 287.1 255.1C252.7 255.1 223.1 234.5 223.1 207.1C223.1 181.5 252.7 159.1 287.1 159.1V63.1C287.1 48.74 298.8 35.61 313.7 32.62L473.7 .6198C483.1-1.261 492.9 1.173 500.3 7.251H500.3zM74.66 303.1L86.5 286.2C92.43 277.3 102.4 271.1 113.1 271.1H174.9C185.6 271.1 195.6 277.3 201.5 286.2L213.3 303.1H239.1C266.5 303.1 287.1 325.5 287.1 351.1V463.1C287.1 490.5 266.5 511.1 239.1 511.1H47.1C21.49 511.1-.0019 490.5-.0019 463.1V351.1C-.0019 325.5 21.49 303.1 47.1 303.1H74.66zM143.1 359.1C117.5 359.1 95.1 381.5 95.1 407.1C95.1 434.5 117.5 455.1 143.1 455.1C170.5 455.1 191.1 434.5 191.1 407.1C191.1 381.5 170.5 359.1 143.1 359.1zM440.3 367.1H496C502.7 367.1 508.6 372.1 510.1 378.4C513.3 384.6 511.6 391.7 506.5 396L378.5 508C372.9 512.1 364.6 513.3 358.6 508.9C352.6 504.6 350.3 496.6 353.3 489.7L391.7 399.1H336C329.3 399.1 323.4 395.9 321 389.6C318.7 383.4 320.4 376.3 325.5 371.1L453.5 259.1C459.1 255 467.4 254.7 473.4 259.1C479.4 263.4 481.6 271.4 478.7 278.3L440.3 367.1zM116.7 219.1L19.85 119.2C-8.112 90.26-6.614 42.31 24.85 15.34C51.82-8.137 93.26-3.642 118.2 21.83L128.2 32.32L137.7 21.83C162.7-3.642 203.6-8.137 231.6 15.34C262.6 42.31 264.1 90.26 236.1 119.2L139.7 219.1C133.2 225.6 122.7 225.6 116.7 219.1H116.7z\"\n })\n })\n }\n};\nconst $fcccfb36ed0cde68$var$search = {\n loupe: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\"\n })\n }),\n delete: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"path\", {\n d: \"M10 8.586L2.929 1.515 1.515 2.929 8.586 10l-7.071 7.071 1.414 1.414L10 11.414l7.071 7.071 1.414-1.414L11.414 10l7.071-7.071-1.414-1.414L10 8.586z\"\n })\n })\n};\nvar $fcccfb36ed0cde68$export$2e2bcd8739ae039 = {\n categories: $fcccfb36ed0cde68$var$categories,\n search: $fcccfb36ed0cde68$var$search\n};\n\n\n\n\n\nfunction $254755d3f438722f$export$2e2bcd8739ae039(props) {\n let { id: id , skin: skin , emoji: emoji } = props;\n if (props.shortcodes) {\n const matches = props.shortcodes.match((0, $c4d155af13ad4d4b$export$2e2bcd8739ae039).SHORTCODES_REGEX);\n if (matches) {\n id = matches[1];\n if (matches[2]) skin = matches[2];\n }\n }\n emoji || (emoji = (0, $c4d155af13ad4d4b$export$2e2bcd8739ae039).get(id || props.native));\n if (!emoji) return props.fallback;\n const emojiSkin = emoji.skins[skin - 1] || emoji.skins[0];\n const imageSrc = emojiSkin.src || (props.set != \"native\" && !props.spritesheet ? typeof props.getImageURL === \"function\" ? props.getImageURL(props.set, emojiSkin.unified) : `https://cdn.jsdelivr.net/npm/emoji-datasource-${props.set}@15.0.1/img/${props.set}/64/${emojiSkin.unified}.png` : undefined);\n const spritesheetSrc = typeof props.getSpritesheetURL === \"function\" ? props.getSpritesheetURL(props.set) : `https://cdn.jsdelivr.net/npm/emoji-datasource-${props.set}@15.0.1/img/${props.set}/sheets-256/64.png`;\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"span\", {\n class: \"emoji-mart-emoji\",\n \"data-emoji-set\": props.set,\n children: imageSrc ? /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"img\", {\n style: {\n maxWidth: props.size || \"1em\",\n maxHeight: props.size || \"1em\",\n display: \"inline-block\"\n },\n alt: emojiSkin.native || emojiSkin.shortcodes,\n src: imageSrc\n }) : props.set == \"native\" ? /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"span\", {\n style: {\n fontSize: props.size,\n fontFamily: '\"EmojiMart\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Segoe UI\", \"Apple Color Emoji\", \"Twemoji Mozilla\", \"Noto Color Emoji\", \"Android Emoji\"'\n },\n children: emojiSkin.native\n }) : /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"span\", {\n style: {\n display: \"block\",\n width: props.size,\n height: props.size,\n backgroundImage: `url(${spritesheetSrc})`,\n backgroundSize: `${100 * (0, $7adb23b0109cc36a$export$2d0294657ab35f1b).sheet.cols}% ${100 * (0, $7adb23b0109cc36a$export$2d0294657ab35f1b).sheet.rows}%`,\n backgroundPosition: `${100 / ((0, $7adb23b0109cc36a$export$2d0294657ab35f1b).sheet.cols - 1) * emojiSkin.x}% ${100 / ((0, $7adb23b0109cc36a$export$2d0294657ab35f1b).sheet.rows - 1) * emojiSkin.y}%`\n }\n })\n });\n}\n\n\n\n\n\n\n\nconst $6f57cc9cd54c5aaa$var$WindowHTMLElement = typeof window !== \"undefined\" && window.HTMLElement ? window.HTMLElement : Object;\nclass $6f57cc9cd54c5aaa$export$2e2bcd8739ae039 extends $6f57cc9cd54c5aaa$var$WindowHTMLElement {\n static get observedAttributes() {\n return Object.keys(this.Props);\n }\n update(props = {}) {\n for(let k in props)this.attributeChangedCallback(k, null, props[k]);\n }\n attributeChangedCallback(attr, _, newValue) {\n if (!this.component) return;\n const value = (0, $7adb23b0109cc36a$export$88c9ddb45cea7241)(attr, {\n [attr]: newValue\n }, this.constructor.Props, this);\n if (this.component.componentWillReceiveProps) this.component.componentWillReceiveProps({\n [attr]: value\n });\n else {\n this.component.props[attr] = value;\n this.component.forceUpdate();\n }\n }\n disconnectedCallback() {\n this.disconnected = true;\n if (this.component && this.component.unregister) this.component.unregister();\n }\n constructor(props = {}){\n super();\n this.props = props;\n if (props.parent || props.ref) {\n let ref = null;\n const parent = props.parent || (ref = props.ref && props.ref.current);\n if (ref) ref.innerHTML = \"\";\n if (parent) parent.appendChild(this);\n }\n }\n}\n\n\n\nclass $26f27c338a96b1a6$export$2e2bcd8739ae039 extends (0, $6f57cc9cd54c5aaa$export$2e2bcd8739ae039) {\n setShadow() {\n this.attachShadow({\n mode: \"open\"\n });\n }\n injectStyles(styles) {\n if (!styles) return;\n const style = document.createElement(\"style\");\n style.textContent = styles;\n this.shadowRoot.insertBefore(style, this.shadowRoot.firstChild);\n }\n constructor(props, { styles: styles } = {}){\n super(props);\n this.setShadow();\n this.injectStyles(styles);\n }\n}\n\n\n\n\n\n\nvar $3d90f6e46fb2dd47$export$2e2bcd8739ae039 = {\n fallback: \"\",\n id: \"\",\n native: \"\",\n shortcodes: \"\",\n size: {\n value: \"\",\n transform: (value)=>{\n // If the value is a number, then we assume it’s a pixel value.\n if (!/\\D/.test(value)) return `${value}px`;\n return value;\n }\n },\n // Shared\n set: (0, $b247ea80b67298d5$export$2e2bcd8739ae039).set,\n skin: (0, $b247ea80b67298d5$export$2e2bcd8739ae039).skin\n};\n\n\nclass $331b4160623139bf$export$2e2bcd8739ae039 extends (0, $6f57cc9cd54c5aaa$export$2e2bcd8739ae039) {\n async connectedCallback() {\n const props = (0, $7adb23b0109cc36a$export$75fe5f91d452f94b)(this.props, (0, $3d90f6e46fb2dd47$export$2e2bcd8739ae039), this);\n props.element = this;\n props.ref = (component)=>{\n this.component = component;\n };\n await (0, $7adb23b0109cc36a$export$2cd8252107eb640b)();\n if (this.disconnected) return;\n (0, $fb96b826c0c5f37a$export$b3890eb0ae9dca99)(/*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)((0, $254755d3f438722f$export$2e2bcd8739ae039), {\n ...props\n }), this);\n }\n constructor(props){\n super(props);\n }\n}\n(0, $c770c458706daa72$export$2e2bcd8739ae039)($331b4160623139bf$export$2e2bcd8739ae039, \"Props\", (0, $3d90f6e46fb2dd47$export$2e2bcd8739ae039));\nif (typeof customElements !== \"undefined\" && !customElements.get(\"em-emoji\")) customElements.define(\"em-emoji\", $331b4160623139bf$export$2e2bcd8739ae039);\n\n\n\n\n\n\nvar $1a9a8ef576b7773d$var$t, $1a9a8ef576b7773d$var$u, $1a9a8ef576b7773d$var$r, $1a9a8ef576b7773d$var$o = 0, $1a9a8ef576b7773d$var$i = [], $1a9a8ef576b7773d$var$c = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__b, $1a9a8ef576b7773d$var$f = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__r, $1a9a8ef576b7773d$var$e = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).diffed, $1a9a8ef576b7773d$var$a = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__c, $1a9a8ef576b7773d$var$v = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).unmount;\nfunction $1a9a8ef576b7773d$var$m(t1, r1) {\n (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__h && (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__h($1a9a8ef576b7773d$var$u, t1, $1a9a8ef576b7773d$var$o || r1), $1a9a8ef576b7773d$var$o = 0;\n var i1 = $1a9a8ef576b7773d$var$u.__H || ($1a9a8ef576b7773d$var$u.__H = {\n __: [],\n __h: []\n });\n return t1 >= i1.__.length && i1.__.push({}), i1.__[t1];\n}\nfunction $1a9a8ef576b7773d$export$60241385465d0a34(n1) {\n return $1a9a8ef576b7773d$var$o = 1, $1a9a8ef576b7773d$export$13e3392192263954($1a9a8ef576b7773d$var$w, n1);\n}\nfunction $1a9a8ef576b7773d$export$13e3392192263954(n2, r2, o1) {\n var i2 = $1a9a8ef576b7773d$var$m($1a9a8ef576b7773d$var$t++, 2);\n return i2.t = n2, i2.__c || (i2.__ = [\n o1 ? o1(r2) : $1a9a8ef576b7773d$var$w(void 0, r2),\n function(n3) {\n var t2 = i2.t(i2.__[0], n3);\n i2.__[0] !== t2 && (i2.__ = [\n t2,\n i2.__[1]\n ], i2.__c.setState({}));\n }\n ], i2.__c = $1a9a8ef576b7773d$var$u), i2.__;\n}\nfunction $1a9a8ef576b7773d$export$6d9c69b0de29b591(r3, o2) {\n var i3 = $1a9a8ef576b7773d$var$m($1a9a8ef576b7773d$var$t++, 3);\n !(0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__s && $1a9a8ef576b7773d$var$k(i3.__H, o2) && (i3.__ = r3, i3.__H = o2, $1a9a8ef576b7773d$var$u.__H.__h.push(i3));\n}\nfunction $1a9a8ef576b7773d$export$e5c5a5f917a5871c(r4, o3) {\n var i4 = $1a9a8ef576b7773d$var$m($1a9a8ef576b7773d$var$t++, 4);\n !(0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__s && $1a9a8ef576b7773d$var$k(i4.__H, o3) && (i4.__ = r4, i4.__H = o3, $1a9a8ef576b7773d$var$u.__h.push(i4));\n}\nfunction $1a9a8ef576b7773d$export$b8f5890fc79d6aca(n4) {\n return $1a9a8ef576b7773d$var$o = 5, $1a9a8ef576b7773d$export$1538c33de8887b59(function() {\n return {\n current: n4\n };\n }, []);\n}\nfunction $1a9a8ef576b7773d$export$d5a552a76deda3c2(n5, t3, u1) {\n $1a9a8ef576b7773d$var$o = 6, $1a9a8ef576b7773d$export$e5c5a5f917a5871c(function() {\n \"function\" == typeof n5 ? n5(t3()) : n5 && (n5.current = t3());\n }, null == u1 ? u1 : u1.concat(n5));\n}\nfunction $1a9a8ef576b7773d$export$1538c33de8887b59(n6, u2) {\n var r5 = $1a9a8ef576b7773d$var$m($1a9a8ef576b7773d$var$t++, 7);\n return $1a9a8ef576b7773d$var$k(r5.__H, u2) && (r5.__ = n6(), r5.__H = u2, r5.__h = n6), r5.__;\n}\nfunction $1a9a8ef576b7773d$export$35808ee640e87ca7(n7, t4) {\n return $1a9a8ef576b7773d$var$o = 8, $1a9a8ef576b7773d$export$1538c33de8887b59(function() {\n return n7;\n }, t4);\n}\nfunction $1a9a8ef576b7773d$export$fae74005e78b1a27(n8) {\n var r6 = $1a9a8ef576b7773d$var$u.context[n8.__c], o4 = $1a9a8ef576b7773d$var$m($1a9a8ef576b7773d$var$t++, 9);\n return o4.c = n8, r6 ? (null == o4.__ && (o4.__ = !0, r6.sub($1a9a8ef576b7773d$var$u)), r6.props.value) : n8.__;\n}\nfunction $1a9a8ef576b7773d$export$dc8fbce3eb94dc1e(t5, u3) {\n (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).useDebugValue && (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).useDebugValue(u3 ? u3(t5) : t5);\n}\nfunction $1a9a8ef576b7773d$export$c052f6604b7d51fe(n9) {\n var r7 = $1a9a8ef576b7773d$var$m($1a9a8ef576b7773d$var$t++, 10), o5 = $1a9a8ef576b7773d$export$60241385465d0a34();\n return r7.__ = n9, $1a9a8ef576b7773d$var$u.componentDidCatch || ($1a9a8ef576b7773d$var$u.componentDidCatch = function(n10) {\n r7.__ && r7.__(n10), o5[1](n10);\n }), [\n o5[0],\n function() {\n o5[1](void 0);\n }\n ];\n}\nfunction $1a9a8ef576b7773d$var$x() {\n var t6;\n for($1a9a8ef576b7773d$var$i.sort(function(n11, t7) {\n return n11.__v.__b - t7.__v.__b;\n }); t6 = $1a9a8ef576b7773d$var$i.pop();)if (t6.__P) try {\n t6.__H.__h.forEach($1a9a8ef576b7773d$var$g), t6.__H.__h.forEach($1a9a8ef576b7773d$var$j), t6.__H.__h = [];\n } catch (u4) {\n t6.__H.__h = [], (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__e(u4, t6.__v);\n }\n}\n(0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__b = function(n12) {\n $1a9a8ef576b7773d$var$u = null, $1a9a8ef576b7773d$var$c && $1a9a8ef576b7773d$var$c(n12);\n}, (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__r = function(n13) {\n $1a9a8ef576b7773d$var$f && $1a9a8ef576b7773d$var$f(n13), $1a9a8ef576b7773d$var$t = 0;\n var r8 = ($1a9a8ef576b7773d$var$u = n13.__c).__H;\n r8 && (r8.__h.forEach($1a9a8ef576b7773d$var$g), r8.__h.forEach($1a9a8ef576b7773d$var$j), r8.__h = []);\n}, (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).diffed = function(t8) {\n $1a9a8ef576b7773d$var$e && $1a9a8ef576b7773d$var$e(t8);\n var o6 = t8.__c;\n o6 && o6.__H && o6.__H.__h.length && (1 !== $1a9a8ef576b7773d$var$i.push(o6) && $1a9a8ef576b7773d$var$r === (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).requestAnimationFrame || (($1a9a8ef576b7773d$var$r = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).requestAnimationFrame) || function(n14) {\n var t9, u5 = function() {\n clearTimeout(r9), $1a9a8ef576b7773d$var$b && cancelAnimationFrame(t9), setTimeout(n14);\n }, r9 = setTimeout(u5, 100);\n $1a9a8ef576b7773d$var$b && (t9 = requestAnimationFrame(u5));\n })($1a9a8ef576b7773d$var$x)), $1a9a8ef576b7773d$var$u = null;\n}, (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__c = function(t10, u6) {\n u6.some(function(t11) {\n try {\n t11.__h.forEach($1a9a8ef576b7773d$var$g), t11.__h = t11.__h.filter(function(n15) {\n return !n15.__ || $1a9a8ef576b7773d$var$j(n15);\n });\n } catch (r10) {\n u6.some(function(n16) {\n n16.__h && (n16.__h = []);\n }), u6 = [], (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__e(r10, t11.__v);\n }\n }), $1a9a8ef576b7773d$var$a && $1a9a8ef576b7773d$var$a(t10, u6);\n}, (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).unmount = function(t12) {\n $1a9a8ef576b7773d$var$v && $1a9a8ef576b7773d$var$v(t12);\n var u7, r11 = t12.__c;\n r11 && r11.__H && (r11.__H.__.forEach(function(n17) {\n try {\n $1a9a8ef576b7773d$var$g(n17);\n } catch (n18) {\n u7 = n18;\n }\n }), u7 && (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__e(u7, r11.__v));\n};\nvar $1a9a8ef576b7773d$var$b = \"function\" == typeof requestAnimationFrame;\nfunction $1a9a8ef576b7773d$var$g(n19) {\n var t13 = $1a9a8ef576b7773d$var$u, r12 = n19.__c;\n \"function\" == typeof r12 && (n19.__c = void 0, r12()), $1a9a8ef576b7773d$var$u = t13;\n}\nfunction $1a9a8ef576b7773d$var$j(n20) {\n var t14 = $1a9a8ef576b7773d$var$u;\n n20.__c = n20.__(), $1a9a8ef576b7773d$var$u = t14;\n}\nfunction $1a9a8ef576b7773d$var$k(n21, t15) {\n return !n21 || n21.length !== t15.length || t15.some(function(t16, u8) {\n return t16 !== n21[u8];\n });\n}\nfunction $1a9a8ef576b7773d$var$w(n22, t17) {\n return \"function\" == typeof t17 ? t17(n22) : t17;\n}\n\n\n\n\n\nfunction $dc040a17866866fa$var$S(n1, t1) {\n for(var e1 in t1)n1[e1] = t1[e1];\n return n1;\n}\nfunction $dc040a17866866fa$var$C(n2, t2) {\n for(var e2 in n2)if (\"__source\" !== e2 && !(e2 in t2)) return !0;\n for(var r1 in t2)if (\"__source\" !== r1 && n2[r1] !== t2[r1]) return !0;\n return !1;\n}\nfunction $dc040a17866866fa$export$221d75b3f55bb0bd(n3) {\n this.props = n3;\n}\nfunction $dc040a17866866fa$export$7c73462e0d25e514(n4, t3) {\n function e3(n5) {\n var e4 = this.props.ref, r3 = e4 == n5.ref;\n return !r3 && e4 && (e4.call ? e4(null) : e4.current = null), t3 ? !t3(this.props, n5) || !r3 : $dc040a17866866fa$var$C(this.props, n5);\n }\n function r2(t4) {\n return this.shouldComponentUpdate = e3, (0, $fb96b826c0c5f37a$export$c8a8987d4410bf2d)(n4, t4);\n }\n return r2.displayName = \"Memo(\" + (n4.displayName || n4.name) + \")\", r2.prototype.isReactComponent = !0, r2.__f = !0, r2;\n}\n($dc040a17866866fa$export$221d75b3f55bb0bd.prototype = new (0, $fb96b826c0c5f37a$export$16fa2f45be04daa8)).isPureReactComponent = !0, $dc040a17866866fa$export$221d75b3f55bb0bd.prototype.shouldComponentUpdate = function(n6, t5) {\n return $dc040a17866866fa$var$C(this.props, n6) || $dc040a17866866fa$var$C(this.state, t5);\n};\nvar $dc040a17866866fa$var$w = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__b;\n(0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__b = function(n7) {\n n7.type && n7.type.__f && n7.ref && (n7.props.ref = n7.ref, n7.ref = null), $dc040a17866866fa$var$w && $dc040a17866866fa$var$w(n7);\n};\nvar $dc040a17866866fa$var$R = \"undefined\" != typeof Symbol && Symbol.for && Symbol.for(\"react.forward_ref\") || 3911;\nfunction $dc040a17866866fa$export$257a8862b851cb5b(n8) {\n function t6(t7, e5) {\n var r4 = $dc040a17866866fa$var$S({}, t7);\n return delete r4.ref, n8(r4, (e5 = t7.ref || e5) && (\"object\" != typeof e5 || \"current\" in e5) ? e5 : null);\n }\n return t6.$$typeof = $dc040a17866866fa$var$R, t6.render = t6, t6.prototype.isReactComponent = t6.__f = !0, t6.displayName = \"ForwardRef(\" + (n8.displayName || n8.name) + \")\", t6;\n}\nvar $dc040a17866866fa$var$N = function(n9, t8) {\n return null == n9 ? null : (0, $fb96b826c0c5f37a$export$47e4c5b300681277)((0, $fb96b826c0c5f37a$export$47e4c5b300681277)(n9).map(t8));\n}, $dc040a17866866fa$export$dca3b0875bd9a954 = {\n map: $dc040a17866866fa$var$N,\n forEach: $dc040a17866866fa$var$N,\n count: function(n10) {\n return n10 ? (0, $fb96b826c0c5f37a$export$47e4c5b300681277)(n10).length : 0;\n },\n only: function(n11) {\n var t9 = (0, $fb96b826c0c5f37a$export$47e4c5b300681277)(n11);\n if (1 !== t9.length) throw \"Children.only\";\n return t9[0];\n },\n toArray: (0, $fb96b826c0c5f37a$export$47e4c5b300681277)\n}, $dc040a17866866fa$var$A = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__e;\n(0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__e = function(n12, t10, e6) {\n if (n12.then) {\n for(var r5, u1 = t10; u1 = u1.__;)if ((r5 = u1.__c) && r5.__c) return null == t10.__e && (t10.__e = e6.__e, t10.__k = e6.__k), r5.__c(n12, t10);\n }\n $dc040a17866866fa$var$A(n12, t10, e6);\n};\nvar $dc040a17866866fa$var$O = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).unmount;\nfunction $dc040a17866866fa$export$74bf444e3cd11ea5() {\n this.__u = 0, this.t = null, this.__b = null;\n}\nfunction $dc040a17866866fa$var$U(n13) {\n var t11 = n13.__.__c;\n return t11 && t11.__e && t11.__e(n13);\n}\nfunction $dc040a17866866fa$export$488013bae63b21da(n14) {\n var t12, e7, r6;\n function u2(u3) {\n if (t12 || (t12 = n14()).then(function(n15) {\n e7 = n15.default || n15;\n }, function(n16) {\n r6 = n16;\n }), r6) throw r6;\n if (!e7) throw t12;\n return (0, $fb96b826c0c5f37a$export$c8a8987d4410bf2d)(e7, u3);\n }\n return u2.displayName = \"Lazy\", u2.__f = !0, u2;\n}\nfunction $dc040a17866866fa$export$998bcd577473dd93() {\n this.u = null, this.o = null;\n}\n(0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).unmount = function(n17) {\n var t13 = n17.__c;\n t13 && t13.__R && t13.__R(), t13 && !0 === n17.__h && (n17.type = null), $dc040a17866866fa$var$O && $dc040a17866866fa$var$O(n17);\n}, ($dc040a17866866fa$export$74bf444e3cd11ea5.prototype = new (0, $fb96b826c0c5f37a$export$16fa2f45be04daa8)).__c = function(n18, t14) {\n var e8 = t14.__c, r7 = this;\n null == r7.t && (r7.t = []), r7.t.push(e8);\n var u4 = $dc040a17866866fa$var$U(r7.__v), o1 = !1, i1 = function() {\n o1 || (o1 = !0, e8.__R = null, u4 ? u4(l1) : l1());\n };\n e8.__R = i1;\n var l1 = function() {\n if (!--r7.__u) {\n if (r7.state.__e) {\n var n19 = r7.state.__e;\n r7.__v.__k[0] = function n22(t17, e9, r8) {\n return t17 && (t17.__v = null, t17.__k = t17.__k && t17.__k.map(function(t18) {\n return n22(t18, e9, r8);\n }), t17.__c && t17.__c.__P === e9 && (t17.__e && r8.insertBefore(t17.__e, t17.__d), t17.__c.__e = !0, t17.__c.__P = r8)), t17;\n }(n19, n19.__c.__P, n19.__c.__O);\n }\n var t15;\n for(r7.setState({\n __e: r7.__b = null\n }); t15 = r7.t.pop();)t15.forceUpdate();\n }\n }, c1 = !0 === t14.__h;\n (r7.__u++) || c1 || r7.setState({\n __e: r7.__b = r7.__v.__k[0]\n }), n18.then(i1, i1);\n}, $dc040a17866866fa$export$74bf444e3cd11ea5.prototype.componentWillUnmount = function() {\n this.t = [];\n}, $dc040a17866866fa$export$74bf444e3cd11ea5.prototype.render = function(n23, t19) {\n if (this.__b) {\n if (this.__v.__k) {\n var e10 = document.createElement(\"div\"), r9 = this.__v.__k[0].__c;\n this.__v.__k[0] = function n24(t20, e13, r12) {\n return t20 && (t20.__c && t20.__c.__H && (t20.__c.__H.__.forEach(function(n25) {\n \"function\" == typeof n25.__c && n25.__c();\n }), t20.__c.__H = null), null != (t20 = $dc040a17866866fa$var$S({}, t20)).__c && (t20.__c.__P === r12 && (t20.__c.__P = e13), t20.__c = null), t20.__k = t20.__k && t20.__k.map(function(t21) {\n return n24(t21, e13, r12);\n })), t20;\n }(this.__b, e10, r9.__O = r9.__P);\n }\n this.__b = null;\n }\n var u5 = t19.__e && (0, $fb96b826c0c5f37a$export$c8a8987d4410bf2d)((0, $fb96b826c0c5f37a$export$ffb0004e005737fa), null, n23.fallback);\n return u5 && (u5.__h = null), [\n (0, $fb96b826c0c5f37a$export$c8a8987d4410bf2d)((0, $fb96b826c0c5f37a$export$ffb0004e005737fa), null, t19.__e ? null : n23.children),\n u5\n ];\n};\nvar $dc040a17866866fa$var$T = function(n26, t22, e14) {\n if (++e14[1] === e14[0] && n26.o.delete(t22), n26.props.revealOrder && (\"t\" !== n26.props.revealOrder[0] || !n26.o.size)) for(e14 = n26.u; e14;){\n for(; e14.length > 3;)e14.pop()();\n if (e14[1] < e14[0]) break;\n n26.u = e14 = e14[2];\n }\n};\nfunction $dc040a17866866fa$var$D(n27) {\n return this.getChildContext = function() {\n return n27.context;\n }, n27.children;\n}\nfunction $dc040a17866866fa$var$I(n28) {\n var t23 = this, e15 = n28.i;\n t23.componentWillUnmount = function() {\n (0, $fb96b826c0c5f37a$export$b3890eb0ae9dca99)(null, t23.l), t23.l = null, t23.i = null;\n }, t23.i && t23.i !== e15 && t23.componentWillUnmount(), n28.__v ? (t23.l || (t23.i = e15, t23.l = {\n nodeType: 1,\n parentNode: e15,\n childNodes: [],\n appendChild: function(n29) {\n this.childNodes.push(n29), t23.i.appendChild(n29);\n },\n insertBefore: function(n30, e) {\n this.childNodes.push(n30), t23.i.appendChild(n30);\n },\n removeChild: function(n31) {\n this.childNodes.splice(this.childNodes.indexOf(n31) >>> 1, 1), t23.i.removeChild(n31);\n }\n }), (0, $fb96b826c0c5f37a$export$b3890eb0ae9dca99)((0, $fb96b826c0c5f37a$export$c8a8987d4410bf2d)($dc040a17866866fa$var$D, {\n context: t23.context\n }, n28.__v), t23.l)) : t23.l && t23.componentWillUnmount();\n}\nfunction $dc040a17866866fa$export$d39a5bbd09211389(n32, t24) {\n return (0, $fb96b826c0c5f37a$export$c8a8987d4410bf2d)($dc040a17866866fa$var$I, {\n __v: n32,\n i: t24\n });\n}\n($dc040a17866866fa$export$998bcd577473dd93.prototype = new (0, $fb96b826c0c5f37a$export$16fa2f45be04daa8)).__e = function(n33) {\n var t25 = this, e16 = $dc040a17866866fa$var$U(t25.__v), r13 = t25.o.get(n33);\n return r13[0]++, function(u6) {\n var o2 = function() {\n t25.props.revealOrder ? (r13.push(u6), $dc040a17866866fa$var$T(t25, n33, r13)) : u6();\n };\n e16 ? e16(o2) : o2();\n };\n}, $dc040a17866866fa$export$998bcd577473dd93.prototype.render = function(n34) {\n this.u = null, this.o = new Map;\n var t26 = (0, $fb96b826c0c5f37a$export$47e4c5b300681277)(n34.children);\n n34.revealOrder && \"b\" === n34.revealOrder[0] && t26.reverse();\n for(var e17 = t26.length; e17--;)this.o.set(t26[e17], this.u = [\n 1,\n 0,\n this.u\n ]);\n return n34.children;\n}, $dc040a17866866fa$export$998bcd577473dd93.prototype.componentDidUpdate = $dc040a17866866fa$export$998bcd577473dd93.prototype.componentDidMount = function() {\n var n35 = this;\n this.o.forEach(function(t27, e18) {\n $dc040a17866866fa$var$T(n35, e18, t27);\n });\n};\nvar $dc040a17866866fa$var$j = \"undefined\" != typeof Symbol && Symbol.for && Symbol.for(\"react.element\") || 60103, $dc040a17866866fa$var$P = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, $dc040a17866866fa$var$V = \"undefined\" != typeof document, $dc040a17866866fa$var$z = function(n36) {\n return (\"undefined\" != typeof Symbol && \"symbol\" == typeof Symbol() ? /fil|che|rad/i : /fil|che|ra/i).test(n36);\n};\nfunction $dc040a17866866fa$export$b3890eb0ae9dca99(n37, t28, e19) {\n return null == t28.__k && (t28.textContent = \"\"), (0, $fb96b826c0c5f37a$export$b3890eb0ae9dca99)(n37, t28), \"function\" == typeof e19 && e19(), n37 ? n37.__c : null;\n}\nfunction $dc040a17866866fa$export$fa8d919ba61d84db(n38, t29, e20) {\n return (0, $fb96b826c0c5f37a$export$fa8d919ba61d84db)(n38, t29), \"function\" == typeof e20 && e20(), n38 ? n38.__c : null;\n}\n(0, $fb96b826c0c5f37a$export$16fa2f45be04daa8).prototype.isReactComponent = {}, [\n \"componentWillMount\",\n \"componentWillReceiveProps\",\n \"componentWillUpdate\"\n].forEach(function(n39) {\n Object.defineProperty((0, $fb96b826c0c5f37a$export$16fa2f45be04daa8).prototype, n39, {\n configurable: !0,\n get: function() {\n return this[\"UNSAFE_\" + n39];\n },\n set: function(t30) {\n Object.defineProperty(this, n39, {\n configurable: !0,\n writable: !0,\n value: t30\n });\n }\n });\n});\nvar $dc040a17866866fa$var$H = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).event;\nfunction $dc040a17866866fa$var$Z() {}\nfunction $dc040a17866866fa$var$Y() {\n return this.cancelBubble;\n}\nfunction $dc040a17866866fa$var$q() {\n return this.defaultPrevented;\n}\n(0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).event = function(n40) {\n return $dc040a17866866fa$var$H && (n40 = $dc040a17866866fa$var$H(n40)), n40.persist = $dc040a17866866fa$var$Z, n40.isPropagationStopped = $dc040a17866866fa$var$Y, n40.isDefaultPrevented = $dc040a17866866fa$var$q, n40.nativeEvent = n40;\n};\nvar $dc040a17866866fa$var$G, $dc040a17866866fa$var$J = {\n configurable: !0,\n get: function() {\n return this.class;\n }\n}, $dc040a17866866fa$var$K = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).vnode;\n(0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).vnode = function(n41) {\n var t31 = n41.type, e21 = n41.props, r14 = e21;\n if (\"string\" == typeof t31) {\n var u7 = -1 === t31.indexOf(\"-\");\n for(var o3 in r14 = {}, e21){\n var i2 = e21[o3];\n $dc040a17866866fa$var$V && \"children\" === o3 && \"noscript\" === t31 || \"value\" === o3 && \"defaultValue\" in e21 && null == i2 || (\"defaultValue\" === o3 && \"value\" in e21 && null == e21.value ? o3 = \"value\" : \"download\" === o3 && !0 === i2 ? i2 = \"\" : /ondoubleclick/i.test(o3) ? o3 = \"ondblclick\" : /^onchange(textarea|input)/i.test(o3 + t31) && !$dc040a17866866fa$var$z(e21.type) ? o3 = \"oninput\" : /^onfocus$/i.test(o3) ? o3 = \"onfocusin\" : /^onblur$/i.test(o3) ? o3 = \"onfocusout\" : /^on(Ani|Tra|Tou|BeforeInp)/.test(o3) ? o3 = o3.toLowerCase() : u7 && $dc040a17866866fa$var$P.test(o3) ? o3 = o3.replace(/[A-Z0-9]/, \"-$&\").toLowerCase() : null === i2 && (i2 = void 0), r14[o3] = i2);\n }\n \"select\" == t31 && r14.multiple && Array.isArray(r14.value) && (r14.value = (0, $fb96b826c0c5f37a$export$47e4c5b300681277)(e21.children).forEach(function(n42) {\n n42.props.selected = -1 != r14.value.indexOf(n42.props.value);\n })), \"select\" == t31 && null != r14.defaultValue && (r14.value = (0, $fb96b826c0c5f37a$export$47e4c5b300681277)(e21.children).forEach(function(n43) {\n n43.props.selected = r14.multiple ? -1 != r14.defaultValue.indexOf(n43.props.value) : r14.defaultValue == n43.props.value;\n })), n41.props = r14, e21.class != e21.className && ($dc040a17866866fa$var$J.enumerable = \"className\" in e21, null != e21.className && (r14.class = e21.className), Object.defineProperty(r14, \"className\", $dc040a17866866fa$var$J));\n }\n n41.$$typeof = $dc040a17866866fa$var$j, $dc040a17866866fa$var$K && $dc040a17866866fa$var$K(n41);\n};\nvar $dc040a17866866fa$var$Q = (0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__r;\n(0, $fb96b826c0c5f37a$export$41c562ebe57d11e2).__r = function(n44) {\n $dc040a17866866fa$var$Q && $dc040a17866866fa$var$Q(n44), $dc040a17866866fa$var$G = n44.__c;\n};\nvar $dc040a17866866fa$export$ae55be85d98224ed = {\n ReactCurrentDispatcher: {\n current: {\n readContext: function(n45) {\n return $dc040a17866866fa$var$G.__n[n45.__c].props.value;\n }\n }\n }\n}, $dc040a17866866fa$export$83d89fbfd8236492 = \"17.0.2\";\nfunction $dc040a17866866fa$export$d38cd72104c1f0e9(n46) {\n return (0, $fb96b826c0c5f37a$export$c8a8987d4410bf2d).bind(null, n46);\n}\nfunction $dc040a17866866fa$export$a8257692ac88316c(n47) {\n return !!n47 && n47.$$typeof === $dc040a17866866fa$var$j;\n}\nfunction $dc040a17866866fa$export$e530037191fcd5d7(n48) {\n return $dc040a17866866fa$export$a8257692ac88316c(n48) ? (0, $fb96b826c0c5f37a$export$e530037191fcd5d7).apply(null, arguments) : n48;\n}\nfunction $dc040a17866866fa$export$502457920280e6be(n49) {\n return !!n49.__k && ((0, $fb96b826c0c5f37a$export$b3890eb0ae9dca99)(null, n49), !0);\n}\nfunction $dc040a17866866fa$export$466bfc07425424d5(n50) {\n return n50 && (n50.base || 1 === n50.nodeType && n50) || null;\n}\nvar $dc040a17866866fa$export$c78a37762a8d58e1 = function(n51, t32) {\n return n51(t32);\n}, $dc040a17866866fa$export$cd75ccfd720a3cd4 = function(n52, t33) {\n return n52(t33);\n}, $dc040a17866866fa$export$5f8d39834fd61797 = (0, $fb96b826c0c5f37a$export$ffb0004e005737fa);\nvar $dc040a17866866fa$export$2e2bcd8739ae039 = {\n useState: (0, $1a9a8ef576b7773d$export$60241385465d0a34),\n useReducer: (0, $1a9a8ef576b7773d$export$13e3392192263954),\n useEffect: (0, $1a9a8ef576b7773d$export$6d9c69b0de29b591),\n useLayoutEffect: (0, $1a9a8ef576b7773d$export$e5c5a5f917a5871c),\n useRef: (0, $1a9a8ef576b7773d$export$b8f5890fc79d6aca),\n useImperativeHandle: (0, $1a9a8ef576b7773d$export$d5a552a76deda3c2),\n useMemo: (0, $1a9a8ef576b7773d$export$1538c33de8887b59),\n useCallback: (0, $1a9a8ef576b7773d$export$35808ee640e87ca7),\n useContext: (0, $1a9a8ef576b7773d$export$fae74005e78b1a27),\n useDebugValue: (0, $1a9a8ef576b7773d$export$dc8fbce3eb94dc1e),\n version: \"17.0.2\",\n Children: $dc040a17866866fa$export$dca3b0875bd9a954,\n render: $dc040a17866866fa$export$b3890eb0ae9dca99,\n hydrate: $dc040a17866866fa$export$fa8d919ba61d84db,\n unmountComponentAtNode: $dc040a17866866fa$export$502457920280e6be,\n createPortal: $dc040a17866866fa$export$d39a5bbd09211389,\n createElement: (0, $fb96b826c0c5f37a$export$c8a8987d4410bf2d),\n createContext: (0, $fb96b826c0c5f37a$export$fd42f52fd3ae1109),\n createFactory: $dc040a17866866fa$export$d38cd72104c1f0e9,\n cloneElement: $dc040a17866866fa$export$e530037191fcd5d7,\n createRef: (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43),\n Fragment: (0, $fb96b826c0c5f37a$export$ffb0004e005737fa),\n isValidElement: $dc040a17866866fa$export$a8257692ac88316c,\n findDOMNode: $dc040a17866866fa$export$466bfc07425424d5,\n Component: (0, $fb96b826c0c5f37a$export$16fa2f45be04daa8),\n PureComponent: $dc040a17866866fa$export$221d75b3f55bb0bd,\n memo: $dc040a17866866fa$export$7c73462e0d25e514,\n forwardRef: $dc040a17866866fa$export$257a8862b851cb5b,\n flushSync: $dc040a17866866fa$export$cd75ccfd720a3cd4,\n unstable_batchedUpdates: $dc040a17866866fa$export$c78a37762a8d58e1,\n StrictMode: (0, $fb96b826c0c5f37a$export$ffb0004e005737fa),\n Suspense: $dc040a17866866fa$export$74bf444e3cd11ea5,\n SuspenseList: $dc040a17866866fa$export$998bcd577473dd93,\n lazy: $dc040a17866866fa$export$488013bae63b21da,\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: $dc040a17866866fa$export$ae55be85d98224ed\n};\n\n\n\n\nconst $ec8c39fdad15601a$var$THEME_ICONS = {\n light: \"outline\",\n dark: \"solid\"\n};\nclass $ec8c39fdad15601a$export$2e2bcd8739ae039 extends (0, $dc040a17866866fa$export$221d75b3f55bb0bd) {\n renderIcon(category) {\n const { icon: icon } = category;\n if (icon) {\n if (icon.svg) return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"span\", {\n class: \"flex\",\n dangerouslySetInnerHTML: {\n __html: icon.svg\n }\n });\n if (icon.src) return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"img\", {\n src: icon.src\n });\n }\n const categoryIcons = (0, $fcccfb36ed0cde68$export$2e2bcd8739ae039).categories[category.id] || (0, $fcccfb36ed0cde68$export$2e2bcd8739ae039).categories.custom;\n const style = this.props.icons == \"auto\" ? $ec8c39fdad15601a$var$THEME_ICONS[this.props.theme] : this.props.icons;\n return categoryIcons[style] || categoryIcons;\n }\n render() {\n let selectedCategoryIndex = null;\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"nav\", {\n id: \"nav\",\n class: \"padding\",\n \"data-position\": this.props.position,\n dir: this.props.dir,\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"flex relative\",\n children: [\n this.categories.map((category, i)=>{\n const title = category.name || (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).categories[category.id];\n const selected = !this.props.unfocused && category.id == this.state.categoryId;\n if (selected) selectedCategoryIndex = i;\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"button\", {\n \"aria-label\": title,\n \"aria-selected\": selected || undefined,\n title: title,\n type: \"button\",\n class: \"flex flex-grow flex-center\",\n onMouseDown: (e)=>e.preventDefault(),\n onClick: ()=>{\n this.props.onClick({\n category: category,\n i: i\n });\n },\n children: this.renderIcon(category)\n });\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"bar\",\n style: {\n width: `${100 / this.categories.length}%`,\n opacity: selectedCategoryIndex == null ? 0 : 1,\n transform: this.props.dir === \"rtl\" ? `scaleX(-1) translateX(${selectedCategoryIndex * 100}%)` : `translateX(${selectedCategoryIndex * 100}%)`\n }\n })\n ]\n })\n });\n }\n constructor(){\n super();\n this.categories = (0, $7adb23b0109cc36a$export$2d0294657ab35f1b).categories.filter((category)=>{\n return !category.target;\n });\n this.state = {\n categoryId: this.categories[0].id\n };\n }\n}\n\n\n\n\n\nclass $e0d4dda61265ff1e$export$2e2bcd8739ae039 extends (0, $dc040a17866866fa$export$221d75b3f55bb0bd) {\n shouldComponentUpdate(nextProps) {\n for(let k in nextProps){\n if (k == \"children\") continue;\n if (nextProps[k] != this.props[k]) return true;\n }\n return false;\n }\n render() {\n return this.props.children;\n }\n}\n\n\n\n\nconst $89bd6bb200cc8fef$var$Performance = {\n rowsPerRender: 10\n};\nclass $89bd6bb200cc8fef$export$2e2bcd8739ae039 extends (0, $fb96b826c0c5f37a$export$16fa2f45be04daa8) {\n getInitialState(props = this.props) {\n return {\n skin: (0, $f72b75cf796873c7$export$2e2bcd8739ae039).get(\"skin\") || props.skin,\n theme: this.initTheme(props.theme)\n };\n }\n componentWillMount() {\n this.dir = (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).rtl ? \"rtl\" : \"ltr\";\n this.refs = {\n menu: (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43)(),\n navigation: (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43)(),\n scroll: (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43)(),\n search: (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43)(),\n searchInput: (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43)(),\n skinToneButton: (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43)(),\n skinToneRadio: (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43)()\n };\n this.initGrid();\n if (this.props.stickySearch == false && this.props.searchPosition == \"sticky\") {\n console.warn(\"[EmojiMart] Deprecation warning: `stickySearch` has been renamed `searchPosition`.\");\n this.props.searchPosition = \"static\";\n }\n }\n componentDidMount() {\n this.register();\n this.shadowRoot = this.base.parentNode;\n if (this.props.autoFocus) {\n const { searchInput: searchInput } = this.refs;\n if (searchInput.current) searchInput.current.focus();\n }\n }\n componentWillReceiveProps(nextProps) {\n this.nextState || (this.nextState = {});\n for(const k1 in nextProps)this.nextState[k1] = nextProps[k1];\n clearTimeout(this.nextStateTimer);\n this.nextStateTimer = setTimeout(()=>{\n let requiresGridReset = false;\n for(const k in this.nextState){\n this.props[k] = this.nextState[k];\n if (k === \"custom\" || k === \"categories\") requiresGridReset = true;\n }\n delete this.nextState;\n const nextState = this.getInitialState();\n if (requiresGridReset) return this.reset(nextState);\n this.setState(nextState);\n });\n }\n componentWillUnmount() {\n this.unregister();\n }\n async reset(nextState = {}) {\n await (0, $7adb23b0109cc36a$export$2cd8252107eb640b)(this.props);\n this.initGrid();\n this.unobserve();\n this.setState(nextState, ()=>{\n this.observeCategories();\n this.observeRows();\n });\n }\n register() {\n document.addEventListener(\"click\", this.handleClickOutside);\n this.observe();\n }\n unregister() {\n document.removeEventListener(\"click\", this.handleClickOutside);\n this.darkMedia?.removeEventListener(\"change\", this.darkMediaCallback);\n this.unobserve();\n }\n observe() {\n this.observeCategories();\n this.observeRows();\n }\n unobserve({ except: except = [] } = {}) {\n if (!Array.isArray(except)) except = [\n except\n ];\n for (const observer of this.observers){\n if (except.includes(observer)) continue;\n observer.disconnect();\n }\n this.observers = [].concat(except);\n }\n initGrid() {\n const { categories: categories } = (0, $7adb23b0109cc36a$export$2d0294657ab35f1b);\n this.refs.categories = new Map();\n const navKey = (0, $7adb23b0109cc36a$export$2d0294657ab35f1b).categories.map((category)=>category.id).join(\",\");\n if (this.navKey && this.navKey != navKey) this.refs.scroll.current && (this.refs.scroll.current.scrollTop = 0);\n this.navKey = navKey;\n this.grid = [];\n this.grid.setsize = 0;\n const addRow = (rows, category)=>{\n const row = [];\n row.__categoryId = category.id;\n row.__index = rows.length;\n this.grid.push(row);\n const rowIndex = this.grid.length - 1;\n const rowRef = rowIndex % $89bd6bb200cc8fef$var$Performance.rowsPerRender ? {} : (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43)();\n rowRef.index = rowIndex;\n rowRef.posinset = this.grid.setsize + 1;\n rows.push(rowRef);\n return row;\n };\n for (let category1 of categories){\n const rows = [];\n let row = addRow(rows, category1);\n for (let emoji of category1.emojis){\n if (row.length == this.getPerLine()) row = addRow(rows, category1);\n this.grid.setsize += 1;\n row.push(emoji);\n }\n this.refs.categories.set(category1.id, {\n root: (0, $fb96b826c0c5f37a$export$7d1e3a5e95ceca43)(),\n rows: rows\n });\n }\n }\n initTheme(theme) {\n if (theme != \"auto\") return theme;\n if (!this.darkMedia) {\n this.darkMedia = matchMedia(\"(prefers-color-scheme: dark)\");\n if (this.darkMedia.media.match(/^not/)) return \"light\";\n this.darkMedia.addEventListener(\"change\", this.darkMediaCallback);\n }\n return this.darkMedia.matches ? \"dark\" : \"light\";\n }\n initDynamicPerLine(props = this.props) {\n if (!props.dynamicWidth) return;\n const { element: element , emojiButtonSize: emojiButtonSize } = props;\n const calculatePerLine = ()=>{\n const { width: width } = element.getBoundingClientRect();\n return Math.floor(width / emojiButtonSize);\n };\n const observer = new ResizeObserver(()=>{\n this.unobserve({\n except: observer\n });\n this.setState({\n perLine: calculatePerLine()\n }, ()=>{\n this.initGrid();\n this.forceUpdate(()=>{\n this.observeCategories();\n this.observeRows();\n });\n });\n });\n observer.observe(element);\n this.observers.push(observer);\n return calculatePerLine();\n }\n getPerLine() {\n return this.state.perLine || this.props.perLine;\n }\n getEmojiByPos([p1, p2]) {\n const grid = this.state.searchResults || this.grid;\n const emoji = grid[p1] && grid[p1][p2];\n if (!emoji) return;\n return (0, $c4d155af13ad4d4b$export$2e2bcd8739ae039).get(emoji);\n }\n observeCategories() {\n const navigation = this.refs.navigation.current;\n if (!navigation) return;\n const visibleCategories = new Map();\n const setFocusedCategory = (categoryId)=>{\n if (categoryId != navigation.state.categoryId) navigation.setState({\n categoryId: categoryId\n });\n };\n const observerOptions = {\n root: this.refs.scroll.current,\n threshold: [\n 0.0,\n 1.0\n ]\n };\n const observer = new IntersectionObserver((entries)=>{\n for (const entry of entries){\n const id = entry.target.dataset.id;\n visibleCategories.set(id, entry.intersectionRatio);\n }\n const ratios = [\n ...visibleCategories\n ];\n for (const [id, ratio] of ratios)if (ratio) {\n setFocusedCategory(id);\n break;\n }\n }, observerOptions);\n for (const { root: root } of this.refs.categories.values())observer.observe(root.current);\n this.observers.push(observer);\n }\n observeRows() {\n const visibleRows = {\n ...this.state.visibleRows\n };\n const observer = new IntersectionObserver((entries)=>{\n for (const entry of entries){\n const index = parseInt(entry.target.dataset.index);\n if (entry.isIntersecting) visibleRows[index] = true;\n else delete visibleRows[index];\n }\n this.setState({\n visibleRows: visibleRows\n });\n }, {\n root: this.refs.scroll.current,\n rootMargin: `${this.props.emojiButtonSize * ($89bd6bb200cc8fef$var$Performance.rowsPerRender + 5)}px 0px ${this.props.emojiButtonSize * $89bd6bb200cc8fef$var$Performance.rowsPerRender}px`\n });\n for (const { rows: rows } of this.refs.categories.values()){\n for (const row of rows)if (row.current) observer.observe(row.current);\n }\n this.observers.push(observer);\n }\n preventDefault(e) {\n e.preventDefault();\n }\n unfocusSearch() {\n const input = this.refs.searchInput.current;\n if (!input) return;\n input.blur();\n }\n navigate({ e: e , input: input , left: left , right: right , up: up , down: down }) {\n const grid = this.state.searchResults || this.grid;\n if (!grid.length) return;\n let [p1, p2] = this.state.pos;\n const pos = (()=>{\n if (p1 == 0) {\n if (p2 == 0 && !e.repeat && (left || up)) return null;\n }\n if (p1 == -1) {\n if (!e.repeat && (right || down) && input.selectionStart == input.value.length) return [\n 0,\n 0\n ];\n return null;\n }\n if (left || right) {\n let row = grid[p1];\n const increment = left ? -1 : 1;\n p2 += increment;\n if (!row[p2]) {\n p1 += increment;\n row = grid[p1];\n if (!row) {\n p1 = left ? 0 : grid.length - 1;\n p2 = left ? 0 : grid[p1].length - 1;\n return [\n p1,\n p2\n ];\n }\n p2 = left ? row.length - 1 : 0;\n }\n return [\n p1,\n p2\n ];\n }\n if (up || down) {\n p1 += up ? -1 : 1;\n const row = grid[p1];\n if (!row) {\n p1 = up ? 0 : grid.length - 1;\n p2 = up ? 0 : grid[p1].length - 1;\n return [\n p1,\n p2\n ];\n }\n if (!row[p2]) p2 = row.length - 1;\n return [\n p1,\n p2\n ];\n }\n })();\n if (pos) e.preventDefault();\n else {\n if (this.state.pos[0] > -1) this.setState({\n pos: [\n -1,\n -1\n ]\n });\n return;\n }\n this.setState({\n pos: pos,\n keyboard: true\n }, ()=>{\n this.scrollTo({\n row: pos[0]\n });\n });\n }\n scrollTo({ categoryId: categoryId , row: row }) {\n const grid = this.state.searchResults || this.grid;\n if (!grid.length) return;\n const scroll = this.refs.scroll.current;\n const scrollRect = scroll.getBoundingClientRect();\n let scrollTop = 0;\n if (row >= 0) categoryId = grid[row].__categoryId;\n if (categoryId) {\n const ref = this.refs[categoryId] || this.refs.categories.get(categoryId).root;\n const categoryRect = ref.current.getBoundingClientRect();\n scrollTop = categoryRect.top - (scrollRect.top - scroll.scrollTop) + 1;\n }\n if (row >= 0) {\n if (!row) scrollTop = 0;\n else {\n const rowIndex = grid[row].__index;\n const rowTop = scrollTop + rowIndex * this.props.emojiButtonSize;\n const rowBot = rowTop + this.props.emojiButtonSize + this.props.emojiButtonSize * 0.88;\n if (rowTop < scroll.scrollTop) scrollTop = rowTop;\n else if (rowBot > scroll.scrollTop + scrollRect.height) scrollTop = rowBot - scrollRect.height;\n else return;\n }\n }\n this.ignoreMouse();\n scroll.scrollTop = scrollTop;\n }\n ignoreMouse() {\n this.mouseIsIgnored = true;\n clearTimeout(this.ignoreMouseTimer);\n this.ignoreMouseTimer = setTimeout(()=>{\n delete this.mouseIsIgnored;\n }, 100);\n }\n handleEmojiOver(pos) {\n if (this.mouseIsIgnored || this.state.showSkins) return;\n this.setState({\n pos: pos || [\n -1,\n -1\n ],\n keyboard: false\n });\n }\n handleEmojiClick({ e: e , emoji: emoji , pos: pos }) {\n if (!this.props.onEmojiSelect) return;\n if (!emoji && pos) emoji = this.getEmojiByPos(pos);\n if (emoji) {\n const emojiData = (0, $693b183b0a78708f$export$d10ac59fbe52a745)(emoji, {\n skinIndex: this.state.skin - 1\n });\n if (this.props.maxFrequentRows) (0, $b22cfd0a55410b4f$export$2e2bcd8739ae039).add(emojiData, this.props);\n this.props.onEmojiSelect(emojiData, e);\n }\n }\n closeSkins() {\n if (!this.state.showSkins) return;\n this.setState({\n showSkins: null,\n tempSkin: null\n });\n this.base.removeEventListener(\"click\", this.handleBaseClick);\n this.base.removeEventListener(\"keydown\", this.handleBaseKeydown);\n }\n handleSkinMouseOver(tempSkin) {\n this.setState({\n tempSkin: tempSkin\n });\n }\n handleSkinClick(skin) {\n this.ignoreMouse();\n this.closeSkins();\n this.setState({\n skin: skin,\n tempSkin: null\n });\n (0, $f72b75cf796873c7$export$2e2bcd8739ae039).set(\"skin\", skin);\n }\n renderNav() {\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)((0, $ec8c39fdad15601a$export$2e2bcd8739ae039), {\n ref: this.refs.navigation,\n icons: this.props.icons,\n theme: this.state.theme,\n dir: this.dir,\n unfocused: !!this.state.searchResults,\n position: this.props.navPosition,\n onClick: this.handleCategoryClick\n }, this.navKey);\n }\n renderPreview() {\n const emoji = this.getEmojiByPos(this.state.pos);\n const noSearchResults = this.state.searchResults && !this.state.searchResults.length;\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n id: \"preview\",\n class: \"flex flex-middle\",\n dir: this.dir,\n \"data-position\": this.props.previewPosition,\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"flex flex-middle flex-grow\",\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"flex flex-auto flex-middle flex-center\",\n style: {\n height: this.props.emojiButtonSize,\n fontSize: this.props.emojiButtonSize\n },\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)((0, $254755d3f438722f$export$2e2bcd8739ae039), {\n emoji: emoji,\n id: noSearchResults ? this.props.noResultsEmoji || \"cry\" : this.props.previewEmoji || (this.props.previewPosition == \"top\" ? \"point_down\" : \"point_up\"),\n set: this.props.set,\n size: this.props.emojiButtonSize,\n skin: this.state.tempSkin || this.state.skin,\n spritesheet: true,\n getSpritesheetURL: this.props.getSpritesheetURL\n })\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: `margin-${this.dir[0]}`,\n children: emoji || noSearchResults ? /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: `padding-${this.dir[2]} align-${this.dir[0]}`,\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"preview-title ellipsis\",\n children: emoji ? emoji.name : (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).search_no_results_1\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"preview-subtitle ellipsis color-c\",\n children: emoji ? emoji.skins[0].shortcodes : (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).search_no_results_2\n })\n ]\n }) : /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"preview-placeholder color-c\",\n children: (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).pick\n })\n })\n ]\n }),\n !emoji && this.props.skinTonePosition == \"preview\" && this.renderSkinToneButton()\n ]\n });\n }\n renderEmojiButton(emoji, { pos: pos , posinset: posinset , grid: grid }) {\n const size = this.props.emojiButtonSize;\n const skin = this.state.tempSkin || this.state.skin;\n const emojiSkin = emoji.skins[skin - 1] || emoji.skins[0];\n const native = emojiSkin.native;\n const selected = (0, $693b183b0a78708f$export$9cb4719e2e525b7a)(this.state.pos, pos);\n const key = pos.concat(emoji.id).join(\"\");\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)((0, $e0d4dda61265ff1e$export$2e2bcd8739ae039), {\n selected: selected,\n skin: skin,\n size: size,\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"button\", {\n \"aria-label\": native,\n \"aria-selected\": selected || undefined,\n \"aria-posinset\": posinset,\n \"aria-setsize\": grid.setsize,\n \"data-keyboard\": this.state.keyboard,\n title: this.props.previewPosition == \"none\" ? emoji.name : undefined,\n type: \"button\",\n class: \"flex flex-center flex-middle\",\n tabindex: \"-1\",\n onClick: (e)=>this.handleEmojiClick({\n e: e,\n emoji: emoji\n }),\n onMouseEnter: ()=>this.handleEmojiOver(pos),\n onMouseLeave: ()=>this.handleEmojiOver(),\n style: {\n width: this.props.emojiButtonSize,\n height: this.props.emojiButtonSize,\n fontSize: this.props.emojiSize,\n lineHeight: 0\n },\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n \"aria-hidden\": \"true\",\n class: \"background\",\n style: {\n borderRadius: this.props.emojiButtonRadius,\n backgroundColor: this.props.emojiButtonColors ? this.props.emojiButtonColors[(posinset - 1) % this.props.emojiButtonColors.length] : undefined\n }\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)((0, $254755d3f438722f$export$2e2bcd8739ae039), {\n emoji: emoji,\n set: this.props.set,\n size: this.props.emojiSize,\n skin: skin,\n spritesheet: true,\n getSpritesheetURL: this.props.getSpritesheetURL\n })\n ]\n })\n }, key);\n }\n renderSearch() {\n const renderSkinTone = this.props.previewPosition == \"none\" || this.props.skinTonePosition == \"search\";\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"spacer\"\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"flex flex-middle\",\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"search relative flex-grow\",\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"input\", {\n type: \"search\",\n ref: this.refs.searchInput,\n placeholder: (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).search,\n onClick: this.handleSearchClick,\n onInput: this.handleSearchInput,\n onKeyDown: this.handleSearchKeyDown,\n autoComplete: \"off\"\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"span\", {\n class: \"icon loupe flex\",\n children: (0, $fcccfb36ed0cde68$export$2e2bcd8739ae039).search.loupe\n }),\n this.state.searchResults && /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"button\", {\n title: \"Clear\",\n \"aria-label\": \"Clear\",\n type: \"button\",\n class: \"icon delete flex\",\n onClick: this.clearSearch,\n onMouseDown: this.preventDefault,\n children: (0, $fcccfb36ed0cde68$export$2e2bcd8739ae039).search.delete\n })\n ]\n }),\n renderSkinTone && this.renderSkinToneButton()\n ]\n })\n ]\n });\n }\n renderSearchResults() {\n const { searchResults: searchResults } = this.state;\n if (!searchResults) return null;\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"category\",\n ref: this.refs.search,\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: `sticky padding-small align-${this.dir[0]}`,\n children: (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).categories.search\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n children: !searchResults.length ? /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: `padding-small align-${this.dir[0]}`,\n children: this.props.onAddCustomEmoji && /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"a\", {\n onClick: this.props.onAddCustomEmoji,\n children: (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).add_custom\n })\n }) : searchResults.map((row, i)=>{\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"flex\",\n children: row.map((emoji, ii)=>{\n return this.renderEmojiButton(emoji, {\n pos: [\n i,\n ii\n ],\n posinset: i * this.props.perLine + ii + 1,\n grid: searchResults\n });\n })\n });\n })\n })\n ]\n });\n }\n renderCategories() {\n const { categories: categories } = (0, $7adb23b0109cc36a$export$2d0294657ab35f1b);\n const hidden = !!this.state.searchResults;\n const perLine = this.getPerLine();\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n style: {\n visibility: hidden ? \"hidden\" : undefined,\n display: hidden ? \"none\" : undefined,\n height: \"100%\"\n },\n children: categories.map((category)=>{\n const { root: root , rows: rows } = this.refs.categories.get(category.id);\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n \"data-id\": category.target ? category.target.id : category.id,\n class: \"category\",\n ref: root,\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: `sticky padding-small align-${this.dir[0]}`,\n children: category.name || (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).categories[category.id]\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"relative\",\n style: {\n height: rows.length * this.props.emojiButtonSize\n },\n children: rows.map((row, i)=>{\n const targetRow = row.index - row.index % $89bd6bb200cc8fef$var$Performance.rowsPerRender;\n const visible = this.state.visibleRows[targetRow];\n const ref = \"current\" in row ? row : undefined;\n if (!visible && !ref) return null;\n const start = i * perLine;\n const end = start + perLine;\n const emojiIds = category.emojis.slice(start, end);\n if (emojiIds.length < perLine) emojiIds.push(...new Array(perLine - emojiIds.length));\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n \"data-index\": row.index,\n ref: ref,\n class: \"flex row\",\n style: {\n top: i * this.props.emojiButtonSize\n },\n children: visible && emojiIds.map((emojiId, ii)=>{\n if (!emojiId) return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n style: {\n width: this.props.emojiButtonSize,\n height: this.props.emojiButtonSize\n }\n });\n const emoji = (0, $c4d155af13ad4d4b$export$2e2bcd8739ae039).get(emojiId);\n return this.renderEmojiButton(emoji, {\n pos: [\n row.index,\n ii\n ],\n posinset: row.posinset + ii,\n grid: this.grid\n });\n })\n }, row.index);\n })\n })\n ]\n });\n })\n });\n }\n renderSkinToneButton() {\n if (this.props.skinTonePosition == \"none\") return null;\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"flex flex-auto flex-center flex-middle\",\n style: {\n position: \"relative\",\n width: this.props.emojiButtonSize,\n height: this.props.emojiButtonSize\n },\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"button\", {\n type: \"button\",\n ref: this.refs.skinToneButton,\n class: \"skin-tone-button flex flex-auto flex-center flex-middle\",\n \"aria-selected\": this.state.showSkins ? \"\" : undefined,\n \"aria-label\": (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).skins.choose,\n title: (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).skins.choose,\n onClick: this.openSkins,\n style: {\n width: this.props.emojiSize,\n height: this.props.emojiSize\n },\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"span\", {\n class: `skin-tone skin-tone-${this.state.skin}`\n })\n })\n });\n }\n renderLiveRegion() {\n const emoji = this.getEmojiByPos(this.state.pos);\n const contents = emoji ? emoji.name : \"\";\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n \"aria-live\": \"polite\",\n class: \"sr-only\",\n children: contents\n });\n }\n renderSkins() {\n const skinToneButton = this.refs.skinToneButton.current;\n const skinToneButtonRect = skinToneButton.getBoundingClientRect();\n const baseRect = this.base.getBoundingClientRect();\n const position = {};\n if (this.dir == \"ltr\") position.right = baseRect.right - skinToneButtonRect.right - 3;\n else position.left = skinToneButtonRect.left - baseRect.left - 3;\n if (this.props.previewPosition == \"bottom\" && this.props.skinTonePosition == \"preview\") position.bottom = baseRect.bottom - skinToneButtonRect.top + 6;\n else {\n position.top = skinToneButtonRect.bottom - baseRect.top + 3;\n position.bottom = \"auto\";\n }\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n ref: this.refs.menu,\n role: \"radiogroup\",\n dir: this.dir,\n \"aria-label\": (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).skins.choose,\n class: \"menu hidden\",\n \"data-position\": position.top ? \"top\" : \"bottom\",\n style: position,\n children: [\n ...Array(6).keys()\n ].map((i)=>{\n const skin = i + 1;\n const checked = this.state.skin == skin;\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"input\", {\n type: \"radio\",\n name: \"skin-tone\",\n value: skin,\n \"aria-label\": (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).skins[skin],\n ref: checked ? this.refs.skinToneRadio : null,\n defaultChecked: checked,\n onChange: ()=>this.handleSkinMouseOver(skin),\n onKeyDown: (e)=>{\n if (e.code == \"Enter\" || e.code == \"Space\" || e.code == \"Tab\") {\n e.preventDefault();\n this.handleSkinClick(skin);\n }\n }\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"button\", {\n \"aria-hidden\": \"true\",\n tabindex: \"-1\",\n onClick: ()=>this.handleSkinClick(skin),\n onMouseEnter: ()=>this.handleSkinMouseOver(skin),\n onMouseLeave: ()=>this.handleSkinMouseOver(),\n class: \"option flex flex-grow flex-middle\",\n children: [\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"span\", {\n class: `skin-tone skin-tone-${skin}`\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"span\", {\n class: \"margin-small-lr\",\n children: (0, $7adb23b0109cc36a$export$dbe3113d60765c1a).skins[skin]\n })\n ]\n })\n ]\n });\n })\n });\n }\n render() {\n const lineWidth = this.props.perLine * this.props.emojiButtonSize;\n return /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"section\", {\n id: \"root\",\n class: \"flex flex-column\",\n dir: this.dir,\n style: {\n width: this.props.dynamicWidth ? \"100%\" : `calc(${lineWidth}px + (var(--padding) + var(--sidebar-width)))`\n },\n \"data-emoji-set\": this.props.set,\n \"data-theme\": this.state.theme,\n \"data-menu\": this.state.showSkins ? \"\" : undefined,\n children: [\n this.props.previewPosition == \"top\" && this.renderPreview(),\n this.props.navPosition == \"top\" && this.renderNav(),\n this.props.searchPosition == \"sticky\" && /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n class: \"padding-lr\",\n children: this.renderSearch()\n }),\n /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n ref: this.refs.scroll,\n class: \"scroll flex-grow padding-lr\",\n children: /*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)(\"div\", {\n style: {\n width: this.props.dynamicWidth ? \"100%\" : lineWidth,\n height: \"100%\"\n },\n children: [\n this.props.searchPosition == \"static\" && this.renderSearch(),\n this.renderSearchResults(),\n this.renderCategories()\n ]\n })\n }),\n this.props.navPosition == \"bottom\" && this.renderNav(),\n this.props.previewPosition == \"bottom\" && this.renderPreview(),\n this.state.showSkins && this.renderSkins(),\n this.renderLiveRegion()\n ]\n });\n }\n constructor(props){\n super();\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"darkMediaCallback\", ()=>{\n if (this.props.theme != \"auto\") return;\n this.setState({\n theme: this.darkMedia.matches ? \"dark\" : \"light\"\n });\n });\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"handleClickOutside\", (e)=>{\n const { element: element } = this.props;\n if (e.target != element) {\n if (this.state.showSkins) this.closeSkins();\n if (this.props.onClickOutside) this.props.onClickOutside(e);\n }\n });\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"handleBaseClick\", (e)=>{\n if (!this.state.showSkins) return;\n if (!e.target.closest(\".menu\")) {\n e.preventDefault();\n e.stopImmediatePropagation();\n this.closeSkins();\n }\n });\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"handleBaseKeydown\", (e)=>{\n if (!this.state.showSkins) return;\n if (e.key == \"Escape\") {\n e.preventDefault();\n e.stopImmediatePropagation();\n this.closeSkins();\n }\n });\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"handleSearchClick\", ()=>{\n const emoji = this.getEmojiByPos(this.state.pos);\n if (!emoji) return;\n this.setState({\n pos: [\n -1,\n -1\n ]\n });\n });\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"handleSearchInput\", async ()=>{\n const input = this.refs.searchInput.current;\n if (!input) return;\n const { value: value } = input;\n const searchResults = await (0, $c4d155af13ad4d4b$export$2e2bcd8739ae039).search(value);\n const afterRender = ()=>{\n if (!this.refs.scroll.current) return;\n this.refs.scroll.current.scrollTop = 0;\n };\n if (!searchResults) return this.setState({\n searchResults: searchResults,\n pos: [\n -1,\n -1\n ]\n }, afterRender);\n const pos = input.selectionStart == input.value.length ? [\n 0,\n 0\n ] : [\n -1,\n -1\n ];\n const grid = [];\n grid.setsize = searchResults.length;\n let row = null;\n for (let emoji of searchResults){\n if (!grid.length || row.length == this.getPerLine()) {\n row = [];\n row.__categoryId = \"search\";\n row.__index = grid.length;\n grid.push(row);\n }\n row.push(emoji);\n }\n this.ignoreMouse();\n this.setState({\n searchResults: grid,\n pos: pos\n }, afterRender);\n });\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"handleSearchKeyDown\", (e)=>{\n // const specialKey = e.altKey || e.ctrlKey || e.metaKey\n const input = e.currentTarget;\n e.stopImmediatePropagation();\n switch(e.key){\n case \"ArrowLeft\":\n // if (specialKey) return\n // e.preventDefault()\n this.navigate({\n e: e,\n input: input,\n left: true\n });\n break;\n case \"ArrowRight\":\n // if (specialKey) return\n // e.preventDefault()\n this.navigate({\n e: e,\n input: input,\n right: true\n });\n break;\n case \"ArrowUp\":\n // if (specialKey) return\n // e.preventDefault()\n this.navigate({\n e: e,\n input: input,\n up: true\n });\n break;\n case \"ArrowDown\":\n // if (specialKey) return\n // e.preventDefault()\n this.navigate({\n e: e,\n input: input,\n down: true\n });\n break;\n case \"Enter\":\n e.preventDefault();\n this.handleEmojiClick({\n e: e,\n pos: this.state.pos\n });\n break;\n case \"Escape\":\n e.preventDefault();\n if (this.state.searchResults) this.clearSearch();\n else this.unfocusSearch();\n break;\n default:\n break;\n }\n });\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"clearSearch\", ()=>{\n const input = this.refs.searchInput.current;\n if (!input) return;\n input.value = \"\";\n input.focus();\n this.handleSearchInput();\n });\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"handleCategoryClick\", ({ category: category , i: i })=>{\n this.scrollTo(i == 0 ? {\n row: -1\n } : {\n categoryId: category.id\n });\n });\n (0, $c770c458706daa72$export$2e2bcd8739ae039)(this, \"openSkins\", (e)=>{\n const { currentTarget: currentTarget } = e;\n const rect = currentTarget.getBoundingClientRect();\n this.setState({\n showSkins: rect\n }, async ()=>{\n // Firefox requires 2 frames for the transition to consistenly work\n await (0, $693b183b0a78708f$export$e772c8ff12451969)(2);\n const menu = this.refs.menu.current;\n if (!menu) return;\n menu.classList.remove(\"hidden\");\n this.refs.skinToneRadio.current.focus();\n this.base.addEventListener(\"click\", this.handleBaseClick, true);\n this.base.addEventListener(\"keydown\", this.handleBaseKeydown, true);\n });\n });\n this.observers = [];\n this.state = {\n pos: [\n -1,\n -1\n ],\n perLine: this.initDynamicPerLine(props),\n visibleRows: {\n 0: true\n },\n ...this.getInitialState(props)\n };\n }\n}\n\n\n\n\n\n\n\n\n\nclass $efa000751917694d$export$2e2bcd8739ae039 extends (0, $26f27c338a96b1a6$export$2e2bcd8739ae039) {\n async connectedCallback() {\n const props = (0, $7adb23b0109cc36a$export$75fe5f91d452f94b)(this.props, (0, $b247ea80b67298d5$export$2e2bcd8739ae039), this);\n props.element = this;\n props.ref = (component)=>{\n this.component = component;\n };\n await (0, $7adb23b0109cc36a$export$2cd8252107eb640b)(props);\n if (this.disconnected) return;\n (0, $fb96b826c0c5f37a$export$b3890eb0ae9dca99)(/*#__PURE__*/ (0, $bd9dd35321b03dd4$export$34b9dba7ce09269b)((0, $89bd6bb200cc8fef$export$2e2bcd8739ae039), {\n ...props\n }), this.shadowRoot);\n }\n constructor(props){\n super(props, {\n styles: (0, (/*@__PURE__*/$parcel$interopDefault($329d53ba9fd7125f$exports)))\n });\n }\n}\n(0, $c770c458706daa72$export$2e2bcd8739ae039)($efa000751917694d$export$2e2bcd8739ae039, \"Props\", (0, $b247ea80b67298d5$export$2e2bcd8739ae039));\nif (typeof customElements !== \"undefined\" && !customElements.get(\"em-emoji-picker\")) customElements.define(\"em-emoji-picker\", $efa000751917694d$export$2e2bcd8739ae039);\n\n\nvar $329d53ba9fd7125f$exports = {};\n$329d53ba9fd7125f$exports = \":host {\\n width: min-content;\\n height: 435px;\\n min-height: 230px;\\n border-radius: var(--border-radius);\\n box-shadow: var(--shadow);\\n --border-radius: 10px;\\n --category-icon-size: 18px;\\n --font-family: -apple-system, BlinkMacSystemFont, \\\"Helvetica Neue\\\", sans-serif;\\n --font-size: 15px;\\n --preview-placeholder-size: 21px;\\n --preview-title-size: 1.1em;\\n --preview-subtitle-size: .9em;\\n --shadow-color: 0deg 0% 0%;\\n --shadow: .3px .5px 2.7px hsl(var(--shadow-color) / .14), .4px .8px 1px -3.2px hsl(var(--shadow-color) / .14), 1px 2px 2.5px -4.5px hsl(var(--shadow-color) / .14);\\n display: flex;\\n}\\n\\n[data-theme=\\\"light\\\"] {\\n --em-rgb-color: var(--rgb-color, 34, 36, 39);\\n --em-rgb-accent: var(--rgb-accent, 34, 102, 237);\\n --em-rgb-background: var(--rgb-background, 255, 255, 255);\\n --em-rgb-input: var(--rgb-input, 255, 255, 255);\\n --em-color-border: var(--color-border, rgba(0, 0, 0, .05));\\n --em-color-border-over: var(--color-border-over, rgba(0, 0, 0, .1));\\n}\\n\\n[data-theme=\\\"dark\\\"] {\\n --em-rgb-color: var(--rgb-color, 222, 222, 221);\\n --em-rgb-accent: var(--rgb-accent, 58, 130, 247);\\n --em-rgb-background: var(--rgb-background, 21, 22, 23);\\n --em-rgb-input: var(--rgb-input, 0, 0, 0);\\n --em-color-border: var(--color-border, rgba(255, 255, 255, .1));\\n --em-color-border-over: var(--color-border-over, rgba(255, 255, 255, .2));\\n}\\n\\n#root {\\n --color-a: rgb(var(--em-rgb-color));\\n --color-b: rgba(var(--em-rgb-color), .65);\\n --color-c: rgba(var(--em-rgb-color), .45);\\n --padding: 12px;\\n --padding-small: calc(var(--padding) / 2);\\n --sidebar-width: 16px;\\n --duration: 225ms;\\n --duration-fast: 125ms;\\n --duration-instant: 50ms;\\n --easing: cubic-bezier(.4, 0, .2, 1);\\n width: 100%;\\n text-align: left;\\n border-radius: var(--border-radius);\\n background-color: rgb(var(--em-rgb-background));\\n position: relative;\\n}\\n\\n@media (prefers-reduced-motion) {\\n #root {\\n --duration: 0;\\n --duration-fast: 0;\\n --duration-instant: 0;\\n }\\n}\\n\\n#root[data-menu] button {\\n cursor: auto;\\n}\\n\\n#root[data-menu] .menu button {\\n cursor: pointer;\\n}\\n\\n:host, #root, input, button {\\n color: rgb(var(--em-rgb-color));\\n font-family: var(--font-family);\\n font-size: var(--font-size);\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n line-height: normal;\\n}\\n\\n*, :before, :after {\\n box-sizing: border-box;\\n min-width: 0;\\n margin: 0;\\n padding: 0;\\n}\\n\\n.relative {\\n position: relative;\\n}\\n\\n.flex {\\n display: flex;\\n}\\n\\n.flex-auto {\\n flex: none;\\n}\\n\\n.flex-center {\\n justify-content: center;\\n}\\n\\n.flex-column {\\n flex-direction: column;\\n}\\n\\n.flex-grow {\\n flex: auto;\\n}\\n\\n.flex-middle {\\n align-items: center;\\n}\\n\\n.flex-wrap {\\n flex-wrap: wrap;\\n}\\n\\n.padding {\\n padding: var(--padding);\\n}\\n\\n.padding-t {\\n padding-top: var(--padding);\\n}\\n\\n.padding-lr {\\n padding-left: var(--padding);\\n padding-right: var(--padding);\\n}\\n\\n.padding-r {\\n padding-right: var(--padding);\\n}\\n\\n.padding-small {\\n padding: var(--padding-small);\\n}\\n\\n.padding-small-b {\\n padding-bottom: var(--padding-small);\\n}\\n\\n.padding-small-lr {\\n padding-left: var(--padding-small);\\n padding-right: var(--padding-small);\\n}\\n\\n.margin {\\n margin: var(--padding);\\n}\\n\\n.margin-r {\\n margin-right: var(--padding);\\n}\\n\\n.margin-l {\\n margin-left: var(--padding);\\n}\\n\\n.margin-small-l {\\n margin-left: var(--padding-small);\\n}\\n\\n.margin-small-lr {\\n margin-left: var(--padding-small);\\n margin-right: var(--padding-small);\\n}\\n\\n.align-l {\\n text-align: left;\\n}\\n\\n.align-r {\\n text-align: right;\\n}\\n\\n.color-a {\\n color: var(--color-a);\\n}\\n\\n.color-b {\\n color: var(--color-b);\\n}\\n\\n.color-c {\\n color: var(--color-c);\\n}\\n\\n.ellipsis {\\n white-space: nowrap;\\n max-width: 100%;\\n width: auto;\\n text-overflow: ellipsis;\\n overflow: hidden;\\n}\\n\\n.sr-only {\\n width: 1px;\\n height: 1px;\\n position: absolute;\\n top: auto;\\n left: -10000px;\\n overflow: hidden;\\n}\\n\\na {\\n cursor: pointer;\\n color: rgb(var(--em-rgb-accent));\\n}\\n\\na:hover {\\n text-decoration: underline;\\n}\\n\\n.spacer {\\n height: 10px;\\n}\\n\\n[dir=\\\"rtl\\\"] .scroll {\\n padding-left: 0;\\n padding-right: var(--padding);\\n}\\n\\n.scroll {\\n padding-right: 0;\\n overflow-x: hidden;\\n overflow-y: auto;\\n}\\n\\n.scroll::-webkit-scrollbar {\\n width: var(--sidebar-width);\\n height: var(--sidebar-width);\\n}\\n\\n.scroll::-webkit-scrollbar-track {\\n border: 0;\\n}\\n\\n.scroll::-webkit-scrollbar-button {\\n width: 0;\\n height: 0;\\n display: none;\\n}\\n\\n.scroll::-webkit-scrollbar-corner {\\n background-color: rgba(0, 0, 0, 0);\\n}\\n\\n.scroll::-webkit-scrollbar-thumb {\\n min-height: 20%;\\n min-height: 65px;\\n border: 4px solid rgb(var(--em-rgb-background));\\n border-radius: 8px;\\n}\\n\\n.scroll::-webkit-scrollbar-thumb:hover {\\n background-color: var(--em-color-border-over) !important;\\n}\\n\\n.scroll:hover::-webkit-scrollbar-thumb {\\n background-color: var(--em-color-border);\\n}\\n\\n.sticky {\\n z-index: 1;\\n background-color: rgba(var(--em-rgb-background), .9);\\n -webkit-backdrop-filter: blur(4px);\\n backdrop-filter: blur(4px);\\n font-weight: 500;\\n position: sticky;\\n top: -1px;\\n}\\n\\n[dir=\\\"rtl\\\"] .search input[type=\\\"search\\\"] {\\n padding: 10px 2.2em 10px 2em;\\n}\\n\\n[dir=\\\"rtl\\\"] .search .loupe {\\n left: auto;\\n right: .7em;\\n}\\n\\n[dir=\\\"rtl\\\"] .search .delete {\\n left: .7em;\\n right: auto;\\n}\\n\\n.search {\\n z-index: 2;\\n position: relative;\\n}\\n\\n.search input, .search button {\\n font-size: calc(var(--font-size) - 1px);\\n}\\n\\n.search input[type=\\\"search\\\"] {\\n width: 100%;\\n background-color: var(--em-color-border);\\n transition-duration: var(--duration);\\n transition-property: background-color, box-shadow;\\n transition-timing-function: var(--easing);\\n border: 0;\\n border-radius: 10px;\\n outline: 0;\\n padding: 10px 2em 10px 2.2em;\\n display: block;\\n}\\n\\n.search input[type=\\\"search\\\"]::-ms-input-placeholder {\\n color: inherit;\\n opacity: .6;\\n}\\n\\n.search input[type=\\\"search\\\"]::placeholder {\\n color: inherit;\\n opacity: .6;\\n}\\n\\n.search input[type=\\\"search\\\"], .search input[type=\\\"search\\\"]::-webkit-search-decoration, .search input[type=\\\"search\\\"]::-webkit-search-cancel-button, .search input[type=\\\"search\\\"]::-webkit-search-results-button, .search input[type=\\\"search\\\"]::-webkit-search-results-decoration {\\n -webkit-appearance: none;\\n -ms-appearance: none;\\n appearance: none;\\n}\\n\\n.search input[type=\\\"search\\\"]:focus {\\n background-color: rgb(var(--em-rgb-input));\\n box-shadow: inset 0 0 0 1px rgb(var(--em-rgb-accent)), 0 1px 3px rgba(65, 69, 73, .2);\\n}\\n\\n.search .icon {\\n z-index: 1;\\n color: rgba(var(--em-rgb-color), .7);\\n position: absolute;\\n top: 50%;\\n transform: translateY(-50%);\\n}\\n\\n.search .loupe {\\n pointer-events: none;\\n left: .7em;\\n}\\n\\n.search .delete {\\n right: .7em;\\n}\\n\\nsvg {\\n fill: currentColor;\\n width: 1em;\\n height: 1em;\\n}\\n\\nbutton {\\n -webkit-appearance: none;\\n -ms-appearance: none;\\n appearance: none;\\n cursor: pointer;\\n color: currentColor;\\n background-color: rgba(0, 0, 0, 0);\\n border: 0;\\n}\\n\\n#nav {\\n z-index: 2;\\n padding-top: 12px;\\n padding-bottom: 12px;\\n padding-right: var(--sidebar-width);\\n position: relative;\\n}\\n\\n#nav button {\\n color: var(--color-b);\\n transition: color var(--duration) var(--easing);\\n}\\n\\n#nav button:hover {\\n color: var(--color-a);\\n}\\n\\n#nav svg, #nav img {\\n width: var(--category-icon-size);\\n height: var(--category-icon-size);\\n}\\n\\n#nav[dir=\\\"rtl\\\"] .bar {\\n left: auto;\\n right: 0;\\n}\\n\\n#nav .bar {\\n width: 100%;\\n height: 3px;\\n background-color: rgb(var(--em-rgb-accent));\\n transition: transform var(--duration) var(--easing);\\n border-radius: 3px 3px 0 0;\\n position: absolute;\\n bottom: -12px;\\n left: 0;\\n}\\n\\n#nav button[aria-selected] {\\n color: rgb(var(--em-rgb-accent));\\n}\\n\\n#preview {\\n z-index: 2;\\n padding: calc(var(--padding) + 4px) var(--padding);\\n padding-right: var(--sidebar-width);\\n position: relative;\\n}\\n\\n#preview .preview-placeholder {\\n font-size: var(--preview-placeholder-size);\\n}\\n\\n#preview .preview-title {\\n font-size: var(--preview-title-size);\\n}\\n\\n#preview .preview-subtitle {\\n font-size: var(--preview-subtitle-size);\\n}\\n\\n#nav:before, #preview:before {\\n content: \\\"\\\";\\n height: 2px;\\n position: absolute;\\n left: 0;\\n right: 0;\\n}\\n\\n#nav[data-position=\\\"top\\\"]:before, #preview[data-position=\\\"top\\\"]:before {\\n background: linear-gradient(to bottom, var(--em-color-border), transparent);\\n top: 100%;\\n}\\n\\n#nav[data-position=\\\"bottom\\\"]:before, #preview[data-position=\\\"bottom\\\"]:before {\\n background: linear-gradient(to top, var(--em-color-border), transparent);\\n bottom: 100%;\\n}\\n\\n.category:last-child {\\n min-height: calc(100% + 1px);\\n}\\n\\n.category button {\\n font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, sans-serif;\\n position: relative;\\n}\\n\\n.category button > * {\\n position: relative;\\n}\\n\\n.category button .background {\\n opacity: 0;\\n background-color: var(--em-color-border);\\n transition: opacity var(--duration-fast) var(--easing) var(--duration-instant);\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.category button:hover .background {\\n transition-duration: var(--duration-instant);\\n transition-delay: 0s;\\n}\\n\\n.category button[aria-selected] .background {\\n opacity: 1;\\n}\\n\\n.category button[data-keyboard] .background {\\n transition: none;\\n}\\n\\n.row {\\n width: 100%;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.skin-tone-button {\\n border: 1px solid rgba(0, 0, 0, 0);\\n border-radius: 100%;\\n}\\n\\n.skin-tone-button:hover {\\n border-color: var(--em-color-border);\\n}\\n\\n.skin-tone-button:active .skin-tone {\\n transform: scale(.85) !important;\\n}\\n\\n.skin-tone-button .skin-tone {\\n transition: transform var(--duration) var(--easing);\\n}\\n\\n.skin-tone-button[aria-selected] {\\n background-color: var(--em-color-border);\\n border-top-color: rgba(0, 0, 0, .05);\\n border-bottom-color: rgba(0, 0, 0, 0);\\n border-left-width: 0;\\n border-right-width: 0;\\n}\\n\\n.skin-tone-button[aria-selected] .skin-tone {\\n transform: scale(.9);\\n}\\n\\n.menu {\\n z-index: 2;\\n white-space: nowrap;\\n border: 1px solid var(--em-color-border);\\n background-color: rgba(var(--em-rgb-background), .9);\\n -webkit-backdrop-filter: blur(4px);\\n backdrop-filter: blur(4px);\\n transition-property: opacity, transform;\\n transition-duration: var(--duration);\\n transition-timing-function: var(--easing);\\n border-radius: 10px;\\n padding: 4px;\\n position: absolute;\\n box-shadow: 1px 1px 5px rgba(0, 0, 0, .05);\\n}\\n\\n.menu.hidden {\\n opacity: 0;\\n}\\n\\n.menu[data-position=\\\"bottom\\\"] {\\n transform-origin: 100% 100%;\\n}\\n\\n.menu[data-position=\\\"bottom\\\"].hidden {\\n transform: scale(.9)rotate(-3deg)translateY(5%);\\n}\\n\\n.menu[data-position=\\\"top\\\"] {\\n transform-origin: 100% 0;\\n}\\n\\n.menu[data-position=\\\"top\\\"].hidden {\\n transform: scale(.9)rotate(3deg)translateY(-5%);\\n}\\n\\n.menu input[type=\\\"radio\\\"] {\\n clip: rect(0 0 0 0);\\n width: 1px;\\n height: 1px;\\n border: 0;\\n margin: 0;\\n padding: 0;\\n position: absolute;\\n overflow: hidden;\\n}\\n\\n.menu input[type=\\\"radio\\\"]:checked + .option {\\n box-shadow: 0 0 0 2px rgb(var(--em-rgb-accent));\\n}\\n\\n.option {\\n width: 100%;\\n border-radius: 6px;\\n padding: 4px 6px;\\n}\\n\\n.option:hover {\\n color: #fff;\\n background-color: rgb(var(--em-rgb-accent));\\n}\\n\\n.skin-tone {\\n width: 16px;\\n height: 16px;\\n border-radius: 100%;\\n display: inline-block;\\n position: relative;\\n overflow: hidden;\\n}\\n\\n.skin-tone:after {\\n content: \\\"\\\";\\n mix-blend-mode: overlay;\\n background: linear-gradient(rgba(255, 255, 255, .2), rgba(0, 0, 0, 0));\\n border: 1px solid rgba(0, 0, 0, .8);\\n border-radius: 100%;\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n box-shadow: inset 0 -2px 3px #000, inset 0 1px 2px #fff;\\n}\\n\\n.skin-tone-1 {\\n background-color: #ffc93a;\\n}\\n\\n.skin-tone-2 {\\n background-color: #ffdab7;\\n}\\n\\n.skin-tone-3 {\\n background-color: #e7b98f;\\n}\\n\\n.skin-tone-4 {\\n background-color: #c88c61;\\n}\\n\\n.skin-tone-5 {\\n background-color: #a46134;\\n}\\n\\n.skin-tone-6 {\\n background-color: #5d4437;\\n}\\n\\n[data-index] {\\n justify-content: space-between;\\n}\\n\\n[data-emoji-set=\\\"twitter\\\"] .skin-tone:after {\\n box-shadow: none;\\n border-color: rgba(0, 0, 0, .5);\\n}\\n\\n[data-emoji-set=\\\"twitter\\\"] .skin-tone-1 {\\n background-color: #fade72;\\n}\\n\\n[data-emoji-set=\\\"twitter\\\"] .skin-tone-2 {\\n background-color: #f3dfd0;\\n}\\n\\n[data-emoji-set=\\\"twitter\\\"] .skin-tone-3 {\\n background-color: #eed3a8;\\n}\\n\\n[data-emoji-set=\\\"twitter\\\"] .skin-tone-4 {\\n background-color: #cfad8d;\\n}\\n\\n[data-emoji-set=\\\"twitter\\\"] .skin-tone-5 {\\n background-color: #a8805d;\\n}\\n\\n[data-emoji-set=\\\"twitter\\\"] .skin-tone-6 {\\n background-color: #765542;\\n}\\n\\n[data-emoji-set=\\\"google\\\"] .skin-tone:after {\\n box-shadow: inset 0 0 2px 2px rgba(0, 0, 0, .4);\\n}\\n\\n[data-emoji-set=\\\"google\\\"] .skin-tone-1 {\\n background-color: #f5c748;\\n}\\n\\n[data-emoji-set=\\\"google\\\"] .skin-tone-2 {\\n background-color: #f1d5aa;\\n}\\n\\n[data-emoji-set=\\\"google\\\"] .skin-tone-3 {\\n background-color: #d4b48d;\\n}\\n\\n[data-emoji-set=\\\"google\\\"] .skin-tone-4 {\\n background-color: #aa876b;\\n}\\n\\n[data-emoji-set=\\\"google\\\"] .skin-tone-5 {\\n background-color: #916544;\\n}\\n\\n[data-emoji-set=\\\"google\\\"] .skin-tone-6 {\\n background-color: #61493f;\\n}\\n\\n[data-emoji-set=\\\"facebook\\\"] .skin-tone:after {\\n border-color: rgba(0, 0, 0, .4);\\n box-shadow: inset 0 -2px 3px #000, inset 0 1px 4px #fff;\\n}\\n\\n[data-emoji-set=\\\"facebook\\\"] .skin-tone-1 {\\n background-color: #f5c748;\\n}\\n\\n[data-emoji-set=\\\"facebook\\\"] .skin-tone-2 {\\n background-color: #f1d5aa;\\n}\\n\\n[data-emoji-set=\\\"facebook\\\"] .skin-tone-3 {\\n background-color: #d4b48d;\\n}\\n\\n[data-emoji-set=\\\"facebook\\\"] .skin-tone-4 {\\n background-color: #aa876b;\\n}\\n\\n[data-emoji-set=\\\"facebook\\\"] .skin-tone-5 {\\n background-color: #916544;\\n}\\n\\n[data-emoji-set=\\\"facebook\\\"] .skin-tone-6 {\\n background-color: #61493f;\\n}\\n\\n\";\n\n\n\n\n\n\n\n\n\n\nexport {$efa000751917694d$export$2e2bcd8739ae039 as Picker, $331b4160623139bf$export$2e2bcd8739ae039 as Emoji, $b22cfd0a55410b4f$export$2e2bcd8739ae039 as FrequentlyUsed, $e6eae5155b87f591$export$bcb25aa587e9cb13 as SafeFlags, $c4d155af13ad4d4b$export$2e2bcd8739ae039 as SearchIndex, $f72b75cf796873c7$export$2e2bcd8739ae039 as Store, $7adb23b0109cc36a$export$2cd8252107eb640b as init, $7adb23b0109cc36a$export$2d0294657ab35f1b as Data, $7adb23b0109cc36a$export$dbe3113d60765c1a as I18n, $693b183b0a78708f$export$5ef5574deca44bc0 as getEmojiDataFromNative};\n//# sourceMappingURL=module.js.map\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nimport data from \"@emoji-mart/data\";\nimport i18nEn from \"@emoji-mart/data/i18n/en.json\";\nimport { Picker } from \"emoji-mart\";\nimport * as i18n from \"src/decidim/i18n\";\nimport { screens } from \"tailwindcss/defaultTheme\";\nclass EmojiI18n {\n static isObject(item) {\n return item && typeof item === \"object\" && !Array.isArray(item);\n }\n static deepMerge(target, ...sources) {\n if (!sources.length) {\n return target;\n }\n const source = sources.shift();\n if (this.isObject(target) && this.isObject(source)) {\n for (const key in source) {\n if (this.isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n this.deepMerge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n return this.deepMerge(target, ...sources);\n }\n static locale() {\n return document.documentElement.getAttribute(\"lang\");\n }\n static i18n() {\n return this.deepMerge(i18nEn, i18n.getMessages(\"emojis\"));\n }\n}\nclass EmojiPopUp {\n constructor(pickerOptions, handlerElement) {\n this.popUp = this.createContainer();\n this.popUp.appendChild(this.createCloseButton());\n this.popUp.appendChild(this.addStyles());\n let container = document.createElement(\"div\");\n this.picker = new Picker(__spreadValues(__spreadValues(__spreadValues({\n parent: container,\n i18n: EmojiI18n.i18n(),\n locale: EmojiI18n.locale(),\n data,\n perLine: 8,\n theme: \"light\",\n emojiButtonSize: 41,\n emojiSize: 30\n }, window.matchMedia(`(max-width: ${screens.sm})`).matches && { emojiButtonSize: 36 }), window.matchMedia(`(max-width: ${screens.sm})`).matches && { emojiSize: 30 }), pickerOptions));\n this.popUp.appendChild(container);\n this.setCoordinates(handlerElement);\n }\n createCloseButton() {\n let closeButton = document.createElement(\"button\");\n closeButton.type = \"button\";\n closeButton.classList.add(\"emoji-picker__closeButton\");\n closeButton.innerHTML = '';\n closeButton.addEventListener(\"click\", () => {\n this.close();\n });\n return closeButton;\n }\n addStyles() {\n let style = document.createElement(\"style\");\n style.innerHTML = `\n em-emoji-picker {\n --color-border: rgb(204, 204, 204);\n --rgb-background: 249, 250, 251;\n --rgb-color: 0,0,0;\n --rgb-accent: var(--primary-rgb);\n --shadow: 5px 5px 15px -8px rgba(0,0,0,0.75);\n --color-border-over: rgba(0, 0, 0, 0.1);\n --rgb-input: 235, 235, 235;\n --background-rgb: var(--primary-rgb);\n --category-icon-size: 24px;\n\n border: 1px solid var(--color-border);\n }\n `;\n return style;\n }\n createContainer() {\n const container = document.createElement(\"div\");\n container.classList.add(\"emoji-picker__popupContainer\");\n container.classList.add(\"emoji__decidim\");\n container.id = \"picker\";\n container.style.position = \"absolute\";\n container.style.zIndex = \"1000\";\n document.body.appendChild(container);\n return container;\n }\n setCoordinates(handlerElement) {\n let rect = handlerElement.getBoundingClientRect();\n let leftPosition = window.scrollX + rect.x;\n let topPosition = window.scrollY + rect.y;\n topPosition -= this.popUp.offsetHeight;\n leftPosition -= this.popUp.offsetWidth;\n let popUpWidth = window.matchMedia(`(max-width: ${screens.sm})`).matches ? 41 * 9 : 36 * 8;\n leftPosition -= popUpWidth;\n if (leftPosition < 0) {\n leftPosition = parseInt((window.screen.availWidth - popUpWidth) / 2, 10) + 30;\n }\n this.popUp.style.top = `${topPosition}px`;\n this.popUp.style.left = `${leftPosition}px`;\n }\n close() {\n this.popUp.remove();\n }\n}\nexport class EmojiButton {\n constructor(elem) {\n const wrapper = document.createElement(\"span\");\n wrapper.className = \"emoji__container\";\n const btnContainer = document.createElement(\"span\");\n btnContainer.className = \"emoji__trigger\";\n const btn = document.createElement(\"button\");\n btn.className = \"emoji__button\";\n btn.type = \"button\";\n btn.setAttribute(\"aria-label\", EmojiI18n.i18n().button);\n btn.innerHTML = '';\n const referenceElement = document.createElement(\"span\");\n referenceElement.className = \"emoji__reference\";\n const parent = elem.parentNode;\n parent.insertBefore(wrapper, elem);\n wrapper.appendChild(elem);\n wrapper.appendChild(btnContainer);\n wrapper.appendChild(referenceElement);\n btnContainer.appendChild(btn);\n parent.querySelectorAll(\".form-error\").forEach((el) => wrapper.appendChild(el));\n let emojiSelectHandler = (emojidata) => {\n let emoji = emojidata.native;\n if (elem.contentEditable === \"true\") {\n if (elem.editor) {\n elem.editor.chain().insertContent(` ${emoji} `).focus().run();\n } else {\n elem.innerHTML += ` ${emoji} `;\n }\n } else {\n elem.value += ` ${emoji} `;\n }\n if (elem.tagName === \"TEXTAREA\" || elem.tagName === \"INPUT\") {\n elem.dispatchEvent(new Event(\"input\"));\n }\n const event = new Event(\"emoji.added\");\n elem.dispatchEvent(event);\n };\n let handlerPicker = () => {\n let popUp = document.getElementById(\"picker\");\n if (popUp) {\n popUp.remove();\n return;\n }\n let pickerOptions = {\n onEmojiSelect: (emoji) => emojiSelectHandler(emoji),\n onClickOutside: (event) => {\n if (event.target.parentNode === btn) {\n return;\n }\n handlerPicker();\n }\n };\n new EmojiPopUp(pickerOptions, btn);\n };\n btn.addEventListener(\"click\", handlerPicker);\n elem.addEventListener(\"emoji.added\", handlerPicker);\n elem.addEventListener(\"characterCounter\", (event) => {\n if (event.detail.remaining >= 4) {\n btn.addEventListener(\"click\", handlerPicker);\n btn.removeAttribute(\"style\");\n } else {\n btn.removeEventListener(\"click\", handlerPicker);\n btn.setAttribute(\"style\", \"color:lightgrey\");\n }\n });\n }\n}\nexport default function addInputEmoji(element = document) {\n const containers = element.querySelectorAll(\"[data-input-emoji]\");\n if (containers.length) {\n containers.forEach((elem) => new EmojiButton(elem));\n }\n}\n;\n","const focusGuardClass = \"focusguard\";\nconst focusableNodes = [\"A\", \"IFRAME\", \"OBJECT\", \"EMBED\"];\nconst focusableDisableableNodes = [\"BUTTON\", \"INPUT\", \"TEXTAREA\", \"SELECT\"];\nexport default class FocusGuard {\n constructor(container) {\n this.container = container;\n this.guardedElement = null;\n this.triggerElement = null;\n }\n trap(element, trigger) {\n this.enable();\n this.guardedElement = element;\n this.triggerElement = trigger;\n }\n enable() {\n const guards = this.container.querySelectorAll(`:scope > .${focusGuardClass}`);\n if (guards.length > 0) {\n guards.forEach((guard) => {\n if (guard.dataset.position === \"start\") {\n this.container.prepend(guard);\n } else {\n this.container.append(guard);\n }\n });\n return;\n }\n const startGuard = this.createFocusGuard(\"start\");\n const endGuard = this.createFocusGuard(\"end\");\n this.container.prepend(startGuard);\n this.container.append(endGuard);\n startGuard.addEventListener(\"focus\", () => this.handleContainerFocus(startGuard));\n endGuard.addEventListener(\"focus\", () => this.handleContainerFocus(endGuard));\n }\n disable() {\n const guards = this.container.querySelectorAll(`:scope > .${focusGuardClass}`);\n guards.forEach((guard) => guard.remove());\n this.guardedElement = null;\n if (this.triggerElement) {\n this.triggerElement.focus();\n this.triggerElement = null;\n }\n }\n createFocusGuard(position) {\n const guard = document.createElement(\"div\");\n guard.className = focusGuardClass;\n guard.dataset.position = position;\n guard.tabIndex = 0;\n guard.setAttribute(\"aria-hidden\", \"true\");\n return guard;\n }\n handleContainerFocus(guard) {\n if (!this.guardedElement) {\n guard.blur();\n return;\n }\n const visibleNodes = Array.from(this.guardedElement.querySelectorAll(\"*\")).filter((item) => {\n return this.isVisible(item);\n });\n let target = null;\n if (guard.dataset.position === \"start\") {\n for (let ind = 0; ind < visibleNodes.length; ind += 1) {\n if (!this.isFocusGuard(visibleNodes[ind]) && this.isFocusable(visibleNodes[ind])) {\n target = visibleNodes[ind];\n break;\n }\n }\n } else {\n for (let ind = visibleNodes.length - 1; ind >= 0; ind -= 1) {\n if (!this.isFocusGuard(visibleNodes[ind]) && this.isFocusable(visibleNodes[ind])) {\n target = visibleNodes[ind];\n break;\n }\n }\n }\n if (target) {\n target.focus();\n } else {\n guard.blur();\n }\n }\n isVisible(element) {\n return element.offsetWidth > 0 || element.offsetHeight > 0;\n }\n isFocusGuard(element) {\n return element.classList.contains(focusGuardClass);\n }\n isFocusable(element) {\n if (focusableNodes.indexOf(element.nodeName) > -1) {\n return true;\n }\n if (focusableDisableableNodes.indexOf(element.nodeName) > -1 || element.getAttribute(\"contenteditable\")) {\n if (element.getAttribute(\"disabled\")) {\n return false;\n }\n return true;\n }\n const tabindex = parseInt(element.getAttribute(\"tabindex\"), 10);\n if (!isNaN(tabindex) && tabindex >= 0) {\n return true;\n }\n return false;\n }\n}\n","export default function backToListLink(links) {\n if (!links) {\n return;\n }\n if (!window.sessionStorage) {\n return;\n }\n const filteredParams = JSON.parse(sessionStorage.getItem(\"filteredParams\")) || {};\n links.forEach((link) => {\n const href = link.getAttribute(\"href\");\n if (filteredParams[href]) {\n link.setAttribute(\"href\", filteredParams[href]);\n }\n });\n}\n","export default function(node = document) {\n const noNotificationsText = node.querySelector(\"#empty-notifications\");\n const handleRemove = ({ currentTarget }) => currentTarget.remove();\n const handleFadeOut = (element) => {\n if (element) {\n element.addEventListener(\"transitionend\", handleRemove);\n element.style.opacity = 0;\n }\n };\n const emptyNotifications = () => {\n noNotificationsText.hidden = false;\n node.querySelector(\"#dropdown-menu-account [data-unread-notifications]\").remove();\n if (!node.querySelector(\".main-bar__notification\").dataset.unreadConversations) {\n node.querySelector(\".main-bar__notification\").remove();\n }\n };\n const handleClick = ({ currentTarget }) => {\n handleFadeOut(currentTarget.closest(\"[data-notification]\"));\n if (!node.querySelector(\"[data-notification]:not([style])\")) {\n emptyNotifications();\n }\n };\n const hideReadAllButton = () => {\n handleFadeOut(node.querySelector(\"[data-notification-read-all]\"));\n };\n const notifications = node.querySelectorAll(\"[data-notification]\");\n if (notifications.length) {\n notifications.forEach((btn) => btn.querySelector(\"[data-notification-read]\").addEventListener(\"click\", handleClick));\n node.querySelector(\"[data-notification-read-all]\").addEventListener(\n \"click\",\n () => {\n notifications.forEach((notification) => handleFadeOut(notification));\n emptyNotifications();\n hideReadAllButton();\n }\n );\n }\n}\n","export default function(node = document) {\n const actions = node.querySelectorAll(\"[data-notification-action]\");\n if (!actions.length) {\n return;\n }\n const extractMessage = (detail) => {\n return detail && detail.message || detail[0] && detail[0].message;\n };\n const resolvePanel = (panel, message, klass) => {\n panel.classList.remove(\"spinner-container\");\n if (message) {\n panel.innerHTML = `${message}
`;\n } else {\n panel.innerHTML = \"\";\n }\n };\n actions.forEach((action) => {\n const panel = action.closest(\".notification__snippet-actions\");\n action.addEventListener(\"ajax:beforeSend\", () => {\n panel.classList.add(\"spinner-container\");\n panel.querySelectorAll(\"[data-notification-action]\").forEach((el) => {\n el.disabled = true;\n });\n });\n action.addEventListener(\"ajax:success\", (event) => {\n resolvePanel(panel, extractMessage(event.detail), \"success\");\n });\n action.addEventListener(\"ajax:error\", (event) => {\n resolvePanel(panel, extractMessage(event.detail) || window.Decidim.config.get(\"notifications\").action_error, \"alert\");\n });\n });\n}\n","export default class RemoteModal {\n constructor(element) {\n if (!element) {\n throw new Error(\"RemoteModal requires a DOM Element\");\n }\n const { dialogRemoteUrl: url, dialogOpen } = element.dataset;\n this.url = url;\n this.modalTarget = dialogOpen;\n element.addEventListener(\"click\", (event) => this.handleClick(event));\n }\n handleClick() {\n fetch(this.url).then((res) => {\n if (!res.ok) {\n throw res;\n }\n return res.text();\n }).then((res) => this.handleSuccess(res)).catch((err) => this.handleError(err));\n }\n handleSuccess(response) {\n const node = document.getElementById(`${this.modalTarget}-content`);\n const btn = node.querySelector(\"button\");\n node.innerHTML = \"\";\n if (btn) {\n node.appendChild(btn);\n }\n const div = document.createElement(\"div\");\n div.innerHTML = response;\n Array.from(div.children).forEach((child) => node.appendChild(child));\n document.dispatchEvent(new CustomEvent(\"remote-modal:loaded\", { detail: node }));\n }\n handleError(err) {\n const node = document.getElementById(`${this.modalTarget}-content`);\n node.innerHTML = `${err.status}
${err.statusText}
`;\n document.dispatchEvent(new CustomEvent(\"remote-modal:failed\", { detail: node }));\n }\n}\n","export default function(node = document) {\n node.addEventListener(\"click\", ({ target: element }) => {\n const { method } = element.dataset;\n let attr = \"destroy_url\";\n if (method === \"POST\") {\n attr = \"create_url\";\n }\n const { [attr]: url } = element.dataset;\n Rails.ajax({\n url,\n type: method,\n success: function() {\n if (method === \"POST\") {\n element.classList.add(\"is-selected\");\n element.dataset.method = \"DELETE\";\n } else {\n element.classList.remove(\"is-selected\");\n element.dataset.method = \"POST\";\n }\n }\n });\n });\n}\n","const getAbsolutePosition = (node, relativeParent) => {\n const { top, left, width, height } = node.getBoundingClientRect();\n let [pageX, pageY] = [window.pageXOffset, window.pageYOffset];\n if (relativeParent) {\n const { topLeft: [parentX, parentY] } = getAbsolutePosition(relativeParent);\n [pageX, pageY] = [pageX - parentX, pageY - parentY];\n }\n return {\n topLeft: [pageX + left, pageY + top],\n topCenter: [pageX + left + width / 2, pageY + top],\n topRight: [pageX + left + width, pageY + top],\n middleLeft: [pageX + left, pageY + top + height / 2],\n middleCenter: [pageX + left + width / 2, pageY + top + height / 2],\n middleRight: [pageX + left + width, pageY + top + height / 2],\n bottomLeft: [pageX + left, pageY + top + height],\n bottomCenter: [pageX + left + width / 2, pageY + top + height],\n bottomRight: [pageX + left + width, pageY + top + height]\n };\n};\nexport default function(node) {\n const { tooltip: tooltipHtml } = node.dataset;\n const div = document.createElement(\"div\");\n div.innerHTML = tooltipHtml;\n const tooltip = div.firstElementChild;\n if (!(tooltip instanceof HTMLElement)) {\n return;\n }\n node.removeAttribute(\"title\");\n tooltip.id = tooltip.id || `tooltip-${Math.random().toString(36).substring(7)}`;\n tooltip.setAttribute(\"aria-hidden\", true);\n const append = () => {\n if (tooltip.getAttribute(\"aria-hidden\") === \"false\") {\n return;\n }\n Array.from(document.body.children).map((child) => child.id.startsWith(\"tooltip\") && child.remove());\n document.body.appendChild(tooltip);\n node.setAttribute(\"aria-describedby\", tooltip.id);\n const { topCenter, bottomCenter, middleRight, middleLeft } = getAbsolutePosition(node);\n let positionX = null;\n let positionY = null;\n if (tooltip.classList.contains(\"bottom\")) {\n [positionX, positionY] = bottomCenter;\n } else if (tooltip.classList.contains(\"left\")) {\n [positionX, positionY] = middleLeft;\n } else if (tooltip.classList.contains(\"right\")) {\n [positionX, positionY] = middleRight;\n } else if (tooltip.classList.contains(\"top\")) {\n [positionX, positionY] = topCenter;\n }\n if ((tooltip.classList.contains(\"top\") || tooltip.classList.contains(\"bottom\")) && positionX < Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0) * 0.5) {\n tooltip.style.setProperty(\"--arrow-offset\", \"80%\");\n } else {\n tooltip.style.removeProperty(\"--arrow-offset\");\n }\n tooltip.style.top = `${positionY}px`;\n tooltip.style.left = `${positionX}px`;\n tooltip.setAttribute(\"aria-hidden\", false);\n };\n let cancelRemove = false;\n const remove = () => {\n cancelRemove = false;\n setTimeout(() => !cancelRemove && tooltip.setAttribute(\"aria-hidden\", true), 500);\n };\n window.addEventListener(\"keydown\", (event) => event.key === \"Escape\" && remove());\n node.addEventListener(\"mouseenter\", append);\n node.addEventListener(\"mouseleave\", remove);\n node.addEventListener(\"focus\", append);\n node.addEventListener(\"blur\", remove);\n tooltip.addEventListener(\"mouseenter\", () => tooltip.setAttribute(\"aria-hidden\", false));\n tooltip.addEventListener(\"mouseleave\", remove);\n node.addEventListener(\"mouseover\", () => cancelRemove = true);\n tooltip.addEventListener(\"mouseover\", () => cancelRemove = true);\n}\n","export default function createToggle(component) {\n const { toggle } = component.dataset;\n if (!component.id) {\n component.id = `toggle-${Math.random().toString(36).substring(7)}`;\n }\n component.setAttribute(\"aria-controls\", toggle);\n toggle.split(\" \").forEach((id) => {\n const node = document.getElementById(id);\n if (node) {\n node.setAttribute(\"aria-labelledby\", [node.getAttribute(\"aria-labelledby\"), component.id].filter(Boolean).join(\" \"));\n }\n });\n component.addEventListener(\"click\", () => {\n toggle.split(\" \").forEach((id) => {\n const node = document.getElementById(id);\n if (node) {\n node.hidden = !node.hidden;\n node.setAttribute(\"aria-expanded\", !node.hidden);\n }\n });\n document.dispatchEvent(new Event(\"on:toggle\"));\n });\n}\n","const Accordions=(()=>{const t={enter:13,space:32,pageUp:33,pageDown:34,end:35,home:36,up:38,down:40};class e{constructor(t){this.accordion=t.accordion,this.triggers=this.queryFilter(this.accordion.querySelectorAll(\"[data-controls]\")),[this.firstTrigger]=this.triggers,this.lastTrigger=this.triggers[this.triggers.length-1],this.state=[],this.currentFocusedIndex=null,this.isMultiSelectable=t.isMultiSelectable,this.isCollapsible=t.isCollapsible,this.onFocus=this.onFocus.bind(this),this.onClick=this.onClick.bind(this),this.onKeydown=this.onKeydown.bind(this)}queryFilter(t){const e=[];let i;return t.forEach(t=>{for(i=t.parentNode;i!==this.accordion;){if(i.dataset.component===this.accordion.dataset.component)return;i=i.parentNode}e.push(t)}),e}setState(t){this.state.forEach(e=>{t.currentTarget===e.trigger?this.isCollapsible?e.isExpanded=!e.isExpanded:(e.isDisabled=!0,e.isExpanded=!0):(this.isMultiSelectable||(e.isExpanded=!1),this.isCollapsible||(e.isDisabled=!1))}),this.updateAttributes(t)}onFocus(t){this.state.forEach((e,i)=>{t.target===e.trigger&&(this.currentFocusedIndex=i)})}setFocus(e){e.target.hasAttribute(\"data-controls\")?(e.preventDefault(),e.stopPropagation(),e.which!==t.up&&e.which!==t.pageUp||this.state[this.currentFocusedIndex].prevTrigger.focus(),e.which!==t.down&&e.which!==t.pageDown||this.state[this.currentFocusedIndex].nextTrigger.focus(),e.which===t.home&&this.firstTrigger.focus(),e.which===t.end&&this.lastTrigger.focus()):(e.which!==t.pageUp&&e.which!==t.pageDown||(e.preventDefault(),e.stopPropagation()),e.which===t.pageUp&&this.state[this.currentFocusedIndex].trigger.focus(),e.which===t.pageDown&&this.state[this.currentFocusedIndex].nextTrigger.focus())}addAttributes(){this.accordion.setAttribute(\"role\",\"presentation\"),this.state.forEach(t=>{t.trigger.setAttribute(\"role\",\"button\"),t.trigger.setAttribute(\"tabindex\",0),t.trigger.setAttribute(\"aria-controls\",t.trigger.dataset.controls),t.panel.setAttribute(\"role\",\"region\"),t.panel.setAttribute(\"tabindex\",-1),t.panel.setAttribute(\"aria-labelledby\",t.trigger.id)})}updateAttributes(t){t&&t.preventDefault(),this.state.forEach(t=>{t.trigger.setAttribute(\"aria-expanded\",t.isExpanded),t.trigger.setAttribute(\"aria-disabled\",t.isDisabled),t.panel.setAttribute(\"aria-hidden\",!t.isExpanded)})}removeAttributes(){delete this.accordion.dataset.component,this.accordion.removeAttribute(\"role\"),this.state.forEach(t=>{t.trigger.removeAttribute(\"role\"),t.trigger.removeAttribute(\"tabindex\"),t.trigger.removeAttribute(\"aria-controls\"),t.trigger.removeAttribute(\"aria-expanded\"),t.trigger.removeAttribute(\"aria-disabled\"),t.panel.removeAttribute(\"role\"),t.panel.removeAttribute(\"tabindex\"),t.panel.removeAttribute(\"aria-hidden\"),t.panel.removeAttribute(\"aria-labelledby\")})}onClick(t){this.setState(t)}onKeydown(e){e.which===t.enter&&e.target.hasAttribute(\"data-controls\")&&this.setState(e),e.which===t.space&&e.target.hasAttribute(\"data-controls\")&&this.setState(e),e.which===t.up&&this.setFocus(e),e.which===t.down&&this.setFocus(e),e.which===t.home&&this.setFocus(e),e.which===t.end&&this.setFocus(e),e.which===t.pageUp&&this.setFocus(e),e.which===t.pageDown&&this.setFocus(e)}addEventListeners(t,e){t.addEventListener(\"focus\",this.onFocus),t.addEventListener(\"click\",this.onClick),t.addEventListener(\"keydown\",this.onKeydown),e.addEventListener(\"keydown\",this.onKeydown)}removeEventListeners(t,e){t.removeEventListener(\"focus\",this.onFocus),t.removeEventListener(\"click\",this.onClick),t.removeEventListener(\"keydown\",this.onKeydown),e.removeEventListener(\"keydown\",this.onKeydown)}destroy(){this.state.forEach(t=>{this.removeEventListeners(t.trigger,t.panel)}),this.removeAttributes()}render(){let t,e;this.triggers.forEach((i,s)=>{t=document.getElementById(i.dataset.controls),(e=\"true\"===i.dataset.open)&&(this.currentFocusedIndex=s),this.state.push({trigger:i,prevTrigger:this.triggers[s-1]||this.lastTrigger,nextTrigger:this.triggers[s+1]||this.firstTrigger,panel:t,isExpanded:e,isDisabled:!this.isCollapsible&&e}),this.addEventListeners(i,t)}),this.addAttributes(),this.updateAttributes()}}const i=[];return{render:(t,{isMultiSelectable:s=!0,isCollapsible:r=!0}={})=>{const o=document.getElementById(t),a={accordion:o,isMultiSelectable:s,isCollapsible:r};o.dataset.component=\"accordion\";const n=new e(a);n.render(),i.push(n)},destroy:t=>{i.forEach((e,s)=>{t===e.accordion.id&&(e.destroy(),i.splice(s,1))})},init:()=>{const t={};document.querySelectorAll('[data-component=\"accordion\"]').forEach(i=>{t.accordion=i,t.isMultiSelectable=\"false\"!==i.dataset.multiselectable,t.isCollapsible=\"false\"!==i.dataset.collapsible,new e(t).render()})}}})();export default Accordions;","const Dropdowns=(()=>{const t={escape:27,end:35,home:36,up:38,down:40};class e{constructor(t){this.trigger=t.trigger,this.dropdown=document.getElementById(t.dropdown),this.items=this.dropdown.querySelectorAll(\"[data-item]\"),this.links=this.dropdown.querySelectorAll(\"[data-focus]\"),[this.firstLink]=this.links,this.lastLink=this.links[this.links.length-1],this.state=[],this.currentFocusedIndex=0,this.hover=t.hover,this.isOpen=t.isOpen,this.autoClose=t.autoClose,this.open=this.open.bind(this),this.toggle=this.toggle.bind(this),this.onClick=this.onClick.bind(this),this.onFocus=this.onFocus.bind(this),this.onKeydown=this.onKeydown.bind(this),this.isOpen&&this.open()}onClick(t){this.autoClose||t.target.closest(`#${this.trigger.id}, #${this.dropdown.id}`)||this.close(),this.autoClose&&!t.target.closest(`#${this.trigger.id}`)&&this.close()}onFocus(t){this.state.forEach((e,i)=>{t.target===e.link&&(this.currentFocusedIndex=i)})}setFocus(e){switch(e.preventDefault(),e.target===this.trigger&&(this.currentFocusedIndex=0),e.which){case t.up:this.state[this.currentFocusedIndex].prevLink.focus();break;case t.home:this.firstLink.focus();break;case t.end:this.lastLink.focus();break;case t.down:e.target!==this.trigger?this.state[this.currentFocusedIndex].nextLink.focus():this.firstLink.focus()}}onKeydown(e){switch(e.which){case t.escape:this.close(e);break;case t.up:case t.down:case t.home:case t.end:this.setFocus(e)}}addAttributes(){this.trigger.setAttribute(\"aria-haspopup\",!0),this.trigger.setAttribute(\"aria-controls\",this.trigger.dataset.target),this.dropdown.setAttribute(\"role\",\"menu\"),this.dropdown.setAttribute(\"aria-labelledby\",this.trigger.id),this.dropdown.setAttribute(\"tabindex\",-1),this.dropdown.setAttribute(\"aria-hidden\",!this.isOpen),this.state.forEach(t=>{t.item&&t.item.setAttribute(\"role\",\"none\"),t.link.setAttribute(\"role\",\"menuitem\"),t.link.setAttribute(\"tabindex\",-1)})}removeAttributes(){this.trigger.removeAttribute(\"aria-haspopup\"),this.trigger.removeAttribute(\"aria-controls\"),this.trigger.removeAttribute(\"aria-expanded\"),this.dropdown.removeAttribute(\"role\"),this.dropdown.removeAttribute(\"aria-labelledby\"),this.dropdown.removeAttribute(\"tabindex\"),this.dropdown.removeAttribute(\"aria-hidden\"),this.state.forEach(t=>{t.item&&t.item.removeAttribute(\"role\"),t.link.removeAttribute(\"role\"),t.link.removeAttribute(\"tabindex\")})}addEventListeners(){document.addEventListener(\"click\",this.onClick),this.hover&&document.addEventListener(\"mouseover\",this.onClick),this.trigger.addEventListener(\"keydown\",this.onKeydown),this.dropdown.addEventListener(\"keydown\",this.onKeydown),this.links.forEach(t=>{t.addEventListener(\"focus\",this.onFocus)})}removeEventListeners(){document.removeEventListener(\"click\",this.onClick),this.hover&&document.removeEventListener(\"mouseover\",this.onClick),this.trigger.removeEventListener(\"keydown\",this.onKeydown),this.dropdown.removeEventListener(\"keydown\",this.onKeydown),this.links.forEach(t=>{t.removeEventListener(\"focus\",this.onFocus)})}open(){this.isOpen=!0,this.trigger.setAttribute(\"aria-expanded\",!0),this.dropdown.setAttribute(\"aria-hidden\",!1),this.addEventListeners()}close(t){this.isOpen=!1,this.trigger.setAttribute(\"aria-expanded\",!1),this.dropdown.setAttribute(\"aria-hidden\",!0),this.removeEventListeners(),t&&this.trigger.focus()}toggle(t){t.preventDefault(),this.isOpen=!this.isOpen,this.isOpen?this.open():this.close()}destroy(){this.removeAttributes(),this.removeEventListeners(),this.trigger.removeEventListener(\"click\",this.toggle),this.hover&&this.trigger.removeEventListener(\"mouseover\",this.open)}render(){this.links.forEach((t,e)=>{this.state.push({item:this.items[e],link:t,prevLink:this.links[e-1]||this.lastLink,nextLink:this.links[e+1]||this.firstLink})}),this.addAttributes(),this.trigger.addEventListener(\"click\",this.toggle),this.hover&&this.trigger.addEventListener(\"mouseover\",this.open)}}const i=[];return{render:(t,{isOpen:s=!1,hover:r=!1,autoClose:o=!1}={})=>{const n=document.getElementById(t),h=n.dataset.target,d=new e({trigger:n,dropdown:h,isOpen:s,hover:r,autoClose:o});d.render(),i.push(d)},destroy:t=>{i.forEach((e,s)=>{t===e.trigger.id&&(e.destroy(),i.splice(s,1))})},init:()=>{const t={};document.querySelectorAll('[data-component=\"dropdown\"]').forEach(i=>{t.trigger=i,t.dropdown=i.dataset.target,t.hover=\"true\"===i.dataset.hover,t.isOpen=\"true\"===i.dataset.open,t.autoClose=\"true\"===i.dataset.autoClose,new e(t).render()})}}})();export default Dropdowns;","/* defaults.js\n ========================================================================== */\n\n// Global configuration\nvar config = {\n documentSelector: '.js-document',\n documentDisabledClass: 'is-disabled',\n openingTriggerActiveClass: 'is-active',\n delay: 200,\n};\n\n/* focusableElements.js\n ========================================================================== */\n\n// Keyboard focusable elements\nvar focusableElements = [\n '[href]:not([tabindex^=\"-\"])',\n 'input:not([disabled]):not([type=\"hidden\"]):not([tabindex^=\"-\"]):not([type=\"radio\"])',\n 'input[type=\"radio\"]:checked',\n 'select:not([disabled]):not([tabindex^=\"-\"])',\n 'textarea:not([disabled]):not([tabindex^=\"-\"])',\n 'button:not([disabled]):not([tabindex^=\"-\"])',\n '[tabindex]:not([tabindex^=\"-\"])',\n '[contenteditable=\"true\"]:not([tabindex^=\"-\"])',\n];\n\n/* keyCodes.js\n ========================================================================== */\n\n// Keyboard codes\nvar keyCodes = {\n escape: 'Escape',\n tab: 'Tab',\n f6: 'F6',\n};\n\n/* utils.js\n ========================================================================== */\n\n// Only get visible elements\nfunction getVisibleElements(elements) {\n const visibleElements = [];\n\n elements.forEach((element) => {\n const bounding = element.getBoundingClientRect();\n const isVisible = bounding.width > 0 || bounding.height > 0;\n\n if (isVisible) visibleElements.push(element);\n });\n\n return visibleElements;\n}\n\n// Only get no nested elements\nfunction getNoNestedElements(context, selector, elements) {\n const nestedComponents = context.querySelectorAll(selector);\n const noNestedElements = [];\n let isNested = false;\n\n if (nestedComponents.length === 0) return elements;\n\n elements.forEach((element) => {\n nestedComponents.forEach((nestedComponent) => {\n if (nestedComponent.contains(element)) isNested = true;\n });\n\n if (!isNested) noNestedElements.push(element);\n\n isNested = false;\n });\n\n return noNestedElements;\n}\n\n// Check if the parent elements match the target\nfunction closest(element, target) {\n let currentElement = element;\n\n while (currentElement !== target && currentElement) {\n currentElement = currentElement.parentNode;\n }\n\n return !!currentElement;\n}\n\n/* a11y-dialog-component\n ========================================================================== */\n\n// Use Symbols to create private methods\nconst onClick = Symbol('onClick');\nconst onKeydown = Symbol('onKeydown');\nconst addEventDelegation = Symbol('addEventDelegation');\nconst addEventListeners = Symbol('addEventListeners');\nconst removeEventListeners = Symbol('removeEventListeners');\nconst addAttributes = Symbol('addAttributes');\nconst removeAttributes = Symbol('removeAttributes');\nconst setAttributes = Symbol('setAttributes');\nconst setFocusableElements = Symbol('setFocusableElements');\nconst setFocus = Symbol('setFocus');\nconst restoreFocus = Symbol('restoreFocus');\nconst switchFocus = Symbol('switchFocus');\nconst maintainFocus = Symbol('maintainFocus');\nconst addObserver = Symbol('addObserver');\nconst removeObserver = Symbol('removeObserver');\n\nlet customConfig = config;\n\n// Update the global configuration if needed\nfunction setDefaults({\n documentSelector = customConfig.documentSelector,\n documentDisabledClass = customConfig.documentDisabledClass,\n openingTriggerActiveClass = customConfig.openingTriggerActiveClass,\n delay = customConfig.delay,\n} = {}) {\n customConfig = {\n ...config,\n ...{\n documentSelector,\n documentDisabledClass,\n openingTriggerActiveClass,\n delay,\n },\n };\n}\n\n// Export the default Dialog() class\nclass Dialog {\n constructor(\n dialogSelector,\n {\n onOpen = () => {},\n onClose = () => {},\n openingSelector,\n closingSelector,\n backdropSelector,\n helperSelector,\n labelledby,\n describedby,\n isModal = true,\n isTooltip = false,\n isOpen = false,\n isCreated = true,\n disableScroll = true,\n enableAutoFocus = true,\n openingTriggerActiveClass = customConfig.openingTriggerActiveClass,\n delay = customConfig.delay,\n } = {},\n ) {\n // Check if the dialog exists, if not, set `isInitialized` to false\n if (!document.querySelector(dialogSelector)) {\n this.isInitialized = false;\n return;\n }\n\n // Save the initial configuration\n this.config = {\n dialogSelector,\n onOpen,\n onClose,\n openingSelector,\n closingSelector,\n backdropSelector,\n helperSelector,\n labelledby,\n describedby,\n isModal,\n isTooltip,\n isCreated,\n isOpen,\n disableScroll,\n enableAutoFocus,\n documentSelector: customConfig.documentSelector,\n documentDisabledClass: customConfig.documentDisabledClass,\n openingTriggerActiveClass,\n delay,\n };\n\n this.dialog = document.querySelector(dialogSelector);\n this.dialogArea = `${dialogSelector}, ${openingSelector}`;\n this.openingTriggers = document.querySelectorAll(openingSelector);\n this.backdropTrigger = document.querySelector(backdropSelector);\n this.helpers = document.querySelectorAll(helperSelector);\n\n this.document = document.querySelector(this.config.documentSelector) || document.querySelector('html');\n this.documentIsAlreadyDisabled = false;\n\n this.focusableElements = [];\n this.firstFocusableElement = null;\n this.lastFocusableElement = null;\n this.openingTrigger = null;\n this.closingTrigger = null;\n\n this.isCreated = false;\n this.isOpen = false;\n\n this.close = this.close.bind(this);\n this.toggle = this.toggle.bind(this);\n this[onClick] = this[onClick].bind(this);\n this[onKeydown] = this[onKeydown].bind(this);\n this[addEventDelegation] = this[addEventDelegation].bind(this);\n this[switchFocus] = this[switchFocus].bind(this);\n\n // Add mutation observer to update focusable elements\n this.observer = new MutationObserver((mutations) => mutations.forEach(() => this[setFocusableElements]()));\n\n // initialize the dialog\n this.isInitialized = true;\n\n // Create the dialog\n if (isCreated) this.create();\n }\n\n [onClick](event) {\n if (this.config.isTooltip && !event.target.closest(this.dialogArea)) {\n this.close(event);\n }\n if (event.target === this.backdropTrigger) this.close(event);\n }\n\n [onKeydown](event) {\n switch (event.key) {\n case keyCodes.escape:\n event.stopPropagation();\n this.close(event);\n break;\n case keyCodes.f6:\n if (!this.config.isModal) !this.config.isTooltip ? this[restoreFocus]() : this.close(event);\n break;\n case keyCodes.tab:\n this[maintainFocus](event);\n break;\n }\n }\n\n [addEventDelegation](event) {\n document.querySelectorAll(this.config.openingSelector).forEach((openingTrigger) => {\n if (closest(event.target, openingTrigger)) {\n this.openingTrigger = openingTrigger;\n this.toggle(event);\n }\n });\n\n document.querySelectorAll(this.config.closingSelector).forEach((closingTrigger) => {\n if (closest(event.target, closingTrigger)) {\n this.closingTrigger = closingTrigger;\n this.close();\n }\n });\n }\n\n [addEventListeners]() {\n document.addEventListener('click', this[onClick], { capture: true });\n this.dialog.addEventListener('keydown', this[onKeydown]);\n }\n\n [removeEventListeners]() {\n document.removeEventListener('click', this[onClick], { capture: true });\n this.dialog.removeEventListener('keydown', this[onKeydown]);\n\n if (this.openingTrigger) this.openingTrigger.removeEventListener('keydown', this[switchFocus]);\n }\n\n [addAttributes]() {\n this.dialog.setAttribute('role', 'dialog');\n this.dialog.setAttribute('tabindex', -1);\n this.dialog.setAttribute('aria-hidden', true);\n\n if (this.config.labelledby) this.dialog.setAttribute('aria-labelledby', this.config.labelledby);\n if (this.config.describedby) this.dialog.setAttribute('aria-describedby', this.config.describedby);\n\n if (this.config.isModal) this.dialog.setAttribute('aria-modal', true);\n\n this.openingTriggers.forEach((openingTrigger) => openingTrigger.setAttribute('aria-haspopup', 'dialog'));\n }\n\n [removeAttributes]() {\n this.dialog.removeAttribute('role');\n this.dialog.removeAttribute('tabindex');\n this.dialog.removeAttribute('aria-hidden');\n this.dialog.removeAttribute('aria-labelledby');\n this.dialog.removeAttribute('aria-describedby');\n this.dialog.removeAttribute('aria-modal');\n\n if (this.config.disableScroll && this.isOpen && !this.documentIsAlreadyDisabled) {\n this.document.classList.remove(this.config.documentDisabledClass);\n }\n\n this.openingTriggers.forEach((openingTrigger) => openingTrigger.removeAttribute('aria-haspopup'));\n\n if (this.openingTrigger) this.openingTrigger.classList.remove(this.config.openingTriggerActiveClass);\n\n this.helpers.forEach((helper) => helper.classList.remove(this.config.openingTriggerActiveClass));\n }\n\n [setAttributes]() {\n this.dialog.setAttribute('aria-hidden', !this.isOpen);\n\n if (this.config.disableScroll && !this.documentIsAlreadyDisabled) {\n if (this.isOpen) {\n this.document.classList.add(this.config.documentDisabledClass);\n } else {\n this.document.classList.remove(this.config.documentDisabledClass);\n }\n }\n\n if (this.openingTrigger) {\n if (this.isOpen) {\n this.openingTrigger.classList.add(this.config.openingTriggerActiveClass);\n } else {\n this.openingTrigger.classList.remove(this.config.openingTriggerActiveClass);\n }\n }\n\n this.helpers.forEach((helper) => {\n if (this.isOpen) {\n helper.classList.add(this.config.openingTriggerActiveClass);\n } else {\n helper.classList.remove(this.config.openingTriggerActiveClass);\n }\n });\n }\n\n [setFocusableElements]() {\n const visibleFocusableElements = getVisibleElements(this.dialog.querySelectorAll(focusableElements));\n const filteredFocusableElements = getNoNestedElements(this.dialog, '[role=\"dialog\"]', visibleFocusableElements);\n\n this.focusableElements = filteredFocusableElements.length > 0 ? filteredFocusableElements : [this.dialog];\n [this.firstFocusableElement] = this.focusableElements;\n this.lastFocusableElement = this.focusableElements[this.focusableElements.length - 1];\n }\n\n [setFocus]() {\n if (this.config.enableAutoFocus) window.setTimeout(() => this.firstFocusableElement.focus(), this.config.delay);\n }\n\n [restoreFocus]() {\n if (this.config.enableAutoFocus) window.setTimeout(() => this.openingTrigger.focus(), this.config.delay);\n\n // Switch focus between the current opening trigger and the non-modal dialog\n if (this.isOpen) this.openingTrigger.addEventListener('keydown', this[switchFocus]);\n }\n\n [switchFocus](event) {\n if (event.key === keyCodes.f6) {\n this.openingTrigger.removeEventListener('keydown', this[switchFocus]);\n this[setFocus]();\n }\n }\n\n [maintainFocus](event) {\n if (event.shiftKey && event.target === this.firstFocusableElement) {\n event.preventDefault();\n this.lastFocusableElement.focus();\n }\n\n if (!event.shiftKey && event.target === this.lastFocusableElement) {\n event.preventDefault();\n this.firstFocusableElement.focus();\n }\n }\n\n [addObserver]() {\n this.observer.observe(this.dialog, { childList: true, attributes: true, subtree: true });\n }\n\n [removeObserver]() {\n this.observer.disconnect();\n }\n\n open() {\n if (!this.isInitialized || !this.isCreated || this.isOpen) return;\n\n this.isOpen = true;\n this.documentIsAlreadyDisabled = this.document.classList.contains(this.config.documentDisabledClass);\n\n this[setAttributes]();\n this[addEventListeners]();\n this[setFocus]();\n\n this.config.onOpen(this.dialog, this.openingTrigger);\n }\n\n close(event) {\n if (!this.isInitialized || !this.isCreated || !this.isOpen) return;\n\n this.isOpen = false;\n\n if (event) event.preventDefault();\n\n this[setAttributes]();\n this[removeEventListeners]();\n\n // Restore focus except for tooltip click events\n if (this.openingTrigger && (!this.config.isTooltip || (this.config.isTooltip && event && event.type !== 'click'))) {\n this[restoreFocus]();\n }\n\n this.config.onClose(this.dialog, this.closingTrigger);\n }\n\n toggle(event) {\n if (!this.isInitialized || !this.isCreated) return;\n\n if (event) event.preventDefault();\n\n this.isOpen ? this.close() : this.open();\n }\n\n create() {\n if (!this.isInitialized || this.isCreated) return;\n\n this.isCreated = true;\n\n this[addAttributes]();\n this[setFocusableElements]();\n this[addObserver]();\n\n if (this.config.isOpen) this.open();\n\n document.addEventListener('click', this[addEventDelegation], { capture: true });\n }\n\n destroy() {\n if (!this.isInitialized || !this.isCreated) return;\n\n this.close();\n\n this.isCreated = false;\n\n this[removeAttributes]();\n this[removeEventListeners]();\n this[removeObserver]();\n\n document.removeEventListener('click', this[addEventDelegation], { capture: true });\n }\n}\n\nexport default Dialog;\nexport { setDefaults };\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nimport Accordions from \"a11y-accordion-component\";\nimport Dropdowns from \"a11y-dropdown-component\";\nimport Dialogs from \"a11y-dialog-component\";\nimport { screens } from \"tailwindcss/defaultTheme\";\nconst isScreenSize = (key) => {\n return window.matchMedia(`(min-width: ${screens[key]})`).matches;\n};\nconst createAccordion = (component) => {\n const accordionOptions = {};\n accordionOptions.isMultiSelectable = component.dataset.multiselectable !== \"false\";\n accordionOptions.isCollapsible = component.dataset.collapsible !== \"false\";\n Object.keys(screens).forEach((key) => {\n if (!isScreenSize(key)) {\n return;\n }\n const elementsToOpen = component.querySelectorAll(`[data-controls][data-open-${key}]`);\n elementsToOpen.forEach((elem) => {\n elem.dataset.open = elem.dataset[`open-${key}`.replace(/-([a-z])/g, (str) => str[1].toUpperCase())];\n });\n });\n if (!component.id) {\n component.id = `accordion-${Math.random().toString(36).substring(7)}`;\n }\n Accordions.render(component.id, accordionOptions);\n};\nconst createDropdown = (component) => {\n const dropdownOptions = {};\n dropdownOptions.dropdown = component.dataset.target;\n dropdownOptions.hover = component.dataset.hover === \"true\";\n dropdownOptions.autoClose = component.dataset.autoClose === \"true\";\n const isDisabled = Object.keys(screens).some((key) => {\n if (!isScreenSize(key)) {\n return false;\n }\n return Boolean(component.dataset[`disabled-${key}`.replace(/-([a-z])/g, (str) => str[1].toUpperCase())]);\n });\n if (isDisabled) {\n return;\n }\n dropdownOptions.isOpen = component.dataset.open === \"true\";\n const isOpen = Object.keys(screens).some((key) => {\n if (!isScreenSize(key)) {\n return false;\n }\n return Boolean(component.dataset[`open-${key}`.replace(/-([a-z])/g, (str) => str[1].toUpperCase())]);\n });\n dropdownOptions.isOpen = dropdownOptions.isOpen || isOpen;\n if (!component.id) {\n component.id = `dropdown-${Math.random().toString(36).substring(7)}`;\n }\n const autofocus = component.dataset.autofocus;\n if (autofocus) {\n component.addEventListener(\"click\", () => setTimeout(() => document.getElementById(autofocus).focus(), 0));\n }\n const scrollToMenu = component.dataset.scrollToMenu === \"true\";\n if (scrollToMenu) {\n component.addEventListener(\"click\", (event) => {\n const heightToScroll = component.getBoundingClientRect().top + window.scrollY + document.documentElement.clientTop;\n const isCollapsed = event.target.getAttribute(\"aria-expanded\") === \"false\";\n if (isCollapsed) {\n return;\n }\n window.scrollTo({ top: heightToScroll, behavior: \"smooth\" });\n });\n }\n Dropdowns.render(component.id, dropdownOptions);\n};\nconst createDialog = (component) => {\n const {\n dataset: _a\n } = component, _b = _a, { dialog } = _b, attrs = __objRest(_b, [\"dialog\"]);\n const setFocusOnTitle = (content) => {\n const heading = content.querySelector(\"[id^=dialog-title]\");\n if (heading) {\n heading.setAttribute(\"tabindex\", heading.getAttribute(\"tabindex\") || -1);\n heading.focus();\n }\n };\n const modal = new Dialogs(`[data-dialog=\"${dialog}\"]`, __spreadValues(__spreadValues(__spreadValues({\n openingSelector: `[data-dialog-open=\"${dialog}\"]`,\n closingSelector: `[data-dialog-close=\"${dialog}\"]`,\n backdropSelector: `[data-dialog=\"${dialog}\"]`,\n enableAutoFocus: false,\n onOpen: (params, trigger) => {\n setFocusOnTitle(params);\n window.focusGuard.trap(params, trigger);\n params.dispatchEvent(new CustomEvent(\"open.dialog\"));\n },\n onClose: (params) => {\n window.focusGuard.disable();\n params.dispatchEvent(new CustomEvent(\"close.dialog\"));\n }\n }, Boolean(component.querySelector(`#dialog-title-${dialog}`)) && {\n labelledby: `dialog-title-${dialog}`\n }), Boolean(component.querySelector(`#dialog-desc-${dialog}`)) && {\n describedby: `dialog-desc-${dialog}`\n }), attrs));\n document.body.appendChild(modal.dialog);\n window.Decidim.currentDialogs = __spreadProps(__spreadValues({}, window.Decidim.currentDialogs), { [dialog]: modal });\n document.addEventListener(\"remote-modal:loaded\", () => {\n const heading = modal.dialog.querySelector(`#dialog-title-${dialog}`);\n if (heading) {\n modal.dialog.setAttribute(\"aria-labelledby\", `dialog-title-${dialog}`);\n setFocusOnTitle(modal.dialog);\n }\n if (modal.dialog.querySelector(`#dialog-desc-${dialog}`)) {\n modal.dialog.setAttribute(\"aria-describedby\", `dialog-desc-${dialog}`);\n }\n });\n};\nconst announceForScreenReader = (message, mode = \"assertive\") => {\n if (!message || typeof message !== \"string\" || message.length < 1) {\n return;\n }\n let element = document.getElementById(\"screen-reader-announcement\");\n if (!element) {\n element = document.createElement(\"div\");\n element.setAttribute(\"id\", \"screen-reader-announcement\");\n element.classList.add(\"sr-only\");\n element.setAttribute(\"aria-atomic\", true);\n document.body.append(element);\n }\n if (mode === \"polite\") {\n element.setAttribute(\"aria-live\", mode);\n } else {\n element.setAttribute(\"aria-live\", \"assertive\");\n }\n element.innerHTML = \"\";\n setTimeout(() => {\n const randomIdentifier = `announcement-${(/* @__PURE__ */ new Date()).getUTCMilliseconds()}-${Math.floor(Math.random() * 1e7)}`;\n const announce = document.createElement(\"span\");\n announce.setAttribute(\"data-random\", randomIdentifier);\n announce.textContent = message;\n element.append(announce);\n }, 100);\n};\nexport {\n createAccordion,\n createDialog,\n createDropdown,\n announceForScreenReader,\n Accordions,\n Dialogs,\n Dropdowns\n};\n","const changeLabel = function(input) {\n let submit = input.closest(\"form\").querySelector(\"button[type=submit]\");\n if (submit.querySelector(\"span\") !== null) {\n submit = submit.querySelector(\"span\");\n }\n if (input.checked === true) {\n submit.innerHTML = input.dataset.labelAction;\n } else {\n submit.innerHTML = input.dataset.labelReport;\n }\n};\nexport default function changeReportFormBehavior(container) {\n container.querySelectorAll(\"[data-hide=true]\").forEach((checkbox) => {\n checkbox.addEventListener(\"change\", (event) => {\n changeLabel(event.target);\n });\n });\n container.querySelectorAll(\"[data-block=true]\").forEach((checkbox) => {\n checkbox.addEventListener(\"change\", (event) => {\n changeLabel(event.target);\n let blockAndHide = event.target.closest(\"form\").querySelector(\"#block_and_hide\");\n blockAndHide.classList.toggle(\"invisible\");\n });\n });\n}\n","import \"core-js/stable\";\nimport \"regenerator-runtime/runtime\";\nimport \"jquery\";\nimport \"foundation-sites\";\nimport Rails from \"@rails/ujs\";\nimport svg4everybody from \"svg4everybody\";\nimport morphdom from \"morphdom\";\nimport \"src/decidim/input_tags\";\nimport \"src/decidim/input_hashtags\";\nimport \"src/decidim/input_mentions\";\nimport \"src/decidim/input_multiple_mentions\";\nimport \"src/decidim/input_autojump\";\nimport \"src/decidim/history\";\nimport \"src/decidim/callout\";\nimport \"src/decidim/clipboard\";\nimport \"src/decidim/append_elements\";\nimport \"src/decidim/user_registrations\";\nimport \"src/decidim/account_form\";\nimport \"src/decidim/append_redirect_url_to_modals\";\nimport \"src/decidim/form_attachments\";\nimport \"src/decidim/form_remote\";\nimport \"src/decidim/delayed\";\nimport \"src/decidim/vizzs\";\nimport \"src/decidim/responsive_horizontal_tabs\";\nimport \"src/decidim/security/selfxss_warning\";\nimport \"src/decidim/session_timeouter\";\nimport \"src/decidim/confirm\";\nimport \"src/decidim/results_listing\";\nimport \"src/decidim/impersonation\";\nimport \"src/decidim/gallery\";\nimport \"src/decidim/direct_uploads/upload_field\";\nimport \"src/decidim/data_consent\";\nimport \"src/decidim/abide_form_validator_fixer\";\nimport \"src/decidim/sw\";\nimport \"src/decidim/sticky_header\";\nimport \"src/decidim/attachments\";\nimport formDatePicker from \"src/decidim/datepicker/form_datepicker\";\nimport Configuration from \"src/decidim/configuration\";\nimport ExternalLink from \"src/decidim/external_link\";\nimport updateExternalDomainLinks from \"src/decidim/external_domain_warning\";\nimport scrollToLastChild from \"src/decidim/scroll_to_last_child\";\nimport InputCharacterCounter, { createCharacterCounter } from \"src/decidim/input_character_counter\";\nimport FormValidator from \"src/decidim/form_validator\";\nimport FormFilterComponent from \"src/decidim/form_filter\";\nimport addInputEmoji, { EmojiButton } from \"src/decidim/input_emoji\";\nimport FocusGuard from \"src/decidim/focus_guard\";\nimport backToListLink from \"src/decidim/back_to_list\";\nimport markAsReadNotifications from \"src/decidim/notifications\";\nimport handleNotificationActions from \"src/decidim/notifications_actions\";\nimport RemoteModal from \"src/decidim/remote_modal\";\nimport selectActiveIdentity from \"src/decidim/identity_selector_dialog\";\nimport createTooltip from \"src/decidim/tooltips\";\nimport createToggle from \"src/decidim/toggle\";\nimport {\n createAccordion,\n createDialog,\n createDropdown,\n announceForScreenReader,\n Dialogs\n} from \"src/decidim/a11y\";\nimport changeReportFormBehavior from \"src/decidim/change_report_form_behavior\";\nwindow.Decidim = window.Decidim || {\n config: new Configuration(),\n ExternalLink,\n InputCharacterCounter,\n FormValidator,\n addInputEmoji,\n EmojiButton,\n Dialogs,\n announceForScreenReader\n};\nwindow.morphdom = morphdom;\nwindow.initFoundation = (element) => {\n $(element).foundation();\n const $document = $(document);\n $document.off(\"click.zf.trigger\", window.Foundation.Triggers.Listeners.Basic.openListener);\n $document.on(\"click.zf.trigger\", \"[data-open]\", (ev, ...restArgs) => {\n var _a;\n const accordion = (_a = ev.currentTarget) == null ? void 0 : _a.closest(\"[data-component='accordion']\");\n if (accordion) {\n return;\n }\n Reflect.apply(window.Foundation.Triggers.Listeners.Basic.openListener, ev.currentTarget, [ev, ...restArgs]);\n });\n};\nRails.start();\nconst initializer = (element = document) => {\n window.focusGuard = window.focusGuard || new FocusGuard(document.body);\n window.initFoundation(element);\n svg4everybody();\n element.querySelectorAll('input[type=\"datetime-local\"],input[type=\"date\"]').forEach((elem) => formDatePicker(elem));\n element.querySelectorAll(\".editor-container\").forEach((container) => window.createEditor(container));\n $(\"input[type='text'], textarea, .editor>input[type='hidden']\", element).each((_i, elem) => {\n const $input = $(elem);\n if (!$input.is(\"[minlength]\") && !$input.is(\"[maxlength]\")) {\n return;\n }\n createCharacterCounter($input);\n });\n $(\"form.new_filter\", element).each(function() {\n const formFilter = new FormFilterComponent($(this));\n formFilter.mountComponent();\n });\n element.querySelectorAll('a[target=\"_blank\"]:not([data-external-link=\"false\"])').forEach((elem) => {\n updateExternalDomainLinks(elem);\n return new ExternalLink(elem);\n });\n addInputEmoji(element);\n backToListLink(element.querySelectorAll(\".js-back-to-list\"));\n markAsReadNotifications(element);\n handleNotificationActions(element);\n scrollToLastChild(element);\n element.querySelectorAll('[data-component=\"accordion\"]').forEach((component) => createAccordion(component));\n element.querySelectorAll('[data-component=\"dropdown\"]').forEach((component) => createDropdown(component));\n element.querySelectorAll(\"[data-dialog]\").forEach((component) => createDialog(component));\n element.querySelectorAll(\"[data-dialog-remote-url]\").forEach((elem) => new RemoteModal(elem));\n element.querySelectorAll(\"[data-user-identity]\").forEach((elem) => selectActiveIdentity(elem));\n element.querySelectorAll(\"[data-tooltip]\").forEach((elem) => createTooltip(elem));\n element.querySelectorAll(\"[data-toggle]\").forEach((elem) => createToggle(elem));\n element.querySelectorAll(\".new_report\").forEach((elem) => changeReportFormBehavior(elem));\n};\n$(() => initializer());\ndocument.addEventListener(\"remote-modal:loaded\", ({ detail }) => initializer(detail));\ndocument.addEventListener(\"ajax:loaded\", ({ detail }) => initializer(detail));\ndocument.addEventListener(\"comments:loaded\", (event) => {\n const commentsIds = event.detail.commentsIds;\n if (commentsIds) {\n commentsIds.forEach((commentId) => {\n const commentsContainer = document.getElementById(`comment_${commentId}`);\n if (commentsContainer) {\n initializer(commentsContainer);\n }\n });\n }\n});\n","import \"src/decidim/index\";\nimport \"src/decidim/decidim_application\";\nimport \"entrypoints/decidim_core.scss\";\nrequire.context(\"../images\", true);\n"],"names":["webpackEmptyContext","req","e","module","context","Rails","nonce","ref","expando","m","element","selector","key","value","$","csrfParam","csrfToken","meta","xhr","token","param","input","CustomEvent","fire","matches","preventDefault","event","params","evt","result","obj","name","data","eventType","handler","target","AcceptHeaders","CSRFProtection","createXHR","cspNonce","prepareOptions","processResponse","options","response","done","type","parser","script","error","url","originAnchor","urlAnchor","toArray","additionalParam","inputs","option","form","el","allowAction","stopEverything","message","answer","callback","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","formElements","getData","isXhrRedirect","setData","replacement","originalText","formContent","href","link","method","ajax","isCrossDomain","isRemote","serializeElement","slice","button","dataType","withCredentials","args","insignificantMetaClick","metaClick","nonPrimaryMouseClick","delegate","disableElement","enableElement","formSubmitButtonClick","handleConfirm","handleDisabledElement","handleMethod","handleRemote","loadCSPNonce","preventInsignificantClick","refreshCSRFTokens","originalOptions","t","n","r","i","s","o","u","a","c","l","f","p","d","h","b","y","v","g","w","O","A","L","j","S","T","E","x","$self","att","$parent","parent","attval","$set","isHidden","elem","appendToVisibleContainer","found","M","D","_","k","AbideFormValidatorFixer","_a","errorElement","removeUrlParameter","parameter","urlParts","urlBase","queryString","prefix","parts","index","redirectUrl","querystring","getFileButton","container","getLinkButton","getLinkInput","getUploadsContainer","hasUploads","updateTabsState","fileButton","linkButton","linkInput","uploadsContainer","disableFileButton","disableLinkButton","initializeTabs","mutationsList","mutation","$callout","$inputs","DELETE_KEY_CODE","next","prev","$responsiveTabBlock","allMessages","messages","__async","__this","__arguments","generator","resolve","reject","fulfilled","step","rejected","visitedPages","DELAYED_VISITS","deferredPrompt","shouldCountVisitedPages","shouldPrompt","outcome","mandatoryElements","isOperaMini","GRANTED_PERMISSION","hideReminder","subscribeToNotifications","registration","permission","vapidElement","vapidPublicKeyElement","subscription","unsubscribeFromNotifications","auth","setToggleState","toggle","currentSubscription","toggleChecked","_0","define2","module2","exports2","i2","r2","n2","require2","module3","exports3","_TributeEvents","_interopRequireDefault","_TributeMenuEvents","_TributeRange","_TributeSearch","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_arr","_n","_d","_e","_i","_s","err","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","Tribute","Tribute2","_ref","_this","_ref$values","values","_ref$iframe","iframe","_ref$selectClass","selectClass","_ref$trigger","trigger","_ref$autocompleteMode","autocompleteMode","_ref$selectTemplate","selectTemplate","_ref$menuItemTemplate","menuItemTemplate","_ref$lookup","lookup","_ref$fillAttr","fillAttr","_ref$collection","collection","_ref$menuContainer","menuContainer","_ref$noMatchTemplate","noMatchTemplate","_ref$requireLeadingSp","requireLeadingSpace","_ref$allowSpaces","allowSpaces","_ref$replaceTextSuffi","replaceTextSuffix","_ref$positionMenu","positionMenu","_ref$spaceSelectsMatc","spaceSelectsMatch","_ref$searchOpts","searchOpts","_ref$menuItemLimit","menuItemLimit","item","config","length","wrapper","ul","scrollTo","_this2","processValues","items","noMatchEvent","fragment","li","_this2$_findLiTarget","_this2$_findLiTarget2","li2","index2","collectionIndex","range","sel","textRange","text","html","textNode","textarea","scrollPos","caretPos","front","back","originalEvent","content","newValues","replace","_this3","matchItem","_default","TributeEvents","TributeEvents2","tribute","keyCode","trigger2","eventKeyPressed","_char","info","collectionItem","count","selected","lis","liClientRect","menuClientRect","scrollDistance","_scrollDistance","includeMargin","height","style","TributeMenuEvents","TributeMenuEvents2","menu","func","wait","immediate","_arguments","timeout","later","callNow","TributeRange","TributeRange2","coordinates","menuDimensions","menuIsOffScreen","menuIsOffScreenHorizontally","menuIsOffScreenVertically","targetElement","path","offset","hasTrailingSpace","replaceEvent","_textSuffix","myField","textSuffix","startPos","endPos","frag","node","lastNode","ctx","ce","selectedElem","workingNodeContent","selectStartOffset","textComponent","wordsArray","worldsCount","menuAlreadyActive","isAutocomplete","selectionInfo","effectiveRange","lastWordOfEffectiveRange","mostRecentTriggerCharPos","triggerChar","idx","currentTriggerSnippet","firstSnippetChar","leadingSpace","regex","str","reversedStr","cidx","len","firstChar","match","windowWidth","windowHeight","doc","windowLeft","windowTop","menuTop","menuRight","menuBottom","menuLeft","dimensions","position","flipped","properties","isFirefox","div","computed","prop","span","rect","top","left","parentHeight","parentRect","scrollStillAvailable","selectedNodePosition","markerTextChar","markerEl","markerId","prevRange","reasonableBuffer","clientRect","maxScrollDisplacement","elemTop","elemBottom","maxY","targetY","TributeSearch","TributeSearch2","pattern","array","string","opts","patternIdx","totalScore","currScore","pre","post","compareString","ch","compareChar","patternCache","stringIndex","patternIndex","best","temp","score","indices","rendered","arr2","compare","_Tribute","predicate","list","thisArg","CustomEvent2","___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GET_GLOBAL_THIS___","___EXPOSE_LOADER_GLOBAL_THIS___","runtime","exports","Op","hasOwn","defineProperty","desc","undefined","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","define","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","Context","makeInvokeMethod","tryCatch","fn","arg","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","prototype","genFun","ctor","AsyncIterator","PromiseImpl","invoke","record","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","iter","state","doneResult","delegateResult","maybeInvokeDelegate","methodName","pushTryEntry","locs","entry","resetTryEntry","val","object","keys","iterable","iteratorMethod","skipTempReset","rootEntry","rootRecord","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","afterLoc","finallyLoc","tryLoc","thrown","resultName","nextLoc","accidentalStrictMode","select","selectedText","isReadOnly","selection","root","factory","embed","svg","viewBox","clone","loadreadystatechange","cachedDocument","svg4everybody","rawopts","oninterval","uses","use","getSVGAncestor","src","polyfill","srcSplit","id","requests","numberOfSvgUseElementsToBypass","requestAnimationFrame","newerIEUA","webkitUA","olderEdgeUA","edgeUA","inIframe","defaultTheme","_cloneDeep","_configfull","_interop_require_default","cloneDeep","child","theme","colors","breakpoints","forEvents","events","MicroEvent","fct","event_array","MicroPlugin","Interface","plugins","queue","plugin","arrayToPattern","chars","maxValueLength","sequencePattern","hasDuplicates","prev_char_count","prev_pattern","char","setToPattern","escape_regex","longest","unicodeLength","allSubstrings","start","subresult","tmp","code_points","accent_pat","unicode_map","multi_char_reg","max_char_length","latin_convert","latin_condensed","latin","unicode","convert_pat","initialize","_code_points","generateMap","normalize","asciifold","_asciifold","code_point_min","code_point_max","composed","folded","generateSets","unicode_sets","addMatching","to_add","folded_set","patt","multi_char","set","multi_char_patt","mapSequence","strings","min_replacement","chars_replaced","substringsToPattern","sub_pat","sequencesToPattern","sequences","all","sequence","seq","inSequences","needle_seq","needle_parts","filter","part","needle_part","Sequence","last_piece","last_part","last_substr","clone_last_len","getPattern","match_str","overlapping","added_types","new_seq","old_seq","getAttr","getAttrNesting","names","scoreValue","weight","pos","propToArray","iterate$1","cmp","Sifter","settings","query","respect_word_boundaries","weights","tokens","words","field_regex","word","field_match","field","search","token_count","fields","field_count","getAttrFn","scoreObject","sum","implicit_score","sort_flds","sort","get_field","fld","sort_fld","optsUser","fn_score","fn_sort","iterate","getDom","isHtmlString","tpl","escapeQuery","triggerEvent","dom_el","event_name","applyCSS","css","addClasses","elmts","classes","norm_classes","classesArray","castAsArray","cls","removeClasses","_classes","parentMatch","getTail","direction","isEmptyObject","nodeIndex","amongst","setAttr","attrs","attr","replaceNode","existing","highlight","highlightText","spannode","middlebit","middleclone","highlightChildren","highlightRecursive","removeHighlight","elements","KEY_A","KEY_RETURN","KEY_ESC","KEY_LEFT","KEY_UP","KEY_RIGHT","KEY_DOWN","KEY_BACKSPACE","KEY_DELETE","KEY_TAB","KEY_SHORTCUT","defaults","hash_key","get_hash","escape_html","loadDebounce","delay","debounce_events","types","event_args","getSelection","stop","addEvent","isKeyDown","key_name","getId","existing_id","addSlashes","append","getSettings","settings_user","attr_data","field_label","field_value","field_disabled","field_optgroup","field_optgroup_label","field_optgroup_value","tag_name","placeholder","settings_element","init_select","tagName","optionsMap","group_count","readData","json","addOption","group","option_data","addGroup","optgroup","optgroup_data","init_textbox","data_raw","opt","instance_i","TomSelect","input_arg","user_settings","dir","computedStyle","control","dropdown","dropdown_content","inputMode","control_input","focus_node","passive_event","listboxId","control_id","label","label_click","label_id","classes_plugins","target_match","doc_mousedown","win_scroll","optgroups","templates","escape","callbacks","get_settings","pastedText","splitInput","piece","character","wasFocused","deactivate","classList","changed","silent","eventName","begin","end","swap","last","last_active","scroll","behavior","height_menu","scrollTop","height_item","activeItems","calculateScore","hashed","triggerDropdown","has_create_option","active_group","create","groups","groups_order","same_query","results","active_option","show_dropdown","opt_value","opt_hash","option_el","group_fragment","grp_a","grp_b","a_order","b_order","group_heading","group_options","header","group_html","tok","add_template","template","active_index","user_created","dat","hashed_id","item_new","index_item","value_old","value_new","data_old","option_new","boundFilter","last_item","wasFull","caret","output","created","isFull","isLocked","wrap_classList","empty_option","AddSelected","has_selected","reuse_opt","setTextboxValue","tail","rm_items","rm_item","adjacent","new_pos","revertSettings","templateName","when","new_fn","orig_method","result_new","caret_position","dropdown_input","orig_onBlur","no_backspace_delete","orig_deleteSelection","remove_button","userOptions","orig_render_item","close_button","restore_on_backspace","NAMESPACE","scopeId","isSvgMode","queuePending","createTime","fnName","uniqueTime","measureText","HYDRATED_CSS","EMPTY_OBJ","SVG_NS","HTML_NS","isDef","isComplexType","nodeName","vnodeData","children","simple","lastSimple","vNodeChildren","walk","newVNode","classData","vdomFnUtils","vnode","tag","Host","isHost","cb","convertToPublic","convertToPrivate","parsePropertyValue","propValue","propType","getElement","getHostRef","createEvent","flags","elm","detail","emitEvent","ev","plt","rootAppliedStyles","registerStyle","cssText","allowCS","styles","supportsConstructableStylesheets","addStyle","styleContainerNode","cmpMeta","mode","hostElm","getScopeId","appliedStyles","styleElm","attachStyles","hostRef","endAttachStyles","setAccessor","memberName","oldValue","newValue","isSvg","isProp","isMemberInElement","ln","oldClasses","parseClassList","newClasses","win","isComplex","parseClassListRegex","updateElement","oldVnode","newVnode","oldVnodeAttrs","newVnodeAttrs","createElm","oldParentVNode","newParentVNode","childIndex","parentElm","childNode","addVnodes","before","parentVNode","vnodes","startIdx","endIdx","containerElm","removeVnodes","updateChildren","oldCh","newCh","oldStartIdx","newStartIdx","idxInOld","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","elmToMove","isSameVnode","patch","leftVNode","rightVNode","oldVNode","oldChildren","newChildren","renderVdom","renderFnResults","rootVnode","attachToAncestor","ancestorComponent","scheduleUpdate","isInitialLoad","writeTask","dispatchHooks","endSchedule","promise","safeCall","then","updateComponent","endUpdate","rc","endRender","callRender","childrenPromises","postUpdate","postUpdateComponent","consoleError","endPostUpdate","addHydratedFlag","appDidLoad","nextTick","who","thenFn","getValue","propName","setValue","newVal","oldVal","areBothNaN","didValueChange","watchMethods","watchMethodName","proxyComponent","Cstr","members","memberFlags","attrNameToPropName","attrName","_oldValue","initializeComponent","hmrVersionId","loadModule","endLoad","endNewInstance","endRegisterStyles","schedule","connectedCallback","endConnected","disconnectedCallback","bootstrapLazy","lazyBundles","endBootstrap","cmpTags","exclude","customElements","head","metaCharset","visibilityStyle","deferredConnectedCallbacks","appLoadFallback","isBootstrapping","lazyBundle","compactMeta","HostElement","registerHost","host","hostRefs","registerInstance","lazyInstance","cmpModules","exportName","bundleId","importedModule","listener","promiseResolve","queueDomReads","queueDomWrites","queueTask","write","flush","consume","map","webpackAsyncContext","__webpack_require__","ids","webpackContext","webpackContextResolve","isCallable","tryToString","$TypeError","argument","isConstructor","$String","wellKnownSymbol","UNSCOPABLES","ArrayPrototype","charAt","isPrototypeOf","it","Prototype","isObject","fails","buffer","NATIVE_ARRAY_BUFFER","DESCRIPTORS","global","classof","createNonEnumerableProperty","defineBuiltIn","defineBuiltInAccessor","getPrototypeOf","setPrototypeOf","uid","InternalStateModule","enforceInternalState","getInternalState","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","TypeError","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","TYPED_ARRAY_TAG_REQUIRED","NAME","TypedArrayConstructorsList","BigIntArrayConstructorsList","isView","klass","getTypedArrayConstructor","proto","isTypedArray","aTypedArray","aTypedArrayConstructor","C","exportTypedArrayMethod","KEY","property","forced","ARRAY","TypedArrayConstructor","error2","exportTypedArrayStaticMethod","uncurryThis","FunctionName","defineBuiltIns","anInstance","toIntegerOrInfinity","toLength","toIndex","fround","IEEE754","getOwnPropertyNames","arrayFill","arraySlice","setToStringTag","PROPER_FUNCTION_NAME","CONFIGURABLE_FUNCTION_NAME","ARRAY_BUFFER","DATA_VIEW","PROTOTYPE","WRONG_LENGTH","WRONG_INDEX","getInternalArrayBufferState","getInternalDataViewState","setInternalState","NativeArrayBuffer","$ArrayBuffer","ArrayBufferPrototype","$DataView","DataViewPrototype","Array","RangeError","fill","reverse","packIEEE754","unpackIEEE754","packInt8","number","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","addGetter","get","view","isLittleEndian","store","intIndex","boolIsLittleEndian","bytes","pack","conversion","byteLength","byteOffset","bufferState","bufferLength","INCORRECT_ARRAY_BUFFER_NAME","testView","$setInt8","toObject","toAbsoluteIndex","lengthOfArrayLike","deletePropertyOrThrow","min","to","from","inc","argumentsLength","$forEach","arrayMethodIsStrict","STRICT_METHOD","callbackfn","bind","call","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIterator","getIteratorMethod","$Array","arrayLike","IS_CONSTRUCTOR","mapfn","mapping","iterator","toIndexedObject","createMethod","IS_INCLUDES","$this","fromIndex","IndexedObject","TYPE","IS_FIND_LAST_INDEX","that","boundFunction","arraySpeciesCreate","push","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","specificCreate","apply","$lastIndexOf","NEGATIVE_ZERO","FORCED","searchElement","V8_VERSION","SPECIES","METHOD_NAME","constructor","aCallable","IS_RIGHT","memo","isArray","getOwnPropertyDescriptor","SILENT_ON_NON_WRITABLE_LENGTH_SET","max","fin","floor","mergeSort","comparefn","middle","insertionSort","merge","right","llength","rlength","lindex","rindex","originalArray","arraySpeciesConstructor","$RangeError","relativeIndex","actualIndex","itoc","ctoi","anObject","iteratorClose","ENTRIES","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","exec","SKIP_CLOSING","ITERATION_SUPPORT","toString","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","$Object","CORRECT_ARGUMENTS","tryGet","isNullOrUndefined","defineIterator","createIterResultObject","setSpecies","fastKey","internalStateGetterFor","CONSTRUCTOR_NAME","ADDER","getEntry","previous","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","getWeakData","ArrayIterationModule","find","findIndex","splice","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","isForced","InternalMetadataModule","checkCorrectnessOfIteration","inheritIfRequired","common","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","uncurriedNativeMethod","REPLACE","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","source","exceptions","MATCH","regexp","error1","F","requireObjectCoercible","quot","attribute","p1","createPropertyDescriptor","bitmap","toPropertyKey","propertyKey","padStart","$isFinite","abs","DatePrototype","nativeDateToISOString","thisTimeValue","getUTCDate","getUTCFullYear","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds","date","year","milliseconds","sign","ordinaryToPrimitive","hint","makeBuiltIn","defineGlobalProperty","P","tryNodeRequire","PROPER_STRUCTURED_CLONE_TRANSFER","structuredClone","$MessageChannel","detach","WorkerThreads","channel","$detach","transferable","documentAll","IS_HTMLDDA","document","EXISTS","MAX_SAFE_INTEGER","documentCreateElement","DOMTokenListPrototype","userAgent","firefox","IS_DENO","IS_NODE","UA","process","Deno","versions","v8","version","webkit","$Error","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","stack","dropEntries","clearErrorStack","ERROR_STACK_INSTALLABLE","captureStackTrace","normalizeStringArgument","nativeErrorToString","INCORRECT_TO_STRING","copyConstructorProperties","TARGET","GLOBAL","STATIC","targetProperty","sourceProperty","regexpExec","RegExpPrototype","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","re","uncurriedNativeRegExpMethod","methods","nativeMethod","arg2","forceStringMethod","$exec","doesNotExceedSafeInteger","flattenIntoArray","original","sourceLen","depth","mapper","targetIndex","sourceIndex","mapFn","elementLen","NATIVE_BIND","FunctionPrototype","test","$Function","concat","join","factories","construct","argsLength","partArgs","getDescriptor","PROPER","CONFIGURABLE","uncurryThisWithBind","CONSTRUCTOR","METHOD","aFunction","namespace","getMethod","Iterators","usingIterator","replacer","rawLength","keysLength","V","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","captures","namedCaptures","tailPos","symbols","capture","check","hasOwnProperty","getBuiltIn","createElement","pow","log","LN2","mantissaLength","exponentLength","eMax","eBias","rt","exponent","mantissa","unpack","nBits","split","Wrapper","NewTarget","NewTargetPrototype","functionToString","hiddenKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","isExtensible","FREEZING","REQUIRED","METADATA","setMetadata","onFreeze","enable","NATIVE_WEAK_MAP","shared","sharedKey","OBJECT_ALREADY_INITIALIZED","WeakMap","has","enforce","getterFor","metadata","STATE","$documentAll","inspectSource","noop","empty","constructorRegExp","isConstructorModern","isConstructorLegacy","feature","detection","POLYFILL","NATIVE","isRegExp","USE_SYMBOL_AS_UID","ITERATOR_INSTEAD_OF_RECORD","Result","stopped","ResultPrototype","unboundFunction","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","iterFn","condition","callFn","innerResult","innerError","returnThis","IteratorConstructor","ENUMERABLE_NEXT","IS_PURE","createIteratorConstructor","IteratorsCore","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","CurrentIteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","CONFIGURABLE_LENGTH","TEMPLATE","MapPrototype","$expm1","exp","EPSILON","INVERSE_EPSILON","roundTiesToEven","FLOAT_EPSILON","FLOAT_MAX_VALUE","FLOAT_MIN_VALUE","absolute","floatRound","FLOAT32_EPSILON","FLOAT32_MAX_VALUE","FLOAT32_MIN_VALUE","LOG10E","ceil","macrotask","Queue","IS_IOS","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","MutationObserver","Promise","queueMicrotaskDescriptor","microtask","notify","PromiseCapability","$$resolve","$$reject","$default","globalIsFinite","trim","whitespaces","$parseFloat","Symbol","trimmedString","$parseInt","hex","radix","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","$assign","B","symbol","alphabet","chr","getOwnPropertySymbols","propertyIsEnumerable","definePropertiesModule","enumBugKeys","GT","LT","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","activeXDocument","NullProtoObjectViaIFrame","JS","iframeDocument","NullProtoObject","Properties","V8_PROTOTYPE_DEFINE_BUG","IE8_DOM_DEFINE","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","current","$getOwnPropertyNames","windowNames","getWindowNames","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","ARRAY_BUFFER_NON_EXTENSIBLE","$isExtensible","FAILS_ON_PRIMITIVES","indexOf","$propertyIsEnumerable","NASHORN_BUG","WEBKIT","uncurryThisAccessor","aPossiblePrototype","CORRECT_SETTER","setter","objectGetPrototypeOf","IE_BUG","TO_ENTRIES","IE_WORKAROUND","pref","NativePromiseConstructor","IS_BROWSER","NativePromisePrototype","SUBCLASSING","NATIVE_PROMISE_REJECTION_EVENT","FORCED_PROMISE_CONSTRUCTOR","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","newPromiseCapability","promiseCapability","Target","Source","R","regexpFlags","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeReplace","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","re1","re2","UNSUPPORTED_Y","NPCG_INCLUDED","PATCH","raw","reCopy","lastIndex","sticky","charsAdded","strCopy","regExpFlags","$RegExp","MISSED_STICKY","BROKEN_CARET","ENGINE_IS_BUN","USER_AGENT","validateArgumentsLength","Function","WRAP","scheduler","hasTimeArg","firstParamIndex","boundArgs","SetPrototype","iterateSimple","SetHelpers","Set","forEach","interruptible","TAG","SHARED","aConstructor","defaultConstructor","charCodeAt","CONVERT_TO_STRING","size","first","second","$repeat","repeat","IS_END","maxLength","fillString","intMaxLength","stringLength","fillStr","fillLen","stringFiller","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexNonASCII","regexSeparators","OVERFLOW_ERROR","baseMinusTMin","fromCharCode","toLowerCase","ucs2decode","counter","extra","digitToBasic","digit","adapt","delta","numPoints","firstTime","encode","inputLength","bias","currentValue","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","baseMinusT","encoded","labels","$trimEnd","forcedStringTrimMethod","non","$trimStart","ltrim","rtrim","V8","SymbolPrototype","valueOf","TO_PRIMITIVE","NATIVE_SYMBOL","clear","Dispatch","MessageChannel","String","ONREADYSTATECHANGE","$location","defer","port","run","runner","eventListener","globalPostMessageDefer","integer","toPrimitive","prim","trunc","toPositiveInteger","BYTES","isSymbol","exoticToPrim","round","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","isIntegralNumber","toOffset","toUint8Clamped","typedArrayFrom","nativeDefineProperty","nativeGetOwnPropertyDescriptor","ArrayBuffer","DataView","BYTES_PER_ELEMENT","fromList","isArrayBuffer","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","getter","addElement","typedArrayOffset","$length","$len","arrayFromConstructorAndList","typedArraySpeciesConstructor","isBigIntArray","toBigInt","thisIsBigIntArray","speciesConstructor","postfix","params2","passed","required","wrappedWellKnownSymbolModule","WellKnownSymbolsStore","createWellKnownSymbol","proxyAccessor","installErrorCause","installErrorStack","FULL_NAME","IS_AGGREGATE_ERROR","STACK_TRACE_LIMIT","OPTIONS_POSITION","ERROR_NAME","OriginalError","OriginalErrorPrototype","BaseError","WrappedError","wrapErrorConstructorWithCause","AGGREGATE_ERROR","$AggregateError","init","errors","isInstance","AggregateErrorPrototype","errorsArray","arrayBufferModule","nativeArrayBufferSlice","getUint8","setUint8","INCORRECT_SLICE","viewSource","viewTarget","addToUnscopables","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","isConcatSpreadable","spreadable","copyWithin","$every","$filter","HAS_SPECIES_SUPPORT","$findIndex","FIND_INDEX","SKIPS_HOLES","$findLastIndex","$findLast","$find","FIND","depthArg","INCORRECT_ITERATION","$includes","BROKEN_ON_SPARSE","$indexOf","nativeIndexOf","ARRAY_ITERATOR","nativeJoin","ES3_STRINGS","separator","lastIndexOf","$map","ISNT_GENERIC","setArrayLength","INCORRECT_TO_LENGTH","properErrorOnNonWritableLength","argCount","$reduceRight","CHROME_VERSION","CHROME_BUG","$reduce","nativeReverse","nativeSlice","$some","internalSort","FF","IE_OR_EDGE","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","code","getSortCompare","arrayLength","itemsLength","deleteCount","actualStart","insertCount","actualDeleteCount","arrayToReversed","getBuiltInPrototypeMethod","compareFn","newLen","INCORRECT_RESULT","arrayWith","getFullYear","$Date","setFullYear","yi","yyyy","toISOString","pv","dateToPrimitive","INVALID_DATE","TO_STRING","nativeDateToString","WEB_ASSEMBLY","WebAssembly","exportGlobalErrorCauseWrapper","exportWebAssemblyErrorCauseWrapper","errorToString","ErrorPrototype","numberToString","toUpperCase","HAS_INSTANCE","FUNCTION_NAME_EXISTS","nameRE","regExpExec","getReplacerFunction","$stringify","tester","low","hi","WRONG_SYMBOLS_CONVERSION","ILL_FORMED_UNICODE","stringifyWithSymbolsFix","$replacer","fixIllFormed","space","collectionStrong","log1p","$acosh","sqrt","$asinh","asinh","$atanh","LOG2E","expm1","$cosh","$hypot","value1","value2","aLen","larg","$imul","UINT16","xn","yn","xl","yl","log10","thisNumberValue","NUMBER","NativeNumber","PureNumberNamespace","NumberPrototype","toNumeric","primValue","toNumber","third","maxCode","digits","calledWithNew","NumberWrapper","numberIsFinite","parseFloat","parseInt","nativeToExponential","ROUNDS_PROPERLY","throwsOnInfinityFraction","properNonFiniteThisCheck","fractionDigits","nativeToFixed","acc","x2","multiply","c2","divide","dataToString","fractDigits","z","nativeToPrecision","precision","assign","defineProperties","$entries","$freeze","$getOwnPropertySymbols","nativeGetPrototypeOf","$isFrozen","$isSealed","is","nativeKeys","$preventExtensions","PROTO","$seal","$values","newPromiseCapabilityModule","perform","PROMISE_STATICS_INCORRECT_ITERATION","capability","remaining","alreadyCalled","$promiseResolve","PROMISE_ANY_ERROR","AggregateError","alreadyResolved","alreadyRejected","onRejected","task","hostReportErrors","PromiseConstructorDetection","PROMISE","NATIVE_PROMISE_SUBCLASSING","getInternalPromiseState","PromiseConstructor","PromisePrototype","newGenericPromiseCapability","DISPATCH_EVENT","UNHANDLED_REJECTION","REJECTION_HANDLED","PENDING","FULFILLED","REJECTED","HANDLED","UNHANDLED","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","isThenable","callReaction","reaction","ok","domain","exited","onHandleUnhandled","isReject","reactions","onUnhandled","dispatchEvent","reason","IS_UNHANDLED","isUnhandled","unwrap","internalReject","internalResolve","executor","onFulfilled","NON_GENERIC","onFinally","isFunction","PromiseConstructorWrapper","CHECK_WRAPPER","functionApply","OPTIONAL_ARGUMENTS_LIST","thisArgument","argumentsList","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","newTarget","$args","ERROR_INSTEAD_OF_FALSE","attributes","isDataDescriptor","receiver","objectPreventExtensions","objectSetPrototypeOf","ownDescriptor","existingDescriptor","MS_EDGE_BUG","getRegExpFlags","NativeRegExp","SyntaxError","stringIndexOf","IS_NCG","CORRECT_NEW","BASE_FORCED","handleDotAll","brackets","handleNCG","named","ncg","groupid","groupname","RegExpWrapper","thisIsRegExp","patternIsRegExp","flagsAreUndefined","rawPattern","rawFlags","dotAll","handled","RegExp","INDICES_SUPPORT","calls","expected","pairs","nativeTest","$toString","nativeToString","NOT_GENERIC","INCORRECT_NAME","createHTML","forcedStringHTMLMethod","codeAt","notARegExp","correctIsRegExpLogic","nativeEndsWith","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","searchString","endPosition","color","$fromCodePoint","INCORRECT_LENGTH","charCode","STRING_ITERATOR","point","advanceStringIndex","MATCH_ALL","REGEXP_STRING","REGEXP_STRING_ITERATOR","nativeMatchAll","WORKS_WITH_NON_GLOBAL_REGEX","$RegExpStringIterator","$global","fullUnicode","$matchAll","matcher","rx","fixRegExpWellKnownSymbolLogic","nativeMatch","maybeCallNative","res","matchStr","$padEnd","WEBKIT_BUG","$padStart","rawTemplate","literalSegments","getSubstitution","searchValue","replaceValue","IS_REG_EXP","functionalReplace","searchLength","advanceBy","endOfLastMatch","maybeToString","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_SUPPORTS_NAMED_GROUPS","UNSAFE_SUBSTITUTE","accumulatedResult","nextSourcePosition","replacerArgs","sameValue","SEARCH","nativeSearch","searcher","previousLastIndex","callRegExpExec","MAX_UINT32","$push","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SPLIT","nativeSplit","internalSplit","limit","lim","lastLastIndex","separatorCopy","lastLength","splitter","unicodeMatching","nativeStartsWith","intStart","intLength","intEnd","$toWellFormed","REPLACEMENT_CHARACTER","TO_STRING_CONVERSION_BUG","trimEnd","trimStart","$trim","defineWellKnownSymbol","nativeObjectCreate","getOwnPropertyNamesExternal","defineSymbolToPrimitive","HIDDEN","QObject","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","USE_SETTER","fallbackDefineProperty","ObjectPrototypeDescriptor","setSymbolDescriptor","description","$defineProperties","$create","enumerable","IS_OBJECT_PROTOTYPE","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","thisSymbolValue","symbolDescriptiveString","NATIVE_SYMBOL_REGISTRY","StringToSymbolRegistry","SymbolToStringRegistry","sym","$ArrayCopyWithin","u$ArrayCopyWithin","$fill","CONVERSION_BUG","actualValue","fromSpeciesAndList","createTypedArrayConstructor","ArrayIterators","Uint8Array","arrayValues","arrayKeys","arrayEntries","GENERIC","ITERATOR_IS_VALUES","typedArrayValues","$join","WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS","TO_OBJECT_BUG","Uint16Array","ACCEPT_INCORRECT_ARGUMENTS","mod","beginIndex","$toLocaleString","TO_LOCALE_STRING_BUG","Uint8ArrayPrototype","arrayToString","IS_NOT_ARRAY_METHOD","PROPER_ORDER","hex2","hex4","collectionWeak","isFrozen","isSealed","freeze","seal","FROZEN","SEALED","IS_IE11","InternalWeakMap","$WeakMap","WeakMapPrototype","nativeSet","hasMSEdgeFreezingBug","frozenArray","nativeDelete","nativeHas","nativeGet","arrayIntegrityLevel","disallowed","finalEq","$atob","NO_SPACES_IGNORE","NO_ENCODING_CHECK","NO_ARG_RECEIVING_CHECK","WRONG_ARITY","bc","bs","$btoa","WRONG_ARG_CONVERSION","block","clearImmediate","DOMIterables","handlePrototype","CollectionPrototype","COLLECTION_NAME","ArrayIteratorMethods","ArrayValues","DOMExceptionConstants","DOM_EXCEPTION","DATA_CLONE_ERR","Error","NativeDOMException","NativeDOMExceptionPrototype","HAS_STACK","codeFor","$DOMException","DOMExceptionPrototype","createGetterDescriptor","INCORRECT_CONSTRUCTOR","INCORRECT_CODE","MISSED_CONSTANTS","FORCED_CONSTRUCTOR","PolyfilledDOMException","PolyfilledDOMExceptionPrototype","constant","constantName","ERROR_HAS_STACK","DOM_EXCEPTION_HAS_STACK","BUGGY_DESCRIPTOR","INCORRECT_VALUE","setTask","schedulersFix","setImmediate","setInterval","setTimeout","MapHelpers","setIterate","detachTransferable","Object","Date","PerformanceMark","DOMException","Map","mapHas","mapGet","mapSet","setAdd","setHas","thisBooleanValue","thisStringValue","PERFORMANCE_MARK","DATA_CLONE_ERROR","TRANSFERRING","checkBasicSemantic","structuredCloneImplementation","set1","set2","checkErrorsCloning","checkNewErrorsCloningSemantic","nativeStructuredClone","FORCED_REPLACEMENT","structuredCloneFromMark","nativeRestrictedStructuredClone","throwUncloneable","throwUnpolyfillable","action","tryNativeRestrictedStructuredClone","createDataTransfer","dataTransfer","cloneBuffer","$type","cloneView","structuredCloneInternal","cloned","tryToTransfer","rawTransfer","transfer","buffers","transferred","canvas","detachBuffers","USE_NATIVE_URL","arraySort","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","safeGetBuiltIn","nativeFetch","NativeRequest","Headers","RequestPrototype","HeadersPrototype","decodeURIComponent","encodeURIComponent","shift","plus","percentSequence","percentDecode","deserialize","replacements","serialize","URLSearchParamsIterator","URLSearchParamsState","entries","entryIterator","entryNext","URLSearchParamsConstructor","URLSearchParamsPrototype","$value","headersHas","headersSet","wrapRequestOptions","body","headers","RequestConstructor","$URLSearchParams","$delete","dindex","entriesLength","getAll","$has","URL","THROWS_WITHOUT_ARGUMENTS","urlString","arrayFrom","toASCII","URLSearchParamsModule","getInternalURLState","URLSearchParams","getInternalSearchParamsState","NativeURL","pop","unshift","INVALID_AUTHORITY","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_C0_CONTROL_OR_SPACE","TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","EOF","parseIPv4","partsLength","numbers","ipv4","parseIPv6","address","pieceIndex","compress","pointer","numbersSeen","ipv4Piece","swaps","findLongestZeroSequence","ipv6","maxIndex","currStart","currLength","serializeHost","ignore0","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","specialSchemes","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","isSingleDot","segment","isDoubleDot","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","isBase","baseState","failure","searchParams","stateOverride","seenAt","seenBracket","seenPasswordToken","codePoints","bufferCodePoints","codePoint","encodedCodePoints","pathSize","scheme","username","password","URLConstructor","protocol","hostname","pathname","hash","URLPrototype","accessorDescriptor","nativeCreateObjectURL","nativeRevokeObjectURL","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","definition","chunkId","promises","inProgress","dataWebpackPrefix","needAttach","scripts","onScriptComplete","doneFns","installedChunks","installedChunkData","loadingEnded","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","chunkLoadingGlobal","_arrayLikeToArray","_assertThisInitialized","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","_toPropertyKey","_get","_superPropBase","_inherits","_setPrototypeOf","_unsupportedIterableToArray","_superPropGet","_toPrimitive","_typeof","rtl","GetYoDigits","charsLength","RegExpEscape","transitionend","$elem","transitions","transition","onLoad","didLoad","ignoreMousedisappear","_ref$ignoreLeaveWindo","ignoreLeaveWindow","_ref$ignoreReappear","ignoreReappear","eLeave","_len","rest","_key","eReenter","foundation_core_utils","styleMedia","media","MediaQuery","$meta","extractedStyles","namedQueries","parseStyleToObject","nextSize","_parts","bpSize","_parts$","bpModifier","queryIndex","nextQuery","newSize","currentSize","styleObject","ret","FOUNDATION_VERSION","Foundation","_plugin","className","functionName","hyphenate$1","pluginName","isJQ","fns","plgs","$el","parseValue","er","foundation","$noJS","plugClass","timer","vendors","vp","lastTime","now","nextTime","oThis","aArgs","fToBind","fNOP","fBound","funcNameRegex","Box","ImNotTouchingYou","OverlapArea","GetDimensions","GetExplicitOffsets","lrOnly","tbOnly","ignoreBottom","eleDims","topOver","bottomOver","leftOver","rightOver","parDims","parRect","winRect","winY","winX","anchor","alignment","vOffset","hOffset","isOverflow","$eleDims","$anchorDims","topVal","leftVal","onImagesLoaded","images","unloaded","singleImageLoaded","image","me","keyCodes","commands","findFocusable","$element","aTabIndex","bTabIndex","parseKey","Keyboard","getKeyCodes","component","functions","commandList","cmds","command","returnValue","componentName","$focusable","$firstFocusable","$lastFocusable","kcs","kc","initClasses","activeClasses","Motion","animation","animate","Move","duration","anim","prog","move","ts","isIn","initClass","activeClass","reset","finish","Nest","subMenuClass","subItemClass","hasSubClass","applyAria","$item","$sub","firstItem","Timer","nameSpace","remain","Touch","startPosX","startTime","elapsedTime","startEvent","isMoving","didMoved","onTouchEnd","onTouchMove","tapEvent","dx","onTouchStart","SpotSwipe","handleTouch","touches","eventTypes","simulatedEvent","prefixes","triggers","Triggers","$nodes","pluginId","yetiBoxes","plugNames","listeners","debounceGlobalListener","debounce","listeningElementsMutation","mutationRecordsList","$target","elementObserver","$document","__","Plugin","getPluginName","hyphenate","Abide","_Plugin","$globalErrors","isGood","failedValidators","_this4","$error","$label","$els","_this5","_this6","$formError","$errors","$labels","elemId","errorId","groupName","$formErrors","_this7","clearRequire","validator","manageErrorClasses","goodToGo","dependentElements","_this8","checkboxGroupName","noError","inputText","valid","$group","_this9","minRequired","checked","validators","_this10","$form","Accordion","$content","linkId","$initActive","$anchor","$link","isOwnAnchor","$tabContent","$a","$targetItem","$othersItems","$activeContents","targetContentId","$activeTabs","AccordionMenu","subId","isActive","initPanes","$submenu","$elements","$prevElement","$nextElement","$targetBranch","$othersActiveSubmenus","$submenus","$allmenus","Drilldown","$menu","$back","$body","$scrollTopElement","calcHeight","parentSubMenu","autoFocus","$expandedSubmenus","isLastChild","maxHeight","POSITIONS","VERTICAL_ALIGNMENTS","HORIZONTAL_ALIGNMENTS","ALIGNMENTS","nextItem","currentIdx","Positionable","isExhausted","minOverlap","minCoordinates","overlap","Dropdown","_Positionable","$id","horizontalPosition","hasTouch","bodyData","DropdownMenu","subs","parClass","handleClickFn","hasSub","hasClicked","isTab","nextSibling","prevSibling","openSub","closeSub","close","isItself","$sibs","oldClass","$parentLi","$toClose","somethingToClose","$activeItem","Equalizer","eqId","$watched","imgs","tooSmall","heights","lastElTopOffset","elOffsetTop","groupsILength","lenJ","Interchange","rule","rulesList","rules","SmoothScroll","arrival","$loc","Magellan","$tar","pt","newScrollPos","isScrollingUp","activeIdx","visibleLinks","$oldActive","activeHash","isNewActive","isNewHash","OffCanvas","overlay","overlayPosition","revealOnRegExp","revealOnClass","inCanvasFor","hasReveal","absoluteTopVal","stickyData","isRevealed","up","down","allowUp","allowDown","canvasFocus","Orbit","$images","initActive","$controls","ltr","$slide","isLTR","chosenSlide","$curSlide","$firstSlide","$lastSlide","dirIn","dirOut","$newSlide","$oldBullet","$othersBullets","$newBullet","activeStateDescriptor","spans","spanCountInOthersBullets","MenuPlugins$1","ResponsiveMenu","rulesTree","ruleSize","rulePlugin","matchedMq","ResponsiveToggle","targetID","Reveal","additionalOverlayClasses","width","outerWidth","outerHeight","afterAnimation","updateScrollbarClass","finishUp","urlWithoutHash","Slider","pctOfBar","percent","baseLog","$hndl","location","isDbl","h2Val","h1Val","vert","hOrW","lOrT","handleDim","elemDim","pxToMove","movement","isLeftHndl","dim","handlePct","handlePos","moveTime","initVal","$handle","vertical","eventOffset","barDim","windowScroll","elemOffset","eventFromBar","barXY","offsetPct","firstHndlPos","absPosition","secndHndlPos","previousVal","nextVal","curHandle","handleChangeEvent","_$handle","frac","num","clickPos","Sticky","btm","pts","breaks","place","scrollListener","checkSizes","stickTo","mrgn","notStuckTo","isTop","stickToTop","anchorPt","topOrBottom","newElemWidth","comp","pdngl","pdngr","newContainerHeight","elemHeight","mTop","emCalc","mBtm","topPoint","bottomPoint","winHeight","em","Tabs","anchorNoHash","historyHandled","$oldTab","$tabLink","$targetContent","$targetAnchor","$activeTab","idStr","hashIdStr","panel","Toggler","$triggers","$trigger","controls","containsId","isOn","Tooltip","elementClassName","templateClasses","$template","isFocus","MenuPlugins","ResponsiveAccordionTabs","dummyPlugin","tmpPlugin","keyKey","objObj","toSet","fromString","$panels","tabsTitle","tabsPanel","$liHeads","$liHeadsA","$tabsContent","$placeholder","tempValue","_this$currentRule","_this$currentRule2","_this$currentRule3","DOCUMENT_FRAGMENT_NODE","morphAttrs","fromNode","toNode","toNodeAttrs","attrNamespaceURI","attrValue","fromValue","fromNodeAttrs","NS_XHTML","HAS_TEMPLATE_SUPPORT","HAS_RANGE_SUPPORT","createFragmentFromTemplate","createFragmentFromRange","createFragmentFromWrap","toElement","compareNodeNames","fromEl","toEl","fromNodeName","toNodeName","fromCodeStart","toCodeStart","createElementNS","namespaceURI","moveChildren","curChild","nextChild","syncBooleanAttrProp","specialElHandlers","parentNode","parentName","firstChild","selectedIndex","ELEMENT_NODE","DOCUMENT_FRAGMENT_NODE$1","TEXT_NODE","COMMENT_NODE","defaultGetNodeKey","morphdomFactory","toNodeHtml","getNodeKey","onBeforeNodeAdded","onNodeAdded","onBeforeElUpdated","onElUpdated","onBeforeNodeDiscarded","onNodeDiscarded","onBeforeElChildrenUpdated","childrenOnly","fromNodesLookup","keyedRemovalList","addKeyedRemoval","walkDiscardedChildNodes","skipKeyedNodes","removeNode","indexTree","handleNodeAdded","unmatchedFromEl","morphEl","cleanupFromEl","curFromNodeChild","curFromNodeKey","fromNextSibling","toElKey","morphChildren","curToNodeChild","curToNodeKey","toNextSibling","matchingFromEl","outer","curFromNodeType","isCompatible","onBeforeNodeAddedResult","specialElHandler","morphedNode","morphedNodeType","toNodeType","elToRemove","morphdom","tagContainers","$hashtagContainer","nodatafound","remoteSearch","hashtags","mentionsInitializer","$mentionContainer","users","iconsPath","setupEvents","AutoComplete","thresholdTemp","fetchResults","stopPropagation","hiddenInput","chosen","clearSelection","multiSelectWrapper","inputContainer","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","DEFAULT_ATTRIBUTES","icon","iconKey","iconAttributes","htmlAttributes","newKey","ucw","title","updateSubmitButton","$fieldContainer","$selectedItems","$submitButton","$searchInput","removeLabel","emptyFocusElement","autoComplete","focusElement","identifier","registerCallback","callbackId","unregisterCallback","pushState","state2","replaceState","CLIPBOARD_COPY_TIMEOUT","$input","$temp","copyDone","$msg","PasswordToggler","statusText","inputGroupWrapper","formError","$userRegistrationForm","$userGroupFields","userPassword","inputSelector","newsletterSelector","$newsletterModal","setGroupFieldsVisibility","checkNewsletter","newsletterChecked","initializeAccountForm","newPasswordPanel","oldPasswordPanel","emailField","originalEmail","emailChanged","newPwVisible","toggleNewPassword","toggleOldPassword","initializeDeleteAccount","$deleteAccountForm","$deleteAccountModalForm","reasonValue","initializeOldPasswordToggler","oldUserPassword","submit","none","subgroups","subgroup","subnode","Selection","arrayAll","selectorAll","parents","childMatcher","childFind","childFirst","childrenFilter","update","sparse","EnterNode","datum","bindIndex","enter","exit","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","keyValue","arraylike","enterGroup","updateGroup","exitGroup","i0","i1","onenter","onupdate","onexit","groups0","groups1","m0","m1","merges","group0","group1","ascending","compareNode","sortgroups","sortgroup","xhtml","namespaces","attrRemove","attrRemoveNS","fullname","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","styleConstant","priority","styleFunction","styleValue","propertyRemove","propertyConstant","propertyFunction","classArray","ClassList","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","lower","creatorInherit","uri","creatorFixed","creator","constantNull","remove","selection_cloneShallow","selection_cloneDeep","deep","contextListener","parseTypenames","typenames","onRemove","typename","on","onAdd","window","dispatchConstant","dispatchFunction","selection_selection","selection_select","selection_filter","selection_empty","selection_text","selection_raise","selection_lower","selection_remove","selection_datum","sourceEvent","valueof","extent","descending","bisector","compare1","compare2","zero","lo","mid","center","e10","e5","e2","tickSpec","power","factor","ticks","tickIncrement","tickStep","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","t0","t1","timeInterval","floori","offseti","interval","d0","d1","millisecond","seconds","timeMinute","timeMinutes","utcMinute","utcMinutes","timeHour","timeHours","utcHour","utcHours","timeDay","timeDays","utcDay","utcDays","unixDay","unixDays","timeWeekday","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","timeSundays","timeMondays","timeTuesdays","timeWednesdays","timeThursdays","timeFridays","timeSaturdays","utcWeekday","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcSundays","utcMondays","utcTuesdays","utcWednesdays","utcThursdays","utcFridays","utcSaturdays","timeMonth","timeMonths","utcMonth","utcMonths","timeYear","timeYears","utcYear","utcYears","ticker","month","week","day","hour","minute","tickIntervals","tickInterval","utcTicks","utcTickInterval","timeTicks","timeTickInterval","localDate","utcDate","newDate","formatLocale","locale","locale_dateTime","locale_date","locale_time","locale_periods","locale_weekdays","locale_shortWeekdays","locale_months","locale_shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatPeriod","formatQuarter","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCPeriod","formatUTCQuarter","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parsePeriod","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseLocaleDate","parseLocaleTime","parseZone","parseLiteralPercent","newFormat","specifier","pad","format","pads","newParse","Z","parseSpecifier","parse","numberRe","percentRe","requoteRe","requote","dISO","dow","UTCdISO","timeFormat","timeParse","utcFormat","utcParse","defaultLocale","ascendingBisect","bisectRight","bisectLeft","bisectCenter","extend","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","Hsl","hsl","m2","hsl2rgb","clamph","clampt","basis","v0","v1","v2","v3","t2","t3","linear","exponential","hue","gamma","nogamma","rgbGamma","rgb","rgbSpline","spline","rgbBasis","rgbBasisClosed","basisClosed","genericArray","nb","na","reA","reB","one","bi","am","bm","constants","unit","identity","clamper","bimap","interpolate","r0","r1","polymap","bisect","copy","transformer","transform","untransform","unknown","clamp","piecewise","rescale","scale","continuous","initRange","initInterpolator","interpolator","nice","x0","x1","calendar","invert","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickFormat","time","formatSpecifier","FormatSpecifier","formatDecimalParts","coefficient","grouping","thousands","numerals","out","prefixExponent","formatDecimal","formatRounded","formatPrefixAuto","formatGroup","currencyPrefix","currencySuffix","decimal","formatNumerals","minus","nan","align","comma","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","padding","formatPrefix","precisionPrefix","precisionRound","precisionFixed","linearish","prestep","maxIter","bottom","epsilon","translateX","translateY","entering","axis","orient","tickArguments","tickValues","tickSizeInner","tickSizeOuter","tickPadding","spacing","range0","range1","tick","tickExit","tickEnter","line","axisTop","axisRight","axisBottom","axisLeft","isoSpecifier","formatIsoNative","formatIso","parseIsoNative","parseIso","Linear","pi","tau","tauEpsilon","appendRound","Path","y1","y2","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","a0","a1","ccw","dy","cw","da","pathRound","withPath","shape","defined","curve","defined0","area","x0z","y0z","arealine","areachart","parseData","data2","isoParse","aggregate","agg","objectName","showAxis","ratio","showTooltip","margin","titlePadding","_area","valueline","topLine","circle","tooltip","d2","coords","tooltipContent","xAxis","yAxis","_xAxis","g2","_yAxis","titleLines","fulltext","wrapwidth","_line","lineNumber","lineHeight","_x","_y","tspan","fontSize","metricsData","metricsContainer","metricsParams","parameterize","metrics","fetch","downloadMetricData","metricName","csvContent","metricData","_index","sessionTimeOutEnabled","$timeoutModal","timeoutInSeconds","secondsUntilTimeoutPath","heartbeatPath","preventTimeOutSeconds","endsAt","lastAction","$continueSessionButton","lastActivityCheck","activityCheckInterval","preventTimeOutUntil","disableSessionTimeout","enableSessionTimeout","setTimer","secondsUntilExpiration","sessionTimeLeft","heartbeat","userBeenActiveSince","exitInterval","timeSinceLastActivityCheckInSeconds","secondsUntilSessionExpires","_event","_xhr","ConfirmDialog","sourceElement","completed","origEv","newEv","getMatchingEventTarget","handleDocumentEvent","matchSelectors","currentSelector","initializeListingOptionsMenu","$targetMenu","linkText","$impersonationWarning","diff","diffInMinutes","sparkMd5","undefined$1","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","md51_array","rhex","targetArray","sourceArray","toUtf8","utf8Str2ArrayBuffer","returnUInt8Array","buff","arrayBuffer2Utf8Str","concatenateArrayBuffers","hexToBinaryString","SparkMD5","contents","fileSlice","FileChecksum","file","binaryDigest","base64digest","getMetaValue","findElement","findElements","eventInit","disabled","bubbles","cancelable","BlobRecord","checksum","customHeaders","headerKey","responseType","direct_upload","BlobUpload","blob","status","DirectUpload","upload","DirectUploadController","progress","DirectUploadsController","controllers","startNextController","controller","processingAttribute","submitButtonsByForm","started","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","disable","submitForm","autostart","Uploader","modal","blobId","request","loaded","total","truncateFilename","filename","charactersFromBegin","charactersFromEnd","escapeHtml","escapeQuotes","__defProps","__getOwnPropDescs","__spreadProps","STATUS","UploadModal","providedOptions","files","uploader","reader","img","nextOrdinalNumber","inputHasFiles","continueUpload","okTemplate","errorTemplate","titleTemplate","fullTemplate","currentTarget","ix","requiredCheckbox","updateModalTitle","updateActiveUploads","defaultFile","previousId","isMultiple","removeFiles","addFiles","removable","hidden","fileField","titleValue","titleField","highlightDropzone","resetDropzone","attachmentButton","defaultConverter","converter","defaultAttributes","stringifiedAttributes","attributeName","cookies","jar","api","ConsentManager","newState","activeScript","newElement","category","categoryEl","categoryInput","initDialog","manager","dialogWrapper","acceptAllButton","rejectAllButton","settingsButton","initModal","saveSettingsButton","initDisabledIframes","disabledIframes","categories","prevScroll","stickyHeader","footer","stickyButtons","isElementInViewport","adjustCtasButtons","visibleButtons","marginBottom","ctasButton","fixMenuBarContainerMargin","isMaxScreenSize","menuBarContainer","marginTop","currentScroll","goingDown","patchEsm","defineCustomElements","setHour","setMinute","formatInputDate","dateList","formatInputTime","timeList","changeHourDisplay","change","changeMinuteDisplay","displayMinute","displayHour","preFix","hourDisplay","minuteDisplay","updateTimeValue","formatDate","splitValue","formatTime","inputname","updateInputValue","dateToPicker","formatArray","formatValue","displayDate","calculateDatepickerPos","datePicker","timeKeyDownListener","timeBeforeInputListener","dateKeyDownListener","dateBeforeInputListener","getMessages","createDictionary","final","getDictionary","generateDatePicker","row","i18n","dateColumn","datePickerContainer","closeCalendar","pickCalendar","prevDate","defaultTime","datePickerDisplay","pickedDate","datePickerPos","layoutWrapper","generateTimePicker","timeColumn","clock","hourColumn","hours","hourUp","hourDown","minuteColumn","minutes","minuteUp","minuteDown","timeRow","periodColumn","periodAm","periodAmLabel","periodPm","periodPmLabel","hourLabel","hourLabelContainer","minuteLabel","minuteLabelContainer","timePicker","closeClock","resetClock","selectClock","timePickerDisplay","formatGuard","inputHour","inputMinute","formDatePicker","i18nDate","i18nDateHelp","i18nTime","i18nTimeHelp","helpTextContainer","helpTextDate","helpTextTime","inputFieldValue","dateTimeValue","Configuration","DEFAULT_MESSAGES","MESSAGES","ExternalLink","externalMatches","updateExternalDomainLinks","externalHref","lastChild","COUNT_KEY","SR_ANNOUNCE_THRESHOLD_RATIO","SR_ANNOUNCE_EVERY_THRESHOLD","InputCharacterCounter","targetId","screenReaderId","active","currentLength","srLength","showMessages","createCharacterCounter","FormValidator","$announce","_ev","delayed","CheckBoxesTree","checkboxes","_idx","checkbox","theForm","targetChecks","checkStatus","parentCheck","totalCheckSiblings","checkedSiblings","indeterminateSiblings","sibling","FormFilterComponent","contentContainer","currentState","initialPath","initialState","withHost","regexpResult","order","filterParams","currentOrder","fieldName","newPath","formAction","pathWithQueryStrings","pathName","$parcel$interopDefault","$c770c458706daa72$export$2e2bcd8739ae039","$fb96b826c0c5f37a$var$n","$fb96b826c0c5f37a$export$41c562ebe57d11e2","$fb96b826c0c5f37a$var$u","$fb96b826c0c5f37a$export$a8257692ac88316c","$fb96b826c0c5f37a$var$t","$fb96b826c0c5f37a$var$r","$fb96b826c0c5f37a$var$o","$fb96b826c0c5f37a$var$f","$fb96b826c0c5f37a$var$e","$fb96b826c0c5f37a$var$c","$fb96b826c0c5f37a$var$s","$fb96b826c0c5f37a$var$a","n1","l1","u1","$fb96b826c0c5f37a$var$h","l2","$fb96b826c0c5f37a$export$c8a8987d4410bf2d","l3","u2","o1","f1","$fb96b826c0c5f37a$var$y","n3","o2","f2","$fb96b826c0c5f37a$export$7d1e3a5e95ceca43","$fb96b826c0c5f37a$export$ffb0004e005737fa","n4","$fb96b826c0c5f37a$export$16fa2f45be04daa8","n5","l4","$fb96b826c0c5f37a$var$k","n6","l5","u3","$fb96b826c0c5f37a$var$b","n7","l6","u4","$fb96b826c0c5f37a$var$m","n8","$fb96b826c0c5f37a$var$g","n9","n10","l7","n11","l8","u5","i3","r3","o3","$fb96b826c0c5f37a$var$j","$fb96b826c0c5f37a$var$z","$fb96b826c0c5f37a$var$w","n12","l9","u6","i4","t4","r4","o4","f3","s1","h1","_1","b1","g1","w1","A1","$fb96b826c0c5f37a$var$x","$fb96b826c0c5f37a$var$P","$fb96b826c0c5f37a$var$N","$fb96b826c0c5f37a$var$M","n13","l10","u7","i5","t5","r5","$fb96b826c0c5f37a$export$47e4c5b300681277","n14","l11","n15","n16","l12","u8","i6","t6","r6","o5","f4","e1","$fb96b826c0c5f37a$var$C","n17","l13","u9","i7","t7","r7","$fb96b826c0c5f37a$var$H","$fb96b826c0c5f37a$var$$","n18","l14","u10","n19","l15","u11","i8","t8","r8","$fb96b826c0c5f37a$var$T","$fb96b826c0c5f37a$var$I","n20","n21","n22","u12","i9","t9","r9","o6","f5","c1","s2","h2","p2","k1","b2","A2","P1","$fb96b826c0c5f37a$var$O","n23","$fb96b826c0c5f37a$var$L","n24","n25","u13","u14","n26","n27","l16","u15","i10","t10","r10","o7","f6","s3","a2","p3","_2","n28","u16","i11","n29","n30","u17","i12","t11","r11","n31","n32","u18","$fb96b826c0c5f37a$export$b3890eb0ae9dca99","u19","i13","t12","r12","o8","f7","$fb96b826c0c5f37a$export$fa8d919ba61d84db","n33","l17","$fb96b826c0c5f37a$export$e530037191fcd5d7","l18","u20","i14","t13","r13","o9","f8","$fb96b826c0c5f37a$export$fd42f52fd3ae1109","n34","l19","u21","n35","l20","n36","u22","i15","n37","n38","n39","l22","u23","i16","t14","l23","n40","n41","l24","u24","n42","$bd9dd35321b03dd4$var$o","$bd9dd35321b03dd4$export$34b9dba7ce09269b","$f72b75cf796873c7$var$set","$f72b75cf796873c7$var$get","$f72b75cf796873c7$export$2e2bcd8739ae039","$c84d045dcc34faf5$var$CACHE","$c84d045dcc34faf5$var$VERSIONS","$c84d045dcc34faf5$var$latestVersion","emoji","$c84d045dcc34faf5$var$isSupported","$c84d045dcc34faf5$var$noCountryFlags","supported","$c84d045dcc34faf5$var$isEmojiSupported","CANVAS_HEIGHT","CANVAS_WIDTH","textSize","$c84d045dcc34faf5$export$2e2bcd8739ae039","$b22cfd0a55410b4f$var$DEFAULTS","$b22cfd0a55410b4f$var$Index","$b22cfd0a55410b4f$var$add","emojiId","$b22cfd0a55410b4f$var$get","maxFrequentRows","perLine","emojiIds","aScore","bScore","removedIds","removedId","$b22cfd0a55410b4f$export$2e2bcd8739ae039","$8d50d93417ef682a$exports","$b247ea80b67298d5$export$2e2bcd8739ae039","$7adb23b0109cc36a$export$dbe3113d60765c1a","$7adb23b0109cc36a$export$2d0294657ab35f1b","$7adb23b0109cc36a$var$fetchCache","$7adb23b0109cc36a$var$fetchJSON","$7adb23b0109cc36a$var$promise","$7adb23b0109cc36a$var$initiated","$7adb23b0109cc36a$var$initCallback","$7adb23b0109cc36a$var$initialized","$7adb23b0109cc36a$export$2cd8252107eb640b","caller","$7adb23b0109cc36a$var$_init","emojiVersion","alias","prevCategory","latestVersionSupport","noCountryFlags","categoryIndex","resetSearchIndex","categoryIcons","emojiIndex","ignore","$e6eae5155b87f591$export$bcb25aa587e9cb13","emoticon","skinIndex","skin","native","skinShortcodes","$c4d155af13ad4d4b$export$2e2bcd8739ae039","$7adb23b0109cc36a$export$75fe5f91d452f94b","defaultProps","_props","$7adb23b0109cc36a$export$88c9ddb45cea7241","$c4d155af13ad4d4b$var$SHORTCODES_REGEX","$c4d155af13ad4d4b$var$Pool","$c4d155af13ad4d4b$var$get","$c4d155af13ad4d4b$var$reset","$c4d155af13ad4d4b$var$search","maxResults","pool","scores","$693b183b0a78708f$export$9cb4719e2e525b7a","$693b183b0a78708f$export$e772c8ff12451969","frames","$693b183b0a78708f$export$d10ac59fbe52a745","emojiData","$693b183b0a78708f$export$5ef5574deca44bc0","nativeString","$fcccfb36ed0cde68$export$2e2bcd8739ae039","$254755d3f438722f$export$2e2bcd8739ae039","emojiSkin","imageSrc","spritesheetSrc","$6f57cc9cd54c5aaa$var$WindowHTMLElement","$6f57cc9cd54c5aaa$export$2e2bcd8739ae039","$26f27c338a96b1a6$export$2e2bcd8739ae039","$3d90f6e46fb2dd47$export$2e2bcd8739ae039","$331b4160623139bf$export$2e2bcd8739ae039","$1a9a8ef576b7773d$var$t","$1a9a8ef576b7773d$var$u","$1a9a8ef576b7773d$var$r","$1a9a8ef576b7773d$var$o","$1a9a8ef576b7773d$var$i","$1a9a8ef576b7773d$var$c","$1a9a8ef576b7773d$var$f","$1a9a8ef576b7773d$var$e","$1a9a8ef576b7773d$var$a","$1a9a8ef576b7773d$var$v","$1a9a8ef576b7773d$var$m","$1a9a8ef576b7773d$export$60241385465d0a34","$1a9a8ef576b7773d$export$13e3392192263954","$1a9a8ef576b7773d$var$w","$1a9a8ef576b7773d$export$6d9c69b0de29b591","$1a9a8ef576b7773d$var$k","$1a9a8ef576b7773d$export$e5c5a5f917a5871c","$1a9a8ef576b7773d$export$b8f5890fc79d6aca","$1a9a8ef576b7773d$export$1538c33de8887b59","$1a9a8ef576b7773d$export$d5a552a76deda3c2","$1a9a8ef576b7773d$export$35808ee640e87ca7","$1a9a8ef576b7773d$export$fae74005e78b1a27","$1a9a8ef576b7773d$export$dc8fbce3eb94dc1e","$1a9a8ef576b7773d$export$c052f6604b7d51fe","$1a9a8ef576b7773d$var$x","$1a9a8ef576b7773d$var$g","$1a9a8ef576b7773d$var$j","$1a9a8ef576b7773d$var$b","t15","t16","t17","$dc040a17866866fa$var$S","$dc040a17866866fa$var$C","$dc040a17866866fa$export$221d75b3f55bb0bd","$dc040a17866866fa$export$7c73462e0d25e514","e3","e4","$dc040a17866866fa$var$w","$dc040a17866866fa$var$R","$dc040a17866866fa$export$257a8862b851cb5b","$dc040a17866866fa$var$N","$dc040a17866866fa$export$dca3b0875bd9a954","$dc040a17866866fa$var$A","e6","$dc040a17866866fa$var$O","$dc040a17866866fa$export$74bf444e3cd11ea5","$dc040a17866866fa$var$U","$dc040a17866866fa$export$488013bae63b21da","e7","$dc040a17866866fa$export$998bcd577473dd93","e8","e9","t18","t19","t20","e13","$dc040a17866866fa$var$T","t22","e14","$dc040a17866866fa$var$D","$dc040a17866866fa$var$I","t23","e15","$dc040a17866866fa$export$d39a5bbd09211389","t24","t25","e16","t26","e17","t27","e18","$dc040a17866866fa$var$j","$dc040a17866866fa$var$P","$dc040a17866866fa$var$V","$dc040a17866866fa$var$z","$dc040a17866866fa$export$b3890eb0ae9dca99","t28","e19","$dc040a17866866fa$export$fa8d919ba61d84db","t29","e20","t30","$dc040a17866866fa$var$H","$dc040a17866866fa$var$Z","$dc040a17866866fa$var$Y","$dc040a17866866fa$var$q","$dc040a17866866fa$var$G","$dc040a17866866fa$var$J","$dc040a17866866fa$var$K","t31","e21","r14","n43","$dc040a17866866fa$var$Q","n44","$dc040a17866866fa$export$ae55be85d98224ed","n45","$dc040a17866866fa$export$83d89fbfd8236492","$dc040a17866866fa$export$d38cd72104c1f0e9","n46","$dc040a17866866fa$export$a8257692ac88316c","n47","$dc040a17866866fa$export$e530037191fcd5d7","n48","$dc040a17866866fa$export$502457920280e6be","n49","$dc040a17866866fa$export$466bfc07425424d5","n50","$dc040a17866866fa$export$c78a37762a8d58e1","n51","t32","$dc040a17866866fa$export$cd75ccfd720a3cd4","n52","t33","$dc040a17866866fa$export$5f8d39834fd61797","$dc040a17866866fa$export$2e2bcd8739ae039","$ec8c39fdad15601a$var$THEME_ICONS","$ec8c39fdad15601a$export$2e2bcd8739ae039","selectedCategoryIndex","$e0d4dda61265ff1e$export$2e2bcd8739ae039","nextProps","$89bd6bb200cc8fef$var$Performance","$89bd6bb200cc8fef$export$2e2bcd8739ae039","searchInput","requiresGridReset","nextState","except","observer","navKey","addRow","rows","rowIndex","rowRef","category1","emojiButtonSize","calculatePerLine","grid","navigation","visibleCategories","setFocusedCategory","categoryId","observerOptions","ratios","visibleRows","increment","scrollRect","rowTop","rowBot","tempSkin","noSearchResults","posinset","renderSkinTone","searchResults","ii","targetRow","visible","skinToneButtonRect","baseRect","lineWidth","afterRender","$efa000751917694d$export$2e2bcd8739ae039","$329d53ba9fd7125f$exports","EmojiI18n","sources","EmojiPopUp","pickerOptions","handlerElement","closeButton","leftPosition","topPosition","popUpWidth","EmojiButton","btnContainer","btn","referenceElement","emojiSelectHandler","emojidata","handlerPicker","popUp","addInputEmoji","containers","focusGuardClass","focusableNodes","focusableDisableableNodes","FocusGuard","guards","guard","startGuard","endGuard","visibleNodes","ind","tabindex","backToListLink","links","filteredParams","noNotificationsText","handleRemove","handleFadeOut","emptyNotifications","handleClick","hideReadAllButton","notifications","notification","actions","extractMessage","resolvePanel","RemoteModal","dialogOpen","getAbsolutePosition","relativeParent","pageX","pageY","parentX","parentY","tooltipHtml","topCenter","bottomCenter","middleRight","middleLeft","positionX","positionY","cancelRemove","createToggle","focusableElements","getVisibleElements","visibleElements","bounding","getNoNestedElements","nestedComponents","noNestedElements","isNested","nestedComponent","closest","currentElement","onClick","onKeydown","addEventDelegation","addEventListeners","removeEventListeners","addAttributes","removeAttributes","setAttributes","setFocusableElements","setFocus","restoreFocus","switchFocus","maintainFocus","addObserver","removeObserver","customConfig","setDefaults","documentSelector","documentDisabledClass","openingTriggerActiveClass","Dialog","dialogSelector","onOpen","onClose","openingSelector","closingSelector","backdropSelector","helperSelector","labelledby","describedby","isModal","isTooltip","isOpen","isCreated","disableScroll","enableAutoFocus","mutations","openingTrigger","closingTrigger","helper","visibleFocusableElements","filteredFocusableElements","__objRest","isScreenSize","createAccordion","accordionOptions","createDropdown","dropdownOptions","autofocus","heightToScroll","createDialog","_b","dialog","setFocusOnTitle","heading","announceForScreenReader","randomIdentifier","announce","changeLabel","changeReportFormBehavior","restArgs","initializer","commentsIds","commentId","commentsContainer"],"sourceRoot":""}