{"version":3,"file":"dist-DvpPOfGo.js","names":["fetch","optgroup","SlimSelect","__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__esmMin","err","fn","res","__commonJSMin","mod","cb","__exportAll","target","name","all","no_symbols","__copyProps","from","keys","i","n","key","to","except","k","desc","__toESM","isNodeMode","__toCommonJS","EventListener","eventTarget","eventName","eventOptions","binding","extendedEvent","extendEvent","event","leftIndex","left","rightIndex","right","stopImmediatePropagation","Dispatcher","application","eventListener","listeners","map","clearEventListeners","error","message","detail","eventListenerMap","cacheKey","parts","defaultActionDescriptorFilters","value","element","descriptorPattern","parseActionDescriptorString","matches","descriptorString","keyFilter","parseEventTarget","parseEventOptions","eventTargetName","options","token","stringifyEventTarget","camelize","char","namespaceCamelize","capitalize","dasherize","tokenize","isSomething","object","hasProperty","property","allModifiers","Action","index","descriptor","getDefaultEventNameForElement","schema","eventFilter","filters","standardFilter","params","pattern","match","typecast","meta","ctrl","alt","shift","modifier","defaultEventNames","tagName","Binding","context","action","actionEvent","method","passes","actionDescriptorFilters","filter","ElementObserver","delegate","mutations","callback","mutation","attributeName","node","nodes","tree","processor","AttributeObserver","add","fetch$1","del","prune","values","Multimap","set","size","_key","_values","SelectorObserver","selector","details","selectors","matchedBefore","StringMapObserver","oldValue","attribute","TokenListObserver","unmatchedTokens","matchedTokens","tokens","previousTokens","currentTokens","firstDifferingIndex","zip","previousToken","currentToken","tokensAreEqual","parseTokenString","tokenString","content","length","ValueListObserver","parseResult","valuesByToken","BindingObserver","ValueObserver","receiver","defaultValue","writer","changedMethodName","changedMethod","rawValue","rawOldValue","valueDescriptorMap","descriptors","hasMethodName","TargetObserver","_a","readInheritableStaticArrayValues","ancestors","getAncestorsForConstructor","constructor","getOwnStaticArrayValues","propertyName","readInheritableStaticObjectPairs","pairs","getOwnStaticObjectPairs","definition","OutletObserver","outletName","observer","outlet","hasOutlet","hasOutletController","selectorObserver","attributeObserver","dependencies","module","identifiers","Context","functionName","scope","args","controller","methodName","bless","shadow","getBlessedProperties","shadowConstructor","extend","shadowProperties","getShadowProperties","properties","blessing","blessedProperties","getOwnKeys","getShadowedDescriptor","prototype","shadowingDescriptor","extendWithReflect","extended","testReflectExtension","b","blessDefinition","Module","ClassMap","DataMap","Guide","logger","warnedKeys","attributeValueContainsToken","TargetSet","targetName","targetNames","targets","targetDescriptor","revisedAttributeName","identifier","OutletSet","controllerElement","outletNames","outlets","controllerAttribute","Scope","ScopeObserver","scopesByIdentifier","referenceCount","Router","contexts","afterLoad","defaultSchema","objectFromEntries","c","array","v","memo","Application","domReady","rest","head","resolve","ClassPropertiesBlessing","propertiesForClassDefinition","classDefinition","classes","OutletPropertiesBlessing","propertiesForOutletDefinition","outletDefinition","getOutletController","getControllerAndEnsureConnectedScope","outletController","camelizedName","outletElement","TargetPropertiesBlessing","propertiesForTargetDefinition","targetDefinition","ValuePropertiesBlessing","valueDefinitionPairs","propertiesForValueDefinitionPair","valueDefinitionPair","valueDescriptor","parseValueDefinitionPair","result","read","write","typeDefinition","valueDescriptorForTokenAndTypeDefinition","parseValueTypeConstant","constant","parseValueTypeDefault","parseValueTypeObject","payload","hasType","typeObject","hasDefault","fullObject","onlyType","onlyDefault","typeFromObject","typeFromDefaultValue","propertyPath","parseValueTypeDefinition","typeFromConstant","type","defaultValueForDefinition","defaultValuesByType","constantFromType","readers","writers","writeString","writeJSON","Controller","prefix","location_counter_controller_exports","location_counter_controller_default","checked","mt_subdomain_controller_exports","mt_subdomain_controller_default","form","subdomain","button","originalText","response","html","wrapper","container","select_all_controller_exports","select_all_controller_default","checkbox","text_onboarding_controller_exports","text_onboarding_controller_default","hasParent","enabled","toggle_user_fields_controller_exports","toggle_user_fields_controller_default","createNew","FetchResponse","script","metaTag","nonce","RequestInterceptor","interceptor","getCookie","cookies","cookie","compact","metaContent","stringEntriesFromFormData","formData","entries","mergeEntries","searchParams","FetchRequest","url","requestInterceptor","headers","baseHeaders","originalQuery","requestQuery","query","bodyIsAString","require_slimselect","exports","factory","global","CssClasses","generateID","hasClassInTree","hasClass","className","parentByClass","debounce","timeout","later","immediate","func","callNow","wait","isEqual","a","kebabCase","str","Optgroup","optgroup","o","Option","option","Store","data","dataObj","validationError","dataFinal","optOptions","addToStart","firstOption","hasSelected","selectedObjects","selectedValues","selectedType","selectedIds","opt","id","search","searchFilter","dataSearch","includeOptgroup","newOrder","isIn","selectedOption","Render","store","settings","callbacks","selectedOptions","selectedId","main","highlighted","deselect","shouldDelete","before","deselectSvg","deselectPath","arrow","arrowPath","eventType","placeholderOption","placeholderText","placeholder","selected","selectedSingle","singleValue","currentNodes","maxValuesMessage","removeNodes","d","shouldAdd","text","deleteDiv","e","after","deleteSvg","deletePath","list","input","addable","searchReturn","plus","plusPath","inputValue","runFinish","newOption","oo","ids","addableValue","notPlaceholder","notDisabled","notHidden","prevOption","prevParent","optgroupLabel","selectOption","dir","selectParent","errorDiv","searchingDiv","noResults","optgroupEl","optgroupLabelText","optgroupActions","selectAll","allSelected","selectAllText","selectAllSvg","selectAllBox","selectAllCheck","currentSelected","newSelected","s","optgroupClosable","optgroupClosableSvg","optgroupClosableArrow","optionEl","dataClass","elementID","shouldUpdate","completedString","regex","matchStartPosition","matchEndPosition","originalTextFoundByRegex","mainHeight","contentHeight","containerRect","cTop","cBottom","eTop","eBottom","mainRect","hasSelectedItems","isMultiple","allowDeselect","deselectButton","hideClass","Select","select","listen","classChanged","disabledChanged","optgroupOptionChanged","m","opts","optgroupOptions","style","info","optionClass","Settings","SlimSelect","config","debounceEvents","disabled","renderCallbacks","selectAriaLabel","selectAriaLabelledBy","dataClean","runAfterChange","searchResp","manual_campaign_controller_exports","manual_campaign_controller_default","import_slimselect","selectedItem","locationId","selectedInstructors","selectedClassValue","instructors","item","guruIDs","selectedClasses","selectedInstructor","instructorId","body","clickedItem","statuses","status","lowRatingBorder","rating","isRequire","isInvalid","isValid","confirm_controller_exports","confirm_controller_default","show_controller_exports","show_controller_default","ratings","block","el","CONTROLLER_FILENAME_REGEX","registerControllers","definitionsFromGlob","controllerModules","definitionFromEntry","controllerModule","identifierForGlobKey","controllerConstructor","logicalName"],"sources":["../../../node_modules/@hotwired/stimulus/dist/stimulus.js","../../../app/frontend/controllers/admin/location_counter_controller.js","../../../app/frontend/controllers/admin/mt_subdomain_controller.js","../../../app/frontend/controllers/admin/select_all_controller.js","../../../app/frontend/controllers/admin/text_onboarding_controller.js","../../../app/frontend/controllers/admin/toggle_user_fields_controller.js","../../../node_modules/@rails/request.js/src/fetch_response.js","../../../node_modules/@rails/request.js/src/request_interceptor.js","../../../node_modules/@rails/request.js/src/lib/utils.js","../../../node_modules/@rails/request.js/src/fetch_request.js","../../../node_modules/slim-select/dist/slimselect.js","../../../app/frontend/controllers/manual_campaign_controller.js","../../../app/frontend/controllers/surveys/confirm_controller.js","../../../app/frontend/controllers/surveys/show_controller.js","../../../node_modules/stimulus-vite-helpers/dist/index.js"],"sourcesContent":["/*\nStimulus 3.2.1\nCopyright © 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Keeps the \"selected locations\" counter in sync with the checkboxes inside the\n// locations-selector table. Replaces jQuery in active_admin/fitness_network.js.\nexport default class extends Controller {\n static targets = [\"count\"]\n\n update() {\n const checked = this.element.querySelectorAll('input[type=\"checkbox\"]:checked').length\n this.countTarget.textContent = checked\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Submits the fitness network edit form over fetch to set the MarianaTek\n// subdomain, then reloads the #wrapper fragment into the page. Replaces the\n// jQuery $.ajax(...).done(load('edit #wrapper')) flow in\n// active_admin/fitness_network.js.\nexport default class extends Controller {\n static values = { editUrl: String }\n\n async submit(event) {\n event.preventDefault()\n\n const form = this.element.closest(\"form\")\n const subdomain = form.querySelector(\"#fitness_network_mt_subdomain\")\n if (!subdomain || subdomain.value.length === 0) return\n\n const button = event.currentTarget\n const originalText = button.textContent\n button.textContent = \"Please Wait...\"\n button.disabled = true\n\n try {\n const response = await fetch(form.action, {\n method: \"POST\",\n body: new FormData(form),\n headers: { \"X-Requested-With\": \"XMLHttpRequest\" }\n })\n if (!response.ok) throw new Error(response.statusText)\n await this.reloadWrapper()\n } catch (error) {\n alert(\"Sorry, there was a problem!\")\n } finally {\n button.textContent = originalText\n button.disabled = false\n }\n }\n\n async reloadWrapper() {\n const response = await fetch(this.editUrlValue)\n const html = await response.text()\n const doc = new DOMParser().parseFromString(html, \"text/html\")\n const wrapper = doc.querySelector(\"#wrapper\")\n const container = document.querySelector(\".admin_ui_fitness_networks\")\n if (wrapper && container) container.innerHTML = wrapper.outerHTML\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"toggle\", \"checkbox\"]\n\n connect() {\n // The toggle only renders when there is more than one choice.\n if (!this.hasToggleTarget) return\n this.refresh()\n }\n\n toggleAll() {\n this.checkboxTargets.forEach((checkbox) => {\n checkbox.checked = this.toggleTarget.checked\n })\n }\n\n refresh() {\n if (!this.hasToggleTarget) return\n\n const checked = this.checkboxTargets.filter((checkbox) => checkbox.checked).length\n this.toggleTarget.checked = checked > 0 && checked === this.checkboxTargets.length\n this.toggleTarget.indeterminate = checked > 0 && checked < this.checkboxTargets.length\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Drives the text-onboarding form toggles in\n// admin/fitness_networks/text_onboarding/_onboarding_form.\n// Replaces active_admin/text_onboarding.js (jQuery). Elements are looked up by\n// their existing ids, matching the original selectors.\nexport default class extends Controller {\n connect() {\n // Original ran the a2p handler once on load to sync initial state.\n this.syncBrandConfig(this.a2pFlag.checked)\n }\n\n companyTypeChanged(event) {\n switch (event.target.value) {\n case \"1\":\n this.toggleFieldset(this.privateType, true)\n this.toggleFieldset(this.publicType, false)\n break\n case \"2\":\n this.toggleFieldset(this.publicType, true)\n this.toggleFieldset(this.privateType, false)\n break\n }\n }\n\n accountChanged(event) {\n const hasParent = event.target.value.length > 0\n this.otherFieldsets.forEach((fieldset) => { fieldset.disabled = hasParent })\n\n if (hasParent) return\n\n switch (this.companyTypeSelect.value) {\n case \"1\":\n this.privateType.disabled = false\n this.publicType.disabled = true\n break\n case \"2\":\n this.publicType.disabled = false\n this.privateType.disabled = true\n break\n }\n }\n\n a2pChanged(event) {\n this.syncBrandConfig(event.target.checked)\n }\n\n syncBrandConfig(enabled) {\n this.brandConfig.disabled = !enabled\n this.brandConfig.hidden = !enabled\n }\n\n toggleFieldset(fieldset, enabled) {\n fieldset.disabled = !enabled\n fieldset.hidden = !enabled\n }\n\n get otherFieldsets() {\n return Array.from(\n this.element.querySelectorAll(\"fieldset:not(#parent-account-fieldset)\")\n )\n }\n\n get privateType() { return this.element.querySelector(\"#private-company-type\") }\n get publicType() { return this.element.querySelector(\"#public-company-type\") }\n get brandConfig() { return this.element.querySelector(\"#brand-data-config\") }\n get companyTypeSelect() { return this.element.querySelector(\"#company-type-selector\") }\n get a2pFlag() { return this.element.querySelector(\"#setup_a2p_and_brand_flag\") }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Toggles the \"create new user\" fieldset and disables the existing-user\n// select when the checkbox is on. Replaces jQuery in admin/brands/_user_select.\nexport default class extends Controller {\n static targets = [\"checkbox\", \"fields\", \"existingSelect\"]\n\n connect() {\n // The partial (and its targets) only render on the new-record form.\n if (!this.hasCheckboxTarget) return\n this.toggle()\n }\n\n toggle() {\n const createNew = this.checkboxTarget.checked\n this.fieldsTarget.hidden = !createNew\n this.existingSelectTarget.disabled = createNew\n }\n}\n","export class FetchResponse {\n constructor (response) {\n this.response = response\n }\n\n get statusCode () {\n return this.response.status\n }\n\n get redirected () {\n return this.response.redirected\n }\n\n get ok () {\n return this.response.ok\n }\n\n get unauthenticated () {\n return this.statusCode === 401\n }\n\n get unprocessableEntity () {\n return this.statusCode === 422\n }\n\n get authenticationURL () {\n return this.response.headers.get('WWW-Authenticate')\n }\n\n get contentType () {\n const contentType = this.response.headers.get('Content-Type') || ''\n\n return contentType.replace(/;.*$/, '')\n }\n\n get headers () {\n return this.response.headers\n }\n\n get html () {\n if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n return this.text\n }\n\n return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`))\n }\n\n get json () {\n if (this.contentType.match(/^application\\/.*json$/)) {\n return this.responseJson || (this.responseJson = this.response.json())\n }\n\n return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`))\n }\n\n get text () {\n return this.responseText || (this.responseText = this.response.text())\n }\n\n get isTurboStream () {\n return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/)\n }\n\n get isScript () {\n return this.contentType.match(/\\b(?:java|ecma)script\\b/)\n }\n\n async renderTurboStream () {\n if (this.isTurboStream) {\n if (window.Turbo) {\n await window.Turbo.renderStreamMessage(await this.text)\n } else {\n console.warn('You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js')\n }\n } else {\n return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`))\n }\n }\n\n async activeScript () {\n if (this.isScript) {\n const script = document.createElement('script')\n const metaTag = document.querySelector('meta[name=csp-nonce]')\n const nonce = metaTag && metaTag.content\n if (nonce) { script.setAttribute('nonce', nonce) }\n script.innerHTML = await this.text\n document.body.appendChild(script)\n } else {\n return Promise.reject(new Error(`Expected a Script response but got \"${this.contentType}\" instead`))\n }\n }\n}\n","export class RequestInterceptor {\n static register (interceptor) {\n this.interceptor = interceptor\n }\n\n static get () {\n return this.interceptor\n }\n\n static reset () {\n this.interceptor = undefined\n }\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\n if (value) {\n return decodeURIComponent(value)\n }\n }\n}\n\nexport function compact (object) {\n const result = {}\n\n for (const key in object) {\n const value = object[key]\n if (value !== undefined) {\n result[key] = value\n }\n }\n\n return result\n}\n\nexport function metaContent (name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n return element && element.content\n}\n\nexport function stringEntriesFromFormData (formData) {\n return [...formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value === 'string' ? [[name, value]] : [])\n }, [])\n}\n\nexport function mergeEntries (searchParams, entries) {\n for (const [name, value] of entries) {\n if (value instanceof window.File) continue\n\n if (searchParams.has(name) && !name.includes('[]')) {\n searchParams.delete(name)\n searchParams.set(name, value)\n } else {\n searchParams.append(name, value)\n }\n }\n}\n","import { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { getCookie, compact, metaContent, stringEntriesFromFormData, mergeEntries } from './lib/utils'\n\nexport class FetchRequest {\n constructor (method, url, options = {}) {\n this.method = method\n this.options = options\n this.originalUrl = url.toString()\n }\n\n async perform () {\n try {\n const requestInterceptor = RequestInterceptor.get()\n if (requestInterceptor) {\n await requestInterceptor(this)\n }\n } catch (error) {\n console.error(error)\n }\n\n const fetch = (this.responseKind === 'turbo-stream' && window.Turbo)\n ? window.Turbo.fetch\n : window.fetch\n\n const response = new FetchResponse(await fetch(this.url, this.fetchOptions))\n\n if (response.unauthenticated && response.authenticationURL) {\n return Promise.reject(window.location.href = response.authenticationURL)\n }\n\n if (response.isScript) {\n await response.activeScript()\n }\n\n const responseStatusIsTurboStreamable = response.ok || response.unprocessableEntity\n\n if (responseStatusIsTurboStreamable && response.isTurboStream) {\n await response.renderTurboStream()\n }\n\n return response\n }\n\n addHeader (key, value) {\n const headers = this.additionalHeaders\n headers[key] = value\n this.options.headers = headers\n }\n\n sameHostname () {\n if (!this.originalUrl.startsWith('http:')) {\n return true\n }\n\n try {\n return new URL(this.originalUrl).hostname === window.location.hostname\n } catch (_) {\n return true\n }\n }\n\n get fetchOptions () {\n return {\n method: this.method.toUpperCase(),\n headers: this.headers,\n body: this.formattedBody,\n signal: this.signal,\n credentials: this.credentials,\n redirect: this.redirect\n }\n }\n\n get headers () {\n const baseHeaders = {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': this.contentType,\n Accept: this.accept\n }\n\n if (this.sameHostname()) {\n baseHeaders['X-CSRF-Token'] = this.csrfToken\n }\n\n return compact(\n Object.assign(baseHeaders, this.additionalHeaders)\n )\n }\n\n get csrfToken () {\n return getCookie(metaContent('csrf-param')) || metaContent('csrf-token')\n }\n\n get contentType () {\n if (this.options.contentType) {\n return this.options.contentType\n } else if (this.body == null || this.body instanceof window.FormData) {\n return undefined\n } else if (this.body instanceof window.File) {\n return this.body.type\n }\n\n return 'application/json'\n }\n\n get accept () {\n switch (this.responseKind) {\n case 'html':\n return 'text/html, application/xhtml+xml'\n case 'turbo-stream':\n return 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n case 'json':\n return 'application/json, application/vnd.api+json'\n case 'script':\n return 'text/javascript, application/javascript'\n default:\n return '*/*'\n }\n }\n\n get body () {\n return this.options.body\n }\n\n get query () {\n const originalQuery = (this.originalUrl.split('?')[1] || '').split('#')[0]\n const params = new URLSearchParams(originalQuery)\n\n let requestQuery = this.options.query\n if (requestQuery instanceof window.FormData) {\n requestQuery = stringEntriesFromFormData(requestQuery)\n } else if (requestQuery instanceof window.URLSearchParams) {\n requestQuery = requestQuery.entries()\n } else {\n requestQuery = Object.entries(requestQuery || {})\n }\n\n mergeEntries(params, requestQuery)\n\n const query = params.toString()\n return (query.length > 0 ? `?${query}` : '')\n }\n\n get url () {\n return (this.originalUrl.split('?')[0]).split('#')[0] + this.query\n }\n\n get responseKind () {\n return this.options.responseKind || 'html'\n }\n\n get signal () {\n return this.options.signal\n }\n\n get redirect () {\n return this.options.redirect || 'follow'\n }\n\n get credentials () {\n return this.options.credentials || 'same-origin'\n }\n\n get additionalHeaders () {\n return this.options.headers || {}\n }\n\n get formattedBody () {\n const bodyIsAString = Object.prototype.toString.call(this.body) === '[object String]'\n const contentTypeIsJson = this.headers['Content-Type'] === 'application/json'\n\n if (contentTypeIsJson && !bodyIsAString) {\n return JSON.stringify(this.body)\n }\n\n return this.body\n }\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SlimSelect = factory());\n})(this, (function () { 'use strict';\n\n class CssClasses {\n constructor(classes) {\n if (!classes) {\n classes = {};\n }\n this.main = classes.main || 'ss-main';\n this.placeholder = classes.placeholder || 'ss-placeholder';\n this.values = classes.values || 'ss-values';\n this.single = classes.single || 'ss-single';\n this.max = classes.max || 'ss-max';\n this.value = classes.value || 'ss-value';\n this.valueText = classes.valueText || 'ss-value-text';\n this.valueDelete = classes.valueDelete || 'ss-value-delete';\n this.valueOut = classes.valueOut || 'ss-value-out';\n this.deselect = classes.deselect || 'ss-deselect';\n this.deselectPath = classes.deselectPath || 'M10,10 L90,90 M10,90 L90,10';\n this.arrow = classes.arrow || 'ss-arrow';\n this.arrowClose = classes.arrowClose || 'M10,30 L50,70 L90,30';\n this.arrowOpen = classes.arrowOpen || 'M10,70 L50,30 L90,70';\n this.content = classes.content || 'ss-content';\n this.openAbove = classes.openAbove || 'ss-open-above';\n this.openBelow = classes.openBelow || 'ss-open-below';\n this.search = classes.search || 'ss-search';\n this.searchHighlighter = classes.searchHighlighter || 'ss-search-highlight';\n this.searching = classes.searching || 'ss-searching';\n this.addable = classes.addable || 'ss-addable';\n this.addablePath = classes.addablePath || 'M50,10 L50,90 M10,50 L90,50';\n this.list = classes.list || 'ss-list';\n this.optgroup = classes.optgroup || 'ss-optgroup';\n this.optgroupLabel = classes.optgroupLabel || 'ss-optgroup-label';\n this.optgroupLabelText = classes.optgroupLabelText || 'ss-optgroup-label-text';\n this.optgroupActions = classes.optgroupActions || 'ss-optgroup-actions';\n this.optgroupSelectAll = classes.optgroupSelectAll || 'ss-selectall';\n this.optgroupSelectAllBox = classes.optgroupSelectAllBox || 'M60,10 L10,10 L10,90 L90,90 L90,50';\n this.optgroupSelectAllCheck = classes.optgroupSelectAllCheck || 'M30,45 L50,70 L90,10';\n this.optgroupClosable = classes.optgroupClosable || 'ss-closable';\n this.option = classes.option || 'ss-option';\n this.optionDelete = classes.optionDelete || 'M10,10 L90,90 M10,90 L90,10';\n this.highlighted = classes.highlighted || 'ss-highlighted';\n this.open = classes.open || 'ss-open';\n this.close = classes.close || 'ss-close';\n this.selected = classes.selected || 'ss-selected';\n this.error = classes.error || 'ss-error';\n this.disabled = classes.disabled || 'ss-disabled';\n this.hide = classes.hide || 'ss-hide';\n }\n }\n\n function generateID() {\n return Math.random().toString(36).substring(2, 10);\n }\n function hasClassInTree(element, className) {\n function hasClass(e, c) {\n if (c && e && e.classList && e.classList.contains(c)) {\n return e;\n }\n if (c && e && e.dataset && e.dataset.id && e.dataset.id === className) {\n return e;\n }\n return null;\n }\n function parentByClass(e, c) {\n if (!e || e === document) {\n return null;\n }\n else if (hasClass(e, c)) {\n return e;\n }\n else {\n return parentByClass(e.parentNode, c);\n }\n }\n return hasClass(element, className) || parentByClass(element, className);\n }\n function debounce(func, wait = 50, immediate = false) {\n let timeout;\n return function (...args) {\n const context = self;\n const later = () => {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n function isEqual(a, b) {\n return JSON.stringify(a) === JSON.stringify(b);\n }\n function kebabCase(str) {\n const result = str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match) => '-' + match.toLowerCase());\n return str[0] === str[0].toUpperCase() ? result.substring(1) : result;\n }\n\n class Optgroup {\n constructor(optgroup) {\n this.id = !optgroup.id || optgroup.id === '' ? generateID() : optgroup.id;\n this.label = optgroup.label || '';\n this.selectAll = optgroup.selectAll === undefined ? false : optgroup.selectAll;\n this.selectAllText = optgroup.selectAllText || 'Select All';\n this.closable = optgroup.closable || 'off';\n this.options = [];\n if (optgroup.options) {\n for (const o of optgroup.options) {\n this.options.push(new Option(o));\n }\n }\n }\n }\n class Option {\n constructor(option) {\n this.id = !option.id || option.id === '' ? generateID() : option.id;\n this.value = option.value === undefined ? option.text : option.value;\n this.text = option.text || '';\n this.html = option.html || '';\n this.selected = option.selected !== undefined ? option.selected : false;\n this.display = option.display !== undefined ? option.display : true;\n this.disabled = option.disabled !== undefined ? option.disabled : false;\n this.mandatory = option.mandatory !== undefined ? option.mandatory : false;\n this.placeholder = option.placeholder !== undefined ? option.placeholder : false;\n this.class = option.class || '';\n this.style = option.style || '';\n this.data = option.data || {};\n }\n }\n class Store {\n constructor(type, data) {\n this.selectType = 'single';\n this.data = [];\n this.selectedOrder = [];\n this.selectType = type;\n this.setData(data);\n }\n validateDataArray(data) {\n if (!Array.isArray(data)) {\n return new Error('Data must be an array');\n }\n for (let dataObj of data) {\n if (dataObj instanceof Optgroup || 'label' in dataObj) {\n if (!('label' in dataObj)) {\n return new Error('Optgroup must have a label');\n }\n if ('options' in dataObj && dataObj.options) {\n for (let option of dataObj.options) {\n const validationError = this.validateOption(option);\n if (validationError) {\n return validationError;\n }\n }\n }\n }\n else if (dataObj instanceof Option || 'text' in dataObj) {\n const validationError = this.validateOption(dataObj);\n if (validationError) {\n return validationError;\n }\n }\n else {\n return new Error('Data object must be a valid optgroup or option');\n }\n }\n return null;\n }\n validateOption(option) {\n if (!('text' in option)) {\n return new Error('Option must have a text');\n }\n return null;\n }\n partialToFullData(data) {\n let dataFinal = [];\n data.forEach((dataObj) => {\n if (dataObj instanceof Optgroup || 'label' in dataObj) {\n let optOptions = [];\n if ('options' in dataObj && dataObj.options) {\n dataObj.options.forEach((option) => {\n optOptions.push(new Option(option));\n });\n }\n if (optOptions.length > 0) {\n dataFinal.push(new Optgroup(dataObj));\n }\n }\n if (dataObj instanceof Option || 'text' in dataObj) {\n dataFinal.push(new Option(dataObj));\n }\n });\n return dataFinal;\n }\n setData(data) {\n this.data = this.partialToFullData(data);\n if (this.selectType === 'single') {\n this.setSelectedBy('id', this.getSelected());\n }\n }\n getData() {\n return this.filter(null, true);\n }\n getDataOptions() {\n return this.filter(null, false);\n }\n addOption(option, addToStart = false) {\n if (addToStart) {\n let data = [new Option(option)];\n this.setData(data.concat(this.getData()));\n }\n else {\n this.setData(this.getData().concat(new Option(option)));\n }\n }\n setSelectedBy(selectedType, selectedValues) {\n let firstOption = null;\n let hasSelected = false;\n const selectedObjects = [];\n for (let dataObj of this.data) {\n if (dataObj instanceof Optgroup) {\n for (let option of dataObj.options) {\n if (!firstOption) {\n firstOption = option;\n }\n option.selected = hasSelected ? false : selectedValues.includes(option[selectedType]);\n if (option.selected) {\n selectedObjects.push(option);\n if (this.selectType === 'single') {\n hasSelected = true;\n }\n }\n }\n }\n if (dataObj instanceof Option) {\n if (!firstOption) {\n firstOption = dataObj;\n }\n dataObj.selected = hasSelected ? false : selectedValues.includes(dataObj[selectedType]);\n if (dataObj.selected) {\n selectedObjects.push(dataObj);\n if (this.selectType === 'single') {\n hasSelected = true;\n }\n }\n }\n }\n if (this.selectType === 'single' && firstOption && !hasSelected) {\n firstOption.selected = true;\n selectedObjects.push(firstOption);\n }\n const selectedIds = selectedValues.map((value) => {\n var _a;\n return ((_a = selectedObjects.find((option) => option[selectedType] === value)) === null || _a === void 0 ? void 0 : _a.id) || '';\n });\n this.selectedOrder = selectedIds;\n }\n getSelected() {\n return this.getSelectedOptions().map((option) => option.id);\n }\n getSelectedValues() {\n return this.getSelectedOptions().map((option) => option.value);\n }\n getSelectedOptions() {\n return this.filter((opt) => {\n return opt.selected;\n }, false);\n }\n getOptgroupByID(id) {\n for (let dataObj of this.data) {\n if (dataObj instanceof Optgroup && dataObj.id === id) {\n return dataObj;\n }\n }\n return null;\n }\n getOptionByID(id) {\n let options = this.filter((opt) => {\n return opt.id === id;\n }, false);\n return options.length ? options[0] : null;\n }\n getSelectType() {\n return this.selectType;\n }\n getFirstOption() {\n let option = null;\n for (let dataObj of this.data) {\n if (dataObj instanceof Optgroup) {\n option = dataObj.options[0];\n }\n else if (dataObj instanceof Option) {\n option = dataObj;\n }\n if (option) {\n break;\n }\n }\n return option;\n }\n search(search, searchFilter) {\n search = search.trim();\n if (search === '') {\n return this.getData();\n }\n return this.filter((opt) => {\n return searchFilter(opt, search);\n }, true);\n }\n filter(filter, includeOptgroup) {\n const dataSearch = [];\n this.data.forEach((dataObj) => {\n if (dataObj instanceof Optgroup) {\n let optOptions = [];\n dataObj.options.forEach((option) => {\n if (!filter || filter(option)) {\n if (!includeOptgroup) {\n dataSearch.push(new Option(option));\n }\n else {\n optOptions.push(new Option(option));\n }\n }\n });\n if (optOptions.length > 0) {\n let optgroup = new Optgroup(dataObj);\n optgroup.options = optOptions;\n dataSearch.push(optgroup);\n }\n }\n if (dataObj instanceof Option) {\n if (!filter || filter(dataObj)) {\n dataSearch.push(new Option(dataObj));\n }\n }\n });\n return dataSearch;\n }\n selectedOrderOptions(options) {\n const newOrder = [];\n this.selectedOrder.forEach((id) => {\n const option = options.find((opt) => opt.id === id);\n if (option) {\n newOrder.push(option);\n }\n });\n options.forEach((option) => {\n let isIn = false;\n newOrder.forEach((selectedOption) => {\n if (option.id === selectedOption.id) {\n isIn = true;\n return;\n }\n });\n if (!isIn) {\n newOrder.push(option);\n }\n });\n return newOrder;\n }\n }\n\n class Render {\n constructor(settings, classes, store, callbacks) {\n this.store = store;\n this.settings = settings;\n this.classes = classes;\n this.callbacks = callbacks;\n this.main = this.mainDiv();\n this.content = this.contentDiv();\n this.updateClassStyles();\n this.updateAriaAttributes();\n if (this.settings.contentLocation) {\n this.settings.contentLocation.appendChild(this.content.main);\n }\n }\n enable() {\n this.main.main.classList.remove(this.classes.disabled);\n this.content.search.input.disabled = false;\n }\n disable() {\n this.main.main.classList.add(this.classes.disabled);\n this.content.search.input.disabled = true;\n }\n open() {\n this.main.arrow.path.setAttribute('d', this.classes.arrowOpen);\n this.main.main.classList.add(this.settings.openPosition === 'up' ? this.classes.openAbove : this.classes.openBelow);\n this.main.main.setAttribute('aria-expanded', 'true');\n this.moveContent();\n const selectedOptions = this.store.getSelectedOptions();\n if (selectedOptions.length) {\n const selectedId = selectedOptions[selectedOptions.length - 1].id;\n const selectedOption = this.content.list.querySelector('[data-id=\"' + selectedId + '\"]');\n if (selectedOption) {\n this.ensureElementInView(this.content.list, selectedOption);\n }\n }\n }\n close() {\n this.main.main.classList.remove(this.classes.openAbove);\n this.main.main.classList.remove(this.classes.openBelow);\n this.main.main.setAttribute('aria-expanded', 'false');\n this.content.main.classList.remove(this.classes.openAbove);\n this.content.main.classList.remove(this.classes.openBelow);\n this.main.arrow.path.setAttribute('d', this.classes.arrowClose);\n }\n updateClassStyles() {\n this.main.main.className = '';\n this.main.main.removeAttribute('style');\n this.content.main.className = '';\n this.content.main.removeAttribute('style');\n this.main.main.classList.add(this.classes.main);\n this.content.main.classList.add(this.classes.content);\n if (this.settings.style !== '') {\n this.main.main.style.cssText = this.settings.style;\n this.content.main.style.cssText = this.settings.style;\n }\n if (this.settings.class.length) {\n for (const c of this.settings.class) {\n if (c.trim() !== '') {\n this.main.main.classList.add(c.trim());\n this.content.main.classList.add(c.trim());\n }\n }\n }\n if (this.settings.contentPosition === 'relative' || this.settings.contentPosition === 'fixed') {\n this.content.main.classList.add('ss-' + this.settings.contentPosition);\n }\n }\n updateAriaAttributes() {\n this.main.main.role = 'combobox';\n this.main.main.setAttribute('aria-haspopup', 'listbox');\n this.main.main.setAttribute('aria-controls', this.content.main.id);\n this.main.main.setAttribute('aria-expanded', 'false');\n this.content.main.setAttribute('role', 'listbox');\n }\n mainDiv() {\n var _a;\n const main = document.createElement('div');\n main.dataset.id = this.settings.id;\n main.setAttribute('aria-label', this.settings.ariaLabel);\n main.tabIndex = 0;\n main.onkeydown = (e) => {\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n this.callbacks.open();\n e.key === 'ArrowDown' ? this.highlight('down') : this.highlight('up');\n return false;\n case 'Tab':\n this.callbacks.close();\n return true;\n case 'Enter':\n case ' ':\n this.callbacks.open();\n const highlighted = this.content.list.querySelector('.' + this.classes.highlighted);\n if (highlighted) {\n highlighted.click();\n }\n return false;\n case 'Escape':\n this.callbacks.close();\n return false;\n }\n if (e.key.length === 1) {\n this.callbacks.open();\n }\n return true;\n };\n main.onclick = (e) => {\n if (this.settings.disabled) {\n return;\n }\n this.settings.isOpen ? this.callbacks.close() : this.callbacks.open();\n };\n const values = document.createElement('div');\n values.classList.add(this.classes.values);\n main.appendChild(values);\n const deselect = document.createElement('div');\n deselect.classList.add(this.classes.deselect);\n const selectedOptions = (_a = this.store) === null || _a === void 0 ? void 0 : _a.getSelectedOptions();\n if (!this.settings.allowDeselect || (this.settings.isMultiple && selectedOptions && selectedOptions.length <= 0)) {\n deselect.classList.add(this.classes.hide);\n }\n else {\n deselect.classList.remove(this.classes.hide);\n }\n deselect.onclick = (e) => {\n e.stopPropagation();\n if (this.settings.disabled) {\n return;\n }\n let shouldDelete = true;\n const before = this.store.getSelectedOptions();\n const after = [];\n if (this.callbacks.beforeChange) {\n shouldDelete = this.callbacks.beforeChange(after, before) === true;\n }\n if (shouldDelete) {\n if (this.settings.isMultiple) {\n this.callbacks.setSelected([], false);\n this.updateDeselectAll();\n }\n else {\n const firstOption = this.store.getFirstOption();\n const id = firstOption ? firstOption.id : '';\n this.callbacks.setSelected(id, false);\n }\n if (this.settings.closeOnSelect) {\n this.callbacks.close();\n }\n if (this.callbacks.afterChange) {\n this.callbacks.afterChange(this.store.getSelectedOptions());\n }\n }\n };\n const deselectSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n deselectSvg.setAttribute('viewBox', '0 0 100 100');\n const deselectPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n deselectPath.setAttribute('d', this.classes.deselectPath);\n deselectSvg.appendChild(deselectPath);\n deselect.appendChild(deselectSvg);\n main.appendChild(deselect);\n const arrow = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n arrow.classList.add(this.classes.arrow);\n arrow.setAttribute('viewBox', '0 0 100 100');\n const arrowPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n arrowPath.setAttribute('d', this.classes.arrowClose);\n if (this.settings.alwaysOpen) {\n arrow.classList.add(this.classes.hide);\n }\n arrow.appendChild(arrowPath);\n main.appendChild(arrow);\n return {\n main: main,\n values: values,\n deselect: {\n main: deselect,\n svg: deselectSvg,\n path: deselectPath\n },\n arrow: {\n main: arrow,\n path: arrowPath\n }\n };\n }\n mainFocus(eventType) {\n if (eventType !== 'click') {\n this.main.main.focus({ preventScroll: true });\n }\n }\n placeholder() {\n const placeholderOption = this.store.filter((o) => o.placeholder, false);\n let placeholderText = this.settings.placeholderText;\n if (placeholderOption.length) {\n if (placeholderOption[0].html !== '') {\n placeholderText = placeholderOption[0].html;\n }\n else if (placeholderOption[0].text !== '') {\n placeholderText = placeholderOption[0].text;\n }\n }\n const placeholder = document.createElement('div');\n placeholder.classList.add(this.classes.placeholder);\n placeholder.innerHTML = placeholderText;\n return placeholder;\n }\n renderValues() {\n if (!this.settings.isMultiple) {\n this.renderSingleValue();\n return;\n }\n this.renderMultipleValues();\n this.updateDeselectAll();\n }\n renderSingleValue() {\n const selected = this.store.filter((o) => {\n return o.selected && !o.placeholder;\n }, false);\n const selectedSingle = selected.length > 0 ? selected[0] : null;\n if (!selectedSingle) {\n this.main.values.innerHTML = this.placeholder().outerHTML;\n }\n else {\n const singleValue = document.createElement('div');\n singleValue.classList.add(this.classes.single);\n if (selectedSingle.html) {\n singleValue.innerHTML = selectedSingle.html;\n }\n else {\n singleValue.innerText = selectedSingle.text;\n }\n this.main.values.innerHTML = singleValue.outerHTML;\n }\n if (!this.settings.allowDeselect || !selected.length) {\n this.main.deselect.main.classList.add(this.classes.hide);\n }\n else {\n this.main.deselect.main.classList.remove(this.classes.hide);\n }\n }\n renderMultipleValues() {\n let currentNodes = this.main.values.childNodes;\n let selectedOptions = this.store.filter((opt) => {\n return opt.selected && opt.display;\n }, false);\n if (selectedOptions.length === 0) {\n this.main.values.innerHTML = this.placeholder().outerHTML;\n return;\n }\n else {\n const placeholder = this.main.values.querySelector('.' + this.classes.placeholder);\n if (placeholder) {\n placeholder.remove();\n }\n }\n if (selectedOptions.length > this.settings.maxValuesShown) {\n const singleValue = document.createElement('div');\n singleValue.classList.add(this.classes.max);\n singleValue.textContent = this.settings.maxValuesMessage.replace('{number}', selectedOptions.length.toString());\n this.main.values.innerHTML = singleValue.outerHTML;\n return;\n }\n else {\n const maxValuesMessage = this.main.values.querySelector('.' + this.classes.max);\n if (maxValuesMessage) {\n maxValuesMessage.remove();\n }\n }\n if (this.settings.keepOrder) {\n selectedOptions = this.store.selectedOrderOptions(selectedOptions);\n }\n let removeNodes = [];\n for (let i = 0; i < currentNodes.length; i++) {\n const node = currentNodes[i];\n const id = node.getAttribute('data-id');\n if (id) {\n const found = selectedOptions.filter((opt) => {\n return opt.id === id;\n }, false);\n if (!found.length) {\n removeNodes.push(node);\n }\n }\n }\n for (const n of removeNodes) {\n n.classList.add(this.classes.valueOut);\n setTimeout(() => {\n if (this.main.values.hasChildNodes() && this.main.values.contains(n)) {\n this.main.values.removeChild(n);\n }\n }, 100);\n }\n currentNodes = this.main.values.childNodes;\n for (let d = 0; d < selectedOptions.length; d++) {\n let shouldAdd = true;\n for (let i = 0; i < currentNodes.length; i++) {\n if (selectedOptions[d].id === String(currentNodes[i].dataset.id)) {\n shouldAdd = false;\n }\n }\n if (shouldAdd) {\n if (this.settings.keepOrder) {\n this.main.values.appendChild(this.multipleValue(selectedOptions[d]));\n }\n else {\n if (currentNodes.length === 0) {\n this.main.values.appendChild(this.multipleValue(selectedOptions[d]));\n }\n else if (d === 0) {\n this.main.values.insertBefore(this.multipleValue(selectedOptions[d]), currentNodes[d]);\n }\n else {\n currentNodes[d - 1].insertAdjacentElement('afterend', this.multipleValue(selectedOptions[d]));\n }\n }\n }\n }\n }\n multipleValue(option) {\n const value = document.createElement('div');\n value.classList.add(this.classes.value);\n value.dataset.id = option.id;\n const text = document.createElement('div');\n text.classList.add(this.classes.valueText);\n text.textContent = option.text;\n value.appendChild(text);\n if (!option.mandatory) {\n const deleteDiv = document.createElement('div');\n deleteDiv.classList.add(this.classes.valueDelete);\n deleteDiv.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (this.settings.disabled) {\n return;\n }\n let shouldDelete = true;\n const before = this.store.getSelectedOptions();\n const after = before.filter((o) => {\n return o.selected && o.id !== option.id;\n }, true);\n if (this.settings.minSelected && after.length < this.settings.minSelected) {\n return;\n }\n if (this.callbacks.beforeChange) {\n shouldDelete = this.callbacks.beforeChange(after, before) === true;\n }\n if (shouldDelete) {\n let selectedIds = [];\n for (const o of after) {\n if (o instanceof Optgroup) {\n for (const c of o.options) {\n selectedIds.push(c.id);\n }\n }\n if (o instanceof Option) {\n selectedIds.push(o.id);\n }\n }\n this.callbacks.setSelected(selectedIds, false);\n if (this.settings.closeOnSelect) {\n this.callbacks.close();\n }\n if (this.callbacks.afterChange) {\n this.callbacks.afterChange(after);\n }\n this.updateDeselectAll();\n }\n };\n const deleteSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n deleteSvg.setAttribute('viewBox', '0 0 100 100');\n const deletePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n deletePath.setAttribute('d', this.classes.optionDelete);\n deleteSvg.appendChild(deletePath);\n deleteDiv.appendChild(deleteSvg);\n value.appendChild(deleteDiv);\n }\n return value;\n }\n contentDiv() {\n const main = document.createElement('div');\n main.dataset.id = this.settings.id;\n const search = this.searchDiv();\n main.appendChild(search.main);\n const list = this.listDiv();\n main.appendChild(list);\n return {\n main: main,\n search: search,\n list: list\n };\n }\n moveContent() {\n if (this.settings.contentPosition === 'relative') {\n this.moveContentBelow();\n return;\n }\n if (this.settings.openPosition === 'down') {\n this.moveContentBelow();\n return;\n }\n else if (this.settings.openPosition === 'up') {\n this.moveContentAbove();\n return;\n }\n if (this.putContent() === 'up') {\n this.moveContentAbove();\n }\n else {\n this.moveContentBelow();\n }\n }\n searchDiv() {\n const main = document.createElement('div');\n const input = document.createElement('input');\n const addable = document.createElement('div');\n main.classList.add(this.classes.search);\n const searchReturn = {\n main,\n input\n };\n if (!this.settings.showSearch) {\n main.classList.add(this.classes.hide);\n input.readOnly = true;\n }\n input.type = 'search';\n input.placeholder = this.settings.searchPlaceholder;\n input.tabIndex = -1;\n input.setAttribute('aria-label', this.settings.searchPlaceholder);\n input.setAttribute('autocapitalize', 'off');\n input.setAttribute('autocomplete', 'off');\n input.setAttribute('autocorrect', 'off');\n input.oninput = debounce((e) => {\n this.callbacks.search(e.target.value);\n }, 100);\n input.onkeydown = (e) => {\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n e.key === 'ArrowDown' ? this.highlight('down') : this.highlight('up');\n return false;\n case 'Tab':\n this.callbacks.close();\n return true;\n case 'Escape':\n this.callbacks.close();\n return false;\n case ' ':\n const highlighted = this.content.list.querySelector('.' + this.classes.highlighted);\n if (highlighted) {\n highlighted.click();\n return false;\n }\n return true;\n case 'Enter':\n if (this.callbacks.addable) {\n addable.click();\n return false;\n }\n else {\n const highlighted = this.content.list.querySelector('.' + this.classes.highlighted);\n if (highlighted) {\n highlighted.click();\n return false;\n }\n }\n return true;\n }\n return true;\n };\n main.appendChild(input);\n if (this.callbacks.addable) {\n addable.classList.add(this.classes.addable);\n const plus = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n plus.setAttribute('viewBox', '0 0 100 100');\n const plusPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n plusPath.setAttribute('d', this.classes.addablePath);\n plus.appendChild(plusPath);\n addable.appendChild(plus);\n addable.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (!this.callbacks.addable) {\n return;\n }\n const inputValue = this.content.search.input.value.trim();\n if (inputValue === '') {\n this.content.search.input.focus();\n return;\n }\n const runFinish = (oo) => {\n let newOption = new Option(oo);\n this.callbacks.addOption(newOption);\n if (this.settings.isMultiple) {\n let ids = this.store.getSelected();\n ids.push(newOption.id);\n this.callbacks.setSelected(ids, true);\n }\n else {\n this.callbacks.setSelected([newOption.id], true);\n }\n this.callbacks.search('');\n if (this.settings.closeOnSelect) {\n setTimeout(() => {\n this.callbacks.close();\n }, 100);\n }\n };\n const addableValue = this.callbacks.addable(inputValue);\n if (addableValue === false || addableValue === undefined || addableValue === null) {\n return;\n }\n if (addableValue instanceof Promise) {\n addableValue.then((value) => {\n if (typeof value === 'string') {\n runFinish({\n text: value,\n value: value\n });\n }\n else if (addableValue instanceof Error) {\n this.renderError(addableValue.message);\n }\n else {\n runFinish(value);\n }\n });\n }\n else if (typeof addableValue === 'string') {\n runFinish({\n text: addableValue,\n value: addableValue\n });\n }\n else if (addableValue instanceof Error) {\n this.renderError(addableValue.message);\n }\n else {\n runFinish(addableValue);\n }\n return;\n };\n main.appendChild(addable);\n searchReturn.addable = {\n main: addable,\n svg: plus,\n path: plusPath\n };\n }\n return searchReturn;\n }\n searchFocus() {\n this.content.search.input.focus();\n }\n getOptions(notPlaceholder = false, notDisabled = false, notHidden = false) {\n let query = '.' + this.classes.option;\n if (notPlaceholder) {\n query += ':not(.' + this.classes.placeholder + ')';\n }\n if (notDisabled) {\n query += ':not(.' + this.classes.disabled + ')';\n }\n if (notHidden) {\n query += ':not(.' + this.classes.hide + ')';\n }\n return Array.from(this.content.list.querySelectorAll(query));\n }\n highlight(dir) {\n const options = this.getOptions(true, true, true);\n if (options.length === 0) {\n return;\n }\n if (options.length === 1) {\n if (!options[0].classList.contains(this.classes.highlighted)) {\n options[0].classList.add(this.classes.highlighted);\n return;\n }\n }\n let highlighted = false;\n for (const o of options) {\n if (o.classList.contains(this.classes.highlighted)) {\n highlighted = true;\n }\n }\n if (!highlighted) {\n for (const o of options) {\n if (o.classList.contains(this.classes.selected)) {\n o.classList.add(this.classes.highlighted);\n break;\n }\n }\n }\n for (let i = 0; i < options.length; i++) {\n if (options[i].classList.contains(this.classes.highlighted)) {\n const prevOption = options[i];\n prevOption.classList.remove(this.classes.highlighted);\n const prevParent = prevOption.parentElement;\n if (prevParent && prevParent.classList.contains(this.classes.open)) {\n const optgroupLabel = prevParent.querySelector('.' + this.classes.optgroupLabel);\n if (optgroupLabel) {\n optgroupLabel.click();\n }\n }\n let selectOption = options[dir === 'down' ? (i + 1 < options.length ? i + 1 : 0) : i - 1 >= 0 ? i - 1 : options.length - 1];\n selectOption.classList.add(this.classes.highlighted);\n this.ensureElementInView(this.content.list, selectOption);\n const selectParent = selectOption.parentElement;\n if (selectParent && selectParent.classList.contains(this.classes.close)) {\n const optgroupLabel = selectParent.querySelector('.' + this.classes.optgroupLabel);\n if (optgroupLabel) {\n optgroupLabel.click();\n }\n }\n return;\n }\n }\n options[dir === 'down' ? 0 : options.length - 1].classList.add(this.classes.highlighted);\n this.ensureElementInView(this.content.list, options[dir === 'down' ? 0 : options.length - 1]);\n }\n listDiv() {\n const options = document.createElement('div');\n options.classList.add(this.classes.list);\n return options;\n }\n renderError(error) {\n this.content.list.innerHTML = '';\n const errorDiv = document.createElement('div');\n errorDiv.classList.add(this.classes.error);\n errorDiv.textContent = error;\n this.content.list.appendChild(errorDiv);\n }\n renderSearching() {\n this.content.list.innerHTML = '';\n const searchingDiv = document.createElement('div');\n searchingDiv.classList.add(this.classes.searching);\n searchingDiv.textContent = this.settings.searchingText;\n this.content.list.appendChild(searchingDiv);\n }\n renderOptions(data) {\n this.content.list.innerHTML = '';\n if (data.length === 0) {\n const noResults = document.createElement('div');\n noResults.classList.add(this.classes.search);\n if (this.callbacks.addable) {\n noResults.innerHTML = this.settings.addableText.replace('{value}', this.content.search.input.value);\n }\n else {\n noResults.innerHTML = this.settings.searchText;\n }\n this.content.list.appendChild(noResults);\n return;\n }\n if (this.settings.allowDeselect && !this.settings.isMultiple) {\n const placeholderOption = this.store.filter((o) => o.placeholder, false);\n if (!placeholderOption.length) {\n this.store.addOption(new Option({\n text: '',\n value: '',\n selected: false,\n placeholder: true\n }), true);\n }\n }\n for (const d of data) {\n if (d instanceof Optgroup) {\n const optgroupEl = document.createElement('div');\n optgroupEl.classList.add(this.classes.optgroup);\n const optgroupLabel = document.createElement('div');\n optgroupLabel.classList.add(this.classes.optgroupLabel);\n optgroupEl.appendChild(optgroupLabel);\n const optgroupLabelText = document.createElement('div');\n optgroupLabelText.classList.add(this.classes.optgroupLabelText);\n optgroupLabelText.textContent = d.label;\n optgroupLabel.appendChild(optgroupLabelText);\n const optgroupActions = document.createElement('div');\n optgroupActions.classList.add(this.classes.optgroupActions);\n optgroupLabel.appendChild(optgroupActions);\n if (this.settings.isMultiple && d.selectAll) {\n const selectAll = document.createElement('div');\n selectAll.classList.add(this.classes.optgroupSelectAll);\n let allSelected = true;\n for (const o of d.options) {\n if (!o.selected) {\n allSelected = false;\n break;\n }\n }\n if (allSelected) {\n selectAll.classList.add(this.classes.selected);\n }\n const selectAllText = document.createElement('span');\n selectAllText.textContent = d.selectAllText;\n selectAll.appendChild(selectAllText);\n const selectAllSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n selectAllSvg.setAttribute('viewBox', '0 0 100 100');\n selectAll.appendChild(selectAllSvg);\n const selectAllBox = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n selectAllBox.setAttribute('d', this.classes.optgroupSelectAllBox);\n selectAllSvg.appendChild(selectAllBox);\n const selectAllCheck = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n selectAllCheck.setAttribute('d', this.classes.optgroupSelectAllCheck);\n selectAllSvg.appendChild(selectAllCheck);\n selectAll.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n const currentSelected = this.store.getSelected();\n if (allSelected) {\n const newSelected = currentSelected.filter((s) => {\n for (const o of d.options) {\n if (s === o.id) {\n return false;\n }\n }\n return true;\n });\n this.callbacks.setSelected(newSelected, true);\n return;\n }\n else {\n const newSelected = currentSelected.concat(d.options.map((o) => o.id));\n for (const o of d.options) {\n if (!this.store.getOptionByID(o.id)) {\n this.callbacks.addOption(o);\n }\n }\n this.callbacks.setSelected(newSelected, true);\n return;\n }\n });\n optgroupActions.appendChild(selectAll);\n }\n if (d.closable !== 'off') {\n const optgroupClosable = document.createElement('div');\n optgroupClosable.classList.add(this.classes.optgroupClosable);\n const optgroupClosableSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n optgroupClosableSvg.setAttribute('viewBox', '0 0 100 100');\n optgroupClosableSvg.classList.add(this.classes.arrow);\n optgroupClosable.appendChild(optgroupClosableSvg);\n const optgroupClosableArrow = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n optgroupClosableSvg.appendChild(optgroupClosableArrow);\n if (d.options.some((o) => o.selected) || this.content.search.input.value.trim() !== '') {\n optgroupClosable.classList.add(this.classes.open);\n optgroupClosableArrow.setAttribute('d', this.classes.arrowOpen);\n }\n else if (d.closable === 'open') {\n optgroupEl.classList.add(this.classes.open);\n optgroupClosableArrow.setAttribute('d', this.classes.arrowOpen);\n }\n else if (d.closable === 'close') {\n optgroupEl.classList.add(this.classes.close);\n optgroupClosableArrow.setAttribute('d', this.classes.arrowClose);\n }\n optgroupLabel.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (optgroupEl.classList.contains(this.classes.close)) {\n optgroupEl.classList.remove(this.classes.close);\n optgroupEl.classList.add(this.classes.open);\n optgroupClosableArrow.setAttribute('d', this.classes.arrowOpen);\n }\n else {\n optgroupEl.classList.remove(this.classes.open);\n optgroupEl.classList.add(this.classes.close);\n optgroupClosableArrow.setAttribute('d', this.classes.arrowClose);\n }\n });\n optgroupActions.appendChild(optgroupClosable);\n }\n optgroupEl.appendChild(optgroupLabel);\n for (const o of d.options) {\n optgroupEl.appendChild(this.option(o));\n }\n this.content.list.appendChild(optgroupEl);\n }\n if (d instanceof Option) {\n this.content.list.appendChild(this.option(d));\n }\n }\n }\n option(option) {\n if (option.placeholder) {\n const placeholder = document.createElement('div');\n placeholder.classList.add(this.classes.option);\n placeholder.classList.add(this.classes.hide);\n return placeholder;\n }\n const optionEl = document.createElement('div');\n optionEl.dataset.id = option.id;\n optionEl.classList.add(this.classes.option);\n optionEl.setAttribute('role', 'option');\n if (option.class) {\n option.class.split(' ').forEach((dataClass) => {\n optionEl.classList.add(dataClass);\n });\n }\n if (option.style) {\n optionEl.style.cssText = option.style;\n }\n if (this.settings.searchHighlight && this.content.search.input.value.trim() !== '') {\n optionEl.innerHTML = this.highlightText(option.html !== '' ? option.html : option.text, this.content.search.input.value, this.classes.searchHighlighter);\n }\n else if (option.html !== '') {\n optionEl.innerHTML = option.html;\n }\n else {\n optionEl.textContent = option.text;\n }\n if (this.settings.showOptionTooltips && optionEl.textContent) {\n optionEl.setAttribute('title', optionEl.textContent);\n }\n if (!option.display) {\n optionEl.classList.add(this.classes.hide);\n }\n if (option.disabled) {\n optionEl.classList.add(this.classes.disabled);\n }\n if (option.selected && this.settings.hideSelected) {\n optionEl.classList.add(this.classes.hide);\n }\n if (option.selected) {\n optionEl.classList.add(this.classes.selected);\n optionEl.setAttribute('aria-selected', 'true');\n this.main.main.setAttribute('aria-activedescendant', optionEl.id);\n }\n else {\n optionEl.classList.remove(this.classes.selected);\n optionEl.setAttribute('aria-selected', 'false');\n }\n optionEl.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n const selectedOptions = this.store.getSelected();\n const element = e.currentTarget;\n const elementID = String(element.dataset.id);\n if (option.disabled || (option.selected && !this.settings.allowDeselect)) {\n return;\n }\n if ((this.settings.isMultiple && this.settings.maxSelected <= selectedOptions.length && !option.selected) ||\n (this.settings.isMultiple && this.settings.minSelected >= selectedOptions.length && option.selected)) {\n return;\n }\n let shouldUpdate = false;\n const before = this.store.getSelectedOptions();\n let after = [];\n if (this.settings.isMultiple) {\n if (option.selected) {\n after = before.filter((o) => o.id !== elementID);\n }\n else {\n after = before.concat(option);\n }\n }\n if (!this.settings.isMultiple) {\n if (option.selected) {\n after = [];\n }\n else {\n after = [option];\n }\n }\n if (!this.callbacks.beforeChange) {\n shouldUpdate = true;\n }\n if (this.callbacks.beforeChange) {\n if (this.callbacks.beforeChange(after, before) === false) {\n shouldUpdate = false;\n }\n else {\n shouldUpdate = true;\n }\n }\n if (shouldUpdate) {\n if (!this.store.getOptionByID(elementID)) {\n this.callbacks.addOption(option);\n }\n this.callbacks.setSelected(after.map((o) => o.id), false);\n if (this.settings.closeOnSelect) {\n this.callbacks.close();\n }\n if (this.callbacks.afterChange) {\n this.callbacks.afterChange(after);\n }\n }\n });\n return optionEl;\n }\n destroy() {\n this.main.main.remove();\n this.content.main.remove();\n }\n highlightText(str, search, className) {\n let completedString = str;\n const regex = new RegExp('(?![^<]*>)(' + search.trim() + ')(?![^<]*>[^<>]*${originalTextFoundByRegex}`);\n return completedString;\n }\n moveContentAbove() {\n const mainHeight = this.main.main.offsetHeight;\n const contentHeight = this.content.main.offsetHeight;\n this.main.main.classList.remove(this.classes.openBelow);\n this.main.main.classList.add(this.classes.openAbove);\n this.content.main.classList.remove(this.classes.openBelow);\n this.content.main.classList.add(this.classes.openAbove);\n const containerRect = this.main.main.getBoundingClientRect();\n this.content.main.style.margin = '-' + (mainHeight + contentHeight - 1) + 'px 0px 0px 0px';\n this.content.main.style.top =\n containerRect.top + containerRect.height + (this.settings.contentPosition === 'fixed' ? 0 : window.scrollY) + 'px';\n this.content.main.style.left =\n containerRect.left + (this.settings.contentPosition === 'fixed' ? 0 : window.scrollX) + 'px';\n this.content.main.style.width = containerRect.width + 'px';\n }\n moveContentBelow() {\n this.main.main.classList.remove(this.classes.openAbove);\n this.main.main.classList.add(this.classes.openBelow);\n this.content.main.classList.remove(this.classes.openAbove);\n this.content.main.classList.add(this.classes.openBelow);\n const containerRect = this.main.main.getBoundingClientRect();\n this.content.main.style.margin = '-1px 0px 0px 0px';\n if (this.settings.contentPosition !== 'relative') {\n this.content.main.style.top =\n containerRect.top +\n containerRect.height +\n (this.settings.contentPosition === 'fixed' ? 0 : window.scrollY) +\n 'px';\n this.content.main.style.left =\n containerRect.left + (this.settings.contentPosition === 'fixed' ? 0 : window.scrollX) + 'px';\n this.content.main.style.width = containerRect.width + 'px';\n }\n }\n ensureElementInView(container, element) {\n const cTop = container.scrollTop + container.offsetTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n if (eTop < cTop) {\n container.scrollTop -= cTop - eTop;\n }\n else if (eBottom > cBottom) {\n container.scrollTop += eBottom - cBottom;\n }\n }\n putContent() {\n const mainHeight = this.main.main.offsetHeight;\n const mainRect = this.main.main.getBoundingClientRect();\n const contentHeight = this.content.main.offsetHeight;\n const spaceBelow = window.innerHeight - (mainRect.top + mainHeight);\n if (spaceBelow <= contentHeight) {\n if (mainRect.top > contentHeight) {\n return 'up';\n }\n else {\n return 'down';\n }\n }\n return 'down';\n }\n updateDeselectAll() {\n if (!this.store || !this.settings) {\n return;\n }\n const selected = this.store.getSelectedOptions();\n const hasSelectedItems = selected && selected.length > 0;\n const isMultiple = this.settings.isMultiple;\n const allowDeselect = this.settings.allowDeselect;\n const deselectButton = this.main.deselect.main;\n const hideClass = this.classes.hide;\n if (allowDeselect && !(isMultiple && !hasSelectedItems)) {\n deselectButton.classList.remove(hideClass);\n }\n else {\n deselectButton.classList.add(hideClass);\n }\n }\n }\n\n class Select {\n constructor(select) {\n this.listen = false;\n this.observer = null;\n this.select = select;\n this.valueChange = this.valueChange.bind(this);\n this.select.addEventListener('change', this.valueChange, {\n passive: true\n });\n this.observer = new MutationObserver(this.observeCall.bind(this));\n this.changeListen(true);\n }\n enable() {\n this.select.disabled = false;\n }\n disable() {\n this.select.disabled = true;\n }\n hideUI() {\n this.select.tabIndex = -1;\n this.select.style.display = 'none';\n this.select.setAttribute('aria-hidden', 'true');\n }\n showUI() {\n this.select.removeAttribute('tabindex');\n this.select.style.display = '';\n this.select.removeAttribute('aria-hidden');\n }\n changeListen(listen) {\n this.listen = listen;\n if (listen) {\n if (this.observer) {\n this.observer.observe(this.select, {\n subtree: true,\n childList: true,\n attributes: true\n });\n }\n }\n if (!listen) {\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n }\n valueChange(ev) {\n if (this.listen && this.onValueChange) {\n this.onValueChange(this.getSelectedOptions());\n }\n return true;\n }\n observeCall(mutations) {\n if (!this.listen) {\n return;\n }\n let classChanged = false;\n let disabledChanged = false;\n let optgroupOptionChanged = false;\n for (const m of mutations) {\n if (m.target === this.select) {\n if (m.attributeName === 'disabled') {\n disabledChanged = true;\n }\n if (m.attributeName === 'class') {\n classChanged = true;\n }\n if (m.type === 'childList') {\n for (const n of m.addedNodes) {\n if (n.nodeName === 'OPTION' && n.value === this.select.value) {\n this.select.dispatchEvent(new Event('change'));\n break;\n }\n }\n optgroupOptionChanged = true;\n }\n }\n if (m.target.nodeName === 'OPTGROUP' || m.target.nodeName === 'OPTION') {\n optgroupOptionChanged = true;\n }\n }\n if (classChanged && this.onClassChange) {\n this.onClassChange(this.select.className.split(' '));\n }\n if (disabledChanged && this.onDisabledChange) {\n this.changeListen(false);\n this.onDisabledChange(this.select.disabled);\n this.changeListen(true);\n }\n if (optgroupOptionChanged && this.onOptionsChange) {\n this.changeListen(false);\n this.onOptionsChange(this.getData());\n this.changeListen(true);\n }\n }\n getData() {\n let data = [];\n const nodes = this.select.childNodes;\n for (const n of nodes) {\n if (n.nodeName === 'OPTGROUP') {\n data.push(this.getDataFromOptgroup(n));\n }\n if (n.nodeName === 'OPTION') {\n data.push(this.getDataFromOption(n));\n }\n }\n return data;\n }\n getDataFromOptgroup(optgroup) {\n let data = {\n id: optgroup.id,\n label: optgroup.label,\n selectAll: optgroup.dataset ? optgroup.dataset.selectall === 'true' : false,\n selectAllText: optgroup.dataset ? optgroup.dataset.selectalltext : 'Select all',\n closable: optgroup.dataset ? optgroup.dataset.closable : 'off',\n options: []\n };\n const options = optgroup.childNodes;\n for (const o of options) {\n if (o.nodeName === 'OPTION') {\n data.options.push(this.getDataFromOption(o));\n }\n }\n return data;\n }\n getDataFromOption(option) {\n return {\n id: option.id,\n value: option.value,\n text: option.text,\n html: option.dataset && option.dataset.html ? option.dataset.html : '',\n selected: option.selected,\n display: option.style.display !== 'none',\n disabled: option.disabled,\n mandatory: option.dataset ? option.dataset.mandatory === 'true' : false,\n placeholder: option.dataset.placeholder === 'true',\n class: option.className,\n style: option.style.cssText,\n data: option.dataset\n };\n }\n getSelectedOptions() {\n let options = [];\n const opts = this.select.childNodes;\n for (const o of opts) {\n if (o.nodeName === 'OPTGROUP') {\n const optgroupOptions = o.childNodes;\n for (const oo of optgroupOptions) {\n if (oo.nodeName === 'OPTION') {\n const option = oo;\n if (option.selected) {\n options.push(this.getDataFromOption(option));\n }\n }\n }\n }\n if (o.nodeName === 'OPTION') {\n const option = o;\n if (option.selected) {\n options.push(this.getDataFromOption(option));\n }\n }\n }\n return options;\n }\n getSelectedValues() {\n return this.getSelectedOptions().map((option) => option.value);\n }\n setSelected(ids) {\n this.changeListen(false);\n const options = this.select.childNodes;\n for (const o of options) {\n if (o.nodeName === 'OPTGROUP') {\n const optgroup = o;\n const optgroupOptions = optgroup.childNodes;\n for (const oo of optgroupOptions) {\n if (oo.nodeName === 'OPTION') {\n const option = oo;\n option.selected = ids.includes(option.id);\n }\n }\n }\n if (o.nodeName === 'OPTION') {\n const option = o;\n option.selected = ids.includes(option.id);\n }\n }\n this.changeListen(true);\n }\n setSelectedByValue(values) {\n this.changeListen(false);\n const options = this.select.childNodes;\n for (const o of options) {\n if (o.nodeName === 'OPTGROUP') {\n const optgroup = o;\n const optgroupOptions = optgroup.childNodes;\n for (const oo of optgroupOptions) {\n if (oo.nodeName === 'OPTION') {\n const option = oo;\n option.selected = values.includes(option.value);\n }\n }\n }\n if (o.nodeName === 'OPTION') {\n const option = o;\n option.selected = values.includes(option.value);\n }\n }\n this.changeListen(true);\n }\n updateSelect(id, style, classes) {\n this.changeListen(false);\n if (id) {\n this.select.dataset.id = id;\n }\n if (style) {\n this.select.style.cssText = style;\n }\n if (classes) {\n this.select.className = '';\n classes.forEach((c) => {\n if (c.trim() !== '') {\n this.select.classList.add(c.trim());\n }\n });\n }\n this.changeListen(true);\n }\n updateOptions(data) {\n this.changeListen(false);\n this.select.innerHTML = '';\n for (const d of data) {\n if (d instanceof Optgroup) {\n this.select.appendChild(this.createOptgroup(d));\n }\n if (d instanceof Option) {\n this.select.appendChild(this.createOption(d));\n }\n }\n this.select.dispatchEvent(new Event('change', { bubbles: true }));\n this.changeListen(true);\n }\n createOptgroup(optgroup) {\n const optgroupEl = document.createElement('optgroup');\n optgroupEl.id = optgroup.id;\n optgroupEl.label = optgroup.label;\n if (optgroup.selectAll) {\n optgroupEl.dataset.selectAll = 'true';\n }\n if (optgroup.closable !== 'off') {\n optgroupEl.dataset.closable = optgroup.closable;\n }\n if (optgroup.options) {\n for (const o of optgroup.options) {\n optgroupEl.appendChild(this.createOption(o));\n }\n }\n return optgroupEl;\n }\n createOption(info) {\n const optionEl = document.createElement('option');\n optionEl.id = info.id;\n optionEl.value = info.value;\n optionEl.textContent = info.text;\n if (info.html !== '') {\n optionEl.setAttribute('data-html', info.html);\n }\n if (info.selected) {\n optionEl.selected = info.selected;\n }\n if (info.disabled) {\n optionEl.disabled = true;\n }\n if (!info.display) {\n optionEl.style.display = 'none';\n }\n if (info.placeholder) {\n optionEl.setAttribute('data-placeholder', 'true');\n }\n if (info.mandatory) {\n optionEl.setAttribute('data-mandatory', 'true');\n }\n if (info.class) {\n info.class.split(' ').forEach((optionClass) => {\n optionEl.classList.add(optionClass);\n });\n }\n if (info.data && typeof info.data === 'object') {\n Object.keys(info.data).forEach((key) => {\n optionEl.setAttribute('data-' + kebabCase(key), info.data[key]);\n });\n }\n return optionEl;\n }\n destroy() {\n this.changeListen(false);\n this.select.removeEventListener('change', this.valueChange);\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n delete this.select.dataset.id;\n this.showUI();\n }\n }\n\n class Settings {\n constructor(settings) {\n this.id = '';\n this.style = '';\n this.class = [];\n this.isMultiple = false;\n this.isOpen = false;\n this.isFullOpen = false;\n this.intervalMove = null;\n if (!settings) {\n settings = {};\n }\n this.id = 'ss-' + generateID();\n this.style = settings.style || '';\n this.class = settings.class || [];\n this.disabled = settings.disabled !== undefined ? settings.disabled : false;\n this.alwaysOpen = settings.alwaysOpen !== undefined ? settings.alwaysOpen : false;\n this.showSearch = settings.showSearch !== undefined ? settings.showSearch : true;\n this.focusSearch = settings.focusSearch !== undefined ? settings.focusSearch : true;\n this.ariaLabel = settings.ariaLabel || 'Combobox';\n this.searchPlaceholder = settings.searchPlaceholder || 'Search';\n this.searchText = settings.searchText || 'No Results';\n this.searchingText = settings.searchingText || 'Searching...';\n this.searchHighlight = settings.searchHighlight !== undefined ? settings.searchHighlight : false;\n this.closeOnSelect = settings.closeOnSelect !== undefined ? settings.closeOnSelect : true;\n this.contentLocation = settings.contentLocation || document.body;\n this.contentPosition = settings.contentPosition || 'absolute';\n this.openPosition = settings.openPosition || 'auto';\n this.placeholderText = settings.placeholderText !== undefined ? settings.placeholderText : 'Select Value';\n this.allowDeselect = settings.allowDeselect !== undefined ? settings.allowDeselect : false;\n this.hideSelected = settings.hideSelected !== undefined ? settings.hideSelected : false;\n this.keepOrder = settings.keepOrder !== undefined ? settings.keepOrder : false;\n this.showOptionTooltips = settings.showOptionTooltips !== undefined ? settings.showOptionTooltips : false;\n this.minSelected = settings.minSelected || 0;\n this.maxSelected = settings.maxSelected || 1000;\n this.timeoutDelay = settings.timeoutDelay || 200;\n this.maxValuesShown = settings.maxValuesShown || 20;\n this.maxValuesMessage = settings.maxValuesMessage || '{number} selected';\n this.addableText = settings.addableText || 'Press \"Enter\" to add {value}';\n }\n }\n\n class SlimSelect {\n constructor(config) {\n var _a;\n this.events = {\n search: undefined,\n searchFilter: (opt, search) => {\n return opt.text.toLowerCase().indexOf(search.toLowerCase()) !== -1;\n },\n addable: undefined,\n beforeChange: undefined,\n afterChange: undefined,\n beforeOpen: undefined,\n afterOpen: undefined,\n beforeClose: undefined,\n afterClose: undefined\n };\n this.windowResize = debounce(() => {\n if (!this.settings.isOpen && !this.settings.isFullOpen) {\n return;\n }\n this.render.moveContent();\n });\n this.windowScroll = debounce(() => {\n if (!this.settings.isOpen && !this.settings.isFullOpen) {\n return;\n }\n this.render.moveContent();\n });\n this.documentClick = (e) => {\n if (!this.settings.isOpen) {\n return;\n }\n if (e.target && !hasClassInTree(e.target, this.settings.id)) {\n this.close(e.type);\n }\n };\n this.windowVisibilityChange = () => {\n if (document.hidden) {\n this.close();\n }\n };\n this.selectEl = (typeof config.select === 'string' ? document.querySelector(config.select) : config.select);\n if (!this.selectEl) {\n if (config.events && config.events.error) {\n config.events.error(new Error('Could not find select element'));\n }\n return;\n }\n if (this.selectEl.tagName !== 'SELECT') {\n if (config.events && config.events.error) {\n config.events.error(new Error('Element isnt of type select'));\n }\n return;\n }\n if (this.selectEl.dataset.ssid) {\n this.destroy();\n }\n this.settings = new Settings(config.settings);\n this.cssClasses = new CssClasses(config.cssClasses);\n const debounceEvents = ['afterChange', 'beforeOpen', 'afterOpen', 'beforeClose', 'afterClose'];\n for (const key in config.events) {\n if (!config.events.hasOwnProperty(key)) {\n continue;\n }\n if (debounceEvents.indexOf(key) !== -1) {\n this.events[key] = debounce(config.events[key], 100);\n }\n else {\n this.events[key] = config.events[key];\n }\n }\n this.settings.disabled = ((_a = config.settings) === null || _a === void 0 ? void 0 : _a.disabled) ? config.settings.disabled : this.selectEl.disabled;\n this.settings.isMultiple = this.selectEl.multiple;\n this.settings.style = this.selectEl.style.cssText;\n this.settings.class = this.selectEl.className.split(' ');\n this.select = new Select(this.selectEl);\n this.select.updateSelect(this.settings.id, this.settings.style, this.settings.class);\n this.select.hideUI();\n this.select.onValueChange = (options) => {\n this.setSelected(options.map((option) => option.id));\n };\n this.select.onClassChange = (classes) => {\n this.settings.class = classes;\n this.render.updateClassStyles();\n };\n this.select.onDisabledChange = (disabled) => {\n if (disabled) {\n this.disable();\n }\n else {\n this.enable();\n }\n };\n this.select.onOptionsChange = (data) => {\n this.setData(data);\n };\n this.store = new Store(this.settings.isMultiple ? 'multiple' : 'single', config.data ? config.data : this.select.getData());\n if (config.data) {\n this.select.updateOptions(this.store.getData());\n }\n const renderCallbacks = {\n open: this.open.bind(this),\n close: this.close.bind(this),\n addable: this.events.addable ? this.events.addable : undefined,\n setSelected: this.setSelected.bind(this),\n addOption: this.addOption.bind(this),\n search: this.search.bind(this),\n beforeChange: this.events.beforeChange,\n afterChange: this.events.afterChange\n };\n this.render = new Render(this.settings, this.cssClasses, this.store, renderCallbacks);\n this.render.renderValues();\n this.render.renderOptions(this.store.getData());\n const selectAriaLabel = this.selectEl.getAttribute('aria-label');\n const selectAriaLabelledBy = this.selectEl.getAttribute('aria-labelledby');\n if (selectAriaLabel) {\n this.render.main.main.setAttribute('aria-label', selectAriaLabel);\n }\n else if (selectAriaLabelledBy) {\n this.render.main.main.setAttribute('aria-labelledby', selectAriaLabelledBy);\n }\n if (this.selectEl.parentNode) {\n this.selectEl.parentNode.insertBefore(this.render.main.main, this.selectEl.nextSibling);\n }\n window.addEventListener('resize', this.windowResize, false);\n if (this.settings.openPosition === 'auto') {\n window.addEventListener('scroll', this.windowScroll, false);\n }\n document.addEventListener('visibilitychange', this.windowVisibilityChange);\n if (this.settings.disabled) {\n this.disable();\n }\n if (this.settings.alwaysOpen) {\n this.open();\n }\n this.selectEl.slim = this;\n }\n enable() {\n this.settings.disabled = false;\n this.select.enable();\n this.render.enable();\n }\n disable() {\n this.settings.disabled = true;\n this.select.disable();\n this.render.disable();\n }\n getData() {\n return this.store.getData();\n }\n setData(data) {\n const selected = this.store.getSelected();\n const err = this.store.validateDataArray(data);\n if (err) {\n if (this.events.error) {\n this.events.error(err);\n }\n return;\n }\n this.store.setData(data);\n const dataClean = this.store.getData();\n this.select.updateOptions(dataClean);\n this.render.renderValues();\n this.render.renderOptions(dataClean);\n if (this.events.afterChange && !isEqual(selected, this.store.getSelected())) {\n this.events.afterChange(this.store.getSelectedOptions());\n }\n }\n getSelected() {\n let options = this.store.getSelectedOptions();\n if (this.settings.keepOrder) {\n options = this.store.selectedOrderOptions(options);\n }\n return options.map((option) => option.value);\n }\n setSelected(values, runAfterChange = true) {\n const selected = this.store.getSelected();\n const options = this.store.getDataOptions();\n values = Array.isArray(values) ? values : [values];\n const ids = [];\n for (const value of values) {\n if (options.find((option) => option.id == value)) {\n ids.push(value);\n continue;\n }\n for (const option of options.filter((option) => option.value == value)) {\n ids.push(option.id);\n }\n }\n this.store.setSelectedBy('id', ids);\n const data = this.store.getData();\n this.select.updateOptions(data);\n this.render.renderValues();\n if (this.render.content.search.input.value !== '') {\n this.search(this.render.content.search.input.value);\n }\n else {\n this.render.renderOptions(data);\n }\n if (runAfterChange && this.events.afterChange && !isEqual(selected, this.store.getSelected())) {\n this.events.afterChange(this.store.getSelectedOptions());\n }\n }\n addOption(option) {\n const selected = this.store.getSelected();\n if (!this.store.getDataOptions().some((o) => { var _a; return o.value === ((_a = option.value) !== null && _a !== void 0 ? _a : option.text); })) {\n this.store.addOption(option);\n }\n const data = this.store.getData();\n this.select.updateOptions(data);\n this.render.renderValues();\n this.render.renderOptions(data);\n if (this.events.afterChange && !isEqual(selected, this.store.getSelected())) {\n this.events.afterChange(this.store.getSelectedOptions());\n }\n }\n open() {\n if (this.settings.disabled || this.settings.isOpen) {\n return;\n }\n if (this.events.beforeOpen) {\n this.events.beforeOpen();\n }\n this.render.open();\n if (this.settings.showSearch && this.settings.focusSearch) {\n this.render.searchFocus();\n }\n this.settings.isOpen = true;\n setTimeout(() => {\n if (this.events.afterOpen) {\n this.events.afterOpen();\n }\n if (this.settings.isOpen) {\n this.settings.isFullOpen = true;\n }\n document.addEventListener('click', this.documentClick);\n }, this.settings.timeoutDelay);\n if (this.settings.contentPosition === 'absolute') {\n if (this.settings.intervalMove) {\n clearInterval(this.settings.intervalMove);\n }\n this.settings.intervalMove = setInterval(this.render.moveContent.bind(this.render), 500);\n }\n }\n close(eventType = null) {\n if (!this.settings.isOpen || this.settings.alwaysOpen) {\n return;\n }\n if (this.events.beforeClose) {\n this.events.beforeClose();\n }\n this.render.close();\n if (this.render.content.search.input.value !== '') {\n this.search('');\n }\n this.render.mainFocus(eventType);\n this.settings.isOpen = false;\n this.settings.isFullOpen = false;\n setTimeout(() => {\n if (this.events.afterClose) {\n this.events.afterClose();\n }\n document.removeEventListener('click', this.documentClick);\n }, this.settings.timeoutDelay);\n if (this.settings.intervalMove) {\n clearInterval(this.settings.intervalMove);\n }\n }\n search(value) {\n if (this.render.content.search.input.value !== value) {\n this.render.content.search.input.value = value;\n }\n if (!this.events.search) {\n this.render.renderOptions(value === '' ? this.store.getData() : this.store.search(value, this.events.searchFilter));\n return;\n }\n this.render.renderSearching();\n const searchResp = this.events.search(value, this.store.getSelectedOptions());\n if (searchResp instanceof Promise) {\n searchResp\n .then((data) => {\n this.render.renderOptions(this.store.partialToFullData(data));\n })\n .catch((err) => {\n this.render.renderError(typeof err === 'string' ? err : err.message);\n });\n return;\n }\n else if (Array.isArray(searchResp)) {\n this.render.renderOptions(this.store.partialToFullData(searchResp));\n }\n else {\n this.render.renderError('Search event must return a promise or an array of data');\n }\n }\n destroy() {\n document.removeEventListener('click', this.documentClick);\n window.removeEventListener('resize', this.windowResize, false);\n if (this.settings.openPosition === 'auto') {\n window.removeEventListener('scroll', this.windowScroll, false);\n }\n document.removeEventListener('visibilitychange', this.windowVisibilityChange);\n this.store.setData([]);\n this.render.destroy();\n this.select.destroy();\n }\n }\n\n return SlimSelect;\n\n}));\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\nimport SlimSelect from 'slim-select'\n\nexport default class extends Controller {\n static targets = [ \"rating\", \"fullName\", \"email\", \"location\", \"comment\"]\n\n static locationSelect;\n static instructorSelect;\n static classSelect;\n\n static locationsData;\n static preSelectedLocation;\n static instructorsData;\n static classesData;\n static isUserInteract;\n\n connect() {\n this.setPreSelectedData();\n this.setupLocationSelect();\n this.setupInstructorSelect();\n this.setupClassSelect();\n this.isUserInteract = true;\n this.isResetLocation = false;\n }\n\n setPreSelectedData() {\n this.preSelectedLocation = JSON.parse(this.data.get(\"pre_selected_location\"));\n this.preSelectedInstructor = JSON.parse(this.data.get(\"pre_selected_instructor\"));\n this.preSelectedClass = JSON.parse(this.data.get(\"pre_selected_class\"));\n }\n\n setupLocationSelect() {\n this.locationsData = JSON.parse(this.data.get(\"locations\"));\n\n var data = [];\n var disabled = false;\n var allowDeselect = true;\n\n if (this.preSelectedLocation == null) {\n data = [{ placeholder: true, text: \"\" }].concat(this.locationsData);\n } else {\n data = [this.preSelectedLocation];\n disabled = true;\n allowDeselect = false;\n }\n\n this.locationSelect = new SlimSelect({\n select: '#feedback_location_id',\n data: data,\n settings: {\n placeholderText: 'Select Location',\n showSearch: false,\n allowDeselect: allowDeselect,\n disabled: disabled\n },\n events: {\n afterChange: (option) => {\n // option is array of changed items, so select [0], multiple = false by default\n var selectedItem = option[0]\n this.initInstructorSelect(selectedItem.value);\n this.initClassSelect(selectedItem.value);\n }\n }\n })\n }\n\n initInstructorSelect(locationId) {\n if (this.preSelectedInstructor != null) {\n return;\n }\n\n if (locationId == \"\") {\n this.instructorSelect.disable();\n this.isResetLocation = true;\n this.instructorSelect.setData([]);\n return;\n } else {\n this.isResetLocation = false;\n }\n\n var data = this.instructorData(locationId);\n\n this.instructorSelect.setData(data);\n this.instructorSelect.enable();\n }\n\n async initClassSelect(locationId) {\n if (this.preSelectedClass != null) {\n return;\n }\n\n if (locationId == \"\") {\n this.classSelect.disable();\n this.isResetLocation = true;\n this.classSelect.setData([]);\n return;\n } else {\n this.isUserInteract == false;\n }\n\n var data = await this.classData(locationId);\n\n this.classSelect.enable();\n this.classSelect.setData(data);\n }\n\n setupInstructorSelect() {\n this.instructorsData = JSON.parse(this.data.get(\"instructors\"));\n\n var data = [];\n var disabled = false;\n var allowDeselect = true;\n\n if (this.preSelectedInstructor == null) {\n if (this.preSelectedLocation != null) {\n if (this.preSelectedClass == null) {\n data = this.instructorData(this.preSelectedLocation.value);\n } else {\n data = this.instructorData(\n this.preSelectedLocation.value,\n this.preSelectedClass.instructor_ids\n );\n }\n disabled = false\n } else {\n data = []\n disabled = true\n }\n } else {\n data = [this.preSelectedInstructor];\n disabled = true;\n allowDeselect = false;\n }\n\n this.instructorSelect = new SlimSelect({\n select: '#feedback_instructor_id',\n data: data,\n settings: {\n placeholderText: 'Select Instructor',\n focusSearch: false,\n disabled: disabled,\n allowDeselect: allowDeselect\n },\n events: {\n afterChange: (options) => {\n if (this.isResetLocation == true) {\n return;\n }\n\n if (this.isUserInteract == true) {\n this.isUserInteract = false\n } else {\n this.isUserInteract = true\n return;\n }\n\n if (this.preSelectedClass == null) {\n this.updateClassesOnChange(options);\n }\n }\n }\n })\n }\n\n async updateClassesOnChange(selectedInstructors) {\n this.classSelect.disable();\n\n var locationId = this.locationSelect.getSelected()[0];\n\n if (selectedInstructors.length == 0) {\n var data = await this.classData(locationId);\n } else {\n var data = await this.classData(locationId, selectedInstructors[0].value);\n }\n\n var selectedClassValue = this.classSelect.getSelected()[0]\n this.classSelect.setData(data);\n this.classSelect.setSelected(selectedClassValue);\n\n this.classSelect.enable();\n }\n\n instructorData(locationId, guruIDs) {\n var instructors = this.instructorsData.filter(\n (item) => { return item.location_ids.includes(locationId) }\n )\n\n if (guruIDs != undefined) {\n instructors = instructors.filter(\n (item) => { return guruIDs.includes(item.value) }\n )\n }\n\n return [{ placeholder: true, text: \"\" }].concat(instructors);\n }\n\n async setupClassSelect() {\n var data = [];\n var disabled = false;\n var allowDeselect = true;\n\n if (this.preSelectedClass == null) {\n if (this.preSelectedLocation != null) {\n if (this.preSelectedInstructor != null) {\n data = await this.classData(this.preSelectedLocation.value, this.preSelectedInstructor.value)\n } else {\n data = await this.classData(this.preSelectedLocation.value)\n }\n disabled = false\n } else {\n data = []\n disabled = true\n }\n } else {\n data = [this.preSelectedClass];\n disabled = true;\n allowDeselect = false;\n }\n\n this.classSelect = new SlimSelect({\n data: data,\n select: '#feedback_class_id',\n settings: {\n placeholderText: 'Select Class',\n focusSearch: false,\n disabled: disabled,\n allowDeselect: allowDeselect\n },\n events: {\n afterChange: (options) => {\n if (this.isResetLocation == true) {\n return;\n }\n\n if (this.isUserInteract == true) {\n this.isUserInteract = false\n } else {\n this.isUserInteract = true\n return;\n }\n\n if (this.preSelectedInstructor == null) {\n this.updateInstructorsOnChange(options);\n }\n }\n }\n })\n }\n\n async updateInstructorsOnChange(selectedClasses) {\n this.instructorSelect.disable();\n\n var locationId = this.locationSelect.getSelected()[0];\n\n if (selectedClasses[0].value == '') {\n var data = this.instructorData(locationId);\n } else {\n var data = this.instructorData(locationId, selectedClasses[0].data.instructor_ids);\n }\n\n var selectedInstructor = this.instructorSelect.getSelected()[0];\n this.instructorSelect.setData(data);\n this.instructorSelect.setSelected(selectedInstructor);\n this.instructorSelect.enable();\n }\n\n async classData(locationId, instructorId = null) {\n const request = new FetchRequest(\n 'post',\n this.data.get('get_classes_url'),\n { body: JSON.stringify({ location_id: locationId, instructor_id: instructorId }) }\n );\n\n const response = await request.perform();\n\n if (response.ok) {\n const body = await response.text;\n this.classesData = JSON.parse(body);\n }\n\n return [{ placeholder: true, text: \"\" }].concat(this.classesData)\n }\n\n selectRationg(e) {\n this.rating = parseInt(e.currentTarget.dataset.rating);\n this.ratingTarget.value = this.rating;\n\n const clickedItem = e.currentTarget;\n if (!clickedItem) return;\n\n clickedItem.parentElement.querySelectorAll(\".rating_block\").forEach(item => {\n item.classList.remove(\"selected\");\n });\n\n clickedItem.classList.add(\"selected\");\n\n this.toggleCommentPlaceholder(this.isRequireComment());\n }\n\n validateFields() {\n var statuses = [];\n\n // validate full_name presence\n statuses.push(this.validatePresence(this.fullNameTarget));\n\n // validate email presence\n statuses.push(this.validateEmail());\n\n // validate rating presence\n statuses.push(this.validateRating());\n\n // validate location presence\n statuses.push(this.validateLocation());\n\n // validate comment presence\n statuses.push(this.validateComment());\n\n return statuses.every(function(status) { return status === false; });\n }\n\n submit(e) {\n if (this.validateFields()) {\n return true;\n } else {\n e.preventDefault();\n return false;\n }\n }\n\n isRequireComment() {\n var lowRatingBorder = 7;\n\n var rating = this.ratingTarget.value.trim();\n\n if (rating === \"\") {\n return false;\n }\n\n return (parseInt(rating) < lowRatingBorder);\n }\n\n toggleCommentPlaceholder(isRequire) {\n if (isRequire) {\n this.commentTarget.placeholder = \"Your Feedback\";\n } else {\n this.commentTarget.placeholder = \"Your Feedback (Optional)\";\n }\n }\n\n validateComment() {\n if (this.isRequireComment()) {\n var isRequire = this.commentTarget.value.trim() === \"\";\n\n if (isRequire) {\n this.commentTarget.parentElement.classList.add(\"error\");\n } else {\n this.commentTarget.parentElement.classList.remove(\"error\");\n }\n\n this.toggleCommentPlaceholder(isRequire);\n\n return isRequire;\n }\n\n return false;\n }\n\n validateRating() {\n var isInvalid = this.ratingTarget.value.trim() === \"\";\n\n if (isInvalid) {\n this.ratingTarget.parentElement.parentElement.classList.add(\"error\");\n } else {\n this.ratingTarget.parentElement.parentElement.classList.remove(\"error\");\n }\n\n return isInvalid;\n }\n\n validateLocation() {\n var isInvalid = this.locationSelect.getSelected()[0] == '';\n\n if (isInvalid) {\n this.locationTarget.parentElement.classList.add(\"error\");\n } else {\n this.locationTarget.parentElement.classList.remove(\"error\");\n }\n\n return isInvalid;\n }\n\n validateEmail() {\n var isValid = this.emailTarget.value.trim().toLowerCase().match(/^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|.(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\n if (isValid) {\n this.emailTarget.parentElement.classList.remove(\"error\");\n } else {\n this.emailTarget.parentElement.classList.add(\"error\");\n }\n\n return !isValid;\n }\n\n validatePresence(target) {\n var isInvalid = target.value.trim() === \"\";\n\n if (isInvalid) {\n target.parentElement.classList.add(\"error\");\n } else {\n target.parentElement.classList.remove(\"error\");\n }\n\n return isInvalid;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\n\nexport default class extends Controller {\n trackOpenReview() {\n const request = new FetchRequest('post', event.currentTarget.dataset.url, {});\n const response = request.perform();\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"rating\", \"comment\", \"preselectedRating\", \"ratingBlock\"]\n\n connect() {\n this.lowRatingBorderValue = 7\n\n if (this.isRequireComment()) {\n this.setCommentPlaceholder()\n }\n }\n\n getRatings() {\n return this.ratingTargets.map(element => ({\n element: element,\n rating: parseInt(element.value)\n }))\n }\n\n isRequireComment() {\n const ratings = this.getRatings()\n .map(item => item.rating)\n .filter(rating => !isNaN(rating))\n\n return Math.min(...ratings) < this.lowRatingBorderValue\n }\n\n setCommentPlaceholder() {\n const placeholder = this.isRequireComment() ? 'Your Feedback' : 'Your Feedback (Optional)'\n this.commentTarget.placeholder = placeholder\n }\n\n setRatingInTitle(rating) {\n if (this.hasPreselectedRatingTarget) {\n this.preselectedRatingTarget.textContent = rating\n }\n }\n\n selectRating(event) {\n const block = event.currentTarget\n const rating = block.dataset.rating\n const container = block.closest('.rating_container')\n\n // Remove selected class from all blocks in this container\n container.querySelectorAll('.rating_block').forEach(el => {\n el.classList.remove('selected')\n })\n\n // Add selected class to clicked block\n block.classList.add('selected')\n\n // Set the rating value in the hidden input\n container.querySelector('input').value = rating\n\n this.setCommentPlaceholder()\n this.setRatingInTitle(rating)\n }\n\n validateQuestions() {\n return this.getRatings().every(item => {\n const container = item.element.parentElement.parentElement;\n\n if (isNaN(item.rating)) {\n container.classList.add('error')\n return false\n } else {\n container.classList.remove('error')\n return true\n }\n })\n }\n\n validateComment() {\n if (!this.isRequireComment()) {\n return true\n }\n\n const commentValue = this.commentTarget.value.trim()\n\n if (commentValue === \"\") {\n this.commentTarget.parentElement.classList.add('error')\n return false\n } else {\n this.commentTarget.parentElement.classList.remove('error')\n return true\n }\n }\n\n submitForm(event) {\n if (!this.validateQuestions() || !this.validateComment()) {\n event.preventDefault()\n }\n }\n}\n","// src/index.ts\nvar CONTROLLER_FILENAME_REGEX = /^(?:.*?(?:controllers|components)\\/|\\.?\\.\\/)?(.+)(?:[/_-]controller\\..+?)$/;\nfunction registerControllers(application, controllerModules) {\n application.load(definitionsFromGlob(controllerModules));\n}\nfunction definitionsFromGlob(controllerModules) {\n return Object.entries(controllerModules).map(definitionFromEntry).filter((value) => value);\n}\nfunction definitionFromEntry([name, controllerModule]) {\n var _a;\n const identifier = identifierForGlobKey(name);\n const controllerConstructor = (_a = controllerModule.default) != null ? _a : controllerModule;\n if (identifier && typeof controllerConstructor === \"function\")\n return { identifier, controllerConstructor };\n}\nfunction identifierForGlobKey(key) {\n const logicalName = (key.match(CONTROLLER_FILENAME_REGEX) || [])[1];\n if (logicalName)\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n}\nexport {\n CONTROLLER_FILENAME_REGEX,\n definitionsFromGlob,\n identifierForGlobKey,\n registerControllers\n};\n"],"ignoreList":[0,6,7,8,9,10,14],"mappings":"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"}