{ "version": 3, "sources": ["../../../javascript/bc/global.js", "../../../javascript/bc/helpers/url_helpers.js", "../../../javascript/bc/helpers/performance_timeline.js", "../../../javascript/bc/helpers/object_helpers.js", "../../../javascript/bc/helpers/scroll_event_helpers.js", "../../../javascript/bc/helpers/sound_helpers.js", "../../../javascript/bc/helpers/array_helpers.js", "../../../javascript/bc/helpers/page_title_helpers.js", "../../../javascript/vendor/selector_observer.js", "../../../javascript/all/initializers/selector_observer.js", "../../../javascript/bc/helpers/remote_form_validation.js", "../../../javascript/bc/helpers/function_helpers.js", "../../../javascript/bc/helpers/turbolinks_helpers.js", "../../../javascript/bc/helpers/string_helpers.js", "../../../javascript/bc/helpers/templates.js", "../../../javascript/bc/helpers/request_helpers.js", "../../../javascript/bc/helpers/regexp_helpers.js", "../../../javascript/bc/helpers/platform_helpers.js", "../../../javascript/bc/helpers/document_helpers.js", "../../../javascript/bc/helpers/utf16_string.js", "../../../javascript/bc/helpers/animation_helpers.js", "../../../javascript/bc/helpers/element_helpers.js", "../../../javascript/bc/helpers/emoji_helper.js", "../../../javascript/all/behaviors/element/flash_notice.jst.ejs", "../../../javascript/bc/helpers/flash_message_helper.js", "../../../javascript/bc/helpers/event_helpers.js", "../../../javascript/bc/helpers/uuid.js", "../../../javascript/bc/helpers/focus_mode_helpers.js", "../../../javascript/bc/helpers/input_type_helpers.js", "../../../javascript/bc/helpers/dom_helpers.js", "../../../javascript/bc/helpers/debug_helpers.js", "../../../javascript/bc/helpers/ready.js", "../../../javascript/bc/helpers/keycodes.js", "../../../javascript/bc/helpers/color_helpers.js", "../../../javascript/lib/cookie.js", "../../../javascript/helpers/meta_helpers.js", "../../../javascript/bc/initializers/authenticity_token.js", "../../../javascript/bc/initializers/current.js", "../../../javascript/bc/initializers/env.js", "../../../javascript/bc/file_uploads/file_upload_preview_completion.js", "../../../javascript/bc/file_uploads/navigation_warning.js", "../../../javascript/bc/file_uploads/picker.js", "../../../javascript/bc/file_uploads/file_upload_manager.js", "../../../javascript/bc/file_uploads/file_upload.js", "../../../javascript/lib/direct_upload_error_reporting.js", "../../../javascript/bc/file_uploads/direct_file_upload.js", "../../../javascript/bc/file_uploads/index.js", "../../../javascript/bc/background_operation_monitor.js", "../../../javascript/bc/elements/sticky.js", "../../../javascript/bc/elements/pie_chart.js", "../../../javascript/bc/elements/content_filter/config.js", "../../../javascript/bc/elements/content_filter/element_index.js", "../../../javascript/bc/elements/content_filter/query_results.js", "../../../javascript/helpers/announcement_helpers.js", "../../../javascript/bc/elements/content_filter/controller.js", "../../../javascript/bc/elements/chat_room.js", "../../../javascript/bc/elements/require.js", "../../../javascript/bc/elements/infinite_page.js", "../../../javascript/helpers/timing_helpers.js", "../../../javascript/helpers/focus_trap_helpers.js", "../../../javascript/bc/elements/modal.js", "../../../javascript/bc/elements/content_filter.js", "../../../javascript/bc/elements/grouped_dates.js", "../../../javascript/bc/inputs/suggestion/select_element.js", "../../../javascript/bc/inputs/suggestion/option_element.js", "../../../javascript/bc/inputs/suggestion/controller.js", "../../../javascript/bc/inputs/suggestion/results_controller.js", "../../../javascript/bc/inputs/suggestion/context.js", "../../../javascript/bc/inputs/autocomplete/controller.js", "../../../javascript/bc/inputs/autocomplete/element.js", "../../../javascript/bc/inputs/autocomplete/templates/autocompletable.jst.ejs", "../../../javascript/bc/inputs/autocomplete/templates/suggestions.jst.ejs", "../../../javascript/bc/inputs/autocomplete/helpers.js", "../../../javascript/bc/inputs/autocomplete/collection.js", "../../../javascript/bc/inputs/datetime/element.js", "../../../javascript/bc/inputs/segmented/controller.js", "../../../javascript/bc/inputs/segmented/element.js", "../../../javascript/bc/inputs/date/element.js", "../../../javascript/bc/inputs/time/element.js", "../../../javascript/bc/inputs/time/controller.js", "../../../javascript/bc/inputs/relative_date/element.js", "../../../javascript/bc/inputs/relative_date/picker_element.js", "../../../javascript/bc/inputs/relative_date/picker.jst.ejs", "../../../javascript/bc/inputs/relative_date/controller.js", "../../../javascript/bc/inputs/relative_date/picker_controller.js", "../../../javascript/bc/sortable/controller.js", "../../../javascript/bc/sortable/mouse_controller.js", "../../../javascript/bc/sortable/scroll_manager.js", "../../../javascript/bc/sortable/touch_controller.js", "../../../javascript/bc/sortable/revert.js", "../../../javascript/bc/sortable/index.js", "../../../javascript/sessions/populate_time_zone.js", "../../../javascript/all/behaviors/page/apply_email_validation_pattern.js"], "sourcesContent": ["window.BC = { Timeline: {} }\n", "BC.getQueryParams = function(location = window.location) {\n const params = {}\n const url = new URL(location.toString(), window.location.origin)\n for (const [key, value] of url.searchParams) {\n params[key] = value\n }\n return params\n}\n\nBC.formatURL = (url, params = {}) => expandPath(BC.formatPath(url, params))\n\nBC.formatPath = function(path, params = {}) {\n let queryString = $.param(params)\n if (queryString.length) {\n if (/\\?/.test(path)) {\n queryString = `&${queryString}`\n } else {\n queryString = `?${queryString}`\n }\n }\n\n return `${path}${queryString}`\n}\n\nBC.accountPath = (path, params = {}) => formatPathWithPrefix(path, BC.current.account.slugPath, params)\n\nBC.bucketPath = (path, params = {}) => formatPathWithPrefix(path, BC.current.bucket.path, params)\n\nBC.isUrlWithinCurrentAccount = (url) => {\n try {\n const path = new URL(url, document.baseURI).pathname\n const accountPath = BC.accountPath()\n return path === accountPath || path.startsWith(`${accountPath}/`)\n } catch {\n return false\n }\n}\n\nconst formatPathWithPrefix = function(path = \"\", prefix, params = {}) {\n if (prefix == null) { return }\n\n if (path.slice(0, prefix.length) !== prefix) {\n path = prefix + path\n }\n\n return BC.formatPath(path, params)\n}\n\nconst expandPath = function(path) {\n const element = document.createElement(\"a\")\n element.setAttribute(\"href\", path)\n return element.href\n}\n\nexport function withSearchParams(url, params) {\n const result = new URL(url)\n for (const [ name, value ] of Object.entries(params)) {\n result.searchParams.set(name, value)\n }\n return result\n}\n\nexport function consumeQueryParam(name) {\n const url = new URL(location)\n const value = url.searchParams.get(name)\n\n if (value !== null) {\n url.searchParams.delete(name)\n history.replaceState(history.state, \"\", url)\n }\n\n return value\n}\n", "if (BC.debug && window.performance) {\n\n window.addEventListener(\"load\", () => BC.defer(function() {\n console.group(\"[Timeline]\")\n console.table(formatEntriesForTable(getPerformanceEntries()))\n return console.groupEnd()\n }))\n\n const windowMarkers = \"navigationStart requestStart responseEnd \\\n domLoading domInteractive domContentLoadedEventStart domContentLoadedEventEnd \\\n loadEventStart loadEventEnd\".split(\" \")\n\n const resourceMarkers = \"requestStart responseEnd\".split(\" \")\n const timing = window.performance.timing\n\n const getPerformanceEntries = function() {\n const entries = []\n\n const start = timing.navigationStart\n\n Array.from(windowMarkers).forEach((marker) => {\n const time = timing[marker] - start\n entries.push({time, marker})\n })\n\n Array.from(getTimingEntriesForResourceType(\"script\", \"link\", \"xmlhttprequest\", \"\")).forEach((timing) => {\n const resource = formatFilename(timing.name)\n\n Array.from(resourceMarkers).forEach((marker) => {\n const time = Math.round(timing[marker])\n entries.push({time, marker, resource})\n })\n })\n\n const loadTimes = window.chrome?.loadTimes?.()\n if (loadTimes) {\n const marker = \"firstPaintTime\"\n const time = Math.round((loadTimes[marker] * 1000) - start)\n entries.push({time, marker})\n }\n\n return entries.sort((a, b) => a.time - b.time)\n }\n\n const getTimingEntriesForResourceType = function(...types) {\n const entries = window.performance?.getEntries?.()\n if (entries) {\n return Array.from(entries).filter((entry) => Array.from(types).includes(entry.initiatorType))\n } else {\n return []\n }\n }\n\n const formatFilename = function(name) {\n const parts = name.split(\"/\")\n let filename = parts[parts.length - 1]\n if (filename.length > 20) {\n filename = `${filename.slice(0, 10)}\u2026${filename.slice(-10)}`\n }\n return filename\n }\n\n const formatEntriesForTable = function(entries) {\n const data = {}\n\n Array.from(entries).forEach(({time, resource, marker}) => {\n if (resource == null) { resource = \"window\" }\n data[`${time}ms`] = {marker, resource}\n })\n\n return data\n }\n}\n", "BC.extendObject = function(object, properties) {\n for (const key in properties) {\n const value = properties[key]\n object[key] = value\n }\n return object\n}\n\nBC.copyObject = object => BC.extendObject({}, object)\n\nBC.sliceObject = function(object, ...keys) {\n const result = {}\n\n Array.from(keys).forEach((key) => {\n result[key] = object[key] != null ? object[key] : null\n })\n\n return result\n}\n\nBC.objectsAreEqual = function(a = {}, b = {}) {\n if (Object.keys(a).length !== Object.keys(b).length) { return false }\n for (const key in a) {\n const value = a[key]\n if (value !== b[key]) { return false }\n }\n return true\n}\n", "BC.onScroll = function(callback) {\n const throttledCallback = _.throttle(callback, 200)\n const handler = () => requestAnimationFrame(throttledCallback)\n\n const install = function() {\n window.addEventListener(\"scroll\", handler)\n return document.addEventListener(\"bc-infinite-page:scroll\", handler)\n }\n\n const uninstall = function() {\n window.removeEventListener(\"scroll\", handler)\n return document.removeEventListener(\"bc-infinite-page:scroll\", handler)\n }\n\n install()\n return uninstall\n}\n", "const sounds = {}\n\nBC.playSound = (url) => {\n if (!sounds[url]) sounds[url] = new Audio(url)\n sounds[url].play()\n}\n\n", "BC.arrayWithout = function(array, object) {\n if (Array.isArray(object)) {\n return array.filter(value => !object.includes(value))\n } else {\n return array.filter(value => value !== object)\n }\n}\n\nBC.uniqueValues = function(array) {\n const set = new Set()\n Array.from(array).forEach(value => set.add(value))\n return Array.from(set)\n}\n", "BC.fetchTitleForURL = function(url) {\n const request = new BC.PageTitleRequest(url)\n return request.perform()\n}\n\n\nconst TIMEOUT = 5000\nBC.PageTitleRequest = class PageTitleRequest {\n\n static titleExtractors = {\n json(data) {\n return `${data.title} - ${data.bucket.name}`\n },\n\n document(document) {\n const page = BC.readObjectFromMetaTags(\"current-page\", document)\n let {\n title\n } = page\n if (title) {\n if (page.subtitle) { title += ` - ${page.subtitle}` }\n return title\n } else {\n return document.querySelector(\"title\")?.textContent\n }\n }\n }\n\n constructor(url) {\n this.xhrDidLoad = this.xhrDidLoad.bind(this)\n this.url = url\n this.xhr = this.createXHR()\n this.xhr.addEventListener(\"load\", this.xhrDidLoad)\n this.promise = new Promise(resolve => {\n this.resolve = resolve\n\n })\n }\n\n perform() {\n this.xhr?.send()\n return this.promise\n }\n\n abort() {\n this.xhr?.abort()\n this.xhr = null\n }\n\n // Private\n\n createXHR() {\n const {url, responseType} = this.getRequestDetails()\n const xhr = new XMLHttpRequest\n xhr.open(\"get\", url, true)\n xhr.timeout = TIMEOUT\n xhr.responseType = responseType\n return xhr\n }\n\n xhrDidLoad(event) {\n const title = this.getTitle()\n return this.resolve(title)\n }\n\n getTitle() {\n const {responseType, response} = this.getResponseDetails()\n return PageTitleRequest.titleExtractors[responseType](response)\n }\n\n getResponseDetails() {\n let {responseType, response} = this.xhr\n // Prop up lack of `xhr.responseType = \"json\"` support\n if (!responseType && (this.getRequestDetails().responseType === \"json\")) {\n responseType = \"json\"\n response = JSON.parse(response)\n }\n return {responseType, response}\n }\n\n getRequestDetails() {\n const dataURL = this.getURLForRecordingData()\n if (dataURL) {\n return {\n url: dataURL,\n responseType: \"json\"\n }\n } else {\n return {\n url: this.url,\n responseType: \"document\"\n }\n }\n }\n\n getURLForRecordingData() {\n const recordingId = this.getRecordingIdFromURL()\n if (recordingId) {\n const bucketId = this.getBucketIdFromURL()\n if (bucketId) {\n return BC.accountPath(`/buckets/${bucketId}/recordings/${recordingId}.json`)\n }\n }\n }\n\n getRecordingIdFromURL() {\n const hash = getHashFromURL(this.url)\n if (hash) {\n return hash.match(/recording_(\\d+)/)?.[1]\n }\n }\n\n getBucketIdFromURL() {\n return this.url.match(/buckets\\/(\\d+)\\//)?.[1]\n }\n}\n\nconst getHashFromURL = function(url) {\n const a = document.createElement(\"a\")\n a.href = url\n return a.hash\n}\n", "window.SelectorObserver = class SelectorObserver {\n constructor() {\n this.mutationObserver = new MutationObserver(document.documentElement, this);\n this.definitionsBySelector = new SelectorSet;\n this.definitionsByElement = new WeakMap;\n }\n\n observe(selector, definition) {\n if (typeof definition === \"function\") {\n definition = {selectorMatched: definition};\n }\n\n this.definitionsBySelector.add(selector, definition);\n\n afterDOMContentLoaded(() => {\n for (const element of document.querySelectorAll(selector)) {\n const definitions = this.getDefinitionsForElement(element);\n if (!definitions.has(definition)) {\n definitions.add(definition);\n definition.selectorMatched?.(element);\n }\n }\n });\n }\n\n matchElement(element) {\n return this.definitionsBySelector.matches(element);\n }\n\n findMatchingElementsInTree(element) {\n return this.definitionsBySelector.findMatchingElementsInTree(element);\n }\n\n elementAttached(element) {\n const definitions = this.getDefinitionsForElement(element);\n this.definitionsBySelector.matchEachSelector(element, function(selector, definition, matched) {\n if (matched && !definitions.has(definition)) {\n definitions.add(definition);\n definition.selectorMatched?.(element);\n }\n });\n }\n\n elementAttributeChanged(element, attributeName) {\n const definitions = this.getDefinitionsForElement(element);\n this.definitionsBySelector.matchEachSelector(element, function(selector, definition, matched) {\n const present = definitions.has(definition);\n if (matched && !present) {\n definitions.add(definition);\n definition.selectorMatched?.(element);\n } else if (present && !matched) {\n definitions.delete(definition);\n definition.selectorUnmatched?.(element);\n }\n });\n }\n\n elementDetached(element) {\n const definitions = this.getDefinitionsForElement(element);\n for (const definition of definitions) {\n definition.selectorUnmatched?.(element);\n }\n definitions.clear();\n }\n\n getDefinitionsForElement(element) {\n let definitions = this.definitionsByElement.get(element);\n if (!definitions) {\n this.definitionsByElement.set(element, (definitions = new Set));\n }\n return definitions;\n }\n};\n\n\nclass MutationObserver {\n constructor(element, definition) {\n this.processMutations = this.processMutations.bind(this);\n this.element = element;\n this.definition = definition;\n this.elements = new Set;\n this.observer = new window.MutationObserver(this.processMutations);\n this.observer.observe(this.element, {attributes: true, childList: true, subtree: true});\n }\n\n processMutations(mutations) {\n for (const mutation of mutations) {\n switch (mutation.type) {\n case \"attributes\":\n this.processAttributeChange(mutation.target, mutation.attributeName);\n break;\n case \"childList\":\n if (mutation.removedNodes.length) this.processRemovedNodes(mutation.removedNodes);\n if (mutation.addedNodes.length) this.processAddedNodes(mutation.addedNodes);\n break;\n }\n }\n }\n\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.nodeIsProcessable(element)) {\n this.definition.elementAttributeChanged?.(element, attributeName);\n } else {\n this.removeElement(element);\n }\n } else if (this.nodeIsProcessable(element)) {\n this.addElement(element);\n }\n }\n\n processRemovedNodes(nodes) {\n for (const node of nodes) {\n this.forEachProcessableElementInTree(node, this.removeElement);\n }\n }\n\n processAddedNodes(nodes) {\n for (const node of nodes) {\n this.forEachProcessableElementInTree(node, this.addElement);\n }\n }\n\n nodeIsProcessable(node) {\n return (node.nodeType === Node.ELEMENT_NODE) && this.definition.matchElement?.(node);\n }\n\n forEachProcessableElementInTree(parentElement, callback) {\n for (const element of this.definition.findMatchingElementsInTree?.(parentElement) ?? []) {\n callback.call(this, element);\n }\n }\n\n addElement(element) {\n // There is an edge cases where a detached element is passed as argument, to protect from this make sure\n // that the element to add exists in the DOM before adding it.\n //\n // See https://3.basecamp.com/2914079/buckets/29375700/todos/5454764252\n if (!this.elements.has(element) && document.contains(element)) {\n this.elements.add(element);\n this.definition.elementAttached?.(element);\n }\n }\n\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n this.definition.elementDetached?.(element);\n }\n }\n}\n\n\nclass SelectorSet {\n constructor() {\n this.values = {};\n this.compositeSelector = null;\n }\n\n add(selector, value) {\n const values = this.values[selector] ?? [];\n if (value != null && !values.includes(value)) {\n this.values[selector] = [...values, value];\n this.compositeSelector = null;\n }\n return value;\n }\n\n remove(selector, value) {\n if (value != null) {\n this.values[selector] = (this.values[selector] ?? []).filter(v => v !== value);\n this.compositeSelector = null;\n }\n return value;\n }\n\n get(selector) {\n return this.values[selector] ?? [];\n }\n\n matchEachSelector(element, callback) {\n for (const selector in this.values) {\n const matched = elementMatchesSelector(element, selector);\n for (const value of this.values[selector]) {\n callback(selector, value, matched);\n }\n }\n }\n\n matches(element) {\n return elementMatchesSelector(element, this.getCompositeSelector());\n }\n\n findMatchingElementsInTree(element) {\n const composite = this.getCompositeSelector();\n const result = this.matches(element) ? [element] : [];\n for (const child of element?.querySelectorAll?.(composite) ?? []) {\n result.push(child);\n }\n return result;\n }\n\n getCompositeSelector() {\n return this.compositeSelector ??= Object.keys(this.values).join(\", \");\n }\n}\n\n\nfunction elementMatchesSelector(element, selector) {\n return element?.nodeType === Node.ELEMENT_NODE && element.matches(selector);\n}\n\nvar afterDOMContentLoaded = (function() {\n const readyCallbacks = [];\n\n document.addEventListener(\"DOMContentLoaded\", () => {\n let callback;\n while ((callback = readyCallbacks.shift())) {\n callback();\n }\n }, false);\n\n return function(callback) {\n if (document.readyState === \"loading\") {\n readyCallbacks.push(callback);\n } else {\n requestAnimationFrame(callback);\n }\n };\n})();\n", "import \"../../vendor/selector_observer\"\n\nBC.selectorObserver = new window.SelectorObserver()\n\nBC.observe = (selector, definition) => BC.selectorObserver.observe(selector, definition)\n", "import \"../../all/initializers/selector_observer\"\n\nBC.observe(\"form[data-behavior~=remote_form_validation]\", form => new RemoteFormValidator(form))\n\nclass RemoteFormValidator {\n constructor(form) {\n this.onInput = this.onInput.bind(this)\n this.onSubmit = this.onSubmit.bind(this)\n this.$form = $(form)\n this.inputs = {}\n\n this.setInputs()\n this.installEventHandlers()\n }\n\n setInputs() {\n return Array.from(this.$form.find(\"[data-validation-name]\")).map((input) =>\n (this.inputs[input.dataset.validationName] = input))\n }\n\n installEventHandlers() {\n this.$form.on(\"input\", this.onInput)\n return this.$form.on(\"submit\", this.onSubmit)\n }\n\n onInput(event) {\n return this.resetElement(event.target)\n }\n\n onSubmit(event) {\n event.preventDefault()\n\n const $submit = this.$form.find(\":submit\")\n $submit.prop(\"disabled\", true)\n\n return this.validate(valid => {\n if (valid) {\n return this.$form[0].submit()\n } else {\n return $submit.prop(\"disabled\", false)\n }\n })\n }\n\n invalidateElement(element, message) {\n $(element).addClass(\"error\")\n return $(element).closest(\"div\").find(\"[data-role~=error_message]\").text(message)\n }\n\n resetElement(element) {\n $(element).removeClass(\"error\")\n return $(element).closest(\"div\").find(\"[data-role~=error_message]\").empty()\n }\n\n validate(callback) {\n if (!this.validateRequiredInputs()) { return callback(false) }\n return this.performValidationRequest(errors => {\n for (const name in this.inputs) {\n const element = this.inputs[name]\n const message = errors[name]?.[0]\n if (message) {\n this.invalidateElement(element, message)\n }\n }\n return callback(this.isValid())\n })\n }\n\n validateRequiredInputs() {\n for (const required of Array.from(this.$form.find(\"[required]\"))) {\n if (!required.value.trim()) { return false }\n }\n return true\n }\n\n performValidationRequest(callback) {\n return $.post(this.$form.data(\"validation-url\"), this.$form.serialize(), data => callback(data.errors))\n }\n\n isValid() {\n return this.$form.find(\".error\").length === 0\n }\n}\n", "BC.defer = callback => setTimeout(callback, 1)\n\nBC.synchronize = function(fn) {\n const monitorCallbacks = new WeakMap\n return function(callback) {\n let callbacks = monitorCallbacks.get(this)\n if (!callbacks) {\n monitorCallbacks.set(this, (callbacks = []))\n }\n callbacks.push(callback)\n\n if (callbacks.length === 1) {\n return fn.call(this, () => {\n Array.from(callbacks).forEach((callback) => { callback?.() })\n return monitorCallbacks.delete(this)\n })\n }\n }\n}\n\nBC.measure =\n (window.performance?.now != null) ?\n function(block) {\n const started = performance.now()\n block()\n return performance.now() - started\n }\n :\n function(block) {\n const started = new Date().getTime()\n block()\n return new Date().getTime() - started\n }\n\nBC.throttle = function(fn) {\n let request = null\n return function(...args) {\n if (request) return request\n request = requestAnimationFrame(() => {\n request = null\n return fn.apply(this, args)\n })\n }\n}\n\nBC.throttleWithDelay = function(fn, delay = 0) {\n let throttled = false\n return function(...args) {\n if (!throttled) {\n throttled = true\n fn.apply(this, args)\n\n setTimeout(() => throttled = false, delay)\n }\n }\n}\n\nBC.debounce = function(fn, delay = 10) {\n let timeoutId = null\n const debounced = function(...args) {\n const callback = () => fn.apply(this, args)\n clearTimeout(timeoutId)\n timeoutId = setTimeout(callback, delay)\n }\n debounced.cancel = () => clearTimeout(timeoutId)\n return debounced\n}\n", "BC.displayingTurboPreview = () => document.documentElement.dataset.turboPreview != null\n", "/* eslint-disable\n no-useless-escape,\n*/\nexport function camelize(dashString) {\n const element = document.createElement(\"span\")\n element.setAttribute(`data-${dashString}`, \"\")\n return Object.keys(element.dataset)[0]\n}\n\nexport function dasherize(camelString) {\n const element = document.createElement(\"span\")\n element.dataset[camelString] = \"\"\n return element.attributes[0]?.name.slice(5)\n}\n\nexport function normalize(string) {\n return string.normalize(\"NFKD\").replace(/\\p{Diacritic}/gu, \"\")\n}\n\nexport const regexpEscape = string => string.toString().replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\")\n\nexport function stringIsEntirelyEmoji(string) {\n if (!string?.trim()) { return false }\n const content = string.replace(BC.EMOJI_PATTERN, \"\")\n return !content.match(/\\S/)\n}\n\nexport function truncate(string, length, omission = \"\u2026\") {\n if (string.length <= length) {\n return string\n } else {\n return string.slice(0, length - omission.length) + omission\n }\n}\n\nexport function toSentence(strings) {\n if (strings.length === 0) {\n return \"\"\n } else if (strings.length === 1) {\n return strings[0]\n } else {\n return strings.slice(0, -1).join(\", \") + \" and \" + strings.at(-1)\n }\n}\n\nBC.camelize = camelize\nBC.dasherize = dasherize\nBC.normalize = normalize\nBC.regexpEscape = regexpEscape\nBC.stringIsEntirelyEmoji = stringIsEntirelyEmoji\nBC.truncate = truncate\nBC.toSentence = toSentence\n", "// Keep in sync with Template::RelativeDates::BASE_DATE\nBC.TEMPLATE_BASE_DATE = CalendarDate.parse(\"1978-01-01\")\n", "BC.fetch = function(url, options = {}) {\n let fetch, headers\n if (!url?.length) { throw new TypeError(\"Missing required URL argument\") }\n\n const contentType = options.contentType != null ? options.contentType : getContentTypeForBody(options.body)\n const responseType = options.as != null ? options.as : \"text\"\n\n const fetchOptions = {\n credentials: options.credentials != null ? options.credentials : \"same-origin\",\n method: options.method != null ? options.method : \"get\",\n headers: (headers = BC.copyObject(options.headers != null ? options.headers : {})),\n body: ((options.body != null) ? options.body : undefined),\n keepalive: options.keepalive\n }\n\n if (options.signal) {\n fetchOptions.signal = options.signal\n }\n\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\"\n headers[\"X-CSRF-Token\"] = BC.getAuthenticityToken()\n if (contentType != null) { headers[\"Content-Type\"] = contentType }\n\n if ((responseType === \"json\") || (contentType === \"application/json\")) {\n if (headers.Accept == null) { headers.Accept = \"application/json\" }\n }\n\n if (nativeFetchIsBuggyForMethod(fetchOptions.method)) {\n headers[\"X-Fetch-Type\"] = \"polyfill-forced\"\n fetch = window.fetchPolyfill\n } else {\n headers[\"X-Fetch-Type\"] = fetchIsNative() ? \"native\" : \"polyfill\";\n ({\n fetch\n } = window)\n }\n\n return fetch(url, fetchOptions)\n .then(checkStatus)\n .then(parseBody(responseType))\n}\n\nconst nativeFetchIsBuggyForMethod = function(method = \"\") {\n return fetchIsNative() &&\n /Windows.*Edge/.test(navigator.userAgent) &&\n [\"put\", \"patch\"].includes(method.toLowerCase())\n}\n\nconst fetchIsNative = () => window.fetch !== window.fetchPolyfill\n\nconst getContentTypeForBody = function(body) {\n if ((body == null) || body instanceof FormData) {\n return null\n } else if (body instanceof File) {\n return body.type\n } else {\n return \"application/octet-stream\"\n }\n}\n\nconst checkStatus = function(response) {\n let authUrl\n if (200 <= response.status && response.status < 300) {\n return response\n } else if ((response.status === 401) && (authUrl = response.getResponseHeader(\"WWW-Authenticate\"))) {\n return window.location.replace(authUrl)\n } else {\n const error = new Error(response.statusText)\n error.response = response\n throw error\n }\n}\n\nconst parseBody = responseType => (function(response) {\n switch (responseType) {\n case \"blob\": return response.blob()\n case \"json\": return response.json()\n case \"text\": return response.text()\n }\n})\n\nBC.xhr = function(url, options = {}) {\n if (!url?.length) { throw new TypeError(\"Missing required URL argument\") }\n const xhr = new XMLHttpRequest\n const method = options.method != null ? options.method : \"get\"\n xhr.open(method, url, true)\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\")\n xhr.setRequestHeader(\"X-CSRF-Token\", BC.getAuthenticityToken())\n if (options.contentType != null) { xhr.setRequestHeader(\"Content-Type\", options.contentType) }\n if (options.credentials) { xhr.withCredentials = true }\n return xhr\n}\n", "/* eslint-disable\n no-useless-escape,\n no-misleading-character-class,\n*/\n// Unicode letter, number, and punctuation regular expressions generated by XRegExp\n\nBC.LETTER_PATTERN = /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/\n\nBC.NUMBER_PATTERN = /[\\u0030-\\u0039\\u00B2\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]/\n\nBC.PUNCTUATION_PATTERN = /[\\u0021-\\u0023\\u0025-\\u002A\\u002C-\\u002F\\u003A\\u003B\\u003F\\u0040\\u005B-\\u005D\\u005F\\u007B\\u007D\\u00A1\\u00A7\\u00AB\\u00B6\\u00B7\\u00BB\\u00BF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E3B\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n\n// One emoji, spelled however a system picker spells it: a flag's pair of\n// regional indicators, a subdivision flag's tag characters, a keycap, a modifier\n// base carrying a skin tone (some keyboards put U+FE0F between them), a\n// character that renders as emoji on its own, or a character that needs U+FE0F\n// to render as emoji. Only a zero-width joiner reaches past one of those. What\n// follows a joiner is spelled loosely in practice, so there the U+FE0F is\n// optional and the joiner may dangle with nothing after it. The lookaheads\n// carry the exclusions: regional indicators and skin tones only lead an emoji\n// as part of a flag or a toned base, U+FE0E asks for the text form of a\n// symbol, and \\p{Extended_Pictographic} on its own would admit pictographs\n// nobody calls an emoji, the chess pieces among them.\n//\n// \\p{RGI_Emoji} says all of this in one property but needs the `v` flag, which\n// iOS 16 WebViews lack. They bypass the browser version gate; see the Safari\n// 16.x note in sidebar_controller.js.\nconst emojiCore = ({ joined }) => [\n String.raw`\\p{Regional_Indicator}{2}`,\n String.raw`\\u{1F3F4}[\\u{E0020}-\\u{E007E}]+\\u{E007F}`,\n String.raw`[0-9#*]\\uFE0F\\u20E3`,\n String.raw`\\p{Emoji_Modifier_Base}\\uFE0F?\\p{Emoji_Modifier}`,\n String.raw`(?![\\p{Regional_Indicator}\\p{Emoji_Modifier}])\\p{Emoji_Presentation}(?!\\uFE0E)\\uFE0F?`,\n String.raw`(?=\\p{Emoji})\\p{Extended_Pictographic}(?!\\uFE0E)\\uFE0F` + (joined ? \"?\" : \"\")\n].join(\"|\")\n\nBC.EMOJI_PATTERN = new RegExp(String.raw`(?:${emojiCore({ joined: false })})(?:\\u200D(?:${emojiCore({ joined: true })})?)*`, \"gu\")\n\nBC.EMOJI_SKIN_TONE_PATTERN = /(?:\\uD83C[\\uDFFB-\\uDFFF])/g\n", "const {userAgent} = window.navigator\n\nconst ios = /iPhone|iPad|iOS/.test(userAgent)\nconst android = /Android/.test(userAgent)\nconst mobile = ios || android\n\nconst iosApp = /BC3 iOS/.test(userAgent)\nconst androidApp = /BC3 Android/.test(userAgent)\nconst mobileApp = iosApp || androidApp\nconst desktopApp = /Electron/.test(userAgent)\n\nconst mac = /Mac/.test(userAgent)\nconst windows = /Windows/.test(userAgent)\n\nconst isChrome = userAgent.match(/chrome/i)\nconst isSafari = (userAgent.match(/safari/i) && !isChrome) || iosApp\nconst isFirefox = userAgent.match(/firefox/i)\n\nBC.platform = {\n isIOS: () => ios,\n isAndroid: () => android,\n isMobile: () => mobile ,\n isIOSApp: () => iosApp,\n isAndroidApp: () => androidApp,\n isMobileApp: () => mobileApp,\n isDesktopApp: () => desktopApp,\n isMac: () => mac,\n isWindows: () => windows,\n isSafari: () => isSafari,\n isChrome: () => isChrome,\n os: (() => {\n if (mac) {\n return \"mac\"\n } else if (windows) {\n return \"windows\"\n } else {\n return \"\"\n }\n })(),\n browser: (() => {\n if (isChrome) {\n return \"chrome\"\n } else if (isSafari) {\n return \"safari\"\n } else if (isFirefox) {\n return \"firefox\"\n } else {\n return \"\"\n }\n })(),\n buildNumber() {\n const match = userAgent.match(/\\(build (\\d+);/)\n if (match) { return match[1] } else { return 0 }\n }\n}\n\nBC.platformConfigurationIncludes = configuration => BC.matches(document.documentElement, `[data-bridge-configuration~=${configuration}]`)\n", "import \"./platform_helpers\"\n\nBC.desktopWindowFocused = true\n\nBC.documentIsActive = (function() {\n const isVisible = () => document.visibilityState === \"visible\"\n const isFocused = () => document.hasFocus()\n\n if (BC.platform.isMobile()) {\n return () => isVisible()\n } else if (BC.platform.isDesktopApp()) {\n return () => isVisible() && BC.desktopWindowFocused\n } else {\n return () => isVisible() && isFocused()\n }\n})()\n", "// Copied from Trix. Useful independently as we lazy-load trix\n// so can't guarantee the equivalent class will be available\n// when trix hasn't loaded.\n\nlet ucs2decode, ucs2encode\nBC.UTF16String = class UTF16String {\n static box(value = \"\") {\n if (value instanceof this) {\n return value\n } else {\n return this.fromUCS2String(value?.toString())\n }\n }\n\n static fromUCS2String(ucs2String) {\n return new (this)(ucs2String, ucs2decode(ucs2String))\n }\n\n static fromCodepoints(codepoints) {\n return new (this)(ucs2encode(codepoints), codepoints)\n }\n\n constructor(ucs2String, codepoints) {\n this.ucs2String = ucs2String\n this.codepoints = codepoints\n this.length = this.codepoints.length\n this.ucs2Length = this.ucs2String.length\n }\n\n offsetToUCS2Offset(offset) {\n return ucs2encode(this.codepoints.slice(0, Math.max(0, offset))).length\n }\n\n offsetFromUCS2Offset(ucs2Offset) {\n return ucs2decode(this.ucs2String.slice(0, Math.max(0, ucs2Offset))).length\n }\n\n slice() {\n return this.constructor.fromCodepoints(this.codepoints.slice(...arguments))\n }\n\n charAt(offset) {\n return this.slice(offset, offset + 1)\n }\n\n isEqualTo(value) {\n return this.constructor.box(value).ucs2String === this.ucs2String\n }\n\n toJSON() {\n return this.ucs2String\n }\n\n getCacheKey() {\n return this.ucs2String\n }\n\n toString() {\n return this.ucs2String\n }\n}\n\nconst hasArrayFrom = Array.from?.(\"\\ud83d\\udc7c\").length === 1\nconst hasStringCodePointAt = (\" \".codePointAt?.(0) != null)\nconst hasStringFromCodePoint = String.fromCodePoint?.(32, 128124) === \" \\ud83d\\udc7c\"\n\n// UCS-2 conversion helpers ported from Mathias Bynens' Punycode.js:\n// https://github.com/bestiejs/punycode.js#punycodeucs2\n\n// Creates an array containing the numeric code points of each Unicode\n// character in the string. While JavaScript uses UCS-2 internally,\n// this function will convert a pair of surrogate halves (each of which\n// UCS-2 exposes as separate characters) into a single code point,\n// matching UTF-16.\nif (hasArrayFrom && hasStringCodePointAt) {\n ucs2decode = string => Array.from(string).map(char => char.codePointAt(0))\n} else {\n ucs2decode = function(string) {\n const output = []\n let counter = 0\n const {\n length\n } = string\n\n while (counter < length) {\n let value = string.charCodeAt(counter++)\n if ((0xD800 <= value && value <= 0xDBFF) && (counter < length)) {\n // high surrogate, and there is a next character\n const extra = string.charCodeAt(counter++)\n if ((extra & 0xFC00) === 0xDC00) {\n // low surrogate\n value = ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000\n } else {\n // unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair\n counter--\n }\n }\n output.push(value)\n }\n\n return output\n }\n}\n\n// Creates a string based on an array of numeric code points.\nif (hasStringFromCodePoint) {\n ucs2encode = array => String.fromCodePoint(...Array.from(array || []))\n} else {\n ucs2encode = function(array) {\n const characters = []\n\n Array.from(array).forEach((value) => {\n let output = \"\"\n if (value > 0xFFFF) {\n value -= 0x10000\n output += String.fromCharCode(((value >>> 10) & 0x3FF) | 0xD800)\n value = 0xDC00 | (value & 0x3FF)\n }\n characters.push(output + String.fromCharCode(value))\n })\n\n return characters.join(\"\")\n }\n}\n", "BC.animateElementWithClass = (element, className, callback) => applyClassAwaitingEvent(element, className, \"animationend\", callback)\n\nBC.transitionElementWithClass = (element, className, callback) => applyClassAwaitingEvent(element, className, \"transitionend\", callback)\n\nBC.shakeElement = element => BC.animateElementWithClass(element, \"oops-shake-it\")\n\nconst applyClassAwaitingEvent = function(element, className, eventName, callback) {\n let timeout\n let uninstalled = false\n\n const uninstall = function() {\n if (!uninstalled) {\n uninstalled = true\n element.removeEventListener(eventName, uninstall)\n return requestAnimationFrame(function() {\n element.classList.remove(className)\n return callback?.()\n })\n }\n }\n\n element.addEventListener(eventName, uninstall)\n element.classList.add(className)\n\n // Failsafe: If we don't receive a {transition,animation}end event\n // for some reason, ensure that uninstall is still called.\n const duration = getDuration(element, eventName)\n if (duration) {\n timeout = duration + 200\n } else {\n timeout = 500\n }\n\n return setTimeout(uninstall, timeout)\n}\n\nconst getDuration = function(element, eventName) {\n const type = eventName === \"animationend\" ? \"animation\" : \"transition\"\n const duration = getComputedStyle(element)[`${type}Duration`]\n if (duration) {\n if (/ms/.test(duration)) {\n return parseInt(duration, 10)\n } else {\n return parseFloat(duration) * 1000\n }\n }\n}\n", "BC.makeElement = function(tagName, attributes) {\n const element = document.createElement(tagName)\n for (const name in attributes) { const value = attributes[name]; element.setAttribute(name, value) }\n return element\n}\n", "BC.EMOJI = {\n \"\uD83E\uDD29\": \"Face with starry eyes\",\n \"\uD83E\uDD73\": \"Partying face\",\n \"\uD83D\uDE0A\": \"Smiling face with flush cheeks\",\n \"\uD83D\uDE00\": \"Grinning face\",\n \"\uD83D\uDE05\": \"Grinning face with sweat drop\",\n \"\uD83D\uDE02\": \"Face with tears of joy\",\n \"\uD83D\uDE0E\": \"Smiling face with sunglasses\",\n \"\uD83D\uDE09\": \"Winking face\",\n \"\uD83D\uDE1C\": \"Winking face with stuck out tongue\",\n \"\uD83D\uDE2C\": \"Grimacing face\",\n \"\uD83D\uDE2E\": \"Surprised face with open mouth\",\n \"\uD83D\uDE33\": \"Flushed face\",\n \"\uD83E\uDD14\": \"Thinking face\",\n \"\uD83D\uDE12\": \"Unamused face\",\n \"\uD83D\uDE22\": \"Crying face\",\n \"\uD83D\uDE2D\": \"Loudly crying face\",\n \"\uD83D\uDE31\": \"Face screaming in fear\",\n \"\uD83D\uDC4D\": \"Thumbs up\",\n \"\uD83D\uDC4F\": \"Clapping\",\n \"\uD83D\uDC4B\": \"Waving hand\",\n \"\uD83D\uDE4C\": \"Hands raised in celebration\",\n \"\uD83D\uDE4F\": \"Hands pressed together\",\n \"\uD83D\uDCAA\": \"Flexed bicep\",\n \"\uD83E\uDD18\": \"Sign of the horns\",\n \"\u270A\": \"Raised fist\",\n \"\uD83D\uDC4E\": \"Thumbs down\",\n \"\u270C\uFE0F\": \"Peace\",\n \"\uD83D\uDC48\": \"Finger pointing left\",\n \"\uD83D\uDC46\": \"Finger pointing Up\",\n \"\u270B\": \"Raised hand\",\n \"\uD83C\uDF89\": \"Party popper\",\n \"\u2728\": \"Sparkles\",\n \"\u2764\uFE0F\": \"Red heart\",\n \"\uD83D\uDCAF\": \"100 points\",\n \"\uD83D\uDC40\": \"Eyes\",\n \"\uD83D\uDCA9\": \"Pile of poop\",\n \"\u2600\uFE0F\": \"Sun\",\n \"\uD83C\uDF19\": \"Moon\",\n \"\uD83D\uDCA5\": \"Collision\",\n \"\uD83D\uDD25\": \"Fire\",\n \"\uD83C\uDF82\": \"Birthday cake\",\n \"\uD83C\uDF74\": \"Fork and knife\",\n \"\uD83D\uDCB0\": \"Money bag\",\n \"\uD83E\uDD47\": \"Gold medal\",\n \"\uD83D\uDEA8\": \"Red flashing light\",\n \"\uD83D\uDCA1\": \"Light bulb\",\n \"\uD83D\uDEE0\": \"Hammer and wrench\",\n \"\uD83D\uDCC8\": \"Chart with upward trend\",\n \"\u2705\": \"Check mark\",\n \"\uD83D\uDCE2\": \"Public address loudspeaker\"\n}\n", "if (!window.JST) window.JST = {}\nwindow.JST['all/behaviors/element/flash_notice'] = function(object){\nvar __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n__p+='
\\n
\\n ';\n if (object.icon) { \n__p+='\\n \\n ';\n } \n__p+='\\n\\n '+\n((__t=( object.message ))==null?'':_.escape(__t))+\n'\\n
\\n
\\n';\nreturn __p;\n}", "// Keep template in sync with app/views/layout/html/_flash_notice.html.erb\nimport \"../../all/behaviors/element/flash_notice.jst.ejs\"\n\nconst selector = \"[data-behavior~=flash_message_container]\"\n\nBC.displayFlashMessage = (message, { icon = true, classes = \"\", duration = 5 } = {}) => {\n const element = document.querySelector(selector)\n element.innerHTML = JST[\"all/behaviors/element/flash_notice\"]({ message, icon, classes, duration })\n}\n", "// Handle event on document\n// BC.handleEvent(\"click\", myHandler)\n//\n// Handle event on document matching a selector\n// BC.handleEvent(\"click\", matching: \"[data-behavior=clickme]\", with: myHandler)\n//\n// Handle event on an element\n// BC.handleEvent(\"click\", on: element, with: myHandler)\n//\n// Handle event on an element matching a selector\n// BC.handleEvent(\"click\", on: element, matching: \"[data-behavior=clickme]\", with: myHandler)\n//\n// Handle event once\n// BC.handleEvent(\"click\", once: true, with: myHandler)\n// # or\n// BC.handleEvent(\"click\", times: 1, with: myHandler)\n//\n// Handle even in capturing phase\n// BC.handleEvent(\"click\", phase: \"capturing\", with: myHandler)\n//\n// Uninstall a handler\n// handler = BC.handleEvent(\"click\", myHandler)\n// handler.destroy()\n//\nBC.handleEvent = function(eventName, options = {}) {\n let handler\n if (typeof options === \"function\") {\n handler = options\n options = {with: handler}\n }\n\n handler = options.with\n const element = options.on != null ? options.on : document\n const selector = options.matching\n const useCapture = options.phase === \"capturing\"\n let times = options.times != null ? options.times : (options.once ? 1 : undefined)\n\n const wrappedHandler = function(event) {\n if ((times != null) && (--times === 0)) {\n wrappedHandler.destroy()\n }\n\n if (selector != null) {\n if (BC.closest(event.target, selector)) {\n return handler.call(this, event)\n }\n } else {\n return handler.call(this, event)\n }\n }\n\n wrappedHandler.destroy = () => element.removeEventListener(eventName, wrappedHandler, useCapture)\n\n element.addEventListener(eventName, wrappedHandler, useCapture)\n return wrappedHandler\n}\n\n// Used by Android/iOS\nBC.triggerEvent = function(element, type, properties) {\n const event = createEvent(type, properties)\n element.dispatchEvent(event)\n return event\n}\n\nBC.triggerCustomEvent = function(element, type, properties) {\n const event = new CustomEvent(type, { detail: properties })\n element.dispatchEvent(event)\n return event\n}\n\nBC.getEventCoordinates = function(event) {\n if (event.originalEvent) { event = event.originalEvent }\n const source = event.touches?.[0] != null ? event.touches?.[0] : event\n return BC.sliceObject(source, \"pageX\", \"pageY\", \"clientX\", \"clientY\")\n}\n\nBC.on = function(eventNames, description, handler) {\n if (handler == null) {\n handler = description\n description = null\n }\n\n return Array.from(eventNames.split(\" \")).map((eventName) =>\n bind(eventName, handler, description))\n}\n\nconst events = {}\n\nconst bind = function(event, handler, description = \"(anonymous)\") {\n const entry = [handler, description]\n const handlers = events[event]\n if (handlers) {\n return handlers.push(entry)\n } else {\n events[event] = [entry]\n return $(document).bind(event, handle(event))\n }\n}\n\nconst handle = event => (function() {\n const handleEvents = () => {\n return (() => {\n Array.from(events[event]).forEach(([handler, description]) => {\n try {\n if (BC.debug) {\n const handlerTime = BC.measure(handler.bind(this, arguments))\n console.log(\" %sms: %s\", formatTime(handlerTime), description)\n } else {\n handler.apply(this, arguments)\n }\n } catch (err) {\n if (BC.debug) {\n console.error(\"%s raised:\\n%s\", description, err)\n }\n }\n })\n })()\n }\n\n if (BC.debug) {\n console.group(\"[%s] %s\", event, location.pathname)\n const totalTime = BC.measure(handleEvents)\n console.log(\"%sms total\", formatTime(totalTime))\n return console.groupEnd()\n } else {\n return handleEvents()\n }\n})\n\nconst formatTime = ms => Math.round(ms * 1000) / 1000\n\nconst createEvent = function(type, properties = {}) {\n const isMouseEvent = [ \"click\", \"mousedown\", \"mouseup\" ].includes(type)\n const event = document.createEvent(isMouseEvent ? \"MouseEvent\" : \"Event\")\n\n event.initEvent(type, true, true)\n\n for (const key in properties) {\n const value = properties[key]\n event[key] = value\n }\n return event\n}\n", "// Adapted from http://stackoverflow.com/a/2117523\n\nBC.generateUUID = function() {\n const template = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"\n return template.replace(/[xy]/g, function(char) {\n const rand = (Math.random() * 16) | 0\n const value = char === \"x\" ? rand : ((rand & 0x3)|0x8)\n return value.toString(16)\n })\n}\n", "BC.focusModeEnabled = () => document.documentElement.hasAttribute(\"data-focus-mode-enabled\")\n\nBC.enableFocusMode = function() {\n if (!BC.focusModeEnabled()) {\n document.documentElement.classList.add(\"focus-mode\")\n document.documentElement.setAttribute(\"data-focus-mode-enabled\", \"\")\n BC.triggerEvent(document, \"bc:focusmode-change\")\n }\n}\n\nBC.disableFocusMode = function() {\n document.documentElement.classList.remove(\"focus-mode\")\n document.documentElement.removeAttribute(\"data-focus-mode-enabled\", \"\")\n BC.triggerEvent(document, \"bc:focusmode-change\")\n}\n", "let lastInputWasKeyboard = false\nlet listening = false\n\nconst trackInputType = (event) => {\n lastInputWasKeyboard = event.type === \"keydown\"\n}\n\nconst startTracking = () => {\n if (listening) return\n document.addEventListener(\"keydown\", trackInputType, true)\n document.addEventListener(\"pointerdown\", trackInputType, true)\n listening = true\n}\n\nif (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", startTracking, { once: true })\n} else {\n startTracking()\n}\n\nBC.lastInputWasKeyboard = () => {\n return lastInputWasKeyboard\n}\n", "const matchesProp = (function() {\n const html = document.documentElement\n const props = [\"matches\", \"matchesSelector\", \"webkitMatchesSelector\", \"msMatchesSelector\", \"mozMatchesSelector\"]\n for (const prop of Array.from(props)) { if (html[prop] != null) { return prop } }\n})()\n\nBC.matches = (element, selector) => element[matchesProp](selector)\n\nBC.closest = function(element, selector) {\n if (\"closest\" in element) {\n return element.closest(selector)\n } else {\n while (element) {\n if (BC.matches(element, selector)) {\n return element\n } else {\n element = element.parentElement\n }\n }\n }\n}\n\nBC.elementIsVisible = function(element) {\n if (element.clientHeight === 0) { return false }\n const {display, visibility, opacity} = getComputedStyle(element)\n return (display !== \"none\") && (visibility !== \"hidden\") && (parseInt(opacity) !== 0)\n}\n\nBC.elementInViewport = function(element) {\n const {topAboveViewport, topInViewport, bottomInViewport, bottomBelowViewport} = getPositionsInViewport(element, BC.findScrollableAncestor(element))\n\n return topInViewport || bottomInViewport || (topAboveViewport && bottomBelowViewport)\n}\n\nBC.elementIsViewable = element => BC.elementIsVisible(element) && BC.elementInViewport(element)\n\nBC.scrollElementIntoViewport = function(element) {\n const scrollable = BC.findScrollableAncestor(element)\n const {topAboveViewport, bottomBelowViewport} = getPositionsInViewport(element, scrollable)\n\n if (topAboveViewport || bottomBelowViewport) {\n if (scrollable) {\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n element.scrollIntoView({ block: \"nearest\" })\n window.scrollTo(scrollX, scrollY)\n } else if (topAboveViewport) {\n element.scrollIntoView()\n } else {\n element.scrollIntoView(false)\n }\n }\n}\n\nBC.findScrollableAncestor = function(element) {\n const scrollable = BC.closest(element, \"[scrollable]\")\n return (scrollable && scrollable !== element) ? scrollable : null\n}\n\nconst getPositionsInViewport = function(element, scrollable) {\n const viewport = getViewportDetails(scrollable)\n const {top, bottom, height} = element.getBoundingClientRect()\n const topOffset = top - viewport.top\n const bottomOffset = (viewport.height + viewport.top) - bottom\n\n const topAboveViewport = topOffset < 0\n const topInViewport = 0 <= topOffset && topOffset < viewport.height\n const bottomInViewport = (0 <= bottomOffset) && (viewport.top < bottom)\n const bottomBelowViewport = bottomOffset < 0\n const fitsInViewport = height <= viewport.height\n\n return {topAboveViewport, topInViewport, bottomInViewport, bottomBelowViewport, fitsInViewport}\n}\n\nconst getViewportDetails = function(scrollable) {\n if (scrollable) {\n const rect = scrollable.getBoundingClientRect()\n const style = getComputedStyle(scrollable)\n const scrollPaddingTop = parseFloat(style.scrollPaddingTop) || 0\n const scrollPaddingBottom = parseFloat(style.scrollPaddingBottom) || 0\n const height = Math.max(0, rect.height - scrollPaddingTop - scrollPaddingBottom)\n return {height, top: rect.top + scrollPaddingTop}\n } else {\n return {height: window.innerHeight, top: 0}\n }\n}\n", "/* eslint-disable\n no-empty,\n*/\nBC.startDebugging = function() {\n try { window.localStorage.setItem(\"debug\", true) } catch (error) {}\n BC.debug = true\n}\n\nBC.stopDebugging = function() {\n try { window.localStorage.removeItem(\"debug\") } catch (error) {}\n BC.debug = false\n}\n\nBC.debug = (window.localStorage?.debug != null)\n", "let domLoaded = false\n\ndocument.addEventListener(\"DOMContentLoaded\", () => domLoaded = true)\n\nBC.ready = function(callback) {\n if (callback == null) { return domLoaded }\n if (domLoaded) {\n return callback()\n } else {\n return document.addEventListener(\"DOMContentLoaded\", callback)\n }\n}\n\nBC.cableReady = function(callback) {\n if (BC.cable) {\n return callback()\n } else {\n return document.addEventListener(\"bc:cable-ready\", callback)\n }\n}\n", "BC.keyCodes = {\n backspace: 8,\n tab: 9,\n enter: 13,\n escape: 27,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n j: 74,\n forwardSlash: 191,\n semicolon: 186,\n spacebar: 32\n}\n", "// Mirror of Colored::CANONICAL_COLOR_NAMES. Old enum values persist in the\n// database; the CSS tokens (--recording-color-) use the renamed forms.\nconst CANONICAL_COLOR_NAMES = {\n white: \"canvas\",\n brown: \"sand\",\n gray: \"primary\"\n}\n\n// Mirror of Colored::ORDERED_COLORS \u2014 palette order for color pickers.\nBC.recordingColors = [ \"white\", \"yellow\", \"orange\", \"red\", \"pink\", \"purple\", \"blue\", \"green\", \"brown\", \"gray\" ]\n\nBC.recordingColorValue = function(color) {\n const canonical = CANONICAL_COLOR_NAMES[color] || color\n return color ? `var(--recording-color-${canonical})` : \"\"\n}\n\nBC.recordingColorStyle = function(color) {\n const value = BC.recordingColorValue(color)\n return value ? `--recording-color: ${value};` : \"\"\n}\n\nBC.getHexColor = function(color) {\n if (!color) { return \"\" }\n if (/^#/.test(color)) { return color }\n const rgbValues = getRGBValues(color)\n const hexValues = rgbValues.map(numberToHex)\n return \"#\" + hexValues.join(\"\")\n}\n\nconst numberToHex = number => `0${number.toString(16)}`.slice(-2).toUpperCase()\n\nconst getRGBValues = function(color) {\n let b, g, r\n const match = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i)\n if (match) {\n r = match[1]\n g = match[2]\n b = match[3]\n } else {\n const canvas = document.createElement(\"canvas\")\n canvas.width = 1\n canvas.height = 1\n const context = canvas.getContext(\"2d\")\n context.fillStyle = color\n context.fillRect(0, 0, 1, 1)\n const {data} = context.getImageData(0, 0, 1, 1);\n [r, g, b] = Array.from(data)\n }\n return [r, g, b].map(Number)\n}\n", "export function getCookie(name) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : []\n const prefix = `${encodeURIComponent(name)}=`\n const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\")\n return value ? decodeURIComponent(value) : undefined\n }\n}\n\nconst twentyYears = 20 * 365 * 24 * 60 * 60 * 1000\n\nexport function setCookie(name, value) {\n const body = [ name, value ].map(encodeURIComponent).join(\"=\")\n const expires = new Date(Date.now() + twentyYears).toUTCString()\n const cookie = `${body}; path=/; expires=${expires}`\n document.cookie = cookie\n}\n\nexport function removeCookie(name) {\n document.cookie = `${encodeURIComponent(name)}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`\n}\n", "export function getMetaContent(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)?.getAttribute(\"content\")\n}\n", "import { getCookie } from \"../../lib/cookie\"\nimport { getMetaContent } from \"../../helpers/meta_helpers\"\n\nBC.getAuthenticityToken = () => {\n return getCookie(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\")\n}\n", "let readObject\nBC.readObjectFromMetaTags = (readObject = function(prefix, root = document) {\n const result = {}\n\n Array.from(root.querySelectorAll(`meta[name^='${prefix}-']`)).forEach((element) => {\n const name = BC.camelize(element.getAttribute(\"name\").slice(prefix.length + 1))\n const value = element.getAttribute(\"content\")\n result[name] = value\n })\n\n return result\n})\n\nconst refresh = function() {\n if (BC.current == null) { BC.current = {} }\n\n BC.current.account = readObject(\"current-account\")\n BC.current.bucket = readObject(\"current-bucket\")\n BC.current.dockTool = readObject(\"current-dock-tool\")\n BC.current.person = readObject(\"current-person\")\n BC.current.recording = readObject(\"current-recording\")\n BC.current.page = readObject(\"current-page\")\n}\n\n\ndocument.addEventListener(\"turbo:render\", refresh)\nrefresh()\n", "BC.env = document.querySelector(\"meta[name='current-env']\").content\n", "BC.FileUploadPreviewCompletion = class FileUploadPreviewCompletion {\n constructor(data, delegate) {\n this.stopPollingForUpdate = this.stopPollingForUpdate.bind(this)\n this.checkForUpdateOrStop = this.checkForUpdateOrStop.bind(this)\n this.didGetUpdate = this.didGetUpdate.bind(this)\n this.data = data\n this.delegate = delegate\n if (this.isProcessing()) {\n this.pollForUpdate()\n }\n }\n\n isProcessing() {\n return this.data && this.data.processing_preview && this.data.status_url\n }\n\n pollForUpdate() {\n if (!this.active) {\n this.active = true\n this.deadline = performance.now() + 300000 // give up after 5 min\n this.delay = 500\n this.location = window.location\n this.scheduleUpdate()\n }\n }\n\n scheduleUpdate() {\n if (this.timer) {\n clearTimeout(this.timer)\n }\n\n // Doubling intervals, starting at 1 sec, capped at 16 sec.\n this.delay = Math.min(16000, 2 * this.delay)\n this.timer = setTimeout(this.checkForUpdateOrStop, this.delay)\n }\n\n stopPollingForUpdate() {\n if (this.active) {\n clearTimeout(this.timer)\n this.timer = null\n this.location = null\n this.deadline = null\n this.delay = null\n this.active = null\n }\n }\n\n checkForUpdateOrStop() {\n if (this.location === window.location && performance.now() < this.deadline) {\n return this.checkForUpdate()\n } else {\n return this.stopPollingForUpdate()\n }\n }\n\n checkForUpdate() {\n return BC.fetch(this.data.status_url, {as: \"json\", credentials: \"include\"})\n .then(this.didGetUpdate)\n .catch(this.stopPollingForUpdate)\n }\n\n didGetUpdate(data) {\n this.data = data\n if (this.active) {\n if (this.isProcessing()) {\n return this.scheduleUpdate()\n } else {\n this.delegate.previewDidComplete(this.data)\n return this.stopPollingForUpdate()\n }\n }\n }\n}\n", "const exitWarning = \"Your files will not finish uploading if you leave this page.\"\nconst navigateWarning = `${exitWarning} Are you sure you want to go?`\n\n$(document).on(\"turbo:before-visit\", (event) => {\n if (BC.isUploadingFiles() && !isSafeRevisit(event)) {\n if (confirm(navigateWarning)) {\n BC.fileUploadManager.stop()\n return true\n } else {\n return false\n }\n }\n})\n\n// Pages that mark an element with `data-revisit-safe` are asserting that a\n// same-URL Turbo visit (refresh broadcast or same-URL link click) won't\n// disrupt in-progress uploads \u2014 typically because the uploader sits inside a\n// `turbo-morph#preventUpdate:self` wrapper on a morph-refresh page.\nfunction isSafeRevisit(event) {\n return event.detail.url === document.baseURI && !!document.querySelector(\"[data-revisit-safe]\")\n}\n\n$(window).on(\"beforeunload\", function() {\n if (BC.isUploadingFiles()) {\n return exitWarning\n }\n})\n", "// Will only work when called synchronously in response to a\n// user interaction, most likely a click.\nBC.pickFiles = function(options = {}, callback) {\n let accept\n if (typeof options === \"function\") {\n callback = options\n options = {}\n }\n\n const multiple = options.multiple !== false\n if (options.accept) { accept = `${options.accept}` }\n\n let $fileInput = $(\"\")\n if (multiple) { $fileInput.attr(\"multiple\", \"\") }\n if (accept) { $fileInput.attr(\"accept\", accept) }\n if (BC.platform.isAndroidApp()) { $fileInput.attr(\"capture\", \"user\") }\n $fileInput.hide().appendTo(\"body\")\n\n const uninstall = function() {\n if ($fileInput) {\n $fileInput.remove()\n $fileInput = null\n }\n }\n\n $fileInput.on(\"change\", function(event) {\n callback(multiple ? this.files : this.files[0])\n return uninstall()\n })\n\n $fileInput.click()\n\n return BC.defer(() => $(document).one(\"click\", uninstall))\n}\n", "/* eslint-disable\n no-unexpected-multiline,\n*/\nconst MAX_CONCURRENT = 1\n\nBC.FileUploadManager = class FileUploadManager {\n constructor({ maxConcurrent = MAX_CONCURRENT } = {}) {\n this.uploadNext = this.uploadNext.bind(this)\n this.didCompleteUpload = this.didCompleteUpload.bind(this)\n this.fileUploads = []\n this.maxConcurrent = maxConcurrent\n }\n\n add(fileUpload) {\n this.fileUploads.push(fileUpload)\n return this.uploadNext()\n }\n\n remove(fileUpload) {\n fileUpload.cancel()\n this.fileUploads = this.fileUploads.filter(f => f !== fileUpload)\n }\n\n stop() {\n return this.fileUploads.forEach(this.remove, this)\n }\n\n getActive() {\n return this.fileUploads.filter(f => f.isActive())\n }\n\n getPending() {\n return this.fileUploads.filter(f => f.isPending())\n }\n\n getActiveOrPending() {\n return this.fileUploads.filter(f => f.isActive() || f.isPending())\n }\n\n getDone() {\n return this.fileUploads.filter(f => f.isDone())\n }\n\n isUploading() {\n return this.getActiveOrPending().length > 0\n }\n\n // Private\n\n canStartUpload() {\n return this.getActive().length < this.maxConcurrent\n }\n\n getNext() {\n return this.getPending()[0]\n }\n\n uploadNext() {\n while (this.canStartUpload()) {\n const fileUpload = this.getNext()\n if (fileUpload) {\n fileUpload.perform()\n .then(this.didCompleteUpload)\n .catch(this.didCompleteUpload)\n } else {\n break\n }\n }\n }\n\n didCompleteUpload() {\n this.getDone().forEach(this.remove, this)\n return this.uploadNext()\n }\n}\n\n", "import \"./file_upload_preview_completion\"\n\nconst PENDING = 1\nconst ACTIVE = 2\nconst DONE = 3\n\nconst EMPTY_FILE_ERROR = \"It looks like that file is empty. Files must be greater than 0 bytes.\"\n\nBC.FileUpload = class FileUpload {\n constructor({file, form, url, method, manager}) {\n let contentType\n this.requestDidProgress = this.requestDidProgress.bind(this)\n this.requestDidLoad = this.requestDidLoad.bind(this)\n this.requestDidError = this.requestDidError.bind(this)\n this.manager = manager\n if (file) {\n this.payload = (this.file = file)\n contentType = \"application/octet-stream\"\n } else if (form) {\n this.file = form.file\n this.payload = new FormData()\n this.payload.append(form.name, this.file)\n } else {\n throw new Error(\"No file or form provided\")\n }\n\n if (this.manager == null) { this.manager = BC.fileUploadManager }\n this.state = PENDING\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve\n this.reject = reject\n\n })\n\n this.xhr = BC.xhr(url, {method: method != null ? method : \"post\", contentType, credentials: true})\n this.xhr.upload.addEventListener(\"progress\", this.requestDidProgress)\n this.xhr.addEventListener(\"load\", this.requestDidLoad)\n this.xhr.addEventListener(\"error\", (event) => {\n const error = new Error(`File upload failed: ${this.xhr.status} ${this.xhr.statusText}`.trim())\n error.xhr = this.xhr\n this.requestDidError(error)\n })\n }\n\n enqueue() {\n return this.manager.add(this)\n }\n\n destroy() {\n this.cancel()\n return this.manager.remove(this)\n }\n\n perform() {\n if (this.file.size > 0) {\n this.state = ACTIVE\n this.xhr.send(this.payload)\n } else {\n this.finalize({error: EMPTY_FILE_ERROR})\n }\n return this.promise\n }\n\n cancel() {\n if (this.isActive()) {\n this.xhr.abort()\n this.delegate?.fileUploadDidCancel?.()\n }\n this.state = DONE\n }\n\n isPending() {\n return this.state === PENDING\n }\n\n isActive() {\n return this.state === ACTIVE\n }\n\n isDone() {\n return this.state === DONE\n }\n\n // Private\n\n finalize({error} = {}) {\n this.state = DONE\n if (error != null) {\n this.reject()\n return this.delegate?.fileUploadDidFail?.(error)\n } else {\n this.resolve()\n this.delegate?.fileUploadDidComplete?.(this.getResponseData())\n return this.checkForPreviewCompletion()\n }\n }\n\n getResponseData() {\n if (!this.responseData) {\n try {\n this.responseData = JSON.parse(this.xhr.responseText)\n } catch (error) {\n this.responseData = this.xhr.responseText\n }\n }\n return this.responseData\n }\n\n // Request event handlers\n\n requestDidProgress(event) {\n const percent = (event.loaded / event.total) * 100\n\n ErrorReporting.breadcrumb({\n level: \"info\",\n category: \"xhr.progress\",\n message: `XHR progress ${percent}%`,\n data: {\n percent,\n event\n }\n })\n\n if ((typeof(percent) === \"number\") && !isNaN(percent)) {\n return this.delegate?.fileUploadDidProgress?.(percent)\n }\n }\n\n requestDidLoad(event) {\n if (200 <= this.xhr.status && this.xhr.status < 300) {\n return this.finalize()\n } else {\n return this.finalize({error: `status ${this.xhr.status}`})\n }\n }\n\n requestDidError(error) {\n return this.finalize({error})\n }\n\n // Preview completion\n\n checkForPreviewCompletion() {\n return new BC.FileUploadPreviewCompletion(this.getResponseData(), this)\n }\n\n previewDidComplete(data) {\n return this.delegate?.fileUploadDidProcessPreview?.(data)\n }\n}\n", "// ActiveStorage reports direct upload failures as strings with the filename\n// interpolated: 'Error reading ', 'Error creating Blob for \"\". Status: ',\n// 'Error storing \"\". Status: '.\n//\n// Reading errors come from FileReader: the browser couldn't read the file because it\n// was moved, deleted, or changed after being selected. Status: 0 means the request\n// never completed: network drop, offline, or navigating away mid-upload. Both are\n// user-environment failures the upload delegates already surface to the user, not\n// something to report. The rest are reported with the filename stripped, so user\n// content stays out of Sentry.\nexport function reportDirectUploadError(error) {\n const message = String(error)\n\n if (message.startsWith(\"Error reading \")) return\n\n const status = message.match(/Status: (\\d+)/)?.[1] ?? \"unknown\"\n if (status === \"0\") return\n\n if (message.startsWith(\"Error creating Blob\")) {\n ErrorReporting.capture(new Error(`Direct upload failed creating blob. Status: ${status}`))\n } else if (message.startsWith(\"Error storing\")) {\n ErrorReporting.capture(new Error(`Direct upload failed storing file. Status: ${status}`))\n } else {\n ErrorReporting.capture(error)\n }\n}\n", "/* eslint-disable\n no-unexpected-multiline,\n*/\nimport { reportDirectUploadError } from \"../../lib/direct_upload_error_reporting\"\n\nconst PENDING = 1\nconst ACTIVE = 2\nconst DONE = 3\n\nBC.DirectFileUpload = class DirectFileUpload {\n constructor({ file, url, token, attachmentName, manager, authenticate }) {\n this.directUploadDidProgress = this.directUploadDidProgress.bind(this)\n this.manager = manager\n this.file = file\n if (this.manager == null) { this.manager = BC.fileUploadManager }\n this.authenticate = authenticate\n this.state = PENDING\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve\n this.reject = reject\n })\n this.directUpload = new ActiveStorage.DirectUpload(this.file, url, this)\n }\n\n enqueue() {\n return this.manager.add(this)\n }\n\n destroy() {\n this.cancel()\n return this.manager.remove(this)\n }\n\n perform() {\n this.state = ACTIVE\n\n this.directUpload.create((error, attributes) => {\n return this.finalize({ error, attributes })\n })\n\n return this.promise\n }\n\n cancel() {\n if (this.isActive()) {\n this.xhr?.abort()\n this.delegate?.fileUploadDidCancel?.()\n }\n\n this.state = DONE\n }\n\n isPending() {\n return this.state === PENDING\n }\n\n isActive() {\n return this.state === ACTIVE\n }\n\n isDone() {\n return this.state === DONE\n }\n\n // ActiveStorage.DirectUpload delegate\n\n directUploadWillCreateBlobWithXHR(xhr) {\n if (this.authenticate) xhr.withCredentials = true\n }\n\n directUploadWillStoreFileWithXHR(xhr) {\n if (this.authenticate) xhr.withCredentials = true\n this.xhr = xhr\n return this.xhr.upload.addEventListener(\"progress\", this.directUploadDidProgress)\n }\n\n directUploadDidProgress(event) {\n const percent = (event.loaded / event.total) * 100\n\n ErrorReporting.breadcrumb({\n level: \"info\",\n category: \"xhr.progress\",\n message: `XHR progress ${percent}%`,\n data: {\n percent,\n event\n }\n })\n\n if ((typeof (percent) === \"number\") && !isNaN(percent)) {\n return this.delegate?.fileUploadDidProgress?.(percent)\n }\n }\n\n // Private\n\n finalize({ error, attributes } = {}) {\n this.state = DONE\n\n if (error != null) {\n reportDirectUploadError(error)\n this.reject()\n return this.delegate?.fileUploadDidFail?.(error)\n } else {\n this.resolve()\n return this.delegate?.fileUploadDidComplete?.(attributes)\n }\n }\n}\n", "import \"./file_upload_manager\"\nimport \"./file_upload\"\nimport \"./file_upload_preview_completion\"\nimport \"./navigation_warning\"\nimport \"./picker\"\nimport \"./direct_file_upload\"\n\nif (!BC.fileUploadManager) { BC.fileUploadManager = new BC.FileUploadManager }\n\nBC.isUploadingFiles = () => BC.fileUploadManager.isUploading()\n", "BC.BackgroundOperationMonitor = class BackgroundOperationMonitor {\n constructor(url, {maxChecks, delay} = {}) {\n this.check = this.check.bind(this)\n this.evaluateStatus = this.evaluateStatus.bind(this)\n this.url = url\n this.checks = 0\n this.maxChecks = maxChecks != null ? maxChecks : 300\n this.delay = delay != null ? delay : 1000\n }\n\n start() {\n if (this.started == null) {\n this.started = true\n return new Promise((resolve, reject) => {\n this.resolve = resolve\n this.reject = reject\n return this.check()\n })\n }\n }\n\n // Private\n\n check() {\n this.checks += 1\n return this.fetchStatus().then(this.evaluateStatus)\n }\n\n fetchStatus() {\n return BC.fetch(this.url, {as: \"json\"})\n .then(data => data)\n .catch(() => this.reject())\n }\n\n evaluateStatus(data) {\n switch (data.status) {\n case \"completed\": return this.resolve(data)\n case \"failed\": return this.reject(data)\n default: return this.scheduleNextCheckOrTimeout()\n }\n }\n\n scheduleNextCheckOrTimeout() {\n if (this.checks < this.maxChecks) {\n return setTimeout(this.check, this.delay)\n } else {\n return this.reject()\n }\n }\n}\n", "class BcSticky extends HTMLElement {}\nwindow.customElements.define(\"bc-sticky\", BcSticky)\n", "const DIAMETER = 64\n\nclass BcPieChart extends HTMLElement {\n static get observedAttributes() {\n return [\"percent\", \"type\"]\n }\n\n // Render on connect, not in the constructor: a custom element constructor\n // must not add children, or document.createElement() throws NotSupportedError\n // \u2014 and Turbo's morph creates elements that way.\n connectedCallback() {\n this.addEventListener(\"turbo:morph-element\", this.#onMorph)\n this.render()\n }\n\n disconnectedCallback() {\n this.removeEventListener(\"turbo:morph-element\", this.#onMorph)\n }\n\n attributeChangedCallback() {\n this.render()\n }\n\n // The server sends the element empty, so a morph strips the drawn SVG.\n #onMorph = (event) => {\n if (event.target === this) this.render()\n }\n\n get percent() {\n const percent = this.getAttribute(\"percent\")\n return parseInt(percent ? percent : 0, 10)\n }\n\n render() {\n this.diameter = DIAMETER\n this.radius = this.diameter / 2\n this.center = this.radius\n\n switch (this.getAttribute(\"type\")) {\n case \"donut\":\n this.strokeWidth = this.radius * 0.3\n this.radius = this.radius - (this.strokeWidth / 2)\n break\n default:\n this.strokeWidth = this.diameter\n }\n\n this.innerHTML = this.generateHTML()\n }\n\n generatePieCSS() {\n return `stroke-width: ${this.strokeWidth};`\n }\n\n generateSliceCSS() {\n const gap = Math.PI * 2 * this.radius\n const length = this.percent * (gap / 100)\n return this.generatePieCSS() + `stroke-dasharray: ${length} ${gap};`\n }\n\n generateHTML() {\n return `\n \n \n \n `\n }\n}\n\nwindow.customElements.define(\"bc-pie-chart\", BcPieChart)\n\n", "const ONLY_DISCLOSED = \":not(details:not([open]) *)\"\n\nBC.contentFilterConfig = {\n selectors: {\n input: \"[data-behavior~=content_filter_input]\",\n group: `[data-role~=content_filter_group]${ONLY_DISCLOSED}`,\n element: `:is([data-role~=content_filterable], [data-role~=content_pinned])${ONLY_DISCLOSED}`,\n pinned: \"[data-role~=content_pinned]\",\n text: `[data-role~=content_filter_text]${ONLY_DISCLOSED}`,\n hideWhenActive: `[data-behavior~=hide_when_content_filter_active]${ONLY_DISCLOSED}`,\n hideUnlessMatch: `[data-behavior~=hide_unless_content_filter_match]${ONLY_DISCLOSED}`,\n showWhenNoMatches: \"[data-behavior~=show_when_no_content_filter_matches]\",\n hideWhenNoMatches: \"[data-behavior~=hide_when_no_content_filter_matches]\"\n },\n classNames: {\n matched: \"content-filter__match\",\n selected: \"content-filter__selected\"\n }\n}\n", "import \"./config\"\nconst { selectors } = BC.contentFilterConfig\nconst indexSelector = `${selectors.element}, ${selectors.group}`\n\nBC.ContentFilterElementIndex = class ContentFilterElementIndex {\n constructor(element) {\n this.elementDidMutate = this.elementDidMutate.bind(this)\n this.element = element\n this.searchStrings = new WeakMap\n this.createIndex()\n }\n\n getElementsMatchingQuery(query) {\n const index = new Map\n const elements = []\n const queryParts = normalize(`${query}`).split(/\\s+/)\n\n this.index.forEach(function({ searchString, groupElement, pinned }, element) {\n if (pinned || queryParts.every(part => searchString.includes(part))) {\n index.set(element, { groupElement })\n elements.push(element)\n }\n })\n return { index, elements }\n }\n\n getElementAtIndex(index) {\n return this.elements[index]\n }\n\n // Element indexing\n\n createIndex() {\n this.index = new Map\n this.elements = []\n\n Array.from(this.element.querySelectorAll(selectors.group)).forEach((groupElement) => {\n Array.from(groupElement.querySelectorAll(selectors.element)).forEach((element) => {\n this.elements.push(element)\n const searchString = this.fetchSearchStringForElement(element)\n const pinned = element.matches(selectors.pinned)\n this.index.set(element, { searchString, groupElement, pinned })\n })\n })\n\n this.size = this.index.size\n this.pinCount = this.element.querySelectorAll(selectors.pinned).length\n }\n\n updateIndex() {\n this.createIndex()\n return this.delegate?.elementIndexDidUpdate?.()\n }\n\n fetchSearchStringForElement(element) {\n let string = this.searchStrings.get(element)\n if (string) return string\n\n string = this.createSearchStringForElement(element)\n this.searchStrings.set(element, string)\n return string\n }\n\n createSearchStringForElement(element) {\n const strings = []\n\n Array.from(element.querySelectorAll(selectors.text)).forEach(({ textContent, title }) => {\n if (textContent && !Array.from(strings).includes(textContent)) { strings.push(textContent) }\n if (title && !Array.from(strings).includes(title)) { strings.push(title) }\n })\n\n return normalize(strings.join(\" \"))\n }\n\n // Mutation observer\n\n installMutationObserver() {\n this.observer = new MutationObserver(this.elementDidMutate)\n return this.observer.observe(this.element, { childList: true, subtree: true, attributes: true, attributeFilter: [ \"open\" ] })\n }\n\n uninstallMutationObserver() {\n if (this.observer) {\n this.observer.disconnect()\n this.observer = null\n }\n }\n\n elementDidMutate(mutations) {\n if (mutationsAffectIndex(mutations)) {\n return this.updateIndex()\n }\n }\n}\n\nconst normalize = function(string) {\n return BC.normalize(string).toLowerCase().trim()\n}\n\nconst mutationsAffectIndex = function(mutations) {\n for (const mutation of Array.from(mutations)) {\n const { addedNodes, removedNodes } = mutation\n for (const node of Array.from(addedNodes)) { if (nodeAffectsIndex(node)) { return true } }\n for (const node of Array.from(removedNodes)) { if (nodeAffectsIndex(node)) { return true } }\n if (mutation.type === \"attributes\") return true\n }\n return false\n}\n\nconst nodeAffectsIndex = function(node) {\n if (node?.nodeType === Node.ELEMENT_NODE) {\n return BC.matches(node, indexSelector) || node.querySelector(indexSelector)\n }\n}\n", "import \"./config\"\nconst {classNames} = BC.contentFilterConfig\n\nBC.ContentFilterQueryResults = class ContentFilterQueryResults {\n constructor(query, elementIndex) {\n const { index, elements } = elementIndex.getElementsMatchingQuery(query)\n const { pinCount } = elementIndex\n\n this.index = index\n this.elements = elements\n\n this.size = index.size\n this.pinAdjustedMatchCount = this.size - pinCount\n }\n\n render() {\n return this.index.forEach(({groupElement}, element) => {\n element.classList.add(classNames.matched)\n return groupElement.classList.add(classNames.matched)\n })\n }\n\n getElementAtIndex(index) {\n return this.elements[index]\n }\n\n reset() {\n return this.index.forEach(({groupElement}, element) => {\n element.classList.remove(classNames.matched, classNames.selected)\n return groupElement.classList.remove(classNames.matched)\n })\n }\n}\n", "export function announce(message, { assertive = false } = {}) {\n if (message) {\n window.dispatchEvent(new CustomEvent(\"announce\", { detail: { message, assertive } }))\n }\n}\n", "import \"./config\"\nimport \"./element_index\"\nimport \"./query_results\"\nimport { announce } from \"../../../helpers/announcement_helpers\"\n\nconst { selectors, classNames } = BC.contentFilterConfig\nconst ANNOUNCE_RESULTS_DELAY = 300\n\nBC.ContentFilterController = class ContentFilterController {\n constructor(element) {\n this.reset = this.reset.bind(this)\n this.didInput = this.didInput.bind(this)\n this.didKeyDown = this.didKeyDown.bind(this)\n this.announceResults = BC.debounce(this.announceResults.bind(this), ANNOUNCE_RESULTS_DELAY)\n this.element = element\n this.inputElement = this.element.querySelector(selectors.input)\n this.eventHandlers = []\n this.eventHandlers.push(BC.handleEvent(\"input\", { on: this.element, matching: selectors.input, with: BC.debounce(this.didInput) }))\n this.eventHandlers.push(BC.handleEvent(\"keydown\", { on: this.element, matching: selectors.input, with: this.didKeyDown }))\n this.eventHandlers.push(BC.handleEvent(\"turbo:before-cache\", { once: true, with: this.reset }))\n\n const dialogElement = this.element.closest(\"dialog\")\n if (dialogElement) {\n this.eventHandlers.push(BC.handleEvent(\"close\", { on: dialogElement, with: this.reset }))\n }\n\n if (this.element.hasAttribute(\"close-on-select\")) {\n this.didSelect = this.didSelect.bind(this)\n this.didResetSelection = this.didResetSelection.bind(this)\n this.eventHandlers.push(BC.handleEvent(\"change\", { on: this.element, matching: \"input[type=checkbox]\", phase: \"capturing\", with: this.didSelect }))\n this.eventHandlers.push(BC.handleEvent(\"click\", { on: this.element, matching: \"[data-role~=content_filter_reset]\", phase: \"capturing\", with: this.didResetSelection }))\n }\n }\n\n render() {\n if (this.results) {\n this.results.reset()\n this.results = null\n }\n\n if (this.element.query) {\n this.results = new BC.ContentFilterQueryResults(this.element.query, this.getElementIndex())\n this.results.render()\n }\n\n this.element.matchCount = this.results?.pinAdjustedMatchCount\n this.announceResults()\n if (Number(this.element.selectedIndex) < 0 && this.element.autoselect) this.adjustSelectedIndex(1)\n }\n\n announceResults() {\n if (this.element.hasAttribute(\"announce-results\") && this.element.query) {\n announce(this.resultsSummary)\n }\n }\n\n get resultsSummary() {\n if (this.element.matchCount === 0) {\n return \"No results\"\n } else if (this.element.matchCount === 1) {\n return \"1 result\"\n } else {\n return `${this.element.matchCount} results`\n }\n }\n\n renderSelection() {\n this.selectedElement?.classList.remove(classNames.selected)\n this.inputElement.removeAttribute(\"aria-activedescendant\")\n\n this.selectedElement = this.getElementAtIndex(this.element.selectedIndex)\n\n if (this.selectedElement) {\n this.selectedElement.classList.add(classNames.selected)\n this.inputElement.setAttribute(\"aria-activedescendant\", this.ensureOptionId(this.selectedElement))\n return BC.scrollElementIntoViewport(this.selectedElement)\n }\n }\n\n ensureOptionId(element) {\n if (!element.id) {\n element.id = `content-filter-option-${crypto.randomUUID()}`\n }\n return element.id\n }\n\n // Swap the active option for a clone so aria-activedescendant points at a\n // fresh node and screen readers re-announce it when filtering keeps the same\n // option selected.\n refreshSelectedRow() {\n const clone = this.selectedElement.cloneNode(true)\n this.selectedElement.replaceWith(clone)\n this.selectedElement = clone\n this.inputElement.setAttribute(\"aria-activedescendant\", clone.id)\n }\n\n reset() {\n Array.from(this.element.querySelectorAll(selectors.input)).forEach((inputElement) => {\n inputElement.value = \"\"\n })\n\n this.element.query = \"\"\n }\n\n destroy() {\n this.announceResults.cancel()\n this.eventHandlers.forEach((handler) => handler.destroy())\n this.uninstallElementIndex()\n }\n\n // Event handlers\n\n didInput(event) {\n this.element.query = event.target.value\n }\n\n didKeyDown(event) {\n this.installElementIndex()\n\n switch (event.keyCode) {\n case BC.keyCodes.enter:\n event.preventDefault()\n event.stopPropagation()\n // eslint-disable-next-line no-case-declarations\n const linkElement = this.getLinkElementAtIndex(this.element.selectedIndex)\n if (linkElement) {\n if ((event.ctrlKey || event.metaKey) && !(event.shiftKey || event.altKey)) {\n return window.open(linkElement.getAttribute(\"href\"), \"_blank\")\n } else {\n return linkElement.click()\n }\n } else {\n // Fallback: activate button or checkbox in non-link lists (e.g. dialog pickers)\n const buttonElement = this.getButtonElementAtIndex(this.element.selectedIndex)\n if (buttonElement) { return buttonElement.click() }\n const checkboxElement = this.getCheckboxElementAtIndex(this.element.selectedIndex)\n if (checkboxElement) { return checkboxElement.click() }\n }\n break\n case BC.keyCodes.up:\n event.preventDefault()\n event.stopPropagation()\n return this.adjustSelectedIndex(-1)\n case BC.keyCodes.down:\n event.preventDefault()\n event.stopPropagation()\n return this.adjustSelectedIndex(+1)\n }\n }\n\n // Popup selection (opt-in via close-on-select attribute)\n\n didSelect() {\n this.commitSelection()\n }\n\n commitSelection() {\n this.updateSummaryLabels()\n this.setResetAriaSelected(this.element.querySelector(\"input[type=checkbox]:checked\") == null)\n this.closeParentDialog()\n this.announceSelection()\n }\n\n didResetSelection() {\n this.resetSummaryLabels()\n this.setResetAriaSelected(true)\n this.closeParentDialog()\n this.announceSelection()\n }\n\n announceSelection() {\n const target = this.summaryLabelElements?.[0]\n if (target) announce(target.ariaLabel || target.textContent.trim())\n }\n\n setResetAriaSelected(selected) {\n this.element.querySelectorAll(\"[data-role~=content_filter_reset]\").forEach((resetEl) => {\n const item = resetEl.closest(\".popup__item\")\n if (item) item.ariaSelected = String(selected)\n })\n }\n\n updateSummaryLabels() {\n const targets = this.summaryLabelElements\n if (!targets || targets.length == 0) return\n\n const names = [...this.element.querySelectorAll(\"input[type=checkbox]:checked\")].map(checkbox => {\n const item = checkbox.closest(selectors.element)\n const textEl = item?.querySelector(selectors.text)\n return textEl?.dataset.summaryText || textEl?.textContent.trim()\n }).filter(Boolean)\n\n this.setSummaryLabels(targets, this.summarizeSelection(names), names.length)\n }\n\n resetSummaryLabels() {\n const targets = this.summaryLabelElements\n if (!targets || targets.length == 0) return\n this.setSummaryLabels(targets, this.element.getAttribute(\"none-label\") || \"all\")\n }\n\n setSummaryLabels(targets, label, selectionCount) {\n targets.forEach(target => {\n if (target.hasAttribute(\"aria-label\")) {\n target.setAttribute(\"aria-label\", label)\n } else {\n target.textContent = label\n }\n\n if (selectionCount) {\n target.dataset.numberBadge = selectionCount\n } else {\n delete target.dataset.numberBadge\n }\n })\n }\n\n closeParentDialog() {\n const dialog = this.element.closest(\"dialog\")\n if (dialog?.open) {\n dialog.close()\n dialog.setAttribute(\"aria-hidden\", \"true\")\n }\n }\n\n get summaryLabelElements() {\n const ids = this.element.getAttribute(\"summary-for\")?.trim().split(/\\s+/).map(id => `#${id}`)\n return ids ? document.querySelectorAll(ids.join(\",\")) : null\n }\n\n summarizeSelection(names) {\n const noneLabel = this.element.getAttribute(\"none-label\") || \"all\"\n const pluralLabel = this.element.getAttribute(\"plural-label\") || \"items\"\n\n if (names.length === 0) return noneLabel\n if (names.length === 1) return names[0]\n if (names.length === 2) return `${names[0]} and ${names[1]}`\n if (names.length === 3) return `${names[0]}, ${names[1]}, and ${names[2]}`\n return `${names.length} ${pluralLabel}`\n }\n\n // Element Selection\n\n adjustSelectedIndex(distance) {\n const index = this.element.selectedIndex + distance\n if (0 <= index && index <= this.getIndexSize() - 1) {\n const element = this.getElementAtIndex(index)\n if (element) {\n if (this.isElementSelectable(element)) {\n this.element.selectedIndex = index\n } else {\n this.adjustSelectedIndex(distance + (distance < 0 ? -1 : 1))\n }\n }\n }\n }\n\n // Content filter drives visibility via CSS keyed on the `matched` class\n // (`bc-content-filter[match-count] :not(.content-filter__match) { display: none }`),\n // so we can check that directly without the layout-forcing reads that\n // BC.elementIsVisible performs (clientHeight + getComputedStyle).\n isElementSelectable(element) {\n if (element.hidden || element.style.display === \"none\") return false\n if (this.element.hasAttribute(\"match-count\")) {\n return element.classList.contains(classNames.matched)\n }\n return true\n }\n\n getIndexSize() {\n if (this.results) {\n return this.results.size\n } else {\n return this.getElementIndex().size\n }\n }\n\n getElementAtIndex(index) {\n if (this.results) {\n return this.results.getElementAtIndex(index)\n } else {\n return this.getElementIndex().getElementAtIndex(index)\n }\n }\n\n getLinkElementAtIndex(index) {\n const element = this.getElementAtIndex(index)\n if (element) {\n if (element.hasAttribute(\"href\")) {\n return element\n } else {\n return element.querySelector(\"a[href]\")\n }\n }\n }\n\n getButtonElementAtIndex(index) {\n const element = this.getElementAtIndex(index)\n if (element) {\n if (element.tagName === \"BUTTON\") {\n return element\n } else {\n return element.querySelector(\"button\")\n }\n }\n }\n\n getCheckboxElementAtIndex(index) {\n const element = this.getElementAtIndex(index)\n if (element) {\n if (element.tagName === \"INPUT\" && element.type === \"checkbox\") {\n return element\n } else {\n return element.querySelector(\"input[type=checkbox]\")\n }\n }\n }\n\n\n // Element index\n\n installElementIndex() {\n if (!this.elementIndex) {\n this.elementIndex = new BC.ContentFilterElementIndex(this.element)\n this.elementIndex.delegate = this\n this.elementIndex.installMutationObserver()\n }\n }\n\n uninstallElementIndex() {\n if (this.elementIndex) {\n this.elementIndex.uninstallMutationObserver()\n this.elementIndex = null\n }\n }\n\n getElementIndex() {\n this.installElementIndex()\n return this.elementIndex\n }\n\n elementIndexDidUpdate() {\n return this.render()\n }\n}\n", "\nclass BcChatRoomElement extends HTMLElement {\n connectedCallback() {\n if (BC.displayingTurboPreview()) return\n\n BC.cableReady(() => {\n if (!this.room) this.room = BC.Chat.createRoom(this)\n this.room.attached()\n })\n }\n\n disconnectedCallback() {\n if (this.room) {\n this.room.detached()\n this.room = null\n }\n }\n}\n\ncustomElements.define(\"bc-chat-room\", BcChatRoomElement)\n\n", "class BcRequire extends HTMLElement {\n #initialized = false\n\n connectedCallback() {\n // A custom element constructor must not add attributes: document.createElement()\n // throws NotSupportedError if it does, and Turbo's morph creates elements that\n // way. Set [pending] on first connect instead, which runs at the same point\n // during parsing.\n if (!this.#initialized) {\n this.#initialized = true\n this.setAttribute(\"pending\", \"\")\n }\n\n BC.ready(() => {\n // Wait for the browser to be idle before starting the script load and\n // editor upgrade. The script tag itself is hinted via \n // earlier in the document, so the network fetch usually runs in parallel \u2014\n // the idle wait only delays execution and custom element upgrade, keeping\n // JS parsing/initialization off the critical rendering path.\n this.idleHandle = requestIdle(() => {\n this.idleHandle = null\n if (!this.isConnected) return\n\n if (Loader.find(this.script)?.loaded) {\n this.activate()\n } else {\n this.deactivate()\n Loader.load(this.script).then(() => this.isConnected && this.activate())\n }\n })\n })\n }\n\n disconnectedCallback() {\n if (this.idleHandle != null) {\n cancelIdle(this.idleHandle)\n this.idleHandle = null\n }\n }\n\n get script() {\n return this.getAttribute(\"script\")\n }\n\n deactivate() {\n this.placeholderStyle = getPlaceholderStyle(this, \"width\", \"height\")\n for (const key in this.placeholderStyle) {\n const value = this.placeholderStyle[key]\n this.style[key] = value\n }\n this.pendingFragment = document.createDocumentFragment()\n Array.from(this.childNodes).map((child) => this.pendingFragment.appendChild(child))\n }\n\n activate() {\n this.removeAttribute(\"pending\")\n if (this.pendingFragment != null) {\n this.appendChild(this.pendingFragment)\n delete this.pendingFragment\n for (const key in this.placeholderStyle) {\n this.style[key] = null\n }\n delete this.placeholderStyle\n }\n BC.triggerEvent(this, \"bc-require-activate\")\n }\n}\n\nconst getPlaceholderStyle = function(element, ...styles) {\n const computedStyle = getComputedStyle(element)\n const result = {}\n for (const key of styles) {\n result[key] = computedStyle[key]\n }\n return result\n}\n\nwindow.customElements.define(\"bc-require\", BcRequire)\n\nclass Loader {\n static find(script) {\n return this.loaders[script]\n }\n\n static create(script) {\n return this.loaders[script] = new Loader(script)\n }\n\n static load(script) {\n const loaded = this.find(script)\n return loaded ? loaded : this.create(script)\n }\n\n constructor(script) {\n this.didLoad = this.didLoad.bind(this)\n this.script = script\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve\n this.reject = reject\n })\n this.load()\n }\n\n then(callback) {\n return this.promise.then(callback)\n }\n\n load() {\n const link = this.findLinkElement()\n const script = document.createElement(\"script\")\n script.src = link.href\n script.onload = this.didLoad\n link.parentNode.insertBefore(script, link)\n }\n\n didLoad() {\n this.loaded = true\n return this.resolve()\n }\n\n findLinkElement() {\n return document.head.querySelector(`link[rel=subresource][data-script='builds/${this.script}']`)\n }\n}\n\nLoader.loaders = {}\n\n// Small polyfill around requestIdleCallback for Safari <16.4. When the native\n// API is unavailable, approximate \"idle\" by waiting until after the next paint\n// (double rAF + setTimeout(0)) unless the provided timeout elapses first. The\n// returned handle is either an idle-callback id (native) or a setTimeout id\n// (polyfill); cancelIdle handles both.\nfunction requestIdle(callback, { timeout = 2000 } = {}) {\n if (typeof window.requestIdleCallback === \"function\") {\n return window.requestIdleCallback(callback, { timeout })\n }\n\n let settled = false\n let timeoutId = null\n const invoke = (didTimeout) => {\n if (settled) return\n settled = true\n if (timeoutId != null) clearTimeout(timeoutId)\n\n const start = performance.now()\n callback({\n didTimeout,\n timeRemaining: () => didTimeout ? 0 : Math.max(0, 50 - (performance.now() - start))\n })\n }\n\n if (typeof timeout === \"number\" && timeout >= 0) {\n timeoutId = setTimeout(() => invoke(true), timeout)\n }\n\n requestAnimationFrame(() => requestAnimationFrame(() => setTimeout(() => invoke(false), 0)))\n\n return timeoutId\n}\n\nfunction cancelIdle(handle) {\n if (handle == null) return\n if (typeof window.cancelIdleCallback === \"function\") {\n window.cancelIdleCallback(handle)\n }\n // The polyfill's handle is a setTimeout id; clearing it is a no-op if the\n // native cancelIdleCallback already handled it.\n clearTimeout(handle)\n}\n\n", "const tagName = \"bc-infinite-page\"\nconst loadingClassName = \"loading\"\nconst scrollClampTolerance = 2\nconst innerContainerSelector = \"[data-infinite-page-container]\"\nconst sentinelDataAttribute = \"data-infinite-page-sentinel\"\n\n// Keeps sentinel ids unique within the same millisecond.\nlet sentinelSequence = 0\n\nconst getDocumentScroll = function(property) {\n property = `scroll${property}`\n return document.body[property] || document.documentElement[property]\n}\n\nconst getContainer = function(element) {\n const container = element.querySelector(innerContainerSelector)\n return container || element\n}\n\nclass BcInfinitePage extends HTMLElement {\n constructor() {\n super(...arguments)\n\n this.recordedParams = []\n }\n\n connectedCallback() {\n this.#applyAttributeDefaults()\n\n // Access the current location on connect, not in the constructor, to\n // ensure turbo has already changed history after navigation.\n this.url = this.nearestUrl\n this.params = BC.getQueryParams(this.url)\n this.params.page = this.page\n\n this.addEventListener(\"turbo:morph-element\", this.#onMorph)\n this.addEventListener(\"pagination:load-next-page\", this.#onLoadNextPage)\n\n BC.ready(() => this.install())\n }\n\n disconnectedCallback() {\n this.url = null\n this.removeEventListener(\"turbo:morph-element\", this.#onMorph)\n this.removeEventListener(\"pagination:load-next-page\", this.#onLoadNextPage)\n this.uninstall()\n }\n\n #onLoadNextPage = () => {\n this.currentTrigger = \"bottom\"\n this.loadNextPage()\n }\n\n #onMorph = (event) => {\n if (event.target !== this) return\n this.uninstall()\n this.#applyAttributeDefaults()\n this.params = BC.getQueryParams(this.url)\n this.params.page = this.page\n this.recordedParams = []\n this.install()\n }\n\n // Default the attribute-backed properties on connect, not in the\n // constructor: a custom element constructor must not add attributes, or\n // document.createElement() throws NotSupportedError \u2014 and Turbo's morph\n // creates elements that way. We reapply on morph too: morphing reconciles\n // the live element against server HTML that omits direction/trigger, so the\n // defaults get stripped and setParamsForNextPage would page the wrong way.\n #applyAttributeDefaults() {\n this.page ??= 1\n this.direction ||= \"down\"\n this.trigger ||= \"bottom\"\n this.triggers = this.trigger.split(\" \")\n }\n\n install() {\n this.installTriggerObserver()\n this.installScrollDispatcher()\n this.installNavigationHandler()\n this.dispatch(\"install\")\n }\n\n uninstall() {\n this.xhr?.abort()\n this.uninstallTriggerObserver?.()\n this.uninstallScrollDispatcher?.()\n this.uninstallNavigationHandler?.()\n this.removeSentinels()\n\n this.pendingPage = null\n this.currentTrigger = null\n this.clearLoadingState()\n }\n\n // A single IntersectionObserver watches sentinel elements placed at the top\n // and bottom of the content container. The rootMargin extends the intersection\n // zone by one viewport height (100%) so the next page starts loading before\n // the user reaches the edge \u2014 same intent as the previous\n // scroll-position reads, but without forcing layout.\n //\n // Percentage rootMargin is resolved by the browser against the root's own\n // layout, so we never need to query `clientHeight` from JavaScript and can\n // skip the `ResizeObserver`-driven refresh the previous implementation needed.\n installTriggerObserver() {\n this.addSentinels()\n\n const root = this.scrollContainer === window ? null : this.scrollContainer\n this.triggerObserver = new IntersectionObserver(\n entries => this.onTriggerIntersection(entries),\n { root, rootMargin: \"100% 0px\" }\n )\n\n if (this.topSentinel) this.triggerObserver.observe(this.topSentinel)\n if (this.bottomSentinel) this.triggerObserver.observe(this.bottomSentinel)\n\n this.uninstallTriggerObserver = () => this.triggerObserver.disconnect()\n }\n\n addSentinels() {\n const container = getContainer(this)\n\n if (this.triggers.includes(\"top\")) {\n this.topSentinel = this.createSentinel(container)\n container.prepend(this.topSentinel)\n }\n if (this.triggers.includes(\"bottom\")) {\n this.bottomSentinel = this.createSentinel(container)\n container.append(this.bottomSentinel)\n }\n }\n\n createSentinel(container) {\n const isListContainer = container.tagName === \"UL\" || container.tagName === \"OL\"\n const sentinel = document.createElement(isListContainer ? \"li\" : \"div\")\n sentinel.setAttribute(sentinelDataAttribute, \"\")\n // A unique id keeps idiomorph from soft-matching the sentinel onto the\n // id-less content container during a morph (which would delete the page).\n // Never key it on this.id alone: when a morph introduces this element,\n // idiomorph inserts it empty and morphs its attributes in afterwards, so\n // the sentinel is created before the element has an id at all.\n sentinel.id = `${this.id || tagName}-sentinel-${Date.now()}-${sentinelSequence++}`\n sentinel.setAttribute(\"aria-hidden\", \"true\")\n if (isListContainer) sentinel.setAttribute(\"role\", \"presentation\")\n sentinel.style.height = \"0px\"\n sentinel.style.pointerEvents = \"none\"\n return sentinel\n }\n\n removeSentinels() {\n this.topSentinel?.remove()\n this.bottomSentinel?.remove()\n this.topSentinel = null\n this.bottomSentinel = null\n }\n\n onTriggerIntersection(entries) {\n for (const entry of entries) {\n if (!entry.isIntersecting) continue\n\n if (entry.target === this.topSentinel) {\n this.currentTrigger = \"top\"\n this.insertPendingPage() || this.loadNextPage()\n } else if (entry.target === this.bottomSentinel) {\n this.currentTrigger = \"bottom\"\n this.loadNextPage()\n }\n }\n }\n\n installScrollDispatcher() {\n // Also watch the scroll position to release pending top pages: the\n // IntersectionObserver only fires on boundary crossings, so once the\n // top sentinel enters the rootMargin zone it stays intersecting the\n // rest of the way to the top and can't re-trigger the insertion.\n // Reading scrollTop here doesn't force layout.\n const handler = BC.throttle(() => {\n if (this.scrollable) this.dispatch(\"scroll\")\n if (this.pendingPage && this.triggers.includes(\"top\") && this.isScrolledToTop()) {\n this.currentTrigger = \"top\"\n this.insertPendingPage()\n }\n })\n // Capture the container so uninstalling removes the listener from the node\n // it was added to: the getter resolves `scroll-container` via `closest()`,\n // which returns null once the element has been detached from that ancestor.\n // `closest()` can already return null at install time too \u2014 the element may\n // be connected but not yet (or no longer) under its `scroll-container`\n // ancestor when the deferred `install()` runs after a Turbo morph. Guard\n // rather than crash on `null.addEventListener`, and leave a no-op teardown\n // so `uninstall()` stays safe.\n const scrollContainer = this.scrollContainer\n if (scrollContainer == null) {\n this.uninstallScrollDispatcher = () => {}\n } else {\n scrollContainer.addEventListener(\"scroll\", handler)\n this.uninstallScrollDispatcher = () => scrollContainer.removeEventListener(\"scroll\", handler)\n }\n }\n\n installNavigationHandler() {\n const handler = this.uninstall.bind(this)\n document.addEventListener(\"turbo:visit\", handler)\n this.uninstallNavigationHandler = () => document.removeEventListener(\"turbo:visit\", handler)\n }\n\n dispatch(type, properties) {\n return BC.triggerEvent(this, `${tagName}:${type}`, properties)\n }\n\n get nearestUrl() {\n const currentLocation = window.location\n const turboFrameSrc = this.closest(\"turbo-frame\")?.getAttribute(\"src\")\n const base = this.getAttribute(\"url\") || turboFrameSrc || currentLocation\n return new URL(base, currentLocation.origin)\n }\n\n get page() {\n if (this.hasAttribute(\"page\")) {\n return parseInt(this.getAttribute(\"page\"))\n } else {\n return null\n }\n }\n\n set page(value) {\n this.setAttribute(\"page\", value)\n }\n\n get trigger() {\n return this.getAttribute(\"trigger\")\n }\n\n set trigger(value) {\n this.setAttribute(\"trigger\", value)\n }\n\n get direction() {\n return this.getAttribute(\"direction\")\n }\n\n set direction(value) {\n this.setAttribute(\"direction\", value)\n }\n\n get scrollable() {\n return this.hasAttribute(\"scrollable\")\n }\n\n get scrollContainer() {\n const selector = this.getAttribute(\"scroll-container\")\n return selector ? this.closest(selector) : (this.scrollable ? this : window)\n }\n\n get isBottomAnchored() {\n return this.scrollable && this.direction === \"up\"\n }\n\n // Scroll position helpers \u2014 used during the load sequence to decide whether\n // to insert a pending page or stash it until the user is back at the top,\n // and by callers such as the chat transcript controller. These force layout,\n // but only run in response to user-initiated loads, not during initial render.\n\n // Browsers round scrollHeight and clientHeight to integers but clamp\n // scrollTop on the layout's subpixel grid, so at a fractional\n // devicePixelRatio (125% display scaling or browser zoom) a fully scrolled\n // element can rest up to ~2px short of the rounded distance. A 1px\n // tolerance left pending top pages stranded there, permanently stalling\n // pagination while the user sat pinned against the top.\n isScrolledToTop() {\n if (this.isBottomAnchored) {\n return this.getScrollDistanceToEnd() <= scrollClampTolerance\n } else {\n return this.getScrollDistance() <= scrollClampTolerance\n }\n }\n\n getScrollDistance() {\n return Math.abs(this.scrollContainer === window ? getDocumentScroll(\"Top\") : this.scrollContainer.scrollTop)\n }\n\n getScrollHeight() {\n return this.scrollContainer === window ? getDocumentScroll(\"Height\") : this.scrollContainer.scrollHeight\n }\n\n getInnerHeight() {\n return this.scrollContainer === window ? window.innerHeight : this.scrollContainer.clientHeight\n }\n\n getScrollDistanceToEnd() {\n return this.getScrollHeight() - this.getInnerHeight() - this.getScrollDistance()\n }\n\n // Paging\n\n showLoadingState() {\n if (!this.loading) {\n this.loading = true\n this.classList.add(loadingClassName)\n }\n }\n\n clearLoadingState() {\n if (this.loading) {\n this.loading = false\n this.classList.remove(loadingClassName)\n }\n }\n\n shouldLoadNextPage() {\n return this.url &&\n this.checkVisibility() &&\n !BC.displayingTurboPreview() &&\n !this.loading &&\n !this.pendingPage &&\n !(this.hasAttribute(`reached-${this.currentTrigger}`) || this.hasAttribute(\"reached-infinity\"))\n }\n\n loadNextPage() {\n if (this.shouldLoadNextPage()) {\n this.setParamsForNextPage()\n this.loadPage()\n }\n }\n\n loadPage() {\n const event = this.dispatch(\"beforeload\")\n\n if (!event.defaultPrevented) {\n if (this.recordParams(this.params)) {\n this.showLoadingState()\n this.xhr = this.performRequest()\n this.xhr.done(html => this.didLoadPage(html))\n this.xhr.always(() => this.clearLoadingState())\n }\n }\n }\n\n performRequest(params = this.params) {\n if (!this.url) return $.Deferred().reject().promise()\n return $.get(this.url.pathname, params)\n }\n\n didLoadPage(html) {\n const element = $(html).find(tagName).get(0)\n if (element) {\n const content = getContainer(element).innerHTML.trim()\n if (content) {\n this.setPendingPage(content) || this.insertPage(content)\n\n if (element.hasAttribute(\"reached-infinity\")) {\n this.reachedLastPage()\n }\n } else {\n this.reachedLastPage()\n }\n } else {\n this.reachedLastPage()\n }\n }\n\n setPendingPage(content) {\n if ((this.currentTrigger === \"top\") && !this.isScrolledToTop()) {\n this.pendingPage = content\n return true\n }\n }\n\n insertPendingPage() {\n if (this.pendingPage && this.isScrolledToTop()) {\n this.insertPage(this.pendingPage)\n this.pendingPage = null\n return true\n }\n }\n\n // Insert new content adjacent to the matching sentinel so the sentinels stay\n // at the edges of the rendered content. Falls back to the container edge if\n // the sentinel is absent (e.g., a trigger that was never armed).\n insertPage(content) {\n const container = getContainer(this)\n let anchor, position, scrollAnchor\n\n if (this.currentTrigger === \"top\") {\n anchor = this.topSentinel || container\n position = this.topSentinel ? \"afterend\" : \"afterbegin\"\n scrollAnchor = this.topSentinel ? this.topSentinel.nextElementSibling : container.firstElementChild\n } else {\n anchor = this.bottomSentinel || container\n position = this.bottomSentinel ? \"beforebegin\" : \"beforeend\"\n }\n\n requestAnimationFrame(() => {\n // Bail out if the anchor was detached between scheduling the rAF and\n // running it (e.g., a Turbo Morph swapped the surrounding container).\n // Safari throws NoModificationAllowedError when insertAdjacentHTML\n // targets a node without a parent.\n if (!anchor.isConnected) return\n\n scrollAnchor = this.dispatch(\"before-render\", { scrollAnchor }).scrollAnchor\n\n window.ScrollAnchoring.preservePosition(scrollAnchor, () => {\n anchor.insertAdjacentHTML(position, content)\n if (this.params.page != null) { ({ page: this.page } = this.params) }\n this.dispatch(\"render\")\n })\n\n this.rearmTriggerObserver()\n })\n }\n\n // Force the IntersectionObserver to re-emit the sentinel's state. If a\n // content filter hides the inserted rows the sentinel doesn't move and\n // the observer stays latched at intersecting, so the next page never loads.\n rearmTriggerObserver() {\n const sentinel = this.currentTrigger === \"top\" ? this.topSentinel : this.bottomSentinel\n if (this.triggerObserver && sentinel) {\n this.triggerObserver.unobserve(sentinel)\n this.triggerObserver.observe(sentinel)\n }\n }\n\n reachedLastPage() {\n if (this.triggers.length > 1) {\n this.setAttribute(`reached-${this.currentTrigger}`, \"\")\n if (this.hasAttribute(\"reached-top\") && this.hasAttribute(\"reached-bottom\")) {\n this.setAttribute(\"reached-infinity\", \"\")\n }\n } else {\n this.setAttribute(\"reached-infinity\", \"\")\n }\n }\n\n setParamsForNextPage() {\n if (this.params.page != null) {\n if (((this.direction === \"up\") && (this.currentTrigger === \"top\")) || ((this.direction === \"down\") && (this.currentTrigger === \"bottom\"))) {\n this.params.page++\n } else {\n this.params.page--\n }\n }\n }\n\n recordParams(params) {\n params = JSON.stringify(params)\n if (!this.recordedParams.includes(params)) {\n this.recordedParams.push(params)\n return true\n }\n }\n\n forgetParams(params) {\n params = JSON.stringify(params)\n if (this.recordedParams.includes(params)) {\n this.recordedParams = (this.recordedParams.filter((p) => p !== params))\n }\n return true\n }\n}\n\nwindow.customElements.define(tagName, BcInfinitePage)\n", "export function nextFrame() {\n return new Promise(requestAnimationFrame)\n}\n\nexport function nextIdle() {\n return new Promise(window.requestIdleCallback || setTimeout)\n}\n\n// Defers a callback until the browser is idle (after first paint and style/layout have settled).\n// Returns a cancel function. Use this to avoid layout-invalidating work in controller connect()\n// methods that would otherwise force extra style-recalc/paint cycles between FCP and LCP.\n//\n// Example:\n// connect() {\n// this.cancelIdleSetup = whenIdle(() => this.#expensiveSetup())\n// }\n// disconnect() {\n// this.cancelIdleSetup?.()\n// }\nexport function whenIdle(callback, { timeout = 500 } = {}) {\n if (typeof window.requestIdleCallback === \"function\") {\n const handle = window.requestIdleCallback(callback, { timeout })\n return () => window.cancelIdleCallback(handle)\n } else {\n const handle = setTimeout(callback, 0)\n return () => clearTimeout(handle)\n }\n}\n\nexport function delay(ms = 1) {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nexport function lexxyInitialization(element) {\n if (!element.editor) {\n return nextEvent(element, \"lexxy:initialize\")\n } else {\n return Promise.resolve(element)\n }\n}\n\nexport function nextEvent(element, eventName) {\n return new Promise(resolve => element.addEventListener(eventName, (event) => resolve(event), { once: true }))\n}\n", "export function activateFocusTrap(element) {\n if (element) {\n const controllers = new Set(element.dataset.controller?.split(/\\s+/).filter(Boolean))\n controllers.add(\"focus-trap\")\n element.dataset.controller = [ ...controllers ].join(\" \")\n element.dataset.focusTrapTarget = \"region\"\n element.dataset.focusTrapActiveValue = \"true\"\n }\n}\n\nexport function deactivateFocusTrap(element) {\n element?.setAttribute(\"data-focus-trap-active-value\", \"false\")\n}\n", "import { nextFrame } from \"../../helpers/timing_helpers\"\nimport { activateFocusTrap, deactivateFocusTrap } from \"../../helpers/focus_trap_helpers\"\n\nclass BcModal extends HTMLElement {\n #openerElement = null\n #fallbackRegion = null\n #regionObserver = null\n\n constructor() {\n super(...arguments)\n this.eventHandlers = []\n this.deferredRefresh = false\n }\n\n get defaultType() {\n return \"box\"\n }\n\n connectedCallback() {\n if (!this.hasAttribute(\"type\")) {\n this.setAttribute(\"type\", this.defaultType)\n }\n\n if (this.getAttribute(\"opened\") !== \"false\") {\n this.open()\n }\n }\n\n disconnectedCallback() {\n this.close()\n }\n\n get dialog() {\n return this.querySelector(\":scope > dialog[data-show-modal]\")\n }\n\n async open(eventProperties = {}) {\n // Fixes issue where some times Trix editors in modals are not properly\n // initalised in Firefox\n await nextFrame()\n\n if (this.getAttribute(\"opened\") !== \"true\") {\n this.setAttribute(\"opened\", \"true\")\n this.#openerElement = this.#openerFor(eventProperties)\n\n this.eventHandlers.push(BC.handleEvent(\"turbo:before-morph-element\", {on: this, with: (event) => {\n if (event.target === this) event.preventDefault()\n }}))\n\n const autofocused = this.querySelector(\"[autofocus]\")\n if (autofocused) {\n autofocused.select ? autofocused.select() : autofocused.focus()\n }\n\n const dialog = this.dialog\n if (dialog) {\n dialog.showModal()\n this.#nameDialog(dialog)\n\n // showModal contains focus but doesn't wrap Tab at the ends, so the focus\n // trap adds the cycling.\n activateFocusTrap(dialog)\n\n this.eventHandlers.push(BC.handleEvent(\"cancel\", {on: dialog, with: (event) => {\n event.preventDefault()\n this.close()\n }}))\n\n if (this.closeOnClickOutside) {\n this.eventHandlers.push(BC.handleEvent(\"mousedown\", {on: dialog, with: didDialogMouseDown.bind(this)}))\n this.eventHandlers.push(BC.handleEvent(\"click\", {on: dialog, with: didDialogClick.bind(this)}))\n }\n\n if (this.customizeKeyboardInteraction) {\n this.eventHandlers.push(BC.handleEvent(\"keydown\", {on: dialog, with: (event) => {\n if (event.keyCode === BC.keyCodes.escape) event.stopPropagation()\n }}))\n }\n } else {\n this.#watchFallbackRegion()\n\n if (this.closeOnClickOutside) {\n this.eventHandlers.push(BC.handleEvent(\"mousedown\", {on: this, with: didMouseDown.bind(this)}))\n this.eventHandlers.push(BC.handleEvent(\"click\", {on: this, with: didClick.bind(this)}))\n }\n\n if (this.customizeKeyboardInteraction) {\n // Capture phase so the modal claims Esc before document-level bubble\n // listeners (e.g. the sidebar controller's keydown.esc@document) can\n // hand focus away. Without this, a sidebar Esc handler registered on\n // page load would fire first and preventDefault, leaving the modal open.\n this.eventHandlers.push(BC.handleEvent(\"keydown\", {phase: \"capturing\", with: didKeyDown.bind(this)}))\n }\n }\n\n if (this.closeOnScroll) {\n this.eventHandlers.push(BC.handleEvent(\"scroll\", {with: didScroll.bind(this)}))\n this.eventHandlers.push(BC.handleEvent(\"wheel\", {with: didScroll.bind(this)}))\n }\n\n if (this.closeOnSubmit) {\n this.eventHandlers.push(BC.handleEvent(\"turbo:submit-end\", {with: (event) => {\n const { formElement, submitter } = event?.detail?.formSubmission || {}\n if (!formElement?.hasAttribute(\"data-keep-modal-open\") && !submitter?.hasAttribute(\"data-keep-modal-open\")) {\n this.close()\n }\n }}))\n }\n\n if (this.lockOnSubmit) {\n this.eventHandlers.push(BC.handleEvent(\"turbo:submit-start\", {with: this.lock.bind(this)}))\n this.eventHandlers.push(BC.handleEvent(\"turbo:submit-end\", {with: this.unlock.bind(this)}))\n }\n\n if (this.defersBackgroundRefresh) {\n this.eventHandlers.push(BC.handleEvent(\"turbo:before-stream-render\", {with: (event) => {\n if (event.target.getAttribute(\"action\") === \"refresh\") {\n event.preventDefault()\n this.deferredRefresh = true\n }\n }}))\n }\n\n this.modalbox = this.querySelector(\"bc-modal[type='box'] > :first-child\")\n\n // Ensure the Modal isn't taller than the viewport\n if ($(this.modalbox).height() > window.innerHeight) {\n this.modalbox.style.height = `${window.innerHeight}px`\n }\n\n BC.triggerEvent(this, \"open\", eventProperties)\n }\n }\n\n close(eventProperties) {\n if (this.getAttribute(\"opened\") !== \"false\") {\n this.setAttribute(\"opened\", \"false\")\n const dialog = this.dialog\n if (dialog?.open) dialog.close()\n let handler = this.eventHandlers.pop()\n while (handler) {\n handler.destroy()\n handler = this.eventHandlers.pop()\n }\n this.unlock()\n if (dialog) {\n deactivateFocusTrap(dialog)\n } else {\n deactivateFocusTrap(this.#fallbackRegion)\n this.#stopWatchingFallbackRegion()\n }\n this.#restoreOpenerFocus()\n if (this.deferredRefresh) {\n this.deferredRefresh = false\n window.Turbo.session.refresh(location.href)\n }\n BC.triggerEvent(this, \"close\", eventProperties)\n }\n }\n\n get customizeKeyboardInteraction() {\n return !BC.platform.isMobileApp()\n }\n\n get closeOnScroll() {\n return this.hasAttribute(\"close-on-scroll\")\n }\n\n set closeOnScroll(value) {\n value ? this.setAttribute(\"close-on-scroll\", \"\") : this.removeAttribute(\"close-on-scroll\")\n }\n\n get closeOnClickOutside() {\n return this.getAttribute(\"close-on-click-outside\") !== \"false\" && !BC.platform.isMobileApp()\n }\n\n set closeOnClickOutside(value) {\n value ? this.removeAttribute(\"close-on-click-outside\") : this.setAttribute(\"close-on-click-outside\", \"false\")\n }\n\n get closeOnSubmit() {\n return this.getAttribute(\"close-on-submit\") !== \"false\"\n }\n\n set closeOnSubmit(value) {\n value ? this.removeAttribute(\"close-on-submit\") : this.setAttribute(\"close-on-submit\", \"false\")\n }\n\n get lockOnSubmit() {\n return this.getAttribute(\"lock-on-submit\")\n }\n\n set lockOnSubmit(value) {\n value ? this.setAttribute(\"lock-on-submit\", value) : this.removeAttribute(\"lock-on-submit\")\n }\n\n get defersBackgroundRefresh() {\n return this.hasAttribute(\"defer-background-refresh\")\n }\n\n set defersBackgroundRefresh(value) {\n value ? this.setAttribute(\"defer-background-refresh\", \"\") : this.removeAttribute(\"defer-background-refresh\")\n }\n\n lock() {\n this.locked = true\n const unlockAfter = parseInt(this.lockOnSubmit)\n if (unlockAfter > 0) {\n this.unlockTimeout = setTimeout(() => { this.unlock() }, unlockAfter)\n }\n }\n\n unlock() {\n if (this.unlockTimeout) { clearTimeout(this.unlockTimeout) }\n this.locked = false\n }\n\n // Private\n\n #applyDialogSemantics(region) {\n if (region) {\n if (!region.hasAttribute(\"role\")) region.setAttribute(\"role\", \"dialog\")\n if (!region.hasAttribute(\"aria-modal\")) region.setAttribute(\"aria-modal\", \"true\")\n this.#nameDialog(region)\n }\n }\n\n #nameDialog(element) {\n const label = this.getAttribute(\"label\") || element.dataset.modalLabel\n if (label && !element.hasAttribute(\"aria-label\") && !element.hasAttribute(\"aria-labelledby\")) {\n element.setAttribute(\"aria-label\", label)\n }\n }\n\n #restoreOpenerFocus() {\n const opener = this.#openerElement\n this.#openerElement = null\n if (opener?.isConnected) opener.focus({ preventScroll: true })\n }\n\n #openerFor(eventProperties) {\n const opener = eventProperties?.openerElement\n if (this.#canRestoreFocusTo(opener)) {\n return opener\n } else {\n return document.activeElement\n }\n }\n\n #canRestoreFocusTo(element) {\n return typeof element?.focus === \"function\" &&\n element.isConnected &&\n element.checkVisibility() &&\n !element.closest(\"[inert]\")\n }\n\n #watchFallbackRegion() {\n this.#refreshFallbackRegion()\n this.#regionObserver = new MutationObserver(() => this.#refreshFallbackRegion())\n this.#regionObserver.observe(this, { childList: true, subtree: true })\n }\n\n #stopWatchingFallbackRegion() {\n this.#regionObserver?.disconnect()\n this.#regionObserver = null\n this.#fallbackRegion = null\n }\n\n #refreshFallbackRegion() {\n const region = this.#region\n if (region === this.#fallbackRegion) return\n\n deactivateFocusTrap(this.#fallbackRegion)\n this.#fallbackRegion = region\n\n if (region) {\n this.#applyDialogSemantics(region)\n activateFocusTrap(region)\n }\n }\n\n get #region() {\n if (this.hasAttribute(\"data-modal-region\")) return this\n\n return this.querySelector(\"[data-modal-region], .modal-sheet\") || this.firstElementChild\n }\n}\n\nconst isDialogBackdropPointerEvent = function(event) {\n if (event.target !== this.dialog) return false\n\n // A viewport-spanning host dialog is transparent and covers the whole\n // viewport, so its bounding rect never excludes a click. A pointer event\n // targeting the dialog itself can only land outside the injected content.\n if (this.dialog.classList.contains(\"modal-viewport\")) return true\n\n const rect = this.dialog.getBoundingClientRect()\n const { clientX, clientY } = event\n return clientX < rect.left || clientX > rect.right || clientY < rect.top || clientY > rect.bottom\n}\n\nconst didDialogMouseDown = function(event) {\n this.clickStartedOnBackdrop = isDialogBackdropPointerEvent.call(this, event)\n}\n\nconst didDialogClick = function(event) {\n if (isDialogBackdropPointerEvent.call(this, event)) { event.stopPropagation() }\n\n if (!event.defaultPrevented && !this.locked && this.closeOnClickOutside && this.clickStartedOnBackdrop) {\n this.close()\n }\n}\n\nconst didMouseDown = function(event) {\n this.clickStartedOnBackdrop = event.target === this\n}\n\nconst didClick = function(event) {\n if (event.target === this) { event.stopPropagation() }\n\n if (!event.defaultPrevented) {\n if ((event.target === this) && !this.locked && this.closeOnClickOutside && this.clickStartedOnBackdrop) {\n this.close()\n }\n }\n}\n\nconst didKeyDown = function(event) {\n if (!event.defaultPrevented && event.keyCode === BC.keyCodes.escape) {\n const openModals = document.querySelectorAll(\"bc-modal[opened='true']\")\n if (openModals[openModals.length - 1] === this) {\n event.preventDefault()\n event.stopPropagation()\n this.close()\n }\n }\n}\n\nconst didScroll = function(event) {\n let { deltaY } = event\n\n if (!deltaY) {\n if (!this.initialScrollPosition) { this.initialScrollPosition = window.pageYOffset }\n deltaY = this.initialScrollPosition - window.pageYOffset\n }\n\n if (Math.abs(deltaY) >= 40) {\n this.close()\n }\n}\n\nwindow.customElements.define(\"bc-modal\", BcModal)\n", "import \"./content_filter/config\"\nimport \"./content_filter/controller\"\n\n// Usage:\n//\n// \n// \n//\n//
\n// \n//\n//
\n// Hide me unless I match the search query\n//
\n//
\n//\n//

\n// Hide me when searching\n//

\n//\n//

\n// Show me when there are no search results\n//

\n//
\n\nclass BcContentFilter extends HTMLElement {\n static get observedAttributes() {\n return [\"query\", \"selected-index\"]\n }\n\n connectedCallback() {\n if (!BC.displayingTurboPreview()) {\n BC.ready(() => {\n if (this.controller == null) { this.controller = new BC.ContentFilterController(this) }\n if (this.autoselect) { this.selectedIndex = -1 }\n })\n }\n }\n\n disconnectedCallback() {\n this.controller?.destroy()\n this.controller = null\n }\n\n attributeChangedCallback(attributeName) {\n switch (attributeName) {\n case \"query\": {\n const previousSelectedId = this.controller?.selectedElement?.id\n this.selectedIndex = null\n this.controller?.render()\n if (previousSelectedId && this.controller?.selectedElement?.id === previousSelectedId) {\n this.controller.refreshSelectedRow()\n }\n BC.triggerEvent(this, \"bc-content-filter:query\")\n break\n }\n case \"selected-index\":\n this.controller?.renderSelection()\n }\n }\n\n get query() {\n if (this.hasAttribute(\"query\")) {\n return this.getAttribute(\"query\").trim()\n } else {\n return \"\"\n }\n }\n\n set query(value) {\n const query = value?.trim()\n if (query) {\n this.setAttribute(\"query\", query)\n } else {\n this.removeAttribute(\"query\")\n }\n }\n\n get selectedIndex() {\n if (this.hasAttribute(\"selected-index\")) {\n return parseInt(this.getAttribute(\"selected-index\"))\n } else {\n return -1\n }\n }\n\n set selectedIndex(value) {\n if (typeof value !== \"undefined\" && value !== null) {\n this.setAttribute(\"selected-index\", value)\n } else {\n this.removeAttribute(\"selected-index\")\n }\n }\n\n get autoselect() {\n return this.hasAttribute(\"autoselect\")\n }\n\n get matchCount() {\n if (this.hasAttribute(\"match-count\")) {\n return parseInt(this.getAttribute(\"match-count\"))\n } else {\n return 0\n }\n }\n\n set matchCount(value) {\n if (typeof value !== \"undefined\" && value !== null) {\n this.setAttribute(\"match-count\", value)\n } else {\n this.removeAttribute(\"match-count\")\n }\n }\n}\n\nwindow.customElements.define(\"bc-content-filter\", BcContentFilter)\n", "const tagName = \"bc-grouped-dates\"\n\nclass BcGroupedElements extends HTMLElement {\n connectedCallback() {\n BC.ready(() => {\n this.observer = new MutationObserver(this.didMutate.bind(this))\n this.startObserver()\n this.insertDateGroupDividers()\n })\n }\n\n disconnectedCallback() {\n this.stopObserver()\n }\n\n didMutate(mutations) {\n if (mutationsAffectGrouping(mutations)) {\n this.insertDateGroupDividers()\n }\n }\n\n startObserver() {\n if (this.observing) { return }\n this.observing = true\n this.observer.observe(this, {childList: true})\n }\n\n stopObserver() {\n if (!this.observing) { return }\n delete this.observing\n this.observer.disconnect()\n }\n\n withoutObserver(callback) {\n try {\n this.stopObserver()\n callback.call(this)\n } finally {\n this.startObserver()\n }\n }\n\n withUpdateEvents(callback) {\n try {\n BC.triggerEvent(this, `${tagName}:before`)\n callback.call(this)\n } finally {\n BC.triggerEvent(this, `${tagName}:update`)\n }\n }\n\n insertDateGroupDividers() {\n this.withoutObserver(() => {\n this.withUpdateEvents(() => {\n const {dividerElements, datedElements} = groupExistingElements(this.children)\n\n for (const date in datedElements) {\n const [firstDatedElement] = datedElements[date]\n let dividerElement\n\n if (dividerElements[date]) {\n dividerElement = dividerElements[date][0]\n } else {\n const relativePrefix = this.getAttribute(\"divider-date-relative-prefix\") || \"\"\n const absolutePrefix = this.getAttribute(\"divider-date-absolute-prefix\") || \"\"\n dividerElement = createDividerElementForDate(date, relativePrefix, absolutePrefix)\n }\n\n if (!elementFollowedByElement(dividerElement, firstDatedElement)) {\n this.insertBefore(dividerElement, firstDatedElement)\n }\n }\n })\n })\n }\n}\n\nconst groupExistingElements = function(elements) {\n const dividerElements = {}\n const datedElements = {}\n\n for (const element of elements) {\n const datetime = element.dataset.datetime\n if (datetime) {\n const calendarDate = CalendarDate.parse(datetime)\n let collection\n\n if (elementIsDivider(element)) {\n dividerElements[calendarDate] = dividerElements[calendarDate] || []\n collection = dividerElements[calendarDate]\n } else {\n datedElements[calendarDate] = datedElements[calendarDate] || []\n collection = datedElements[calendarDate]\n }\n\n collection.push(element)\n }\n }\n\n return {dividerElements, datedElements}\n}\n\nconst createDividerElementForDate = function(date, relativePrefix, absolutePrefix) {\n const calendarDate = CalendarDate.parse(date)\n const container = document.createElement(\"div\")\n container.innerHTML = getDividerElementHTMLForCalendarDate(calendarDate, relativePrefix, absolutePrefix)\n return container.firstElementChild\n}\n\nconst elementFollowedByElement = (left, right) => {\n return left.compareDocumentPosition(right) === Node.DOCUMENT_POSITION_FOLLOWING\n}\n\nconst elementIsDivider = element => element.hasAttribute(\"data-grouped-dates-divider\")\n\nconst getDividerElementHTMLForCalendarDate = (calendarDate, relativePrefix, absolutePrefix) => {\n const today = calendarDate.isToday() ? \" data-date-today\" : \"\"\n\n return `
\n

\n ${calendarDate.relativeWeekdayOrDate({ relativePrefix, absolutePrefix })}\n

\n
`\n}\n\nconst mutationsAffectGrouping = function(mutations) {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (nodeAffectsGrouping(node)) return true\n }\n\n for (const node of mutation.removedNodes) {\n if (nodeAffectsGrouping(node)) return true\n }\n }\n\n return false\n}\n\nconst nodeAffectsGrouping = node => node?.dataset?.datetime != null\n\nwindow.customElements.define(tagName, BcGroupedElements)\n", "class BcSuggestionSelectElement extends HTMLElement {\n connectedCallback() {\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"listbox\")\n }\n\n get optionElements() {\n return this.querySelectorAll(\"bc-suggestion-option\")\n }\n\n get selectedIndex() {\n const selected = this.querySelector(\"bc-suggestion-option[selected]\")\n return selected?.index\n }\n\n set selectedIndex(value) {\n const optionElements = this.optionElements\n const optionCount = optionElements.length\n\n if (!optionElements.length) return\n\n Array.from(optionElements).forEach(option => {\n option.selected = false\n })\n\n if (value === null || typeof value === \"undefined\") return\n\n const index = Math.max(0, Math.min(optionCount - 1, parseInt(value, 10)))\n optionElements[index].selected = true\n }\n\n get selectedOption() {\n return this.optionElements[this.selectedIndex]\n }\n\n set selectedOption(option) {\n if (option.selectElement === this) {\n this.selectedIndex = option.index\n }\n }\n\n get value() {\n return this.selectedOption?.value\n }\n}\n\ncustomElements.define(\"bc-suggestion-select\", BcSuggestionSelectElement)\n", "\nclass BcSuggestionOptionElement extends HTMLElement {\n constructor() {\n super(...arguments)\n this.flash = BC.synchronize(this.flash)\n }\n\n connectedCallback() {\n this.id ||= `option-${BC.generateUUID()}`\n }\n\n get selectElement() {\n return $(this).closest(\"bc-suggestion-select\").get(0)\n }\n\n get index() {\n if (this.selectElement) {\n return Array.from(this.selectElement.optionElements).indexOf(this)\n } else {\n return null\n }\n }\n\n get selected() {\n return this.hasAttribute(\"selected\")\n }\n\n set selected(value) {\n if (value) {\n this.setAttribute(\"selected\", \"\")\n BC.triggerEvent(this, \"bc:active-option-changed\")\n } else {\n this.removeAttribute(\"selected\")\n }\n }\n\n get value() {\n return this.getAttribute(\"value\")\n }\n\n flash(callback) {\n const drawFrame = (frame = 0) => {\n requestAnimationFrame(() => {\n if (frame == 0) {\n this.classList.add(\"flashing-off\")\n } else if (frame == 4) {\n this.classList.remove(\"flashing-off\")\n }\n\n if (frame == 7) {\n callback()\n } else {\n drawFrame(frame + 1)\n }\n })\n }\n drawFrame(0)\n }\n}\n\nBC.SuggestionOptionElement = BcSuggestionOptionElement\nwindow.customElements.define(\"bc-suggestion-option\", BcSuggestionOptionElement)\n", "BC.SuggestionController = class SuggestionController {\n constructor(delegate) {\n this.commitSuggestion = this.commitSuggestion.bind(this)\n this.characterMatchesWordBoundary = this.characterMatchesWordBoundary.bind(this)\n this.matchQueryAndTerminatorForWord = this.matchQueryAndTerminatorForWord.bind(this)\n this.didPressKey = this.didPressKey.bind(this)\n this.didResizeWindow = this.didResizeWindow.bind(this)\n this.didScrollWindow = this.didScrollWindow.bind(this)\n this.delegate = delegate\n this.installKeyboardListener()\n this.installResizeListeners()\n this.context = null\n this.active = false\n this.committing = false\n this.canceled = false\n }\n\n destroy() {\n this.uninstallResultsController()\n this.uninstallResizeListeners()\n this.uninstallKeyboardListener()\n }\n\n updateWithContentAndPosition(content, position) {\n if (this.committing) { return }\n const previousContext = this.context\n this.context = new BC.SuggestionContext(this, content, position)\n\n if (!this.context.isEqualTo(previousContext)) {\n if (this.context.isTerminated()) {\n return this.commitSuggestion()\n } else if (this.context.isActive()) {\n return this.activateSuggestion()\n } else {\n return this.deactivateSuggestion()\n }\n }\n }\n\n activateSuggestion() {\n if (!this.canceled) {\n this.active = true\n this.installResultsController()\n return this.updateResults(() => {\n if (this.resultsController.hasResults()) {\n return this.displayResults()\n } else {\n return this.hideResults()\n }\n })\n }\n }\n\n deactivateSuggestion() {\n this.uninstallResultsController()\n this.active = false\n this.canceled = false\n }\n\n deactivateSuggestionWithAnimation() {\n this.hideResultsWithAnimation(() => {\n this.deactivateSuggestion()\n })\n }\n\n cancelSuggestion() {\n if (this.active) {\n this.deactivateSuggestion()\n this.canceled = true\n }\n }\n\n resumeSuggestion() {\n if (this.canceled) {\n this.canceled = false\n return this.activateSuggestion()\n }\n }\n\n commitSuggestion({withTerminator} = {}) {\n if (this.committing || this.canceled || !this.active) { return false }\n\n const values = this.selectedValues\n if (values.length == 0) { return false }\n\n const range = [this.context.startPosition, this.context.endPosition]\n const terminator = (withTerminator != null ? withTerminator : this.context.terminator) || \" \"\n\n this.committing = true\n this.resultsController.flashSelection(() => {\n this.committing = false\n this.didCommitValuesAtRangeWithTerminator(values, range, terminator)\n this.deactivateSuggestionWithAnimation()\n })\n\n if (values.length > 1) {\n this.willCommitValuesAtRangeWithTerminator(values, range, terminator, { editor: this.delegate.editor })\n } else {\n this.delegate.willCommitValueAtRangeWithTerminator?.(values[0], range, terminator)\n }\n return true\n }\n\n get selectedValues() {\n const value = this.resultsController.getSelectedValue()\n if (!value) { return [] }\n\n const valueOnlyHasCommaSeparatedNumbers = /^\\d+(,\\d+)*$/.test(value)\n return valueOnlyHasCommaSeparatedNumbers ? value.split(\",\") : [value]\n }\n\n willCommitValuesAtRangeWithTerminator(values, range, terminator, { editor }) {\n editor?.setSelectedRange(range) && editor?.deleteInDirection(\"forward\") // Delete user autocomplete input\n\n values.forEach((value) => {\n this.delegate.willCommitValueAtRangeWithTerminator?.(value, null, terminator)\n range = this.advanceRangeForNextValue(range)\n })\n }\n\n didCommitValuesAtRangeWithTerminator(values, range, terminator) {\n values.forEach((value) => {\n this.delegate.didCommitValueAtRangeWithTerminator?.(value, range, terminator)\n range = this.advanceRangeForNextValue(range)\n })\n }\n\n advanceRangeForNextValue(range) {\n const startPosition = range[1] + 1\n return Array(startPosition, startPosition + 1)\n }\n\n displayResults() {\n if (this.active) {\n const offsets = this.delegate.getOffsetsAtPosition(this.context.startPosition)\n const placement = this.delegate.getResultsPlacement?.()\n return this.resultsController.displayAtOffsets(offsets, {placement})\n }\n }\n\n updateResults(callback) {\n const query = this.context?.query\n return this.delegate.fetchResultsForQuery(query, results => {\n if ((this.resultsController != null) && (query === this.context?.query)) {\n this.resultsController.updateResults(results)\n return callback?.()\n }\n })\n }\n\n hideResults() {\n return this.resultsController.hide()\n }\n\n hideResultsWithAnimation(callback) {\n return this.resultsController?.hideWithAnimation(callback)\n }\n\n isActive() {\n return this.active\n }\n\n isCanceled() {\n return this.canceled\n }\n\n // Suggestion context delegate\n\n characterMatchesWordBoundary(character) {\n if (this.delegate.characterMatchesWordBoundary != null) {\n return this.delegate.characterMatchesWordBoundary(character)\n } else {\n return /[\\s\\uFFFC]/.test(character)\n }\n }\n\n matchQueryAndTerminatorForWord(word) {\n return this.delegate.matchQueryAndTerminatorForWord(word)\n }\n\n // Results controller delegate\n\n didClickOption(option) {\n return setTimeout(this.commitSuggestion, 100)\n }\n\n didShowResults(element) {\n this.hidden = false\n return this.delegate.didShowResults?.(element)\n }\n\n didHideResults(element) {\n this.hidden = true\n return this.delegate.didHideResults?.(element)\n }\n\n // Keyboard events\n\n didPressKey(event) {\n if (this.committing) { return }\n\n let result\n switch (event.keyCode) {\n case 9:\n result = this.didPressTabKey()\n break\n case 10: case 13:\n result = this.didPressReturnKey()\n break\n case 27:\n result = this.didPressEscapeKey()\n break\n case 32:\n result = this.didPressSpaceKey()\n break\n case 38:\n result = this.didPressUpKey()\n break\n case 40:\n result = this.didPressDownKey()\n break\n default:\n result = this.didPressKeyWithValue(event.key)\n }\n\n if (result === false) {\n event.preventDefault()\n return event.stopPropagation()\n }\n }\n\n didPressTabKey() {\n if (this.active) {\n if (this.hidden) {\n this.displayResults()\n return false\n } else if (!this.committing) {\n if (this.commitSuggestion()) {\n return false\n }\n }\n } else if (this.canceled) {\n this.resumeSuggestion()\n return false\n }\n }\n\n didPressReturnKey() {\n if (this.active && !this.hidden) {\n if (this.commitSuggestion()) {\n return false\n }\n }\n }\n\n didPressEscapeKey() {\n if (this.active) {\n this.cancelSuggestion()\n return false\n }\n }\n\n didPressSpaceKey() {\n if (this.active && this.spaceMatchesWordBoundary()) {\n if (this.commitSuggestion()) {\n return false\n }\n }\n }\n\n didPressUpKey() {\n if (this.active) {\n this.resultsController.selectUp()\n return false\n }\n }\n\n didPressDownKey() {\n if (this.active) {\n this.resultsController.selectDown()\n return false\n }\n }\n\n didPressKeyWithValue(value) {\n if (this.active && (value != null) && !this.hidden) {\n const result = this.matchQueryAndTerminatorForWord(value)\n if (result?.query === \"\") {\n this.cancelSuggestion()\n return false\n }\n }\n }\n\n // Scroll and resize events\n\n didResizeWindow() {\n if (this.active) {\n return this.hideResults()\n }\n }\n\n // Hide when the document or any container the suggestions are anchored in\n // scrolls under them (like a modal sheet), but not when scrolling\n // the results themselves.\n didScrollWindow(event) {\n if (this.active && event.target.contains?.(this.delegate.element)) {\n return this.hideResults()\n }\n }\n\n // Private\n\n installKeyboardListener() {\n window.addEventListener(\"keydown\", this.didPressKey, true)\n }\n\n uninstallKeyboardListener() {\n window.removeEventListener(\"keydown\", this.didPressKey, true)\n }\n\n installResizeListeners() {\n window.addEventListener(\"resize\", this.didResizeWindow, true)\n window.addEventListener(\"scroll\", this.didScrollWindow, true)\n }\n\n uninstallResizeListeners() {\n window.removeEventListener(\"resize\", this.didResizeWindow, true)\n window.removeEventListener(\"scroll\", this.didScrollWindow, true)\n }\n\n installResultsController() {\n if (!this.resultsController) {\n this.resultsController = new BC.SuggestionResultsController({ id: this.delegate.getSuggestionsIdentifier(), anchor: this.delegate.element })\n }\n this.resultsController.delegate = this\n }\n\n uninstallResultsController() {\n this.resultsController?.destroy()\n this.resultsController = null\n }\n\n spaceMatchesWordBoundary() {\n return this.characterMatchesWordBoundary(\" \")\n }\n}\n", "BC.SuggestionResultsController = class SuggestionResultsController {\n constructor(options = {}) {\n this.revealOption = this.revealOption.bind(this)\n this.didMouseDown = this.didMouseDown.bind(this)\n this.flashSelection = BC.synchronize(this.flashSelection)\n this.id = options.id || `suggestion_results_${BC.generateUUID()}`\n this.anchorElement = options.anchor\n\n this.#createSelectElement()\n }\n\n destroy() {\n this.hide()\n this.#removeSelectElement()\n }\n\n displayAtOffsets(offsets, {placement} = {}) {\n let availableMaxHeight, elementHeight, height, left, maxHeight, top\n this.show()\n\n this.selectElement.style.height = \"\"\n const style = getComputedStyle(this.selectElement)\n const margin = getElementMargin(this.selectElement)\n\n const elementRect = this.selectElement.getBoundingClientRect()\n const viewportRect = getViewportRect()\n\n const availableHeightAbove = offsets.top - viewportRect.top - margin.top\n const availableHeightBelow = viewportRect.bottom - offsets.bottom - margin.bottom\n const thresholdHeight = this.getOptionHeight() * 3\n\n if (availableHeightAbove > thresholdHeight && thresholdHeight > availableHeightBelow) {\n if (placement == null) { placement = \"above\" }\n } else {\n if (placement == null) { placement = \"below\" }\n }\n\n if (placement === \"above\") {\n availableMaxHeight = availableHeightAbove\n } else {\n availableMaxHeight = availableHeightBelow\n }\n\n if (style.maxHeight === \"none\") {\n maxHeight = availableMaxHeight\n } else {\n const requestedMaxHeight = parseInt(style.maxHeight, 10)\n maxHeight = Math.min(availableMaxHeight, requestedMaxHeight)\n }\n\n if (elementRect.height > maxHeight) {\n elementHeight = (height = maxHeight)\n } else {\n elementHeight = elementRect.height\n }\n\n if (placement === \"above\") {\n top = offsets.top - elementHeight - margin.top\n } else {\n top = offsets.bottom - margin.top\n }\n\n const elementRight = offsets.left + elementRect.width + margin.right\n\n if (elementRight > viewportRect.right) {\n left = offsets.left - (elementRight - viewportRect.right) - margin.right\n } else {\n left = offsets.left - margin.right\n }\n\n // `top` and `left` are viewport coordinates, but a fixed element is placed\n // relative to its containing block. That block is the viewport on the web,\n // but inside the iOS app's modal sheet (or any transformed ancestor) it is\n // offset, which detaches the results from the input. Measure the block's\n // origin and subtract it so the coordinates land in the right place either\n // way. On the web the origin is the viewport, so this is a no-op.\n this.selectElement.style.top = \"0px\"\n this.selectElement.style.left = \"0px\"\n const origin = this.selectElement.getBoundingClientRect()\n\n this.selectElement.style.top = `${top - (origin.top - margin.top)}px`\n this.selectElement.style.left = `${left - (origin.left - margin.left)}px`\n this.selectElement.style.height = height ? `${height}px` : \"auto\"\n }\n\n show() {\n if (!this.visible) {\n this.visible = true\n this.#showPopover()\n this.selectElement.setAttribute(\"aria-hidden\", \"false\")\n this.selectElement.style.visibility = \"\"\n return this.delegate.didShowResults(this.selectElement)\n }\n }\n\n hide() {\n if (this.visible) {\n this.visible = false\n this.#hidePopover()\n this.selectElement.style.visibility = \"hidden\"\n this.selectElement.setAttribute(\"aria-hidden\", \"true\")\n return this.delegate.didHideResults(this.selectElement)\n }\n }\n\n hideWithAnimation = BC.synchronize((callback) => {\n if (this.visible) {\n return BC.transitionElementWithClass(this.selectElement, \"hiding\", () => {\n this.hide()\n return callback()\n })\n } else {\n return callback()\n }\n })\n\n selectUp() {\n this.selectElement.selectedIndex--\n return this.revealOption()\n }\n\n selectDown() {\n this.selectElement.selectedIndex++\n return this.revealOption()\n }\n\n revealOption() {\n const {\n selectedOption\n } = this.selectElement\n if (selectedOption) {\n const {scrollTop} = this.selectElement\n const selectHeight = this.selectElement.clientHeight\n const scrollBottom = scrollTop + selectHeight\n\n const optionTop = selectedOption.offsetTop\n const optionHeight = selectedOption.offsetHeight\n const optionBottom = optionTop + optionHeight\n\n if (optionTop < scrollTop) {\n this.selectElement.scrollTop = optionTop\n } else if (optionBottom > scrollBottom) {\n this.selectElement.scrollTop = scrollTop + (optionBottom - scrollBottom)\n }\n }\n }\n\n flashSelection(callback) {\n const { selectedOption } = this.selectElement\n if (selectedOption) {\n this.selectElement.classList.add(\"flashing\")\n return selectedOption.flash(() => {\n this.selectElement.classList.remove(\"flashing\")\n return callback()\n })\n } else {\n return callback()\n }\n }\n\n updateResults(results) {\n this.selectElement.innerHTML = results.toString().trim()\n if (this.selectElement.selectedIndex != null) {\n return requestAnimationFrame(this.revealOption)\n } else {\n this.selectElement.selectedIndex = 0\n }\n }\n\n hasResults() {\n return this.selectElement.innerHTML.length > 0\n }\n\n getSelectedValue() {\n return this.selectElement.value\n }\n\n getOptionHeight() {\n return this.selectElement.optionElements[0]?.offsetHeight != null ? this.selectElement.optionElements[0]?.offsetHeight : 0\n }\n\n didMouseDown(event) {\n const url = event.target.getAttribute(\"href\")\n const option = $(event.target).closest(\"bc-suggestion-option\").get(0)\n\n if (url) {\n Turbo.visit(url)\n } else if (option) {\n option.selectElement.selectedOption = option\n this.delegate.didClickOption(option)\n cancelEvent(event)\n }\n }\n\n // The Popover API is missing in Firefox 121\u2013124, which we still support:\n // those versions keep the pre-popover behavior, where the results can't\n // paint over an open modal . The browser also closes popovers on\n // its own (e.g. when the element is detached), so check :popover-open\n // rather than tracking the state ourselves.\n #showPopover() {\n if (this.selectElement.showPopover && !this.selectElement.matches(\":popover-open\")) {\n this.selectElement.showPopover()\n }\n }\n\n #hidePopover() {\n if (this.selectElement.showPopover && this.selectElement.matches(\":popover-open\")) {\n this.selectElement.hidePopover()\n }\n }\n\n #createSelectElement() {\n this.selectElement = document.createElement(\"bc-suggestion-select\")\n\n this.selectElement.addEventListener(\"mousedown\", this.didMouseDown, true)\n this.selectElement.addEventListener(\"click\", cancelEvent)\n this.selectElement.setAttribute(\"id\", this.id)\n this.selectElement.setAttribute(\"data-behavior\", \"scrollable_menu\")\n this.selectElement.setAttribute(\"aria-live\", \"assertive\")\n // The results render in the top layer so they can paint over modal\n // s, which sit above any z-index in the document.\n this.selectElement.setAttribute(\"popover\", \"manual\")\n\n this.#containerElement().appendChild(this.selectElement)\n }\n\n // A modal makes everything outside its subtree inert, including\n // popovers, so when the anchor sits inside one the results must too in\n // order to stay clickable.\n #containerElement() {\n return this.anchorElement?.closest(\"dialog:modal\") || document.body\n }\n\n #removeSelectElement() {\n this.selectElement.removeEventListener(\"mousedown\", this.didMouseDown, true)\n this.selectElement.removeEventListener(\"click\", cancelEvent)\n\n return this.selectElement.remove()\n }\n}\n\nconst cancelEvent = function(event) {\n event.preventDefault()\n event.stopPropagation()\n}\n\nconst getElementMargin = function(element) {\n const result = {}\n const style = window.getComputedStyle(element);\n\n [\"Top\", \"Right\", \"Bottom\", \"Left\"].forEach((side) => {\n result[side.toLowerCase()] = parseInt(style[`margin${side}`], 10)\n })\n\n return result\n}\n\nconst getViewportRect = () => ({\n top: 0,\n right: window.innerWidth,\n bottom: window.innerHeight,\n left: 0\n})\n", "BC.SuggestionContext = class SuggestionContext {\n constructor(delegate, content, position) {\n this.content = content\n this.position = position\n const {matchQueryAndTerminatorForWord, characterMatchesWordBoundary} = delegate\n\n const bounds = findWordBoundsFromStringAtPosition(this.content, this.position, characterMatchesWordBoundary)\n if (bounds) {\n [this.startPosition, this.endPosition] = Array.from(bounds)\n this.word = this.content.slice(...Array.from(bounds || []))\n\n const match = matchQueryAndTerminatorForWord(this.word)\n if (match) {\n const {query, terminator} = match\n if (query.length) { this.query = query }\n if (terminator.length) { this.terminator = terminator }\n this.active = true\n }\n }\n }\n\n isActive() {\n return this.active\n }\n\n isTerminated() {\n return this.terminator?.length && (this.position === this.endPosition)\n }\n\n isEqualTo(context) {\n return false\n }\n}\n\nconst findWordBoundsFromStringAtPosition = function(string, position, characterMatchesWordBoundary) {\n let char, index\n let start = (index = position)\n while (--index >= 0) {\n char = string.charAt(index)\n if (characterMatchesWordBoundary(char)) { break }\n start = index\n }\n\n let end = (index = position)\n while (index < string.length) {\n char = string.charAt(index)\n if (characterMatchesWordBoundary(char)) { break }\n end = ++index\n }\n\n if (start !== end) {\n return [start, end]\n }\n}\n", "import \"../../../bc/inputs/suggestion\"\nimport { announce } from \"../../../helpers/announcement_helpers\"\n\nconst { keyCodes } = BC\nconst MAX_VISIBLE_SUGGESTIONS = 50\n\nBC.AutocompleteController = class AutocompleteController {\n constructor(element) {\n this.element = element\n this.inputElement = this.element.inputElement\n this.toggleButton = this.element.toggleButton\n this.debouncedDisplaySuggestions = BC.debounce(() => this.displaySuggestions(), 50)\n }\n\n connect() {\n let autocompletables\n\n if (!this.element.id) { this.element.id = `autocomplete_${BC.generateUUID()}` }\n\n const suggestionsId = this.getSuggestionsIdentifier()\n this.inputElement.setAttribute(\"aria-owns\", suggestionsId)\n this.inputElement.setAttribute(\"aria-controls\", suggestionsId)\n\n if (this.element.description) {\n this.inputElement.setAttribute(\"aria-label\", this.element.description)\n }\n\n if (!this.inputElement.hasAttribute(\"role\")) {\n this.inputElement.setAttribute(\"role\", \"combobox\")\n }\n\n if (!this.inputElement.hasAttribute(\"aria-autocomplete\")) {\n this.inputElement.setAttribute(\"aria-autocomplete\", \"list\")\n }\n\n if (this.element.preload) { autocompletables = JSON.parse(this.element.preload) }\n const collection = new BC.AutocompletableCollection(autocompletables)\n this.setCollection(collection)\n\n BC.fetchAutocompletables(this.element.url)\n .then(this.addAutocompletables)\n .then(this.createAutocompletablesForSelectedValues)\n .then(this.autocompleteReady)\n\n BC.handleEvent(\"input\", {on: this.inputElement, with: this.didReceiveInput})\n BC.handleEvent(\"keydown\", {on: this.inputElement, with: this.didPressKey})\n BC.handleEvent(\"focus\", {on: this.inputElement, with: this.didFocusInputElement})\n BC.handleEvent(\"blur\", {on: this.inputElement, with: this.didBlurInputElement})\n BC.handleEvent(\"change\", {on: this.inputElement, with: this.didChangeInputElement})\n BC.handleEvent(\"mousedown\", {on: this.toggleButton, with: this.didClickToggleButton})\n BC.handleEvent(\"click\", {on: this.element, with: this.didClickContainerElement})\n BC.handleEvent(\"click\", {on: this.element, matching: \"[data-behavior~=unselect_autocompletable]\", with: this.didClickUnselectButton})\n\n this.optionChangedHandler = BC.handleEvent(\"bc:active-option-changed\", { on: document, matching: `#${suggestionsId}`, with: this.activeOptionChanged })\n }\n\n disconnect() {\n this.debouncedDisplaySuggestions.cancel()\n this.optionChangedHandler.destroy()\n }\n\n render() {\n this.clearRenderedAutocompletables()\n this.element.insertAdjacentHTML(\"afterbegin\", this.getHTMLForSelectedAutocompletables())\n this.element.setAttribute(\"selected-count\", this.getSelectedAutocompletables().length)\n this.element.setAttribute(\"unselected-count\", this.getUnselectedAutocompletables().length)\n this.updateElementClassNames()\n this.resizeInputElement()\n this.#announceOptionChange()\n }\n\n #announceOptionChange() {\n if (this.addedOption) {\n announce(`Added ${this.addedOption}.`, { assertive: true })\n this.addedOption = null\n }\n\n if (this.removedOption) {\n announce(`Removed ${this.removedOption}.`, { assertive: true })\n this.removedOption = null\n }\n }\n\n // Events\n\n didReceiveInput = (event) => {\n this.updateElementClassNames()\n this.resizeInputElement()\n this.debouncedDisplaySuggestions()\n }\n\n didPressKey = (event) => {\n if (!this.inputElement.value) {\n switch (event.keyCode) {\n case keyCodes.backspace:\n this.unselectLastValue()\n event.stopPropagation()\n break\n case keyCodes.up:\n this.displaySuggestions()\n event.stopPropagation()\n break\n case keyCodes.down:\n this.displaySuggestions()\n event.stopPropagation()\n }\n }\n }\n\n didFocusInputElement = (event) => {\n return this.updateElementClassNames()\n }\n\n didBlurInputElement = (event) => {\n if (this.element.selectOnBlur && this.inputElement.value) {\n if (this.commitSuggestion()) { return }\n }\n this.cancelSuggestions()\n this.updateElementClassNames()\n return this.resizeInputElement()\n }\n\n didChangeInputElement = (event) => {\n return event.stopPropagation()\n }\n\n didClickUnselectButton = (event) => {\n event.preventDefault()\n event.stopPropagation()\n const { value } = BC.closest(event.target, \"[data-value]\").dataset\n this.removedOption = this.collection.get(value).name\n this.element.unselectValue(value)\n return this.inputElement.focus()\n }\n\n didClickContainerElement = (event) => {\n if (this.inputElement != document.activeElement) {\n this.inputElement.focus()\n }\n }\n\n didClickToggleButton = (event) => {\n event.preventDefault()\n event.stopPropagation()\n if (this.element.expanded) {\n return this.cancelSuggestions()\n } else {\n this.displaySuggestions()\n return this.inputElement.focus()\n }\n }\n\n autocompleteReady = () => {\n return this.element.setAttribute(\"ready\", true)\n }\n\n activeOptionChanged = (event) => {\n this.inputElement.setAttribute(\"aria-activedescendant\", event.target.id)\n }\n\n // Collection\n\n setCollection(collection) {\n if (!collection.isEqualTo(this.collection)) {\n this.collection = collection\n return this.render()\n }\n }\n\n setFilter(filterCallback) {\n this.filterCallback = filterCallback\n return this.render()\n }\n\n addAutocompletables = (autocompletables) => {\n return this.setCollection(this.collection.add(autocompletables))\n }\n\n createAutocompletablesForSelectedValues = () => {\n if (this.element.allowCreate) {\n this.element.selectedValues.forEach((value) => {\n if (!this.collection.has(value)) {\n this.addAutocompletables({value, name: value})\n }\n })\n }\n }\n\n getAutocompletables() {\n return this.collection.withoutValues(this.element.excludedValues).filter(this.filterCallback)\n }\n\n getSelectedAutocompletables() {\n return this.getAutocompletables().withValues(this.element.selectedValues, {sort: false})\n }\n\n getUnselectedAutocompletables() {\n return this.getAutocompletables().withoutValues(this.element.selectedValues)\n }\n\n // Suggestion controller delegate\n\n getSuggestionsIdentifier() {\n return `${this.element.id}_suggestions`\n }\n\n characterMatchesWordBoundary(character) {\n return false\n }\n\n matchQueryAndTerminatorForWord(word) {\n return {\n query: word,\n terminator: \"\"\n }\n }\n\n getOffsetsAtPosition(position) {\n if (this.element.expandable) {\n return this.getElementOffsets()\n } else {\n return this.getInputElementOffsets()\n }\n }\n\n getResultsPlacement() {\n return this.element.resultsPlacement || null\n }\n\n fetchResultsForQuery(query, callback) {\n let autocompletables, collection, selectedAutocompletable\n if (this.element.multiple) {\n collection = this.getUnselectedAutocompletables()\n } else {\n collection = this.getAutocompletables()\n }\n\n if (query) {\n autocompletables = this.capResults(collection.matchingQuery(query).toArray())\n\n const noResultsLabel = this.element.noResultsLabel\n\n if (this.canCreate(query)) {\n if (!autocompletables.some(a => a.name === query)) {\n autocompletables.push({value: query, name: query, pending: true})\n }\n } else if (noResultsLabel) {\n if (autocompletables.length == 0) {\n autocompletables.push({value: query, noResultsLabel: noResultsLabel})\n }\n }\n } else {\n autocompletables = this.capResults(collection.toArray())\n\n const name = this.element.selectAllOption\n if (name) {\n if (autocompletables.length > 1) {\n autocompletables.unshift({value: \"select-all\", name})\n }\n }\n\n if (!this.element.multiple) {\n selectedAutocompletable = this.getSelectedAutocompletables().toArray()[0]\n }\n }\n\n // Group pings are jumped to, not added to the roster, so drop them once you've\n // started composing to avoid mixing a person with a ping group.\n if (this.element.selectedValues.some(value => value !== \"\")) {\n autocompletables = autocompletables.filter(autocompletable => autocompletable.type !== \"circle\")\n }\n\n const html = BC.renderAutocompletableSuggestions(autocompletables, {selectedAutocompletable})\n return callback(html)\n }\n\n willCommitValueAtRangeWithTerminator(value, range, terminator) {\n this.inputElement.value = \"\"\n if (this.element.multiple) {\n this.inputElement.focus()\n } else {\n this.inputElement.blur()\n }\n\n switch (true) {\n case value === \"select-all\":\n this.element.selectAll()\n break\n case this.collection.has(value) && this.collection.get(value).url != null: {\n const entry = this.collection.get(value)\n const frame = document.querySelector(\"#sidebar_frame\")\n if (frame) {\n frame.src = entry.url\n } else {\n Turbo.visit(entry.url)\n }\n break\n }\n case this.collection.has(value):\n this.addedOption = this.collection.get(value).name\n this.element.selectValue(value)\n break\n case this.canCreate(value):\n this.addAutocompletables({value, name: value})\n this.addedOption = this.collection.get(value).name\n this.element.selectValue(value)\n break\n }\n }\n\n canCreate(query) {\n if (!this.element.allowCreate) return false\n const { createPattern } = this.element\n return !createPattern || new RegExp(createPattern).test(query)\n }\n\n didShowResults(selectElement) {\n this.displayingSuggestions = true\n this.updateElementClassNames()\n\n if (this.element.suggestionSelectClass) {\n selectElement.classList.add(this.element.suggestionSelectClass)\n }\n\n if (this.element.expandable) {\n this.element.expanded = true\n selectElement.style.width = this.getElementOffsets().width + \"px\"\n } else {\n selectElement.style.maxWidth = this.getElementOffsets().width + \"px\"\n }\n\n this.inputElement.setAttribute(\"aria-expanded\", \"true\")\n }\n\n didHideResults(selectElement) {\n this.displayingSuggestions = false\n this.updateElementClassNames()\n\n if (this.element.suggestionSelectClass) {\n selectElement.classList.remove(this.element.suggestionSelectClass)\n }\n\n if (this.element.expandable) {\n this.element.expanded = false\n selectElement.style.width = \"\"\n }\n\n this.inputElement.setAttribute(\"aria-expanded\", \"false\")\n }\n\n // Helpers\n\n displaySuggestions() {\n this.suggestionController ||= new BC.SuggestionController(this)\n this.suggestionController.updateWithContentAndPosition(this.inputElement.value, this.inputElement.selectionStart)\n if (this.suggestionController.isCanceled()) this.suggestionController.resumeSuggestion()\n if (!this.suggestionController.isActive()) this.suggestionController.activateSuggestion()\n }\n\n cancelSuggestions() {\n this.debouncedDisplaySuggestions.cancel()\n this.inputElement.value = \"\"\n this.suggestionController?.destroy()\n this.suggestionController = null\n }\n\n commitSuggestion() {\n return this.suggestionController?.commitSuggestion()\n }\n\n unselectLastValue() {\n const lastValue = this.element.selectedValues[this.element.selectedValues.length - 1]\n if (lastValue) {\n this.removedOption = this.collection.get(lastValue).name\n this.element.unselectValue(lastValue)\n return this.cancelSuggestions()\n }\n }\n\n capResults(results) {\n return results.length > MAX_VISIBLE_SUGGESTIONS ? results.slice(0, MAX_VISIBLE_SUGGESTIONS) : results\n }\n\n getElementOffsets() {\n return this.element.getBoundingClientRect()\n }\n\n getInputElementOffsets() {\n return this.inputElement.getBoundingClientRect()\n }\n\n resizeInputElement() {\n if (this.element.multiple) {\n const { style } = this.inputElement\n if (this.inputElement.value && this.element.value) {\n style.maxWidth = \"0px\"\n style.width = this.inputElement.scrollWidth + \"px\"\n style.maxWidth = null\n } else {\n style.width = null\n }\n }\n }\n\n updateElementClassNames() {\n this.element.classList.toggle(\"focused\", this.inputElement === document.activeElement)\n this.element.classList.toggle(\"has-input\", this.inputElement.value)\n return this.element.classList.toggle(\"displaying-suggestions\", this.displayingSuggestions === true)\n }\n\n clearRenderedAutocompletables() {\n this.element.querySelectorAll(\"[data-role~=autocompletable]\").forEach(element => element.remove())\n }\n\n getHTMLForSelectedAutocompletables() {\n const autocompletables = this.getSelectedAutocompletables().toArray()\n return BC.renderAutocompletables(autocompletables)\n }\n\n}\n", "import \"./controller\"\n\nclass BcAutocomplete extends HTMLElement {\n static get observedAttributes() {\n return [ \"exclude\", \"value\" ]\n }\n\n connectedCallback() {\n BC.ready(() => {\n this.setupInputElement()\n this.setupHiddenInput()\n this.setupToggleButton()\n\n if (this.controller == null) {\n this.controller = new BC.AutocompleteController(this)\n this.controller.connect()\n }\n\n this.defaultSelectedValues = this.selectedValues\n this.setSelectedValues(this.defaultSelectedValues)\n this.registerResetListener()\n })\n }\n\n setupInputElement() {\n this.inputElement = this.querySelector(\"input[type=text]\")\n this.inputElement.setAttribute(\"autocomplete\", \"off\")\n this.inputElement.setAttribute(\"autocorrect\", \"off\")\n\n if (this.inputElement.required && !this.hasAttribute(\"required\")) {\n this.required = true\n }\n\n if (this.hasAttribute(\"autofocus\")) {\n this.inputElement.focus()\n }\n\n if (this.hasAttribute(\"tabindex\")) {\n this.inputElement.setAttribute(\"tabindex\", this.tabIndex)\n this.removeAttribute(\"tabindex\")\n }\n }\n\n setupHiddenInput() {\n this.hiddenInputElement = this.querySelector(\"input[type=hidden]\")\n if (!this.hiddenInputElement) {\n const {name} = this.inputElement\n this.hiddenInputElement = BC.makeElement(\"input\", {type: \"hidden\", name, value: this.value})\n if (this.inputElement.hasAttribute(\"form\")) {\n this.hiddenInputElement.setAttribute(\"form\", this.inputElement.getAttribute(\"form\"))\n }\n this.inputElement.removeAttribute(\"name\")\n this.appendChild(this.hiddenInputElement)\n }\n }\n\n setupToggleButton() {\n this.toggleButton = this.querySelector(\".toggle-button\")\n if (!this.toggleButton) {\n this.toggleButton = BC.makeElement(\"button\", {type: \"button\", class: \"toggle-button\", title: \"Toggle\", tabindex: \"-1\"})\n this.toggleButton.textContent = \"\u25BE\"\n this.appendChild(this.toggleButton)\n }\n }\n\n disconnectedCallback() {\n this.unregisterResetListener()\n this.controller.disconnect()\n }\n\n attributeChangedCallback(attributeName, oldValue, newValue) {\n if (oldValue || newValue) {\n switch (attributeName) {\n case \"exclude\":\n this.setSelectedValues(BC.arrayWithout(this.selectedValues, this.excludedValues))\n break\n case \"value\":\n if (this.hiddenInputElement && this.value !== this.hiddenInputElement.value) {\n this.hiddenInputElement.value = this.value\n this.controller.render()\n BC.triggerEvent(this, \"change\")\n }\n break\n }\n }\n }\n\n get selectedValues() {\n if (this.value) {\n if (this.multiple) {\n return this.value.split(\",\")\n } else {\n return [this.value]\n }\n } else {\n return []\n }\n }\n\n setSelectedValues(values = []) {\n values = BC.uniqueValues(values)\n if (this.required) {\n this.inputElement.required = values.length === 0\n }\n this.value = values.join(\",\")\n }\n\n get excludedValues() {\n const value = this.exclude\n if (value) {\n return value.split(\",\")\n } else {\n return []\n }\n }\n\n setExcludedValues(values = []) {\n values = BC.uniqueValues(values)\n this.exclude = values.join(\",\")\n }\n\n get selectedAutocompletables() {\n return this.controller.getSelectedAutocompletables().toArray()\n }\n\n get unselectedAutocompletables() {\n return this.controller.getUnselectedAutocompletables().toArray()\n }\n\n selectValue(value) {\n if (this.multiple) {\n const values = this.selectedValues.concat(value)\n this.setSelectedValues(values)\n } else {\n this.setSelectedValues([value])\n }\n }\n\n unselectValue(value) {\n const values = BC.arrayWithout(this.selectedValues, value)\n this.setSelectedValues(values)\n }\n\n selectAll() {\n if (this.multiple) {\n const unselectedValues = this.controller.getUnselectedAutocompletables().getValues()\n const values = this.selectedValues.concat(unselectedValues)\n this.setSelectedValues(values)\n }\n }\n\n unselectAll() {\n this.setSelectedValues([])\n }\n\n setFilter(callback) {\n this.controller.setFilter(callback)\n }\n\n resetFilter() {\n this.controller.setFilter()\n }\n\n excludeValue(value) {\n const values = this.excludedValues.concat(value)\n this.setExcludedValues(values)\n }\n\n unexcludeValue(value) {\n const values = BC.arrayWithout(this.excludedValues, value)\n this.setExcludedValues(values)\n }\n\n addAutocompletables(autocompletables) {\n this.controller.addAutocompletables(autocompletables)\n }\n\n // Form reset support\n\n registerResetListener() {\n this.resetListener = this.resetBubbled.bind(this)\n window.addEventListener(\"reset\", this.resetListener, false)\n }\n\n unregisterResetListener() {\n window.removeEventListener(\"reset\", this.resetListener, false)\n }\n\n resetBubbled(event) {\n if (event.target === this.inputElement?.form) {\n if (!event.defaultPrevented) { this.reset() }\n }\n }\n\n reset() {\n this.setSelectedValues(this.defaultSelectedValues)\n }\n\n // stringAttributes\n\n get description() {\n return this.getAttribute(\"aria-label\") ||\n this.inputElement.getAttribute(\"aria-label\") ||\n this.inputElement.getAttribute(\"placeholder\") || \"\"\n }\n\n get exclude() {\n return this.getAttribute(\"exclude\") || \"\"\n }\n\n set exclude(value = \"\") {\n this.setAttribute(\"exclude\", value)\n }\n\n get preload() {\n return this.getAttribute(\"preload\") || \"\"\n }\n\n set preload(value = \"\") {\n this.setAttribute(\"preload\", value)\n }\n\n get selectAllOption() {\n return this.getAttribute(\"select-all-option\") || \"\"\n }\n\n set selectAllOption(value = \"\") {\n this.setAttribute(\"select-all-option\", value)\n }\n\n get noResultsLabel() {\n return this.getAttribute(\"no-results-label\") || \"\"\n }\n\n set noResultsLabel(value = \"\") {\n this.setAttribute(\"no-results-label\", value)\n }\n\n get suggestionSelectClass() {\n return this.getAttribute(\"suggestion-select-class\") || \"\"\n }\n\n set suggestionSelectClass(value = \"\") {\n this.setAttribute(\"suggestion-select-class\", value)\n }\n\n get resultsPlacement() {\n return this.getAttribute(\"placement\") || \"\"\n }\n\n set resultsPlacement(value = \"\") {\n this.setAttribute(\"placement\", value)\n }\n\n get url() {\n return this.getAttribute(\"url\") || \"\"\n }\n\n set url(value = \"\") {\n this.setAttribute(\"url\", value)\n }\n\n get createPattern() {\n return this.getAttribute(\"create-pattern\") || \"\"\n }\n\n set createPattern(value = \"\") {\n this.setAttribute(\"create-pattern\", value)\n }\n\n get value() {\n return this.getAttribute(\"value\") || \"\"\n }\n\n set value(value = \"\") {\n this.setAttribute(\"value\", value)\n }\n\n // booleanAttributes\n\n get allowCreate() {\n return this.hasAttribute(\"allow-create\")\n }\n\n set allowCreate(value) {\n value ? this.setAttribute(\"allow-create\", \"\") : this.removeAttribute(\"allow-create\")\n }\n\n get expandable() {\n return this.hasAttribute(\"expandable\")\n }\n\n set expandable(value) {\n value ? this.setAttribute(\"expandable\", \"\") : this.removeAttribute(\"expandable\")\n }\n\n get expanded() {\n return this.hasAttribute(\"expanded\")\n }\n\n set expanded(value) {\n if (value) {\n this.setAttribute(\"aria-expanded\", \"true\")\n this.setAttribute(\"expanded\", \"\")\n } else {\n this.setAttribute(\"aria-expanded\", \"false\")\n this.removeAttribute(\"expanded\")\n }\n }\n\n get multiple() {\n return this.hasAttribute(\"multiple\")\n }\n\n set multiple(value) {\n value ? this.setAttribute(\"multiple\", \"\") : this.removeAttribute(\"multiple\")\n }\n\n get required() {\n return this.hasAttribute(\"required\")\n }\n\n set required(value) {\n value ? this.setAttribute(\"required\", \"\") : this.removeAttribute(\"required\")\n }\n\n get selectOnBlur() {\n return this.hasAttribute(\"select-on-blur\")\n }\n\n set selectOnBlur(value) {\n value ? this.setAttribute(\"select-on-blur\", \"\") : this.removeAttribute(\"select-on-blur\")\n }\n}\n\nwindow.customElements.define(\"bc-autocomplete\", BcAutocomplete)\n", "if (!window.JST) window.JST = {}\nwindow.JST['bc/inputs/autocomplete/templates/autocompletable'] = function(object){\nvar __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n__p+='\\n ';\n if (object.avatar_url) { \n__p+='\\n \"\"\\n ';\n } else if (object.icon) { \n__p+='\\n '+\n((__t=( object.icon ))==null?'':__t)+\n'\\n ';\n } \n__p+='\\n\\n \\n ';\n if (object.type === \"group\") { \n__p+='\\n Group:\\n ';\n } \n__p+='\\n\\n '+\n((__t=( object.name ))==null?'':_.escape(__t))+\n'\\n \\n\\n ';\n if (object.out_of_office) { \n__p+='\\n \\n OUT (back on '+\n((__t=( object.out_of_office.back_on_date ))==null?'':_.escape(__t))+\n')\\n \\n ';\n } \n__p+='\\n\\n \u00D7\\n\\n';\nreturn __p;\n}", "if (!window.JST) window.JST = {}\nwindow.JST['bc/inputs/autocomplete/templates/suggestions'] = function(object){\nvar __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n__p+='';\n for (const autocompletable of object.autocompletables) { \n__p+='\\n \\n ';\n if (autocompletable.pending) { \n__p+='\\n Add '+\n((__t=( autocompletable.name ))==null?'':_.escape(__t))+\n'\u2026\\n ';\n } else if (autocompletable.noResultsLabel) { \n__p+='\\n '+\n((__t=( autocompletable.noResultsLabel ))==null?'':__t)+\n'\\n ';\n } else { \n__p+='\\n '+\n((__t=( BC.renderAutocompletable(autocompletable) ))==null?'':__t)+\n'\\n ';\n } \n__p+='\\n \\n';\n } \n__p+='\\n';\nreturn __p;\n}", "import \"./templates/autocompletable.jst.ejs\"\nimport \"./templates/suggestions.jst.ejs\"\n\nlet fetchCache = {}\n\naddEventListener(\"turbo:visit\", () => fetchCache = {})\n\nBC.fetchAutocompletables = function(url) {\n if (url) {\n return fetchCache[url] != null ? fetchCache[url] : (fetchCache[url] = BC.fetch(url, {as: \"json\"}))\n } else {\n return Promise.resolve()\n }\n}\n\nBC.renderAutocompletable = autocompletable => JST[\"bc/inputs/autocomplete/templates/autocompletable\"](autocompletable)\n\nBC.renderAutocompletables = (autocompletables = []) => autocompletables.map(BC.renderAutocompletable).join(\"\\n\")\n\nBC.renderAutocompletableSuggestions = (autocompletables, {selectedAutocompletable} = {}) => JST[\"bc/inputs/autocomplete/templates/suggestions\"]({autocompletables, selectedAutocompletable})\n", "BC.AutocompletableCollection = class AutocompletableCollection {\n constructor(autocompletables = [], options = {}) {\n this.index = new Map()\n this.autocompletables = new Array()\n\n Array.from(autocompletables).forEach((autocompletable) => {\n this.index.set(uniqueAutocompleteableKey(autocompletable), autocompletable)\n })\n\n this.index.forEach(autocompletable => {\n this.autocompletables.push(autocompletable)\n })\n\n if (options.sort !== false) {\n this.autocompletables.sort(compareAutocompletables)\n }\n\n this.length = this.autocompletables.length\n }\n\n get(value) {\n return this.index.get(value.toString())\n }\n\n has(value) {\n return this.index.has(value.toString())\n }\n\n add(autocompletables = [], collectionOptions) {\n return new this.constructor(this.autocompletables.concat(autocompletables), collectionOptions)\n }\n\n getValues() {\n return this.autocompletables.map(autocompletable => autocompletable.value)\n }\n\n withValues(values = [], collectionOptions) {\n const autocompletables = values.map((value) => this.get(value)).filter(Boolean)\n return new this.constructor(autocompletables, collectionOptions)\n }\n\n withoutValues(values = [], collectionOptions) {\n const autocompletables = []\n this.index.forEach(function(autocompletable, value) {\n const allGroupMembersAreAdded = autocompletable.type == \"group\" && autocompletable.value.split(\",\").every(id => values.includes(id))\n\n if (!values.includes(value) && !allGroupMembersAreAdded) {\n return autocompletables.push(autocompletable)\n }\n })\n return new this.constructor(autocompletables, collectionOptions)\n }\n\n filter(callback, collectionOptions) {\n if (!callback) return this\n\n const autocompletables = []\n this.index.forEach(function(autocompletable, value) {\n if (callback(autocompletable)) {\n return autocompletables.push(autocompletable)\n }\n })\n\n return new this.constructor(autocompletables, collectionOptions)\n }\n\n matchingQuery(query) {\n if (!query) return this\n const autocompletables = matchAutocompletablesByNameOrDescription(this.autocompletables, query).sort(compareRank)\n return new this.constructor(autocompletables, {sort: false})\n }\n\n toArray() {\n return this.autocompletables.slice(0)\n }\n\n toJSON() {\n return this.toArray()\n }\n\n isEqualTo(collection) {\n if (!collection) return false\n if (this.length !== collection.length) return false\n return JSON.stringify(this) === JSON.stringify(collection)\n }\n}\n\n// Helpers\n\nconst compareAutocompletables = (autocompletable, otherAutocompletable) =>\n compareRank(autocompletable, otherAutocompletable) || autocompletable.name.localeCompare(otherAutocompletable.name)\n\nconst compareRank = (autocompletable, otherAutocompletable) => (autocompletable.rank || 0) - (otherAutocompletable.rank || 0)\n\nconst matchAutocompletablesByNameOrDescription = (autocompletables, query) => BC.uniqueValues([].concat(\n matchAutocompletablesByNameAtHead(autocompletables, query),\n matchAutocompletablesByRestOfName(autocompletables, query),\n matchAutocompletablesByRestOfDescription(autocompletables, query))\n)\n\nconst matchAutocompletablesByNameAtHead = (autocompletables, query) => matchAutocompletablesByRegExp(autocompletables, regexpForQuery(query, \"^\"))\n\nconst matchAutocompletablesByRestOfName = (autocompletables, query) => matchAutocompletablesByRegExp(autocompletables, regexpForQuery(query, \"\\\\s\"))\n\nconst matchAutocompletablesByRestOfDescription = (autocompletables, query) => matchAutocompletablesByRegExp(autocompletables, regexpForQuery(query), \"description\")\n\nconst matchAutocompletablesByRegExp = (autocompletables, regexp, propertyName = \"name\") => {\n return autocompletables.filter(autocompletable => {\n const normalizedPropertyName = `normalized${BC.camelize(propertyName)}`\n const property = autocompletable[propertyName]\n\n if (property) {\n if (!autocompletable[normalizedPropertyName]) autocompletable[normalizedPropertyName] = BC.normalize(property)\n return regexp.test(autocompletable[normalizedPropertyName])\n }\n })\n}\n\nconst regexpForQuery = (query, prefix = \"\") => new RegExp(prefix + patternForQuery(query), \"i\")\n\nconst patternForQuery = (query) => BC.normalize(query.toString()).split(\"\").map(BC.regexpEscape).\n join(\"(.*\\\\s)?\").replace(/\\(\\.\\*\\\\s\\)\\? /g, \"[^ ]* \")\n\nconst uniqueAutocompleteableKey = (autocompletable) => {\n if (autocompletable.type == \"group\") {\n return autocompletable.name + \":\" + autocompletable.value.toString()\n } else {\n return autocompletable.value.toString()\n }\n}\n", "class BcDatetimeInput extends HTMLElement {\n get name() {\n return this.getAttribute(\"name\")\n }\n\n get dateTime() {\n if ((this.date) && (this.time)) {\n return new CalendarDateTime(this.date, this.time)\n } else {\n return null\n }\n }\n\n set dateTime(dateTime) {\n this.date = dateTime?.calendarDate\n this.time = dateTime?.calendarTime\n }\n\n get date() {\n return this.datePicker?.date\n }\n\n set date(date) {\n if (this.datePicker) this.datePicker.date = date\n }\n\n get time() {\n return this.timePicker?.time\n }\n\n set time(time) {\n if (this.timePicker) this.timePicker.time = time\n }\n\n connectedCallback() {\n BC.ready(() => {\n this.getChildElements(({datePicker, timePicker}) => {\n this.datePicker = datePicker\n this.timePicker = timePicker\n this.setAttribute(\"initialized\", \"\")\n })\n })\n }\n\n shake() {\n this.datePicker.shake()\n this.timePicker.shake()\n }\n\n getChildElements(callback) {\n const datePicker = this.querySelector(\"bc-date-picker[initialized], bc-relative-date-input[initialized]\")\n const timePicker = this.querySelector(\"bc-time-picker[initialized]\")\n\n if ((datePicker) && (timePicker)) {\n callback({datePicker, timePicker})\n } else {\n requestAnimationFrame(() => {\n this.getChildElements(callback)\n })\n }\n }\n}\n\nBC.DatetimeInputElement = BcDatetimeInput\nwindow.customElements.define(\"bc-datetime-picker\", BcDatetimeInput)\n\n", "BC.SegmentedInputController = class SegmentedInputController {\n constructor(element) {\n this.didPressKey = this.didPressKey.bind(this)\n this.dummyDidFocus = this.dummyDidFocus.bind(this)\n this.element = element\n this.dummyElement = this.element.dummyElement\n this.inputElement = this.element.inputElement\n this.fieldElements = this.element.fieldElements\n }\n\n initialize() {\n this.installListeners()\n this.autofocus()\n this.initiallyDisable()\n }\n\n destroy() {\n return this.uninstallListeners()\n }\n\n push(value) {\n const field = this.fieldElements[this.getIndex()]\n if (field) {\n field.value = `${value}`\n return this.setValue(`${this.getValue()}${value}`)\n }\n }\n\n pop() {\n const field = this.fieldElements[this.getIndex() - 1]\n if (field) {\n field.value = \"\"\n return this.setValue(this.getValue().slice(0, -1))\n }\n }\n\n reset() {\n while (this.getIndex()) {\n this.pop()\n }\n }\n\n getIndex() {\n return this.getValue().length\n }\n\n getValue() {\n return `${this.inputElement.value}`\n }\n\n setValue(value) {\n this.inputElement.value = value\n const field = this.fieldElements[this.getIndex()]\n if (field) {\n this.dummyElement.style.left = getLeftOffset(field) + \"px\"\n this.dummyElement.style.opacity = \"\"\n } else {\n this.dummyElement.blur()\n this.dummyElement.style.opacity = \"0\"\n }\n\n return this.triggerCompletedEvent()\n }\n\n getSize() {\n return this.fieldElements.length\n }\n\n isCompleted() {\n return this.getIndex() === this.getSize()\n }\n\n // Keyboard events\n\n didPressKey(event) {\n if (48 <= event.keyCode && event.keyCode <= 57) {\n this.didPressNumericKey(event.keyCode - 48)\n } else if (96 <= event.keyCode && event.keyCode <= 105) {\n this.didPressNumericKey(event.keyCode - 96)\n } else if (event.keyCode === 8) {\n this.didPressBackspaceKey()\n } else if (event.keyCode === 27) {\n this.didPressEscapeKey()\n } else {\n return\n }\n\n event.preventDefault()\n }\n\n didPressNumericKey(value) {\n return this.push(value)\n }\n\n didPressBackspaceKey() {\n return this.pop()\n }\n\n didPressEscapeKey() {\n return this.reset()\n }\n\n // Focus and click events\n\n dummyDidFocus(event) {\n if (this.element.disabled) {\n return this.dummyElement.blur()\n } else if (this.isCompleted()) {\n return this.reset()\n }\n }\n\n didClick() {\n return this.dummyElement.focus()\n }\n\n // Private\n\n installListeners() {\n this.dummyElement.addEventListener(\"focus\", this.dummyDidFocus)\n this.element.addEventListener(\"keydown\", this.didPressKey)\n this.element.addEventListener(\"click\", this.didClick)\n this.element.addEventListener(\"keypress\", this.suppress)\n this.element.addEventListener(\"input\", this.suppress)\n return this.element.addEventListener(\"paste\", this.suppress)\n }\n\n autofocus() {\n if (this.element.autofocus) {\n return this.dummyElement.focus()\n }\n }\n\n initiallyDisable() {\n if (this.element.disabled) {\n return this.element.disable()\n }\n }\n\n uninstallListeners() {\n this.dummyElement.removeEventListener(\"focus\", this.dummyDidFocus)\n this.element.removeEventListener(\"keydown\", this.didPressKey)\n this.element.removeEventListener(\"click\", this.didClick)\n this.element.removeEventListener(\"keypress\", this.suppress)\n this.element.removeEventListener(\"input\", this.suppress)\n return this.element.removeEventListener(\"paste\", this.suppress)\n }\n\n triggerCompletedEvent() {\n if (this.isCompleted()) { return BC.triggerEvent(this.element, \"completed\") }\n }\n}\n\nconst getLeftOffset = function(el) {\n const parentOffset = el.offsetParent.getBoundingClientRect()\n const offset = el.getBoundingClientRect()\n return offset.left - parentOffset.left\n}\n", "import \"./controller\"\n\nlet identifier = 0\n\nclass BcSegmentedInput extends HTMLElement {\n get size() {\n return this.getAttribute(\"size\")\n }\n\n get autofocus() {\n return this.hasAttribute(\"autofocus\")\n }\n\n get identifier() {\n if (this.hasAttribute(\"identifier\")) {\n return this.getAttribute(\"identifier\")\n } else {\n this.setAttribute(\"identifier\", identifier++)\n return this.identifier\n }\n }\n\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n get inputElement() {\n if (this.hasAttribute(\"input\")) {\n return document.getElementById(this.getAttribute(\"input\"))\n } else {\n const element = BC.makeElement(\"input\", {type: \"hidden\", id: `segmented_input_${this.identifier}`})\n this.setAttribute(\"input\", element.id)\n return this.parentElement.insertBefore(element, this.nextElementSibling)\n }\n }\n\n get dummyElement() {\n if (this.hasAttribute(\"dummy\")) {\n return document.getElementById(this.getAttribute(\"dummy\"))\n } else {\n const element = BC.makeElement(\"input\", {\n type: \"tel\",\n id: `segmented_input_dummy_${this.identifier}`,\n pattern: \"[0-9]*\",\n size: \"1\",\n maxlength: \"0\",\n autocomplete: \"off\",\n class: \"input text-center segmented-input__dummy\"\n }\n )\n this.setAttribute(\"dummy\", element.id)\n return this.appendChild(element)\n }\n }\n\n get labelElement() {\n if (this.hasAttribute(\"label\")) {\n return document.getElementById(this.getAttribute(\"label\"))\n } else {\n const element = BC.makeElement(\"label\", {id: `segmented_input_label_${this.identifier}`, for: this.dummyElement.id, class: \"segmented-input__label\"})\n this.setAttribute(\"label\", element.id)\n return this.insertBefore(element, this.dummyElement.nextElementSibling)\n }\n }\n\n get fieldElements() {\n const fields = this.labelElement.querySelectorAll(\"[data-role=field]\")\n if (fields.length) {\n return fields\n } else {\n const elements = []\n\n for (let i = 0; i < this.size; i++) {\n const element = BC.makeElement(\"input\", {\n type: \"text\",\n disabled: \"disabled\",\n size: \"1\",\n class: \"input text-center segmented-input__field\",\n \"data-role\": \"field\"\n })\n elements.push(this.labelElement.appendChild(element))\n }\n\n return elements\n }\n }\n\n connectedCallback() {\n if (this.controller == null) { this.controller = new BC.SegmentedInputController(this) }\n this.controller.initialize()\n }\n\n disconnectedCallback() {\n this.controller?.destroy()\n }\n\n disable() {\n this.setAttribute(\"disabled\", \"\")\n this.dummyElement.blur()\n this.dummyElement.style.opacity = \"0\"\n }\n\n enable() {\n this.removeAttribute(\"disabled\")\n this.dummyElement.style.opacity = \"\"\n }\n}\n\nwindow.customElements.define(\"bc-segmented-input\", BcSegmentedInput)\n\n", "class BcDateInput extends HTMLElement {\n // The inner hidden input and duet picker are built on BC.ready, so the public\n // accessors and open() can run before they exist \u2014 e.g. a click on a date radio\n // before DOMContentLoaded. Setters reflect to attributes unconditionally and\n // only forward to the inner elements once built; initialization reads the\n // attributes back (createDuetPicker + #synchronizeInput), so nothing set during\n // that window is lost.\n #openWhenInitialized = false\n\n connectedCallback() {\n BC.ready(() => {\n if (!this.isConnected) return\n\n this.input = findOrCreateInput(this)\n this.duetPicker = initializeDuetPicker(this)\n this.#synchronizeInput()\n\n this.addEventListener(\"duetChange\", this.duetPickerChanged)\n this.addEventListener(\"duetFocus\", this.duetPickerFocused)\n this.addEventListener(\"duetOpen\", this.onOpen)\n this.addEventListener(\"duetClose\", this.onClose)\n this.addEventListener(\"keydown\", this.onKeydown)\n window.addEventListener(\"keydown\", this.closeOnEscape, { capture: true })\n\n this.setAttribute(\"initialized\", \"\")\n this.configureFocusability()\n\n if (this.#openWhenInitialized) {\n this.#openWhenInitialized = false\n this.duetPicker.show()\n }\n })\n }\n\n disconnectedCallback() {\n this.removeEventListener(\"duetChange\", this.duetPickerChanged)\n this.removeEventListener(\"duetFocus\", this.duetPickerFocused)\n this.removeEventListener(\"duetOpen\", this.onOpen)\n this.removeEventListener(\"duetClose\", this.onClose)\n this.removeEventListener(\"keydown\", this.onKeydown)\n window.removeEventListener(\"keydown\", this.closeOnEscape, { capture: true })\n\n // Torn down mid-open \u2014 e.g. the modal holding it was closed outright. The\n // calendar goes with it, so there's no is-active left to wait for.\n if (this.opened) BcDateInput.#releasePinnedScroller()\n }\n\n open() {\n if (this.duetPicker) {\n this.duetPicker.show()\n } else {\n this.#openWhenInitialized = true\n }\n }\n\n shake() {\n BC.shakeElement(this)\n }\n\n focus(options) {\n if (!this.isConnected) return\n\n const button = this.duetPicker?.datePickerButton\n if (button) {\n button.focus(options)\n } else {\n requestAnimationFrame(() => this.focus(options))\n }\n }\n\n configureFocusability = () => {\n if (!this.isConnected) return\n\n const input = this.duetPicker.datePickerInput\n const button = this.duetPicker.datePickerButton\n if (input && button) {\n input.tabIndex = -1\n button.tabIndex = 0\n const label = this.dataset.label\n button.setAttribute(\"aria-label\", label ? `Choose ${label}` : \"Choose date\")\n } else {\n requestAnimationFrame(this.configureFocusability)\n }\n }\n\n duetPickerChanged = async (event) => {\n if (event.detail.value) {\n this.dispatchEvent(new Event(\"bc:before-date-change\", { bubbles: true }))\n this.value = event.detail.value\n this.dispatchEvent(new Event(\"bc:date-change\", { bubbles: true }))\n }\n }\n\n duetPickerFocused = async () => {\n this.duetPicker.datePickerInput.readOnly = true\n }\n\n onOpen = () => {\n this.opened = true\n this.autoAdjustDirection()\n }\n\n onClose = () => {\n this.opened = false\n // Don't reset position-adjustment state here \u2014 the dialog has a fade-out\n // transition, and clearing it immediately would snap the dialog back to\n // its default spot mid-animation. autoAdjustDirection resets on next open.\n BcDateInput.#releasePinnedScrollerWhenIdle(this.duetPicker?.querySelector(\".duet-date__dialog\"))\n }\n\n onKeydown = (event) => {\n if (event.key.startsWith(\"Arrow\") && this.opened) {\n event.stopPropagation()\n }\n }\n\n // On window in the capture phase so an open picker claims Escape before\n // bc-modal's document-level capture handler closes the whole modal, and\n // preventDefault stops a native dialog ancestor from canceling.\n closeOnEscape = (event) => {\n if (event.key === \"Escape\" && this.opened) {\n event.preventDefault()\n event.stopPropagation()\n this.duetPicker.hide()\n }\n }\n\n autoAdjustDirection = () => {\n const content = this.duetPicker.querySelector(\".duet-date__dialog-content\")\n const dialog = this.duetPicker.querySelector(\".duet-date__dialog\")\n if (!content || !dialog) return\n\n // Reset state from the previous open before re-evaluating.\n this.duetPicker.direction = \"right\"\n dialog.classList.remove(\"is-above\")\n dialog.style.insetInlineEnd = \"\"\n\n const { right, bottom, width } = content.getBoundingClientRect()\n\n if (window.innerWidth - right < width) this.duetPicker.direction = \"left\"\n\n if (bottom > window.innerHeight) dialog.classList.add(\"is-above\")\n\n const scroller = this.#scrolledAncestor()\n if (scroller) {\n BcDateInput.#pinScroller(scroller)\n this.#revealCalendar(scroller, dialog)\n } else {\n BcDateInput.#releasePinnedScroller()\n }\n\n this.alignToSidebarEdge(dialog)\n }\n\n // Pinning restores the clipping the pop-out rule used to lift, so the calendar\n // can now land outside the container. Scroll by however much of it hangs over\n // an edge, and by nothing at all when none of it does \u2014 a container that never\n // clipped the calendar stays exactly where the reader left it, which the\n // sidebar's reading list depends on: it pages off its own scroll position.\n // Measured from the box the calendar is anchored to and its untransformed\n // height, since it is mid-transform on the way in. Below 576px duet takes the\n // calendar full-screen against the viewport, leaving nothing to reveal.\n #revealCalendar(scroller, dialog) {\n if (getComputedStyle(dialog).position === \"fixed\") return\n\n const anchor = dialog.offsetParent\n if (!anchor) return\n\n const anchorBox = anchor.getBoundingClientRect()\n const height = dialog.offsetHeight\n const port = scroller.getBoundingClientRect()\n const top = dialog.classList.contains(\"is-above\") ? anchorBox.top - height : anchorBox.bottom\n\n if (top + height > port.bottom) scroller.scrollTop += top + height - port.bottom\n else if (top < port.top) scroller.scrollTop -= port.top - top\n }\n\n // The CSS pop-out that lets the calendar escape its clipping (see\n // modal-sheet.scss) takes the container's scroll offset with it: it stops\n // being a scroll container, jumps its content to the top, and the input \u2014\n // with the calendar anchored to it \u2014 lands off-screen. Only an offset worth\n // preserving counts, so an unscrolled container keeps the pop-out. Stops\n // short of the document, whose scrolling never clipped the calendar.\n #scrolledAncestor() {\n let ancestor = this.parentElement\n\n while (ancestor && ancestor !== document.body && ancestor !== document.documentElement) {\n const { overflowY } = getComputedStyle(ancestor)\n const scrolls = overflowY === \"auto\" || overflowY === \"scroll\"\n if (scrolls && ancestor.scrollTop > 0) return ancestor\n ancestor = ancestor.parentElement\n }\n }\n\n // When the picker sits inside a narrow popup (e.g. bubble-up action-sheet) that lives in the\n // sidebar, the calendar's `right: 0` anchors it to the input's right edge \u2014 leaving the calendar\n // protruding past the popup's left edge and looking detached. Shift it so the right edge aligns\n // with the sidebar instead, keeping the whole calendar inside the sidebar's visual bounds.\n // Skipped for RTL layouts since the alignment math derives from physical edges; BC apps render\n // LTR today, and a future RTL pass would need to mirror this against the inline-end edge.\n alignToSidebarEdge = (dialog) => {\n const sidebar = this.closest(\".sidebar\")\n const popup = this.closest(\".action-sheet\")\n if (!sidebar || !popup) return\n if (getComputedStyle(this).direction === \"rtl\") return\n\n const sidebarRect = sidebar.getBoundingClientRect()\n const myRect = this.getBoundingClientRect()\n const offset = (sidebarRect.right - 8) - myRect.right\n if (offset > 0) dialog.style.insetInlineEnd = `-${offset}px`\n }\n\n get minDate() {\n const minDate = this.getAttribute(\"data-min-date\")\n return minDate ? CalendarDate.parse(minDate) : undefined\n }\n\n set minDate(value) {\n value = CalendarDate.parse(value).toString()\n this.setAttribute(\"data-min-date\", value)\n if (this.duetPicker) this.duetPicker.min = value\n }\n\n get maxDate() {\n const maxDate = this.getAttribute(\"data-max-date\")\n return maxDate ? CalendarDate.parse(maxDate) : undefined\n }\n\n set maxDate(value) {\n value = CalendarDate.parse(value).toString()\n this.setAttribute(\"data-max-date\", value)\n if (this.duetPicker) this.duetPicker.max = value\n }\n\n get name() {\n return this.getAttribute(\"name\")\n }\n\n get value() {\n return this.getAttribute(\"value\")\n }\n\n set value(value) {\n if (value != null) {\n this.setAttribute(\"value\", value)\n this.input?.setAttribute(\"value\", value)\n if (this.duetPicker) this.duetPicker.value = value\n } else {\n this.removeAttribute(\"value\")\n this.input?.removeAttribute(\"value\", value)\n if (this.duetPicker) this.duetPicker.value = null\n }\n }\n\n get date() {\n return this.value ? CalendarDate.parse(this.value) : null\n }\n\n set date(date) {\n this.value = date?.toString()\n }\n\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n set disabled(value) {\n const boolValue = !!value // toggleAttribute second argument only works with booleans\n\n this.toggleAttribute(\"disabled\", boolValue)\n if (this.input) this.input.disabled = boolValue\n if (this.duetPicker) this.duetPicker.disabled = boolValue\n }\n\n get required() {\n return this.hasAttribute(\"required\")\n }\n\n set required(value) {\n this.toggleAttribute(\"required\", !!value)\n if (this.duetPicker) this.duetPicker.required = !!value\n }\n\n // createDuetPicker builds the duet picker from the reflected attributes, but a\n // found server-rendered hidden input keeps its own state \u2014 bring it in line\n // with anything set before initialization.\n #synchronizeInput() {\n if (this.input) {\n this.input.disabled = this.disabled\n if (this.value != null) this.input.setAttribute(\"value\", this.value)\n }\n }\n\n // An inline overflow-y holds off the pop-out rule, which is what discards the\n // offset. It lasts no longer than the calendar that needs it: an inline\n // declaration outliving the calendar would quietly outrank whatever the\n // container's own stylesheet says about its overflow from then on. Only one\n // container can hold an open calendar at a time.\n //\n // Shared across pickers, not per-instance: two pickers in one container hand\n // over while the pin is still on, and the second must not record the first's\n // pin as the container's own overflow \u2014 restoring that on close would strand\n // it inline for good.\n static #pinnedScroller = null\n static #unpinnedOverflowY = null\n static #pendingRelease = null\n\n static #pinScroller(scroller) {\n // A pending release from a picker closing inside this container stands down:\n // the open below is about to depend on the pin it was going to drop.\n this.#cancelPendingRelease()\n\n // Read before releasing: on a re-pin the inline value _is_ the container's own\n // overflow, while a calendar closing inside it computes the pop-out instead.\n const { overflowY } = getComputedStyle(scroller)\n if (this.#pinnedScroller !== scroller) {\n this.#releasePinnedScroller()\n this.#unpinnedOverflowY = scroller.style.overflowY\n }\n\n scroller.style.overflowY = overflowY\n this.#pinnedScroller = scroller\n }\n\n // Releasing the moment the calendar closes would land while it still carries\n // is-active \u2014 the pop-out rule keys off that class, so the flip would go through\n // and discard the very offset the pin exists to preserve. Duet drops the class a\n // render later, so wait for it to go rather than poll for it.\n //\n // A picker-to-picker handoff has to keep the pin across the gap between one\n // calendar closing and the next claiming the class, and the two can land in\n // either order: the next open cancels a pending release, and a release that runs\n // first stands down if another calendar in the container is already active.\n static #releasePinnedScrollerWhenIdle(dialog) {\n if (!this.#pinnedScroller) return\n\n this.#cancelPendingRelease()\n\n if (dialog?.classList.contains(\"is-active\")) {\n this.#pendingRelease = new MutationObserver(() => {\n if (!dialog.classList.contains(\"is-active\") && !this.#pinnedScrollerHoldsCalendar()) this.#releasePinnedScroller()\n })\n this.#pendingRelease.observe(dialog, { attributeFilter: [ \"class\" ] })\n } else if (!this.#pinnedScrollerHoldsCalendar()) {\n this.#releasePinnedScroller()\n }\n }\n\n static #pinnedScrollerHoldsCalendar() {\n return !!this.#pinnedScroller?.querySelector(\".duet-date__dialog.is-active\")\n }\n\n // Back to whatever inline overflow the container carried before it was pinned \u2014\n // which is usually none, and setting the empty string removes the declaration\n // rather than stamping an empty one.\n static #releasePinnedScroller() {\n this.#cancelPendingRelease()\n\n if (this.#pinnedScroller) this.#pinnedScroller.style.overflowY = this.#unpinnedOverflowY ?? \"\"\n this.#pinnedScroller = null\n this.#unpinnedOverflowY = null\n }\n\n static #cancelPendingRelease() {\n this.#pendingRelease?.disconnect()\n this.#pendingRelease = null\n }\n}\n\nconst findOrCreateInput = function(element) {\n return findInput(element) || createInput(element)\n}\n\nconst findInput = element => element.querySelector(\"input[type=hidden]\")\n\nconst createInput = function(element) {\n if (element.name != null) {\n const input = BC.makeElement(\"input\", { type: \"hidden\", name: element.name, value: element.value != null ? element.value : \"\" })\n element.appendChild(input)\n return input\n }\n}\n\nconst initializeDuetPicker = function(element) {\n findDuetPicker(element)?.remove()\n return createDuetPicker(element)\n}\n\nconst findDuetPicker = element => element.querySelector(\"duet-date-picker\")\n\nconst createDuetPicker = function(element) {\n const attributes = { \"first-day-of-week\": parseInt(BC.current.person.firstWeekDayInt, 10) || 0 }\n attributes.value = element.value || \"\"\n\n if (element.id) attributes.identifier = `${element.id}_picker`\n if (element.disabled) attributes.disabled = \"disabled\"\n if (element.required) attributes.required = \"required\"\n if (element.maxDate) attributes.max = element.maxDate\n if (element.minDate) attributes.min = element.minDate\n\n const duetPicker = BC.makeElement(\"duet-date-picker\", attributes)\n duetPicker.dateAdapter.format = buildFormatAdapter(element.dataset.formatType || \"default\")\n\n const label = element.dataset.label\n const buttonLabel = label ? `Choose ${label}` : \"Choose date\"\n duetPicker.localization.buttonLabel = buttonLabel\n duetPicker.localization.placeholder = label || \"Choose date\"\n element.appendChild(duetPicker)\n\n return duetPicker\n}\n\nconst buildFormatAdapter = (type) => {\n let formatter\n\n switch (type) {\n case \"month_day\":\n formatter = new Intl.DateTimeFormat(\"en\", { day: \"numeric\", month: \"short\" })\n break\n case \"month_day_year\":\n formatter = new Intl.DateTimeFormat(\"en\", { day: \"numeric\", month: \"short\", year: \"numeric\" })\n break\n default:\n formatter = new Intl.DateTimeFormat(\"en\", { weekday: \"short\", day: \"numeric\", month: \"short\", year: \"numeric\" })\n }\n\n return (date) => formatter.format(date)\n}\n\nBC.DateInputElement = BcDateInput\nwindow.customElements.define(\"bc-date-picker\", BcDateInput)\n", "class TimeInputElement extends HTMLElement {\n get value() {\n return this.getAttribute(\"value\")\n }\n\n set value(value) {\n this.setAttribute(\"value\", value)\n }\n\n get time() {\n if (this.value) {\n try {\n return CalendarTime.parse(this.value)\n } catch (error) {\n return null\n }\n }\n\n return null\n }\n\n set time(time) {\n this.value = time || \"\"\n this.input.value = time?.toString({12: this.format == \"twelve_hour\", short: true}) || \"\"\n this.dispatchEvent(new Event(\"bc:time-change\", { bubbles: true }))\n }\n\n connectedCallback() {\n BC.ready(() => {\n this.input = findOrCreateInput(this)\n this.format = this.dataset.format\n this.controller = new BC.TimeInputController(this)\n this.time = this.controller.parseTimeFromInput()\n this.setAttribute(\"initialized\", \"\")\n })\n }\n\n disconnectedCallback() {\n this.controller?.destroy()\n }\n\n shake() {\n BC.shakeElement(this.input)\n }\n}\n\nconst findOrCreateInput = function(element) {\n const input = element.querySelector(\"input\") || createInput(element)\n input.setAttribute(\"autocomplete\", \"off\")\n input.setAttribute(\"autocorrect\", \"off\")\n return input\n}\n\nconst createInput = function(element) {\n const input = document.createElement(\"input\")\n input.type = \"text\"\n input.classList.add(\"input\")\n element.appendChild(input)\n return input\n}\n\nBC.TimeInputElement = TimeInputElement\nwindow.customElements.define(\"bc-time-picker\", TimeInputElement)\n\n", "const OPTIONS = function(format) {\n const times = []\n\n if (format == \"twelve_hour\") {\n [\"am\", \"pm\"].forEach((p) => {\n Array.from([12].concat([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])).forEach((i) => {\n [\"00\", \"30\"].forEach((m) => times.push(`${i}:${m}${p}`))\n })\n })\n } else {\n for (let hour = 0; hour < 24; hour++) {\n [\"00\", \"30\"].forEach((minute) => times.push(`${hour}:${minute}`))\n }\n }\n\n return times\n}\n\nBC.TimeInputController = class TimeInputController {\n constructor(element) {\n this.didFocusInput = this.didFocusInput.bind(this)\n this.didClickInput = this.didClickInput.bind(this)\n this.didChangeInput = this.didChangeInput.bind(this)\n this.didPressKey = this.didPressKey.bind(this)\n this.didClick = this.didClick.bind(this)\n this.didClickOption = this.didClickOption.bind(this)\n this.didWindowFocus = this.didWindowFocus.bind(this)\n this.element = element\n this.format = this.element.format\n this.input = this.element.input\n this.listboxId = `${this.input.id}_listbox`\n this.installClickListener()\n this.installInputListeners()\n this.configureComboboxRole()\n window.addEventListener(\"focus\", this.didWindowFocus)\n }\n\n destroy() {\n this.uninstallClickListener()\n window.removeEventListener(\"focus\", this.didWindowFocus)\n }\n\n didFocusInput() {\n if (this.windowJustActivated) return\n this.revealOptions()\n this.scrollToCurrentOption()\n return this.highlightCurrentOptionElement()\n }\n\n didWindowFocus() {\n this.windowJustActivated = true\n requestAnimationFrame(() => { this.windowJustActivated = false })\n }\n\n didClickInput() {\n if (this.optionsAreHidden) {\n this.revealOptions()\n this.scrollToCurrentOption()\n this.highlightCurrentOptionElement()\n }\n }\n\n didChangeInput() {\n this.element.time = this.parseTimeFromInput()\n return this.hideOptions()\n }\n\n didPressKey(event) {\n if (event.keyCode === BC.keyCodes.tab) {\n return this.hideOptions()\n } else if (event.keyCode === BC.keyCodes.escape && !this.optionsAreHidden) {\n event.stopPropagation()\n return this.hideOptions()\n } else if (event.keyCode === BC.keyCodes.up || event.keyCode === BC.keyCodes.down) {\n requestAnimationFrame(() => this.updateSelectedOption())\n }\n }\n\n didClick(event) {\n if (this.element.contains(event.target)) {\n return event.preventDefault()\n } else {\n return this.hideOptions()\n }\n }\n\n didClickOption(event) {\n if (event.target.getAttribute(\"data-role\") === \"option\") {\n this.element.time = CalendarTime.parse(event.target.textContent)\n this.hideOptions()\n this.focusInputWithoutOpeningOptions()\n return BC.triggerEvent(this.element, \"change\")\n }\n }\n\n // Private\n\n installClickListener() {\n return window.addEventListener(\"click\", this.didClick)\n }\n\n uninstallClickListener() {\n return window.removeEventListener(\"click\", this.didClick)\n }\n\n installInputListeners() {\n this.input.addEventListener(\"focus\", this.didFocusInput)\n this.input.addEventListener(\"click\", this.didClickInput)\n this.input.addEventListener(\"change\", this.didChangeInput)\n return this.input.addEventListener(\"keydown\", this.didPressKey)\n }\n\n focusInputWithoutOpeningOptions() {\n this.input.removeEventListener(\"focus\", this.didFocusInput)\n this.input.focus()\n this.input.addEventListener(\"focus\", this.didFocusInput)\n }\n\n get optionsAreHidden() {\n return !this.optionsElement || this.optionsElement.style.display === \"none\"\n }\n\n configureComboboxRole() {\n this.input.setAttribute(\"role\", \"combobox\")\n this.input.setAttribute(\"aria-haspopup\", \"listbox\")\n this.input.setAttribute(\"aria-expanded\", \"false\")\n this.input.setAttribute(\"aria-controls\", this.listboxId)\n }\n\n updateSelectedOption() {\n const selectedOption = this.optionsList?.querySelector(\".time-picker__item--selected\")\n if (selectedOption) {\n selectedOption.scrollIntoView({ block: \"nearest\" })\n this.input.setAttribute(\"aria-activedescendant\", selectedOption.id)\n } else {\n this.input.removeAttribute(\"aria-activedescendant\")\n }\n }\n\n parseTimeFromInput() {\n let time\n try {\n if (this.input.value) time = CalendarTime.parse(this.input.value)\n } catch (error) {\n // eslint-disable-next-line no-empty\n }\n return time\n }\n\n hideOptions() {\n if (this.optionsElement != null) {\n this.optionsElement.style.display = \"none\"\n }\n this.input.setAttribute(\"aria-expanded\", \"false\")\n this.input.removeAttribute(\"aria-activedescendant\")\n }\n\n revealOptions() {\n if (this.optionsElement == null) {\n this.optionsElement = this.createAndPopulateOptionsElement()\n this.element.appendChild(this.optionsElement)\n this.optionsElement.addEventListener(\"click\", this.didClickOption)\n }\n this.optionsElement.style.display = \"block\"\n this.input.setAttribute(\"aria-expanded\", \"true\")\n }\n\n createAndPopulateOptionsElement() {\n // Need two elements (wrapper + list) in order to workaround a Safari rendering bug\n // that makes the first overflowed element clickable even though it's hidden\n const optionsElement = document.createElement(\"div\")\n optionsElement.classList.add(\"time-picker__options-wrapper\")\n optionsElement.innerHTML = \"
    \"\n this.optionsList = optionsElement.firstChild\n this.optionsList.setAttribute(\"role\", \"listbox\")\n this.optionsList.id = this.listboxId\n\n Array.from(OPTIONS(this.format)).forEach((option) => {\n const optionElement = document.createElement(\"li\")\n const itemElement = document.createElement(\"a\")\n const timeValue = CalendarTime.parse(option)\n itemElement.classList.add(\"time-picker__item\")\n itemElement.setAttribute(\"data-role\", \"option\")\n itemElement.setAttribute(\"role\", \"option\")\n itemElement.id = `${this.listboxId}_${timeValue}`\n itemElement.textContent = option\n itemElement.dataset.option = timeValue\n itemElement.dataset.listSelectionTarget = \"item\"\n itemElement.setAttribute(\"href\", \"#\")\n itemElement.setAttribute(\"tabindex\", \"-1\")\n\n optionElement.appendChild(itemElement)\n this.optionsList.appendChild(optionElement)\n })\n\n return optionsElement\n }\n\n scrollToCurrentOption() {\n if (this.optionsList != null) {\n this.optionsList.scrollTop = this.scrollOffsetToCurrentOption()\n }\n }\n\n scrollOffsetToCurrentOption() {\n const currentOptionElement = this.findCurrentOptionElement()\n if (currentOptionElement) {\n const currentOptionElementHeight = currentOptionElement.getBoundingClientRect().height\n return currentOptionElement.offsetTop - currentOptionElementHeight\n }\n }\n\n findCurrentOptionElement() {\n if (this.element.time != null) { return this.optionsList?.querySelector(`a[data-option='${this.element.time.toString()}']`) }\n }\n\n highlightCurrentOptionElement() {\n const currentOptionElement = this.findCurrentOptionElement()\n if (currentOptionElement) {\n $(this.element).find(\"[data-role=option]\").removeClass(\"time-picker__item--selected\")\n this.element.dataset.listSelectionIndex = $(this.element).find(\"[data-role=option]\").index(currentOptionElement)\n currentOptionElement.classList.add(\"time-picker__item--selected\")\n }\n this.updateSelectedOption()\n }\n}\n", "class RelativeDateInputElement extends HTMLElement {\n connectedCallback() {\n BC.ready(() => {\n this.input = findOrCreateInput(this)\n this.trigger = findOrCreateTrigger(this)\n this.valueDidChange()\n this.controller = new BC.RelativeDateInputController(this)\n this.setAttribute(\"initialized\", \"\")\n })\n }\n\n shake() {\n BC.shakeElement(this.trigger)\n }\n\n open() {\n this.controller?.openPicker()\n }\n\n valueDidChange() {\n // Temporarily turning readOnly on/off works around an issue in Safari where\n // both the placeholder content and the input value are simultaneously displayed\n this.trigger.readOnly = false\n\n this.trigger.value = this.label ?? \"\"\n\n this.trigger.readOnly = true\n\n this.dispatchEvent(new Event(\"bc:date-change\", { bubbles: true }))\n }\n\n get name() {\n return this.getAttribute(\"name\")\n }\n\n get value() {\n return this.getAttribute(\"value\")\n }\n\n set value(value) {\n const originalValue = this.value\n\n if (value) {\n this.setAttribute(\"value\", value)\n this.input?.setAttribute(\"value\", value)\n } else {\n this.removeAttribute(\"value\")\n this.input?.removeAttribute(\"value\")\n }\n\n if (this.value !== originalValue) this.valueDidChange()\n }\n\n get date() {\n return this.value ? CalendarDate.parse(this.value) : null\n }\n\n set date(date) {\n this.value = date?.toString()\n }\n\n get week() {\n return this.date ? this.date.weeksSince(BC.TEMPLATE_BASE_DATE) + 1 : null\n }\n\n get label() {\n return this.date ? `Week ${this.week}, ${this.date.getAbbreviatedWeekdayName()}` : null\n }\n\n get disabled() {\n return this.input.disabled\n }\n\n set disabled(value) {\n this.input.disabled = !!value\n }\n}\n\nconst findOrCreateInput = function(element) {\n const input = findInput(element)\n return input || createInput(element)\n}\n\nconst findInput = element => element.querySelector(\"input[type=hidden]\")\n\nconst createInput = function(element) {\n if (element.name) {\n const value = element.value || \"\"\n const input = BC.makeElement(\"input\", {type: \"hidden\", name: element.name, value: value})\n element.appendChild(input)\n return input\n }\n}\n\nconst findOrCreateTrigger = function(element) {\n const trigger = findTrigger(element)\n return trigger || createTrigger(element)\n}\n\nconst findTrigger = element => element.querySelector(\"input:not([type=hidden])\")\n\nconst createTrigger = function(element) {\n const trigger = BC.makeElement(\"input\", {type: \"text\", class: \"input\"})\n trigger.readOnly = true\n element.appendChild(trigger)\n return trigger\n}\n\nBC.RelativeDateInputElement = RelativeDateInputElement\nwindow.customElements.define(\"bc-relative-date-input\", RelativeDateInputElement)\n\n", "class BcRelativeDatePicker extends HTMLElement {\n set date(date) {\n this.chosenDate = date\n this.visibleDate = date\n }\n\n get date() {\n return this.chosenDate\n }\n\n get week() {\n return this.visibleDate.weeksSince(BC.TEMPLATE_BASE_DATE) + 1\n }\n\n // Private\n\n get visibleDate() {\n return this._visibleDate || BC.TEMPLATE_BASE_DATE\n }\n\n set visibleDate(date) {\n this._visibleDate = date\n this.dateDidChange()\n }\n\n connectedCallback() {\n BC.ready(() => {\n this.controller = new BC.RelativeDatePickerController(this)\n this.weekNameElement = this.querySelector(\"[data-role=week-name]\")\n this.daysContainerElement = this.querySelector(\"[data-role=days-list]\")\n this.dayElement = this.querySelector(\"[data-role=day]\")\n this.previousArrowElement = this.querySelector(\"[data-role=previous-week]\")\n this.setAttribute(\"initialized\", \"\")\n this.hide()\n })\n }\n\n showPreviousWeek() {\n if (this.week > 1) {\n this.visibleDate = this.visibleDate.previous(7)\n }\n }\n\n showNextWeek() {\n this.visibleDate = this.visibleDate.next(7)\n }\n\n show() {\n if (this.style) { this.style.display = \"block\" }\n }\n\n hide() {\n if (this.style) { this.style.display = \"none\" }\n }\n\n dateDidChange() {\n this.updateWeekName()\n this.updateDays()\n this.updatePreviousArrow()\n }\n\n updateWeekName() {\n if (this.weekNameElement) {\n this.weekNameElement.textContent = `Week ${this.week}`\n }\n }\n\n updateDays() {\n let child = this.daysContainerElement.firstChild\n\n while (child) {\n this.daysContainerElement.removeChild(child)\n child = this.daysContainerElement.firstChild\n }\n\n for (let n = 0; n <= 6; n++) {\n const day = this.visibleDate.beginningOfWeek().next(n)\n const dayOption = this.dayElement.cloneNode(true)\n dayOption.date = day\n dayOption.textContent = day.getWeekdayName()\n if (day.toString() === this.chosenDate?.toString()) {\n dayOption.classList.add(\"relative-datepicker__day--active\")\n }\n this.daysContainerElement.appendChild(dayOption)\n }\n }\n\n updatePreviousArrow() {\n if (this.week < 2) {\n this.previousArrowElement.classList.add(\"ui-datepicker-prev--disabled\")\n } else {\n this.previousArrowElement.classList.remove(\"ui-datepicker-prev--disabled\")\n }\n }\n}\n\nBC.RelativeDatePickerElement = BcRelativeDatePicker\nwindow.customElements.define(\"bc-relative-date-picker\", BcRelativeDatePicker)\n\n", "if (!window.JST) window.JST = {}\nwindow.JST['bc/inputs/relative_date/picker'] = function(object){\nvar __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n__p+='\\n
    \\n \\n Prev\\n \\n \\n Next\\n \\n
    \\n Week 0\\n
    \\n
    \\n\\n
    \\n ';\n // This element is cloned by the control to create the actual days \n__p+='\\n Monday\\n
    \\n
    \\n';\nreturn __p;\n}", "import \"./picker.jst.ejs\"\n\nBC.RelativeDateInputController = class RelativeDateInputController {\n constructor(element) {\n this.didFocusTrigger = this.didFocusTrigger.bind(this)\n this.didClick = this.didClick.bind(this)\n this.didSelectDate = this.didSelectDate.bind(this)\n this.element = element\n this.setStartDate()\n this.installClickListener()\n this.installTriggerListeners()\n this.installPickerElement()\n }\n\n setStartDate() {\n if (this.element.dataset.startDate) {\n this.startDate = CalendarDate.parse(this.element.dataset.startDate)\n }\n }\n\n destroy() {\n return this.uninstallClickListener()\n }\n\n didFocusTrigger() {\n return this.openPicker()\n }\n\n didClick(event) {\n if (this.element.contains(event.target)) {\n // Prevents Safari trigger a second click on element outside the target\n return event.preventDefault()\n } else {\n return this.pickerElement.hide()\n }\n }\n\n didSelectDate(event) {\n if (this.validateDate(event.target.date)) {\n BC.triggerEvent(this.element, \"before-change\")\n this.element.date = event.target.date\n return BC.triggerEvent(this.element, \"change\")\n } else {\n return this.element.shake()\n }\n }\n\n openPicker() {\n this.pickerElement.date = this.element.date\n return this.pickerElement.show()\n }\n\n // Private\n\n installClickListener() {\n return window.addEventListener(\"click\", this.didClick)\n }\n\n uninstallClickListener() {\n return window.removeEventListener(\"click\", this.didClick)\n }\n\n installTriggerListeners() {\n return this.element.trigger.addEventListener(\"focus\", this.didFocusTrigger)\n }\n\n installPickerElement() {\n this.pickerElement = this.createPickerElement()\n this.element.appendChild(this.pickerElement)\n return this.pickerElement.addEventListener(\"date-selected\", this.didSelectDate)\n }\n\n createPickerElement() {\n const element = document.createElement(\"div\")\n element.innerHTML = JST[\"bc/inputs/relative_date/picker\"]()\n return element.firstChild\n }\n\n validateDate(date) {\n if (this.startDate != null) {\n return date.daysSince(this.startDate) >= 1\n } else {\n return true\n }\n }\n}\n", "BC.RelativeDatePickerController = class RelativeDatePickerController {\n constructor(element) {\n this.didClick = this.didClick.bind(this)\n this.element = element\n this.installClickListener()\n }\n\n destroy() {\n return this.uninstallClickListener()\n }\n\n didClick(event) {\n if (BC.matches(event.target, \"[data-role=previous-week]\")) {\n this.element.showPreviousWeek()\n } else if (BC.matches(event.target, \"[data-role=next-week]\")) {\n this.element.showNextWeek()\n } else if (BC.matches(event.target, \"[data-role=day]\")) {\n this.element.date = event.target.date\n BC.triggerEvent(this.element, \"date-selected\")\n }\n return event.preventDefault()\n }\n\n // Private\n\n installClickListener() {\n return this.element.addEventListener(\"click\", this.didClick)\n }\n\n uninstallClickListener() {\n return this.element.removeEventListener(\"click\", this.didClick)\n }\n}\n", "const { getEventCoordinates } = BC\n\nconst CONFIG = {\n defaultOptions: {\n containerSelector: \"body\",\n insertThreshold: 0.2\n },\n\n cloneStyles: {\n position: \"fixed\",\n zIndex: 9999,\n pointerEvents: \"none\",\n boxSizing: \"border-box\",\n opacity: 0.9\n }\n}\n\nconst THROTTLED_METHODS = [\n \"enterDraggable\", \"enterDraggableParent\",\n \"draggingOverDraggable\", \"draggingDraggable\",\n \"endDragging\"\n]\n\nBC.SortableController = class SortableController {\n constructor(options = {}) {\n this.options = options\n for (const key in CONFIG.defaultOptions) {\n const value = CONFIG.defaultOptions[key]\n if (!this.options[key]) this.options[key] = value\n }\n THROTTLED_METHODS.forEach((method) => this[method] = BC.throttleWithDelay(this[method], 10))\n }\n\n initializeDragging($event) {\n const {clientX, clientY} = getEventCoordinates($event)\n\n let $target = $($event.target)\n $target = $target.closest(this.options.selector)\n $target.attr(\"draggable\", true)\n\n this.dragging = {$target, startClientX: clientX, startClientY: clientY}\n return this.addEventHandlers()\n }\n\n addEventHandlers() {\n throw new Error(\"Not implemented\")\n }\n\n removeEventHandlers() {\n throw new Error(\"Not implemented\")\n }\n\n startDragging() {\n let $clone, $sortable\n this.dragging.$originalParent = this.dragging.$target.parent()\n this.dragging.originalChildren = this.dragging.$originalParent.children().get()\n\n this.dragging.$sortable = ($sortable = this.createSortable())\n this.dragging.$container = $sortable.closest(this.options.containerSelector)\n this.dragging.$startParent = $sortable.parent()\n\n this.trigger(\"clone\")\n\n this.dragging.$clone = ($clone = this.createClone())\n\n this.updateSortablePosition()\n this.dragging.startPosition = this.dragging.position\n this.dragging.started = true\n\n this.scrollManager = new BC.SortableScrollManager(this.dragging)\n\n this.trigger(\"start\")\n this.sendCallback(\"sortStart\")\n\n return requestAnimationFrame(() => {\n if (this.cloneType === \"element\") {\n this.show($clone)\n } else {\n $clone.remove()\n }\n\n if (this.options.placeholderClassName) {\n return $sortable.addClass(this.options.placeholderClassName)\n } else {\n return $sortable.css({visibility: \"hidden\"})\n }\n })\n }\n\n endDragging() {\n if (this.dragging?.started) {\n const {$sortable, $clone, $over} = this.dragging\n $clone.remove()\n\n if (this.overIsDropTarget()) {\n if (this.overIsOrigin()) {\n this.returnSortable()\n } else {\n this.dropContainer($over).prepend($sortable)\n }\n }\n\n if (this.options.placeholderClassName) {\n $sortable.removeClass(this.options.placeholderClassName)\n } else {\n $sortable.css({visibility: \"\"})\n }\n\n this.scrollManager.stop()\n this.updateSortablePosition()\n this.trigger(\"end\")\n this.sendCallback(\"sortEnd\")\n if (this.sortChanged()) { this.sendCallback(\"sortUpdate\") }\n }\n return this.reset()\n }\n\n reset() {\n if (this.dragging) {\n this.dragging.$clone?.remove()\n this.removeEventHandlers()\n this.dragging.$target.removeAttr(\"draggable\")\n this.dragging = null\n }\n }\n\n enterDraggable(element) {\n if (this.isScrolling()) { return }\n\n if (this.dragging.$over) { this.leaveDraggable() }\n const $over = this.findOuterMostDraggable(element)\n\n const {left, top} = $over.offset()\n const overX = left + ($over.width() / 2)\n const overY = top + ($over.height() / 2)\n\n $.extend(this.dragging, {$over, overX, overY})\n return this.sendCallback(\"sortEnter\")\n }\n\n leaveDraggable() {\n if (this.dragging.$over) {\n this.sendCallback(\"sortLeave\")\n return $.extend(this.dragging, {$over: null, overX: null, overY: null})\n }\n }\n\n enterDraggableParent(element) {\n let $parent\n if (this.isScrolling()) { return }\n\n if (this.dragging.$parent) { this.leaveDraggableParent() }\n this.dragging.$parent = ($parent = $(element))\n\n if ($parent.find(this.options.selector).length === 0) {\n $parent.append(this.dragging.$sortable)\n return this.updateSortablePosition()\n }\n }\n\n leaveDraggableParent() {\n this.dragging.$parent = null\n }\n\n // A multi-drag leaves its rows in the list as placeholders, so the row under\n // the pointer is often one of them. Never drop a selection into itself, nor\n // into the folder it is already in.\n overIsDropTarget() {\n const {$over, $sortable} = this.dragging\n return this.options.dropTargetSelector && $over && !$sortable.closest($over).length &&\n $over.is(this.options.dropTargetSelector)\n }\n\n // A drop target's container may hold the container its items really live in,\n // as a folder's frame holds its list or grid once loaded. Items go there, at\n // the top, which is where the server will put them.\n dropContainer($over) {\n const $container = $over.find(this.options.containerSelector).first()\n const $inner = $container.children(this.options.containerSelector)\n\n if ($inner.length) {\n return $inner\n } else {\n return $container\n }\n }\n\n // Items dragged out of a folder and dropped back on it go back where they\n // were, as if the drag were cancelled.\n overIsOrigin() {\n const {$over, $startParent} = this.dragging\n return $over.has($startParent).length > 0\n }\n\n returnSortable() {\n const {$sortable, $startParent, startPosition} = this.dragging\n const $siblings = $startParent.children().not($sortable)\n\n if (startPosition <= $siblings.length) {\n $sortable.insertBefore($siblings.eq(startPosition - 1))\n } else {\n $startParent.append($sortable)\n }\n }\n\n draggingOverDraggable({pageX, pageY, clientX, clientY}) {\n if (this.isScrolling()) { return }\n\n const {$over, $sortable} = this.dragging\n\n if ($over && this.canReorder($sortable, $over, document.elementFromPoint(clientX, clientY))) {\n let manipulation\n if (this.dragOverAtPointShouldInsertBefore(pageX, pageY)) {\n if (!this.equal($over.prev(), $sortable.last())) { manipulation = \"insertBefore\" }\n } else if (this.dragOverAtPointShouldInsertAfter(pageX, pageY)) {\n if (!this.equal($over.next(), $sortable.first())) { manipulation = \"insertAfter\" }\n }\n\n if (manipulation != null) {\n $sortable[manipulation]($over)\n this.updateSortablePosition()\n return this.leaveDraggable()\n }\n }\n }\n\n draggingDraggable(coordinates) {\n if (this.dragging) {\n if (this.cloneType === \"element\") {\n const left = coordinates.clientX - this.dragging.startClientX\n const top = coordinates.clientY - this.dragging.startClientY\n return this.moveClone(left, top)\n }\n }\n }\n\n equal($a, $b) {\n if ($a?.length !== $b?.length) { return false }\n for (let index = 0; index < $a.length; index++) { const a = $a[index]; if (a !== $b[index]) { return false } }\n return true\n }\n\n hide($element) {\n return $element.css(\"display\", \"none\")\n }\n\n show($element) {\n return $element.css(\"display\", \"\")\n }\n\n // Private\n\n createSortable() {\n const {$target} = this.dragging\n\n if (this.options.multipleSelector) {\n const $prev = $target.prevAll(this.options.multipleSelector)\n const $next = $target.nextAll(this.options.multipleSelector)\n $target.before($prev.get().reverse())\n $target.after($next)\n return $prev.add($target).add($next)\n } else {\n return $target\n }\n }\n\n createClone() {\n const {$sortable} = this.dragging\n const $clone = this.hide($sortable.clone()).addClass(\"sortable-clone\")\n\n // The clone is parked in the outermost container, where the styles that\n // sized the original may not reach it, so it carries the original's size.\n $clone.each(function(index, element) {\n const {width, height, left, top} = $sortable[index].getBoundingClientRect()\n return $(element).css($.extend({width, height, left, top}, CONFIG.cloneStyles))\n })\n\n const $parents = $sortable.parents(this.options.containerSelector)\n $clone.appendTo($parents.length > 1 ? $parents.last() : $sortable.parent())\n return $clone\n }\n\n moveClone(left, top) {\n let transform\n switch (this.options.axis) {\n case \"x\":\n transform =`translateX(${left}px)`\n break\n case \"y\":\n transform = `translateY(${top}px)`\n break\n default:\n transform = `translate(${left}px, ${top}px)`\n }\n\n return this.dragging.$clone.css({transform})\n }\n\n // An item inside a drop target the dragged items aren't in stands for the\n // nearest such target: pointing at an expanded folder's children means\n // dropping into the folder, not sorting among them.\n findOuterMostDraggable(element) {\n const $element = $(element).closest(this.options.selector)\n const $foreignDropTargets = this.foreignDropTargetsAround($element)\n const $parents = $element.parentsUntil(this.options.containerSelector, this.options.selector)\n\n if ($foreignDropTargets.length) {\n return $foreignDropTargets.last()\n } else if ($parents.length) {\n return $parents.last()\n } else {\n return $element\n }\n }\n\n // The element and its ancestors that are drop targets, outermost first, less\n // the ones the dragged items are already in.\n foreignDropTargetsAround($element) {\n if (this.options.dropTargetSelector) {\n return $element.parents().addBack().filter(this.options.dropTargetSelector).not(this.dragging.$sortable.parents())\n } else {\n return $()\n }\n }\n\n // An expanded folder shows its children inside its own row, in a container\n // that isn't sortable. Pointing at them means dropping into the folder, not\n // reordering around it.\n canReorder($sortable, $over, pointed) {\n return $sortable.index($over) === -1 &&\n !this.elementPreventsDropping($sortable) &&\n !this.elementPreventsDropping($over) &&\n !this.elementPreventsSorting($over) &&\n !this.elementPreventsSorting(pointed)\n }\n\n elementPreventsDropping(element) {\n return $(element).closest(\"[data-droppable=false]\").length > 0\n }\n\n elementPreventsSorting(element) {\n return $(element).closest(\"[data-sortable=false]\").length > 0\n }\n\n dragOverAtPointShouldInsertBefore(pageX, pageY) {\n if (this.axis() === \"y\") {\n return pageY < this.dragging.overY\n } else {\n const leftEnd = this.dragging.$over.offset().left + (this.dragging.$over.width() * this.insertThreshold())\n return pageX < leftEnd\n }\n }\n\n dragOverAtPointShouldInsertAfter(pageX, pageY) {\n if (this.axis() === \"y\") {\n return true\n } else {\n const rightStart = this.dragging.$over.offset().left + (this.dragging.$over.width() * (1 - this.insertThreshold()))\n return pageX > rightStart\n }\n }\n\n // A list may hold items that flow the other way, like tiles dragged into a\n // column of rows, so the list under the pointer decides the insertion axis.\n axis() {\n return this.dragging.$over.closest(this.options.containerSelector).data(\"sortableAxis\") || this.options.axis\n }\n\n insertThreshold() {\n const overOverride = this.dragging.$over?.data(\"sortableInsertThreshold\")\n const containerOverride = this.dragging.$container?.data(\"sortableInsertThreshold\")\n if (overOverride != null) {\n return Number(overOverride)\n } else if (containerOverride != null) {\n return Number(containerOverride)\n } else {\n return this.options.insertThreshold\n }\n }\n\n isScrolling() {\n return this.scrollManager?.isScrolling()\n }\n\n updateSortablePosition() {\n if (this.dragging) {\n this.dragging.position = getPosition(this.dragging.$sortable)\n }\n }\n\n sortChanged() {\n if (this.dragging) {\n this.updateSortablePosition()\n const {position, startPosition, $sortable, $startParent} = this.dragging\n return (position !== startPosition) || !this.equal($sortable.parent(), $startParent)\n }\n }\n\n trigger(eventName) {\n return this.dragging.$sortable.dispatchEvent(`sortable:${eventName}`)\n }\n\n sendCallback(name) {\n return this.options[name]?.(this.dragging)\n }\n}\n\nconst getPosition = $element => $element.index() + 1\n", "import \"./controller\"\n\nconst {getEventCoordinates} = BC\n\nconst dropEffect = \"move\"\n\nconst events = {\n selector: {\n dragstart($event) {\n if (this.dragging?.started) return\n this.cloneType = this.options.axis ? \"element\" : \"native\"\n this.startDragging()\n this.setDragData($event)\n return this.setDragImage($event)\n },\n\n dragenter($event) {\n setEffectAndCancel($event)\n if (!this.dragging.$over) {\n return this.enterDraggable($event.currentTarget)\n }\n },\n\n dragleave($event) {\n return this.ifDraggedFromElementName(\"$over\", () => {\n return this.leaveDraggable()\n })\n },\n\n dragover($event) {\n setEffectAndCancel($event)\n if (!this.dragging.$over) { this.enterDraggable($event.currentTarget) }\n return this.draggingOverDraggable(getEventCoordinates($event))\n },\n\n dragend($event) {\n return this.endDragging()\n },\n\n drop($event) {\n return $event.preventDefault()\n },\n\n mouseup($event) {\n return this.reset()\n }\n },\n\n containerSelector: {\n dragover($event) {\n setEffectAndCancel($event)\n return this.draggingDraggable(getEventCoordinates($event))\n },\n\n dragenter($event) {\n return setEffectAndCancel($event)\n }\n },\n\n parentSelector: {\n dragenter($event) {\n setEffectAndCancel($event)\n if (!this.dragging.$parent) {\n return this.enterDraggableParent($event.currentTarget)\n }\n },\n\n dragleave($event) {\n return this.ifDraggedFromElementName(\"$parent\", () => {\n return this.leaveDraggableParent()\n })\n }\n }\n}\n\nBC.MouseSortableController = class MouseSortableController extends BC.SortableController {\n sortableSelector() {\n return `${this.options.containerSelector} ${this.options.selector}`\n }\n\n addEventHandlers() {\n this.dragoverLimiter = new DragoverLimiter(this.options.axis)\n for (const selectorName in events) {\n const handlers = events[selectorName]\n for (const eventName in handlers) {\n const handler = handlers[eventName]\n let selector = this.options[selectorName]\n if (selector) {\n // Item-level handlers (the `selector` bucket) need to be scoped to this\n // sortable's container so dragenter/dragover/drop/etc. don't fire on\n // items belonging to a different sortable on the same page (e.g. doors\n // and tools both use `[data-behavior~=card]` on the project dock).\n // Mirrors the mousedown/touchstart prefixing in bc/sortable/index.js.\n if (selectorName === \"selector\") { selector = this.sortableSelector() }\n $(document).on(BC.sortable.namespace(eventName), selector, handler.bind(this))\n }\n }\n }\n }\n\n removeEventHandlers() {\n this.dragoverLimiter.destroy()\n if (this.dragging.started) { cancelTrailingClick(this.sortableSelector()) }\n return $(document).off(BC.sortable.namespace())\n }\n\n ifDraggedFromElementName(draggingElementProp, callback) {\n return $(document).one(BC.sortable.namespace(\"dragover\"), $overEvent => {\n const $element = this.dragging[draggingElementProp]\n if ($element) {\n if (!$($overEvent.target).closest($element).length) {\n return callback()\n }\n }\n })\n }\n\n setDragData($event) {\n const {dataTransfer} = $event.originalEvent\n\n if (dataTransfer != null) {\n dataTransfer.effectAllowed = dropEffect\n // FF requires data to start dragging and, will redirect\n // to that data on drop unless it's text/html.\n return dataTransfer.setData(\"text/html\", this.dragging.$sortable.html())\n }\n }\n\n setDragImage($event) {\n const {dataTransfer, clientX, clientY} = $event.originalEvent\n const { $clone, $target } = this.dragging\n\n if (dataTransfer?.setDragImage != null) {\n this.show($clone)\n // Use target's viewport rect \u2014 the clone has position:fixed but may be inside\n // a transformed ancestor (e.g. folder cards), shifting its containing block\n const {left, top} = $target[0].getBoundingClientRect()\n const offsetX = clientX - left\n const offsetY = clientY - top\n // \"element\" clones stay visible during drag \u2014 \"native\" clones skip this\n // because they're captured by the browser and removed next frame.\n if (this.cloneType === \"element\") {\n temporarilyReplaceCSS($clone, {\n // Hide the native draggable while the element clone is visible\n opacity: 0,\n // Firefox and Safari set incorrect drag images for fixed/absolute elements.\n // Not safe for \"native\" clones: position:relative with a fixed left value\n // pushes the clone off-viewport, preventing Chrome from capturing it.\n position: \"relative\"\n })\n }\n return dataTransfer.setDragImage($clone[0], offsetX, offsetY)\n } else {\n if (this.cloneType === \"element\") {\n return temporarilyReplaceCSS($target, {visibility: \"hidden\", width: 0})\n }\n }\n }\n}\n\nconst setEffectAndCancel = function($event) {\n const event = $event.originalEvent\n event.preventDefault()\n event.dataTransfer.dropEffect = dropEffect\n}\n\n// Firefox sometimes fires a click after a drop, which would follow the row's link.\nconst cancelTrailingClick = function(selector) {\n const cancel = event => { if (event.target.closest(selector)) event.preventDefault() }\n document.addEventListener(\"click\", cancel, { capture: true })\n setTimeout(() => document.removeEventListener(\"click\", cancel, { capture: true }), 30)\n}\n\nconst temporarilyReplaceCSS = function($element, properties = {}) {\n const originalProperties = $element.css(Object.keys(properties))\n $element.css(properties)\n return requestAnimationFrame(() => $element.css(originalProperties))\n}\n\n\n// Limit dragover events, which browsers dispatch continuously at a rapid\n// rate (300+ times/second), so that they only bubble up when associated\n// with cursor movement significant to a drag operation.\nclass DragoverLimiter {\n constructor(axis) {\n this.didDragover = this.didDragover.bind(this)\n if (axis) {\n this.keys = [`client${axis.toUpperCase()}`]\n } else {\n this.keys = [\"clientX\", \"clientY\"]\n }\n\n document.addEventListener(\"dragover\", this.didDragover, true)\n }\n\n destroy() {\n return document.removeEventListener(\"dragover\", this.didDragover, true)\n }\n\n // Private\n\n didDragover(event) {\n if (this.eventIsInsignificant(event)) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n this.event = event\n }\n\n eventIsInsignificant(event) {\n if (!this.event) { return false }\n for (const key of Array.from(this.keys)) { if (event[key] !== this.event[key]) { return false } }\n return true\n }\n}\n", "const {copyObject, extendObject, getEventCoordinates} = BC\n\nconst TRIGGER = 80\nconst SPEED = 0.9\nconst CONTAINER_SPEED = 12\n\nBC.SortableScrollManager = class SortableScrollManager {\n constructor(dragging) {\n let top\n this.pointerDidMove = this.pointerDidMove.bind(this)\n this.transitionDidEnd = this.transitionDidEnd.bind(this)\n this.scrollContainerEdge = this.scrollContainerEdge.bind(this)\n const { $container } = dragging\n\n this.$html = $(\"html\")\n this.$window = $(window)\n this.windowHeight = this.$window.height()\n this.scrollable = BC.findScrollableAncestor($container[0])\n\n this.container = {\n top: (top = $container.offset().top),\n bottom: top + $container.height()\n }\n\n this.scroll = {\n top: this.container.top,\n bottom: this.container.bottom - this.windowHeight\n }\n\n this.scrollIfNeeded = BC.throttle(this.scrollIfNeeded)\n\n this.start()\n }\n\n start() {\n if (!this.started) {\n this.started = true\n if (this.throttledPointerDidMove == null) { this.throttledPointerDidMove = _.throttle(this.pointerDidMove, 200) }\n $(document).on(\"dragover touchmove\", this.throttledPointerDidMove)\n return $(document).on(\"transitionend\", \"html\", this.transitionDidEnd)\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false\n $(document).off(\"dragover touchmove\", this.throttledPointerDidMove)\n $(document).off(\"transitionend\", \"html\", this.transitionDidEnd)\n this.stopContainerScroll()\n return this.stopScrolling()\n }\n }\n\n isScrolling() {\n return (this.scrolling != null)\n }\n\n // Private\n\n pointerDidMove($event) {\n if (this.started) {\n this.updatePointer(getEventCoordinates($event))\n if (this.scrollable) {\n this.updateContainerScroll()\n }\n if (this.containerDirection) {\n this.stopScrolling()\n } else {\n this.scrollIfNeeded()\n }\n } else {\n this.stopScrolling()\n }\n }\n\n transitionDidEnd($event) {\n if ($event.originalEvent.propertyName === \"margin-top\") {\n return this.stopScrolling()\n }\n }\n\n updatePointer(coordinates) {\n if (this.pointer) {\n this.pointer.previous = copyObject(this.pointer)\n extendObject(this.pointer, coordinates)\n\n const change = this.pointer.pageY - this.pointer.previous.pageY\n if (Math.abs(change) > 2) {\n this.pointer.direction = change < 0 ? \"up\" : \"down\"\n }\n } else {\n this.pointer = coordinates\n }\n }\n\n pointerWithinContainer() {\n return (this.pointer.pageY > this.container.top) && (this.pointer.pageY < this.container.bottom)\n }\n\n windowIsScrollable() {\n return document.documentElement.scrollHeight > this.windowHeight\n }\n\n getScrollTrigger() {\n if (this.windowIsScrollable() && this.pointerWithinContainer()) {\n switch (this.pointer.direction) {\n case \"up\": if (this.pointer.clientY < TRIGGER) { return \"top\" } break\n case \"down\": if (this.pointer.clientY > (this.windowHeight - TRIGGER)) { return \"bottom\" } break\n }\n }\n }\n\n scrollIfNeeded() {\n const trigger = this.getScrollTrigger()\n\n if (this.scrolling) {\n if (this.scrolling !== trigger) {\n return this.stopScrolling()\n }\n\n } else if (trigger) {\n return this.scrollTo(trigger)\n }\n }\n\n scrollTo(trigger) {\n let distance = this.getDistanceTo(trigger)\n if (distance) {\n if (trigger === \"top\") { distance += this.pointer.clientY }\n const time = Math.abs(distance / (this.windowHeight * SPEED))\n this.setMarginTop(distance, time)\n this.scrolling = trigger\n }\n }\n\n stopScrolling() {\n if (this.scrolling) {\n const scrollTop = this.getScrollTop() - this.getMarginTop()\n this.removeMarginTop()\n this.setScrollTop(scrollTop)\n this.scrolling = null\n }\n }\n\n getMarginTop() {\n return parseInt(this.$html.css(\"margin-top\"), 10)\n }\n\n setMarginTop(value, transitionTime) {\n const marginTop = (value != null) ? `${value}px` : \"\"\n const transition = (transitionTime != null) ? `${transitionTime}s ease-in-out` : \"\"\n return this.$html.css({marginTop, transition})\n }\n\n removeMarginTop() {\n return this.setMarginTop()\n }\n\n getDistanceTo(trigger) {\n return this.getScrollTop() - this.scroll[trigger]\n }\n\n getScrollTop() {\n return this.$window.scrollTop()\n }\n\n setScrollTop(value) {\n return this.$window.scrollTop(value)\n }\n\n // Takes priority over the window path while it's scrolling (see pointerDidMove)\n // and leaves `scrolling` unset on purpose, so edge scrolling a container\n // doesn't suppress the controller's reorder and re-parent logic \u2014 otherwise\n // the draggable couldn't leave the container.\n updateContainerScroll() {\n this.containerDirection = this.containerEdge()\n if (this.containerDirection) {\n this.startContainerScroll()\n } else {\n this.stopContainerScroll()\n }\n }\n\n containerEdge() {\n const {top, right, bottom, left} = this.scrollable.getBoundingClientRect()\n const {clientX, clientY} = this.pointer\n\n if (clientX < left || clientX > right || clientY < top || clientY > bottom) {\n return null\n } else if (clientY < top + TRIGGER && this.scrollable.scrollTop > 0) {\n return \"up\"\n } else if (clientY > bottom - TRIGGER && this.scrollable.scrollTop < this.maxContainerScroll()) {\n return \"down\"\n } else {\n return null\n }\n }\n\n maxContainerScroll() {\n return this.scrollable.scrollHeight - this.scrollable.clientHeight\n }\n\n // The drag's dragover events stop firing once the pointer holds still (see\n // the DragoverLimiter in mouse_controller.js), so keep scrolling each frame\n // from the last known edge until the pointer moves away from it.\n startContainerScroll() {\n if (this.containerScrollFrame == null) {\n this.containerScrollFrame = requestAnimationFrame(this.scrollContainerEdge)\n }\n }\n\n stopContainerScroll() {\n if (this.containerScrollFrame != null) {\n cancelAnimationFrame(this.containerScrollFrame)\n this.containerScrollFrame = null\n }\n this.containerDirection = null\n }\n\n scrollContainerEdge() {\n if (this.containerDirection) {\n let amount = CONTAINER_SPEED\n if (this.containerDirection === \"up\") {\n amount = -CONTAINER_SPEED\n }\n const previousScrollTop = this.scrollable.scrollTop\n this.scrollable.scrollTop += amount\n if (this.scrollable.scrollTop === previousScrollTop) {\n this.stopContainerScroll()\n } else {\n this.containerScrollFrame = requestAnimationFrame(this.scrollContainerEdge)\n }\n } else {\n this.containerScrollFrame = null\n }\n }\n}\n", "import \"./controller\"\nconst {getEventCoordinates} = BC\n\nif (BC.platform.isIOS()) {\n // Fixes page scrolling while dragging in iOS\n // For iOS 10, we only need an empty handler to prevent page scrolling\n // For iOS 11.3-12, we need a static, non-passive handler to allow\n // dynamic handlers to preventDefault and cancel scrolling\n // - https://github.com/metafizzy/flickity/issues/740\n // - https://bugs.webkit.org/show_bug.cgi?id=184250\n // - https://bugs.webkit.org/show_bug.cgi?id=185656\n const noop = function() {}\n document.addEventListener(\"touchmove\", noop, {passive: false})\n}\n\nconst SWIPE_TOLERANCE = BC.platform.isAndroid() ? 40 : 20\n\nBC.TouchSortableController = class TouchSortableController extends BC.SortableController {\n constructor() {\n super(...arguments)\n this.cloneType = \"element\"\n this.didTouchMove = this.didTouchMove.bind(this)\n this.didTouchEnd = this.didTouchEnd.bind(this)\n }\n\n initializeDragging($event) {\n super.initializeDragging(...arguments)\n this.touchStartedAt = Date.now()\n }\n\n addEventHandlers() {\n document.addEventListener(\"touchmove\", this.didTouchMove, {passive: false})\n document.addEventListener(\"touchend\", this.didTouchEnd, {passive: false})\n return document.addEventListener(\"contextmenu\", this.preventContextMenu, {passive: false})\n }\n\n removeEventHandlers() {\n document.removeEventListener(\"touchmove\", this.didTouchMove, {passive: false})\n document.removeEventListener(\"touchend\", this.didTouchEnd, {passive: false})\n return document.removeEventListener(\"contextmenu\", this.preventContextMenu, {passive: false})\n }\n\n startDragging() {\n super.startDragging(...arguments)\n document.documentElement.classList.add(\"overflow-hidden\")\n return BC.triggerEvent(document, \"bc:android-dragstart\")\n }\n\n endDragging() {\n super.endDragging(...arguments)\n document.documentElement.classList.remove(\"overflow-hidden\")\n return BC.triggerEvent(document, \"bc:android-dragend\")\n }\n\n // Private\n\n didTouchMove(event) {\n let coordinates\n if (!this.dragging) { return }\n const {clientX, clientY} = (coordinates = getEventCoordinates(event))\n\n if (this.dragging.started) {\n event.preventDefault()\n const $element = $(document.elementFromPoint(clientX, clientY))\n\n if ($.contains(this.dragging.$container[0], $element[0])) {\n let $over\n this.draggingDraggable(coordinates)\n\n if (($over = $element.closest(this.options.selector)).length) {\n if (!this.equal($over, this.dragging.$over)) { this.enterDraggable($over[0]) }\n this.draggingOverDraggable(coordinates)\n } else {\n this.leaveDraggable()\n }\n\n if (this.options.parentSelector) {\n let $parent\n if (($parent = $element.closest(this.options.parentSelector)).length) {\n if (!this.equal($parent, this.dragging.$parent)) { return this.enterDraggableParent($parent[0]) }\n } else {\n return this.leaveDraggableParent()\n }\n }\n }\n } else {\n if ((Date.now() - this.touchStartedAt) > 50) {\n const {startClientX, startClientY} = this.dragging\n\n if (Math.max(Math.abs(clientX - startClientX), Math.abs(clientY - startClientY)) < SWIPE_TOLERANCE) {\n if ($(event.target).closest(this.options.selector).length) {\n event.preventDefault()\n return this.startDragging()\n }\n } else {\n return this.reset()\n }\n }\n }\n }\n\n didTouchEnd(event) {\n if (this.dragging?.started) {\n return this.endDragging()\n } else {\n return this.reset()\n }\n }\n\n preventContextMenu(event) {\n return event.preventDefault()\n }\n}\n", "export function revertOnRejection(sortUpdate) {\n return function(dragging) {\n const { $sortable, $originalParent, originalChildren } = dragging\n\n return (async () => sortUpdate(dragging))().catch((error) => {\n restore($sortable, $originalParent, originalChildren)\n explain(error, (message) => BC.displayFlashMessage(message, { classes: \"flash-notice--error\" }))\n })\n }\n}\n\nfunction restore($sortable, $originalParent, originalChildren) {\n const draggedInPreDragOrder = $sortable.get()\n .sort((a, b) => originalChildren.indexOf(a) - originalChildren.indexOf(b))\n\n draggedInPreDragOrder.forEach((element) => {\n const predecessor = remainingPredecessorOf(element, originalChildren, $originalParent[0])\n if (predecessor) {\n $(predecessor).after(element)\n } else {\n $originalParent.prepend(element)\n }\n })\n}\n\nfunction remainingPredecessorOf(element, originalChildren, originalParent) {\n for (let index = originalChildren.indexOf(element) - 1; index >= 0; index--) {\n if (originalChildren[index].parentNode === originalParent) {\n return originalChildren[index]\n }\n }\n return null\n}\n\nfunction explain(error, displayMessage) {\n if (statusCode(error) === 403) {\n displayMessage(\"You don\u2019t have permission to move that.\")\n } else {\n if (!isNetworkError(error)) {\n Stimulus.handleError(error, \"Failed to save a drag-and-drop reposition\", { identifier: \"sortable\" })\n }\n displayMessage(\"Sorry, that didn\u2019t save. Please try again.\")\n }\n}\n\nfunction isNetworkError(error) {\n return error instanceof TypeError && error.response == null\n}\n\nfunction statusCode(error) {\n if (error.response) {\n return error.response.status\n } else {\n return Number(error.message)\n }\n}\n", "import \"./mouse_controller\"\nimport \"./controller\"\nimport \"./scroll_manager\"\nimport \"./touch_controller\"\n\nimport { revertOnRejection } from \"./revert\"\n\nBC.sortable = function(options = {}) {\n let controller = null\n\n if (options.revertOnRejection) {\n options.sortUpdate = revertOnRejection(options.sortUpdate)\n }\n\n let selector = options.handleSelector || options.selector\n if (options.containerSelector) { selector = `${options.containerSelector} ${selector}` }\n\n const initializeController = function(type, $event) {\n const ControllerClass = BC[`${type}SortableController`]\n\n // The delegated mousedown/touchstart handlers are registered the moment\n // BC.sortable() runs, but the controller classes are assigned by separate\n // modules (mouse_controller.js, touch_controller.js). If a drag begins\n // before those have evaluated \u2014 or against a stale/partially-loaded bundle\n // where the class is missing \u2014 the lookup is undefined and `new` throws an\n // uncaught \"BC[...] is not a constructor\" TypeError. Bail out instead: the\n // drag simply doesn't start and the user can retry once the page settles.\n if (typeof ControllerClass !== \"function\") { return }\n\n disableInnerDraggables($event.currentTarget)\n controller = new ControllerClass(options)\n return controller.initializeDragging($event)\n }\n\n $(document).on(\"mousedown\", selector, function($event) {\n if ($event.dragTarget || ($event.which > 1)) { return }\n\n if (acceptEvent($event)) {\n controller?.reset()\n $event.dragTarget = $event.target\n return initializeController(\"Mouse\", $event)\n }\n })\n\n return $(document).on(\"touchstart\", selector, function($event) {\n if (controller?.dragging || $event.dragTarget) { return }\n\n if (acceptEvent($event)) {\n $event.dragTarget = $event.target\n return initializeController(\"Touch\", $event)\n }\n })\n}\n\nBC.sortable.namespace = (eventName = \"\") => eventName.split(\" \").map(n => `${n}.sortable`).join(\" \")\n\nconst acceptEvent = function($event) {\n if ($event.target === $event.currentTarget) {\n return true\n } else {\n return elementIsSortable($event.target) && !elementEmitsDragEvents($event.target)\n }\n}\n\nconst elementIsSortable = element => !$(element).closest(\"[data-behavior~=sortable_disabled]\").length\n\nconst elementEmitsDragEvents = element => {\n const $element = $(element)\n\n if ($element.closest(\"[data-sortable-allows-drag-start]\").length) {\n return false\n }\n\n return $element.closest(\"[contenteditable]\").length || $element.is(\":input\")\n}\n\nconst disableInnerDraggables = element => $(element).find(\"a, img\").attr(\"draggable\", false)\n", "BC.on(\"turbo:load\", \"populate time zone\", () => $(\"[data-behavior~=populate_time_zone]\").val(Timezone.get()))\n\nconst Timezone = {\n get() {\n const today = new Date()\n const winter = new Date(today.getFullYear(), 0, 1)\n const summer = new Date(today.getFullYear(), 6, 1)\n const offset = Math.max(winter.getTimezoneOffset(), summer.getTimezoneOffset()) / 60\n\n return this.zones[offset] || \"UTC\"\n },\n\n zones: {\n \"11\": \"American Samoa\",\n \"10\": \"Hawaii\",\n \"9\": \"Alaska\",\n \"8\": \"Pacific Time (US & Canada)\",\n \"7\": \"Mountain Time (US & Canada)\",\n \"6\": \"Central Time (US & Canada)\",\n \"5\": \"Eastern Time (US & Canada)\",\n \"4.5\": \"Caracas\",\n \"4\": \"Atlantic Time (Canada)\",\n \"3.5\": \"Montevideo\",\n \"3\": \"Brasilia\",\n \"2\": \"Mid-Atlantic\",\n \"1\": \"Azores\",\n \"0\": \"UTC\",\n \"-1\": \"Amsterdam\",\n \"-2\": \"Athens\",\n \"-3\": \"Moscow\",\n \"-4\": \"Abu Dhabi\",\n \"-4.5\": \"Kabul\",\n \"-5\": \"Ekaterinburg\",\n \"-5.5\": \"Chennai\",\n \"-5.75\": \"Kathmandu\",\n \"-6\": \"Almaty\",\n \"-6.5\": \"Rangoon\",\n \"-7\": \"Bangkok\",\n \"-8\": \"Beijing\",\n \"-9\": \"Tokyo\",\n \"-9.5\": \"Adelaide\",\n \"-10\": \"Brisbane\",\n \"-11\": \"New Caledonia\",\n \"-12\": \"Auckland\",\n \"-12.75\": \"Chatham Is.\",\n \"-13\": \"Nuku'alofa\"\n }\n}\n", "// Beef up lackluster native email validation, which considers \"person@example\" valid.\nconst pattern = /^\\S+@\\S+\\.[A-Za-z0-9\\-]{2,23}$/\nconst patternString = pattern.toString().replace(/^\\//, \"\").replace(/\\/$/, \"\")\n\nBC.observe(\"input[type=email]:not([pattern])\", element => element.pattern = patternString)\n"], "mappings": "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", "names": ["location", "params", "url", "key", "value", "expandPath", "path", "queryString", "formatPathWithPrefix", "accountPath", "prefix", "element", "formatEntriesForTable", "getPerformanceEntries", "windowMarkers", "resourceMarkers", "timing", "_a", "_b", "entries", "start", "marker", "time", "getTimingEntriesForResourceType", "resource", "formatFilename", "loadTimes", "a", "b", "types", "entry", "name", "parts", "filename", "data", "object", "properties", "key", "value", "keys", "result", "a", "b", "callback", "throttledCallback", "handler", "install", "uninstall", "sounds", "url", "array", "object", "value", "set", "url", "TIMEOUT", "_a", "resolve", "responseType", "xhr", "event", "title", "response", "dataURL", "recordingId", "bucketId", "hash", "getHashFromURL", "__publicField", "data", "document", "page", "a", "MutationObserver", "SelectorSet", "selector", "definition", "afterDOMContentLoaded", "_a", "element", "definitions", "matched", "attributeName", "_b", "present", "mutations", "mutation", "nodes", "node", "parentElement", "callback", "_c", "value", "values", "v", "elementMatchesSelector", "composite", "result", "child", "readyCallbacks", "selector", "definition", "form", "RemoteFormValidator", "input", "event", "$submit", "valid", "element", "message", "callback", "errors", "_a", "name", "required", "data", "callback", "fn", "monitorCallbacks", "callbacks", "_a", "block", "started", "request", "args", "delay", "throttled", "timeoutId", "debounced", "camelize", "dashString", "element", "dasherize", "camelString", "_a", "normalize", "string", "regexpEscape", "stringIsEntirelyEmoji", "truncate", "length", "omission", "toSentence", "strings", "url", "options", "fetch", "headers", "contentType", "getContentTypeForBody", "responseType", "fetchOptions", "nativeFetchIsBuggyForMethod", "fetchIsNative", "checkStatus", "parseBody", "method", "body", "response", "authUrl", "error", "xhr", "emojiCore", "joined", "userAgent", "ios", "android", "mobile", "iosApp", "androidApp", "mobileApp", "desktopApp", "mac", "windows", "isChrome", "isSafari", "isFirefox", "match", "configuration", "isVisible", "isFocused", "ucs2decode", "ucs2encode", "value", "ucs2String", "codepoints", "offset", "ucs2Offset", "_a", "hasArrayFrom", "hasStringCodePointAt", "hasStringFromCodePoint", "string", "char", "output", "counter", "length", "extra", "array", "characters", "element", "className", "callback", "applyClassAwaitingEvent", "eventName", "timeout", "uninstalled", "uninstall", "duration", "getDuration", "type", "tagName", "attributes", "element", "name", "value", "object", "__t", "__p", "__j", "print", "selector", "message", "icon", "classes", "duration", "element", "eventName", "options", "handler", "element", "selector", "useCapture", "times", "wrappedHandler", "event", "type", "properties", "createEvent", "_a", "_b", "source", "eventNames", "description", "bind", "events", "entry", "handlers", "handle", "handleEvents", "handlerTime", "formatTime", "err", "totalTime", "ms", "isMouseEvent", "key", "value", "char", "rand", "lastInputWasKeyboard", "listening", "trackInputType", "event", "startTracking", "matchesProp", "html", "props", "prop", "element", "selector", "display", "visibility", "opacity", "topAboveViewport", "topInViewport", "bottomInViewport", "bottomBelowViewport", "getPositionsInViewport", "scrollable", "scrollX", "scrollY", "viewport", "getViewportDetails", "top", "bottom", "height", "topOffset", "bottomOffset", "fitsInViewport", "rect", "style", "scrollPaddingTop", "scrollPaddingBottom", "error", "_a", "domLoaded", "callback", "CANONICAL_COLOR_NAMES", "color", "canonical", "value", "getRGBValues", "numberToHex", "number", "b", "g", "r", "match", "canvas", "context", "data", "getCookie", "name", "cookies", "prefix", "cookie", "value", "twentyYears", "getMetaContent", "name", "_a", "getCookie", "getMetaContent", "readObject", "prefix", "root", "result", "element", "name", "value", "refresh", "data", "delegate", "exitWarning", "navigateWarning", "event", "isSafeRevisit", "options", "callback", "accept", "multiple", "$fileInput", "uninstall", "event", "maxConcurrent", "fileUpload", "f", "PENDING", "ACTIVE", "DONE", "EMPTY_FILE_ERROR", "file", "form", "url", "method", "manager", "contentType", "resolve", "reject", "event", "error", "_a", "_b", "_c", "_d", "percent", "data", "reportDirectUploadError", "error", "_a", "_b", "message", "status", "PENDING", "ACTIVE", "DONE", "file", "url", "token", "attachmentName", "manager", "authenticate", "resolve", "reject", "error", "attributes", "_a", "_b", "_c", "xhr", "event", "percent", "_d", "reportDirectUploadError", "url", "maxChecks", "delay", "resolve", "reject", "data", "BcSticky", "_onMorph", "BcPieChart", "__privateAdd", "event", "__privateGet", "percent", "gap", "length", "ONLY_DISCLOSED", "selectors", "indexSelector", "element", "query", "index", "elements", "queryParts", "normalize", "searchString", "groupElement", "pinned", "part", "_a", "_b", "string", "strings", "textContent", "title", "mutations", "mutationsAffectIndex", "mutation", "addedNodes", "removedNodes", "node", "nodeAffectsIndex", "classNames", "query", "elementIndex", "index", "elements", "pinCount", "groupElement", "element", "announce", "message", "assertive", "selectors", "classNames", "ANNOUNCE_RESULTS_DELAY", "element", "dialogElement", "_a", "announce", "clone", "inputElement", "handler", "event", "linkElement", "buttonElement", "checkboxElement", "target", "selected", "resetEl", "item", "targets", "names", "checkbox", "textEl", "label", "selectionCount", "dialog", "ids", "id", "noneLabel", "pluralLabel", "distance", "index", "BcChatRoomElement", "_initialized", "BcRequire", "__privateAdd", "__privateGet", "__privateSet", "requestIdle", "_a", "Loader", "cancelIdle", "getPlaceholderStyle", "key", "value", "child", "element", "styles", "computedStyle", "result", "_Loader", "script", "loaded", "resolve", "reject", "callback", "link", "timeout", "settled", "timeoutId", "invoke", "didTimeout", "start", "handle", "tagName", "loadingClassName", "innerContainerSelector", "sentinelDataAttribute", "sentinelSequence", "getDocumentScroll", "property", "getContainer", "element", "_onLoadNextPage", "_onMorph", "_applyAttributeDefaults", "applyAttributeDefaults_fn", "BcInfinitePage", "__privateAdd", "event", "__privateMethod", "__privateGet", "_a", "_b", "_c", "_d", "root", "entries", "container", "isListContainer", "sentinel", "tagName", "entry", "handler", "scrollContainer", "type", "properties", "currentLocation", "turboFrameSrc", "base", "value", "selector", "loadingClassName", "html", "params", "content", "anchor", "position", "scrollAnchor", "p", "nextFrame", "activateFocusTrap", "element", "_a", "controllers", "deactivateFocusTrap", "_openerElement", "_fallbackRegion", "_regionObserver", "_applyDialogSemantics", "applyDialogSemantics_fn", "_nameDialog", "nameDialog_fn", "_restoreOpenerFocus", "restoreOpenerFocus_fn", "_openerFor", "openerFor_fn", "_canRestoreFocusTo", "canRestoreFocusTo_fn", "_watchFallbackRegion", "watchFallbackRegion_fn", "_stopWatchingFallbackRegion", "stopWatchingFallbackRegion_fn", "_refreshFallbackRegion", "refreshFallbackRegion_fn", "_region", "region_get", "BcModal", "__privateAdd", "__async", "eventProperties", "nextFrame", "__privateSet", "__privateMethod", "event", "autofocused", "dialog", "activateFocusTrap", "didDialogMouseDown", "didDialogClick", "didMouseDown", "didClick", "didKeyDown", "didScroll", "_a", "formElement", "submitter", "handler", "deactivateFocusTrap", "__privateGet", "value", "unlockAfter", "region", "element", "label", "opener", "isDialogBackdropPointerEvent", "rect", "clientX", "clientY", "openModals", "deltaY", "BcContentFilter", "_a", "attributeName", "_b", "_c", "_d", "_e", "_f", "previousSelectedId", "value", "query", "tagName", "BcGroupedElements", "mutations", "mutationsAffectGrouping", "callback", "dividerElements", "datedElements", "groupExistingElements", "date", "firstDatedElement", "dividerElement", "relativePrefix", "absolutePrefix", "createDividerElementForDate", "elementFollowedByElement", "elements", "element", "datetime", "calendarDate", "collection", "elementIsDivider", "container", "getDividerElementHTMLForCalendarDate", "left", "right", "today", "mutation", "node", "nodeAffectsGrouping", "_a", "BcSuggestionSelectElement", "selected", "value", "optionElements", "optionCount", "option", "index", "_a", "BcSuggestionOptionElement", "value", "callback", "drawFrame", "frame", "delegate", "content", "position", "previousContext", "withTerminator", "_a", "_b", "values", "range", "terminator", "value", "editor", "startPosition", "offsets", "placement", "callback", "query", "results", "character", "word", "option", "element", "event", "result", "_showPopover", "showPopover_fn", "_hidePopover", "hidePopover_fn", "_createSelectElement", "createSelectElement_fn", "_containerElement", "containerElement_fn", "_removeSelectElement", "removeSelectElement_fn", "_a", "options", "__privateAdd", "__publicField", "callback", "__privateMethod", "offsets", "placement", "availableMaxHeight", "elementHeight", "height", "left", "maxHeight", "top", "style", "margin", "getElementMargin", "elementRect", "viewportRect", "getViewportRect", "availableHeightAbove", "availableHeightBelow", "thresholdHeight", "requestedMaxHeight", "elementRight", "origin", "selectedOption", "scrollTop", "selectHeight", "scrollBottom", "optionTop", "optionHeight", "optionBottom", "results", "_b", "event", "url", "option", "cancelEvent", "element", "result", "side", "delegate", "content", "position", "matchQueryAndTerminatorForWord", "characterMatchesWordBoundary", "bounds", "findWordBoundsFromStringAtPosition", "match", "query", "terminator", "_a", "context", "string", "char", "index", "start", "end", "keyCodes", "MAX_VISIBLE_SUGGESTIONS", "_announceOptionChange", "announceOptionChange_fn", "_a", "element", "__privateAdd", "__publicField", "event", "value", "autocompletables", "suggestionsId", "collection", "__privateMethod", "filterCallback", "character", "word", "position", "query", "callback", "selectedAutocompletable", "noResultsLabel", "name", "autocompletable", "html", "range", "terminator", "entry", "frame", "createPattern", "selectElement", "lastValue", "results", "style", "announce", "BcAutocomplete", "name", "attributeName", "oldValue", "newValue", "values", "value", "unselectedValues", "callback", "autocompletables", "event", "_a", "object", "__t", "__p", "__j", "print", "object", "__t", "__p", "__j", "print", "autocompletable", "fetchCache", "url", "autocompletable", "autocompletables", "selectedAutocompletable", "autocompletables", "options", "autocompletable", "uniqueAutocompleteableKey", "compareAutocompletables", "value", "collectionOptions", "values", "allGroupMembersAreAdded", "id", "callback", "query", "matchAutocompletablesByNameOrDescription", "compareRank", "collection", "otherAutocompletable", "matchAutocompletablesByNameAtHead", "matchAutocompletablesByRestOfName", "matchAutocompletablesByRestOfDescription", "matchAutocompletablesByRegExp", "regexpForQuery", "regexp", "propertyName", "normalizedPropertyName", "property", "prefix", "patternForQuery", "BcDatetimeInput", "dateTime", "_a", "date", "time", "datePicker", "timePicker", "callback", "element", "value", "field", "getLeftOffset", "event", "el", "parentOffset", "identifier", "BcSegmentedInput", "element", "fields", "elements", "i", "_a", "_openWhenInitialized", "_revealCalendar", "revealCalendar_fn", "_scrolledAncestor", "scrolledAncestor_fn", "_synchronizeInput", "synchronizeInput_fn", "_pinnedScroller", "_unpinnedOverflowY", "_pendingRelease", "_pinScroller", "pinScroller_fn", "_releasePinnedScrollerWhenIdle", "releasePinnedScrollerWhenIdle_fn", "_pinnedScrollerHoldsCalendar", "pinnedScrollerHoldsCalendar_fn", "_releasePinnedScroller", "releasePinnedScroller_fn", "_cancelPendingRelease", "cancelPendingRelease_fn", "_BcDateInput", "__privateAdd", "__publicField", "input", "button", "label", "event", "__async", "_a", "_b", "__privateMethod", "content", "dialog", "right", "bottom", "width", "scroller", "sidebar", "popup", "sidebarRect", "myRect", "offset", "findOrCreateInput", "initializeDuetPicker", "__privateGet", "__privateSet", "options", "minDate", "value", "maxDate", "date", "boolValue", "anchor", "anchorBox", "height", "port", "top", "ancestor", "overflowY", "BcDateInput", "element", "findInput", "createInput", "findDuetPicker", "createDuetPicker", "attributes", "duetPicker", "buildFormatAdapter", "buttonLabel", "type", "formatter", "TimeInputElement", "value", "error", "time", "findOrCreateInput", "_a", "element", "input", "createInput", "OPTIONS", "format", "times", "p", "i", "m", "hour", "minute", "element", "event", "_a", "selectedOption", "time", "error", "optionsElement", "option", "optionElement", "itemElement", "timeValue", "currentOptionElement", "currentOptionElementHeight", "RelativeDateInputElement", "findOrCreateInput", "findOrCreateTrigger", "_a", "value", "_b", "originalValue", "date", "element", "findInput", "createInput", "input", "findTrigger", "createTrigger", "trigger", "BcRelativeDatePicker", "date", "_a", "child", "n", "day", "dayOption", "object", "__t", "__p", "__j", "print", "element", "event", "date", "element", "event", "getEventCoordinates", "CONFIG", "THROTTLED_METHODS", "options", "key", "value", "method", "$event", "clientX", "clientY", "$target", "$clone", "$sortable", "_a", "$over", "element", "left", "top", "overX", "overY", "$parent", "$container", "$inner", "$startParent", "startPosition", "$siblings", "pageX", "pageY", "manipulation", "coordinates", "$a", "$b", "index", "$element", "$prev", "$next", "width", "height", "$parents", "transform", "$foreignDropTargets", "pointed", "leftEnd", "rightStart", "_b", "overOverride", "containerOverride", "getPosition", "position", "eventName", "name", "getEventCoordinates", "dropEffect", "events", "$event", "_a", "setEffectAndCancel", "DragoverLimiter", "selectorName", "handlers", "eventName", "handler", "selector", "cancelTrailingClick", "draggingElementProp", "callback", "$overEvent", "$element", "dataTransfer", "clientX", "clientY", "$clone", "$target", "left", "top", "offsetX", "offsetY", "temporarilyReplaceCSS", "event", "cancel", "properties", "originalProperties", "axis", "key", "copyObject", "extendObject", "getEventCoordinates", "TRIGGER", "SPEED", "CONTAINER_SPEED", "dragging", "top", "$container", "$event", "coordinates", "change", "trigger", "distance", "time", "scrollTop", "value", "transitionTime", "marginTop", "transition", "right", "bottom", "left", "clientX", "clientY", "amount", "previousScrollTop", "getEventCoordinates", "noop", "SWIPE_TOLERANCE", "$event", "event", "coordinates", "clientX", "clientY", "$element", "$over", "$parent", "startClientX", "startClientY", "_a", "revertOnRejection", "sortUpdate", "dragging", "$sortable", "$originalParent", "originalChildren", "__async", "error", "restore", "explain", "message", "a", "b", "element", "predecessor", "remainingPredecessorOf", "originalParent", "index", "displayMessage", "statusCode", "isNetworkError", "options", "controller", "revertOnRejection", "selector", "initializeController", "type", "$event", "ControllerClass", "disableInnerDraggables", "acceptEvent", "eventName", "n", "elementIsSortable", "elementEmitsDragEvents", "element", "$element", "Timezone", "today", "winter", "summer", "offset", "pattern", "patternString", "element"] }