{"version":3,"file":"js/application-457f921a09b12d179075.js","mappings":"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","sources":["webpack://builddco/./app/components/article_modal/index.js","webpack://builddco/./app/components/circular_progress_bar/index.js","webpack://builddco/./app/components/feature_tabs_section/index.js","webpack://builddco/./app/components/index.js","webpack://builddco/./app/components/modal/index.js","webpack://builddco/./app/components/nutshell/index.js","webpack://builddco/./app/components/read_next_timer/index.js","webpack://builddco/./app/components/scroll_slider/index.js","webpack://builddco/./app/components/similar_resources_preview/index.js","webpack://builddco/./app/components/ sync index.js$","webpack://builddco/./app/javascript/channels/ sync _channel\\.js$","webpack://builddco/./app/javascript/channels/index.js","webpack://builddco/./app/javascript/controllers/application.js","webpack://builddco/./app/javascript/controllers/scroll_trigger_controller.js","webpack://builddco/./app/javascript/controllers/accordian_controller.js","webpack://builddco/./app/javascript/controllers/auto_scrolling_cards_controller.js","webpack://builddco/./app/javascript/controllers/autoplay_videos_controller.js","webpack://builddco/./app/javascript/controllers/bottom_bar_controller.js","webpack://builddco/./app/javascript/controllers/bottom_bar_scroll_trigger_controller.js","webpack://builddco/./app/javascript/controllers/button_loader_controller.js","webpack://builddco/./app/javascript/controllers/collections_card_slider_controller.js","webpack://builddco/./app/javascript/controllers/comment_form_controller.js","webpack://builddco/./app/javascript/controllers/confetti_controller.js","webpack://builddco/./app/javascript/controllers/copy_text_controller.js","webpack://builddco/./app/javascript/controllers/countdown_timer_controller.js","webpack://builddco/./app/javascript/controllers/course_completed_controller.js","webpack://builddco/./app/javascript/controllers/course_progress_bar_controller.js","webpack://builddco/./app/javascript/controllers/custom_dropdown_controller.js","webpack://builddco/./app/javascript/controllers/custom_select_controller.js","webpack://builddco/./app/javascript/controllers/custom_toggle_controller.js","webpack://builddco/./app/javascript/controllers/filters_controller.js","webpack://builddco/./app/javascript/controllers/flash_message_controller.js","webpack://builddco/./app/javascript/controllers/form_controller.js","webpack://builddco/./app/javascript/controllers/gfs_result_controller.js","webpack://builddco/./app/javascript/controllers/gists_controller.js","webpack://builddco/./app/javascript/controllers/hamburger_menu_controller.js","webpack://builddco/./app/javascript/controllers/highlights_controller.js","webpack://builddco/./app/javascript/controllers/image_zoom_controller.js","webpack://builddco/./app/javascript/controllers/immersive_page_controller.js","webpack://builddco/./app/javascript/controllers/lessons_mistakes_toggle_controller.js","webpack://builddco/./app/javascript/controllers/location_controller.js","webpack://builddco/./app/javascript/controllers/mixpanel_controller.js","webpack://builddco/./app/javascript/controllers/module_dropdown_controller.js","webpack://builddco/./app/javascript/controllers/multiline_input_controller.js","webpack://builddco/./app/javascript/controllers/nutshell_transition_controller.js","webpack://builddco/./app/javascript/controllers/overview_controller.js","webpack://builddco/./app/javascript/controllers/pending_requests_controller.js","webpack://builddco/./app/javascript/controllers/read_trigger_controller.js","webpack://builddco/./app/javascript/controllers/scrape_controller.js","webpack://builddco/./app/javascript/controllers/scroll_slider_controller.js","webpack://builddco/./app/javascript/controllers/scroll_to_controller.js","webpack://builddco/./app/javascript/controllers/scroll_to_top_controller.js","webpack://builddco/./app/javascript/controllers/search_box_controller.js","webpack://builddco/./app/javascript/controllers/search_tabs_controller.js","webpack://builddco/./app/javascript/controllers/share_button_controller.js","webpack://builddco/./app/javascript/controllers/show_more_controller.js","webpack://builddco/./app/javascript/controllers/slideover_controller.js","webpack://builddco/./app/javascript/controllers/slider_controller.js","webpack://builddco/./app/javascript/controllers/slim_select_controller.js","webpack://builddco/./app/javascript/controllers/stream_controller.js","webpack://builddco/./app/javascript/controllers/testimonial_slider_controller.js","webpack://builddco/./app/javascript/controllers/text_change_animation_controller.js","webpack://builddco/./app/javascript/controllers/text_clamp_controller.js","webpack://builddco/./app/javascript/controllers/tweets_slider_controller.js","webpack://builddco/./app/javascript/controllers/video_view_controller.js","webpack://builddco/./app/javascript/controllers/index.js","webpack://builddco/./app/javascript/packs/application.js"],"sourcesContent":["// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\nimport ScrollTrigger from \"../../javascript/controllers/scroll_trigger_controller\";\nimport { useDispatch } from \"stimulus-use\";\n\nexport class Controller extends ScrollTrigger {\n static targets = ['video'];\n\n connect() {\n super.connect();\n useDispatch(this);\n }\n\n action() {\n\n const modalElement = document.querySelector('[data-controller=\"modal\"]');\n\n if (modalElement) {\n const event = new Event(\"open\");\n modalElement.dispatchEvent(event);\n if (this.hasVideoTarget) {\n this.videoTarget.play();\n }\n }\n\n }\n}\n","import { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n static targets = ['progressBar', 'progressText']\n\n updateProgress(event) {\n const radius = this.data.get('radius');\n const circumference = radius * 2 * Math.PI;\n const offset = circumference - event.detail.progress / 100 * circumference;\n this.progressBarTarget.style.strokeDashoffset = offset;\n this.progressTextTarget.innerText = parseInt(event.detail.progress) + '%';\n }\n}\n","import { Tabs } from \"tailwindcss-stimulus-components\"\n\nexport class Controller extends Tabs {\n static targets = ['tabContent', 'mobilePanel'];\n\n showTab() {\n this.tabTargets.forEach((tab, index) => {\n const panel = this.panelTargets[index]\n const mobilePanel = this.mobilePanelTargets[index]\n\n if (index === this.index) {\n panel.classList.remove('md:hidden');\n mobilePanel.classList.remove('hidden');\n tab.classList.remove(...this.inactiveTabClasses);\n tab.classList.add(...this.activeTabClasses);\n const tabContentElement = this.tabContentTargets[index];\n if (tabContentElement != null) {\n tabContentElement.style = `max-height: ${tabContentElement.scrollHeight}px; visibility: visible;`;\n }\n // Update URL with the tab ID if it has one\n // This will be automatically selected on page load\n if (tab.id) {\n location.hash = tab.id;\n }\n } else {\n panel.classList.add('md:hidden');\n mobilePanel.classList.add('hidden');\n tab.classList.remove(...this.activeTabClasses);\n tab.classList.add(...this.inactiveTabClasses);\n const tabContentElement = this.tabContentTargets[index];\n if (tabContentElement != null) {\n tabContentElement.style = `max-height: 0px; visibility: hidden;`;\n }\n }\n })\n }\n}\n","// IMPORTANT: Update this import to reflect the location of your Stimulus application\n// See https://github.com/palkan/view_component-contrib#using-with-stimulusjs\nimport { application } from \"../javascript/controllers/application\";\n\nconst context = require.context(\".\", true, /index.js$/)\ncontext.keys().forEach((path) => {\n const mod = context(path);\n\n // Check whether a module has the Controller export defined\n if (!mod.Controller) return;\n\n // Convert path into a controller identifier:\n // example/index.js -> example\n // nav/user_info/index.js -> nav--user-info\n const identifier = path.replace(/^\\.\\//, '')\n .replace(/\\/index\\.js$/, '')\n .replace(/\\//g, '--')\n .replace(/_/g, '-');\n\n application.register(identifier, mod.Controller);\n});\n","import { Modal } from \"tailwindcss-stimulus-components\";\n\nexport class Controller extends Modal {\n connect() {\n super.connect();\n\n if (this.showOnLoad && !window.location.hash) {\n let event = new CustomEvent(\"open\");\n this.element.dispatchEvent(event);\n }\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Add classes to body to fix its position\n document.body.classList.add('inset-x-0', 'overflow-hidden');\n\n if (this.restoreScrollValue) {\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n }\n\n async downloadAndclose(event) {\n super.close(event);\n await this.downloadImage(event.target.href, event.params.filename)\n }\n\n async downloadImage(imageSrc, filename) {\n const image = await fetch(imageSrc);\n const imageBlog = await image.blob();\n const imageURL = URL.createObjectURL(imageBlog);\n\n const link = document.createElement('a');\n link.href = imageURL;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n get showOnLoad() {\n return this.data.get('showOnLoad') === 'true';\n }\n}\n","import { Controller as BaseController } from \"@hotwired/stimulus\";\nimport { useDispatch } from \"stimulus-use\";\n\nexport class Controller extends BaseController {\n static targets = [\"track\", \"indicator\", \"navigator\", \"back\", \"next\"];\n\n static values = {\n count: Number\n }\n\n initialize() {\n this.index = 0;\n this.showCurrentSlide();\n }\n\n connect() {\n useDispatch(this);\n }\n\n back() {\n if (this.index > 0) {\n this.index--;\n this.showCurrentSlide();\n this.dispatch('change');\n }\n }\n\n next() {\n if (this.index < this.countValue - 1) {\n this.index++;\n this.showCurrentSlide();\n this.dispatch('change');\n }\n\n }\n\n move({ params: { id } }) {\n this.index = id;\n this.showCurrentSlide();\n this.dispatch('change');\n }\n\n showCurrentSlide() {\n this.trackTarget.style = `transform: translateX(${this.index * -100}%);`;\n this.indicatorTarget.innerText = `${this.index + 1}/${this.countValue}`;\n this.navigatorTargets.forEach((element, index) => {\n if (index === this.index) {\n element.classList.add('bg-primary');\n element.classList.remove('bg-gray-400');\n }\n else {\n element.classList.remove('bg-primary');\n element.classList.add('bg-gray-400');\n }\n });\n if (this.index === 0) {\n this.backTarget.classList.add(\"disabled\");\n } else {\n this.backTarget.classList.remove(\"disabled\");\n }\n if (this.index === this.countValue - 1) {\n this.nextTarget.classList.add(\"disabled\");\n } else {\n this.nextTarget.classList.remove(\"disabled\");\n }\n }\n}\n","// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\nimport ScrollTrigger from \"../../javascript/controllers/scroll_trigger_controller\";\nimport { useDispatch } from \"stimulus-use\";\n\nexport class Controller extends ScrollTrigger {\n static targets = ['progress', 'countdown'];\n static values = {\n wait: Number\n }\n\n action() {\n this.element.classList.add('-translate-y-[calc(100%+49px)]');\n this.element.classList.replace('md:translate-y-[calc(100%+1rem)]', 'md:translate-y-0');\n this.interval = setInterval(this.updateTimer.bind(this), 1000);\n }\n\n connect() {\n super.connect();\n useDispatch(this);\n this.stopped = false;\n }\n\n updateTimer() {\n if (this.waitValue > 0) {\n this.waitValue--;\n }\n if (this.waitValue === 0) {\n clearInterval(this.interval)\n this.dispatch(\"end\");\n }\n }\n\n waitValueChanged() {\n this.countdownTarget.innerText = this.waitValue;\n }\n\n pause() {\n if (!this.stopped) {\n clearInterval(this.interval);\n }\n }\n\n resume() {\n if (!this.stopped) {\n this.interval = setInterval(this.updateTimer.bind(this), 1000);\n }\n }\n\n hide(event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.element.classList.remove('-translate-y-[calc(100%+49px)]');\n this.element.classList.replace('md:translate-y-0', 'md:translate-y-[calc(100%+1rem)]');\n clearInterval(this.interval);\n this.stopped = true;\n }\n\n end() {\n this.hide();\n this.dispatch(\"end\");\n }\n}\n","import { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n static targets = [\"track\", \"back\", \"next\"];\n\n static values = {\n slide: Number\n }\n\n disableClasses = ['cursor-not-allowed', 'opacity-30'];\n\n connect() {\n if (this.hasNextTarget && this.hasBackTarget) {\n if (this.trackTarget.scrollWidth <= this.trackTarget.clientWidth) {\n this.nextTarget.classList.remove('md:flex');\n this.backTarget.classList.remove('md:flex');\n }\n else {\n this.disableTarget(this.backTarget);\n }\n this.trackTarget.addEventListener('scroll', this.updateScrollButtons.bind(this));\n }\n }\n\n disconnect() {\n if (this.hasNextTarget && this.hasBackTarget) {\n this.trackTarget.removeEventListener('scroll', this.updateScrollButtons.bind(this));\n }\n }\n\n scroll({ params: { direction } }) {\n this.trackTarget.scrollTo({\n left: direction === 'back' ?\n this.trackTarget.scrollLeft - this.slideValue :\n this.trackTarget.scrollLeft + this.slideValue,\n behavior: \"smooth\"\n });\n }\n\n updateScrollButtons() {\n if (this.trackTarget.scrollLeft === 0) {\n this.disableTarget(this.backTarget);\n }\n else {\n this.enableTarget(this.backTarget);\n }\n if (this.trackTarget.scrollLeft === this.trackTarget.scrollWidth - this.trackTarget.clientWidth) {\n this.disableTarget(this.nextTarget);\n }\n else {\n this.enableTarget(this.nextTarget);\n }\n }\n\n disableTarget(target) {\n target.disabled = true;\n target.classList.add(...this.disableClasses);\n }\n\n enableTarget(target) {\n target.disabled = false;\n target.classList.remove(...this.disableClasses);\n }\n\n autoScroll(event) {\n const currentTabIndex = event.detail.tabIndex;\n this.trackTarget.scrollTo({\n left: this.slideValue * currentTabIndex,\n behavior: \"smooth\"\n });\n }\n}\n","import { Tabs } from \"tailwindcss-stimulus-components\";\nimport { useIntersection, useDispatch } from \"stimulus-use\";\n\nexport class Controller extends Tabs {\n static targets = ['progressPath', 'tabContainer'];\n\n connect() {\n useIntersection(this, {\n element: this.tabContainerTarget,\n threshold: 1\n });\n useDispatch(this);\n this.numberOfTabs = this.tabTargets.length;\n this.stopped = false;\n super.connect();\n }\n\n change(event) {\n super.change(event);\n this.stopAutoswitch();\n }\n\n appear() {\n if (!this.stopped && !this.interval) {\n this.dispatch('appear');\n this.startProgressBarTransition();\n this.interval = setInterval(this.switchTab.bind(this), 7500);\n }\n }\n\n switchTab() {\n this.index = this.index < this.numberOfTabs - 1 ? this.index + 1 : 0;\n this.dispatch('auto-switch', { tabIndex: this.index });\n this.startProgressBarTransition();\n this.showTab();\n }\n\n stopAutoswitch() {\n this.stopped = true;\n clearInterval(this.interval);\n this.progressPathTargets.forEach(progressPath => {\n progressPath.classList.add('invisible');\n });\n }\n\n scrollIntoView() {\n window.scrollTo({\n top: this.element.offsetTop - 64,\n behavior: \"smooth\"\n });\n }\n\n startProgressBarTransition() {\n this.progressPathTargets.forEach(((progressPath, index) => {\n if (index === this.index) {\n progressPath.classList.remove('invisible');\n progressPath.classList.add(`[stroke-dashoffset:0]`);\n }\n else {\n progressPath.classList.add('invisible');\n progressPath.classList.remove(`[stroke-dashoffset:0]`);\n }\n }).bind(this));\n }\n}\n","var map = {\n\t\"./article_modal/index.js\": 5268,\n\t\"./circular_progress_bar/index.js\": 8729,\n\t\"./feature_tabs_section/index.js\": 5782,\n\t\"./index.js\": 6046,\n\t\"./modal/index.js\": 6747,\n\t\"./nutshell/index.js\": 2059,\n\t\"./read_next_timer/index.js\": 2187,\n\t\"./scroll_slider/index.js\": 4435,\n\t\"./similar_resources_preview/index.js\": 3911\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 8635;","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = 6463;\nmodule.exports = webpackEmptyContext;","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\nimport { Modal, Dropdown, Tabs, Toggle, Popover, Slideover, Alert } from \"tailwindcss-stimulus-components\"\napplication.register('alert', Alert)\napplication.register('modal', Modal)\napplication.register('dropdown', Dropdown)\napplication.register('tabs', Tabs)\napplication.register('toggle', Toggle)\napplication.register('popover', Popover)\napplication.register('slideover', Slideover)\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"scroll-trigger\"\nexport default class extends Controller {\n static values = {\n scrollPercent: Number,\n }\n\n initialize() {\n this.boundedTrigger = this.trigger.bind(this);\n }\n\n connect() {\n window.addEventListener('scroll', this.boundedTrigger);\n }\n\n trigger() {\n const scrollPercent = window.scrollY / (document.documentElement.scrollHeight - window.innerHeight);\n if (scrollPercent > this.scrollPercentValue) {\n this.action();\n window.removeEventListener('scroll', this.boundedTrigger);\n }\n }\n\n // override action funtion \n action() {\n console.log('Triggered action');\n }\n}\n","import { Tabs } from \"tailwindcss-stimulus-components\"\n\n// Connects to data-controller=\"accordian\"\nexport default class extends Tabs {\n static targets = ['arrow'];\n\n change(event) {\n event.preventDefault();\n\n // If target specifies an index, use that\n if (event.currentTarget.dataset.index) {\n this.index = event.currentTarget.dataset.index\n\n // If target specifies an id, use that\n } else if (event.currentTarget.dataset.id) {\n this.index = this.tabTargets.findIndex((tab) => tab.id == event.currentTarget.dataset.id)\n\n // Check if target is current tab\n } else if (this.tabTargets.indexOf(event.currentTarget) == this.index) {\n this.index = null\n\n // Otherwise, use the index of the current target\n } else {\n this.index = this.tabTargets.indexOf(event.currentTarget)\n }\n\n if (this.hasArrowTarget) {\n this.arrowTargets.forEach((arrowTarget, index) => {\n if (index == this.index) {\n arrowTarget.classList.add('rotate-180');\n } else {\n arrowTarget.classList.remove('rotate-180');\n }\n });\n const offsetTop = this.tabTargets[this.index].getBoundingClientRect().top + document.documentElement.scrollTop;\n window.scrollTo({\n top: offsetTop - 84,\n behavior: \"smooth\"\n });\n }\n\n window.dispatchEvent(new CustomEvent('tsc:tab-change'))\n }\n\n get index() {\n return this.data.get('index') == null ? null : parseInt(this.data.get('index') || 0)\n }\n\n set index(value) {\n this.data.set('index', (value >= 0 ? value : 0))\n this.showTab()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { gsap } from \"gsap\";\n// import { ScrollTrigger } from \"gsap/ScrollTrigger\";\n\n// Connects to data-controller=\"hero-cards-slider\"\nexport default class extends Controller {\n\n initialize() {\n if (this.isHorizontal) {\n this.startHorizontalAnimation();\n }\n else {\n this.startVerticalAnimation();\n }\n // const headerTween = gsap.to('.header', {\n // background: 'white',\n // boxShadow: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n // });\n // ScrollTrigger.create({\n // trigger: '.course-description-page',\n // animation: headerTween,\n // scrub: true,\n // start: '50 top',\n // end: '50 top',\n // });\n }\n\n startVerticalAnimation() {\n const cards = gsap.utils.toArray(this.element.children);\n const totalHeight = this.element.offsetHeight;\n\n cards.forEach((card) => {\n const cardHeight = card.offsetHeight;\n const cardOffset = card.offsetTop;\n const cardDistance = cardHeight + cardOffset;\n const tl = gsap.timeline({ repeat: -1, defaults: { ease: \"none\", duration: totalHeight / 40 } });\n tl.to(card, {\n y: `-=${totalHeight}`,\n modifiers: {\n y: (y, target) => {\n y = parseFloat(y);\n if (y < -cardDistance) {\n y += totalHeight;\n }\n return y + \"px\";\n }\n }\n }, 0);\n });\n }\n\n startHorizontalAnimation() {\n const cards = gsap.utils.toArray(this.element.children);\n const totalWidth = this.element.offsetWidth;\n\n cards.forEach((card) => {\n const cardWidth = card.offsetWidth;\n const cardOffset = card.offsetLeft;\n const cardDistance = cardWidth + cardOffset;\n // const duration = \n const tl = gsap.timeline({ repeat: -1, defaults: { ease: \"none\", duration: totalWidth / 25 } });\n tl.to(card, {\n x: `-=${totalWidth}`,\n modifiers: {\n x: (x, target) => {\n x = parseFloat(x);\n if (x < -cardDistance) {\n x += totalWidth;\n }\n return x + \"px\";\n }\n }\n }, 0);\n });\n }\n\n get isHorizontal() {\n const value = this.data.get('isHorizontal') || 'false';\n return value == 'true';\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"video\"]\n\n connect() {\n this.observer = new IntersectionObserver(this.handleIntersection.bind(this));\n this.videos.forEach(video => {\n // Chrome does not allow autoplay with unmute\n video.muted = true;\n video.autoplay = true;\n this.observer.observe(video);\n });\n }\n\n handleIntersection(entries) {\n const intersectingVideo = entries.find(entry => entry.isIntersecting);\n if (intersectingVideo) {\n intersectingVideo.target.play();\n this.videos.forEach(video => {\n if (video !== intersectingVideo.target) {\n video.pause();\n }\n });\n }\n }\n\n\n get videos() {\n return this.videoTargets\n }\n}","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"bottom-bar\"\nexport default class extends Controller {\n toggleTagsSection() {\n this.element.classList.toggle('translate-y-[calc(100%-49px)]');\n this.element.classList.toggle('translate-y-[calc(100%-98px)]');\n }\n\n showComments() {\n const commentsSection = document.querySelector('#comments');\n const offsetTop = commentsSection.getBoundingClientRect().top + document.documentElement.scrollTop;\n window.scrollTo({\n top: offsetTop - 100,\n behavior: \"smooth\"\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n triggerSection: String\n }\n\n initialize() {\n this.boundedTrigger = this.trigger.bind(this);\n this.triggered = false;\n }\n\n connect() {\n window.addEventListener('scroll', this.boundedTrigger);\n // Initially hide the bottom bar\n this.hideBottomBar();\n }\n\n trigger() {\n const scrollPercent = window.scrollY / (document.documentElement.scrollHeight - window.innerHeight);\n\n if (scrollPercent > 0 && this.isSectionInView(this.triggerSectionValue)) {\n this.showBottomBar();\n this.triggered = true;\n } else if (this.triggered && !this.isSectionInView(this.triggerSectionValue)) {\n this.hideBottomBar();\n this.triggered = false;\n }\n }\n\n isSectionInView(sectionId) {\n const section = document.getElementById(sectionId);\n if (!section) return false;\n const sectionRect = section.getBoundingClientRect();\n return sectionRect.top <= window.innerHeight;\n }\n\n showBottomBar() {\n const bottomBar = this.element;\n bottomBar.classList.remove('hidden');\n\n }\n\n hideBottomBar() {\n const bottomBar = this.element;\n bottomBar.classList.add('hidden');\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"button-loader\"\nexport default class extends Controller {\n static targets = [\"button\"];\n\n onClick(event) {\n const loader = document.createElement('i');\n loader.classList.add('ri-loader-4-line', 'animate-spin', ...this.customClasses);\n\n this.buttonTargets.forEach((buttonTarget => {\n if (buttonTarget === event.submitter) {\n buttonTarget.innerHTML = '';\n buttonTarget.appendChild(loader);\n }\n window.setTimeout((() => {\n buttonTarget.disabled = true;\n }).bind(this), 0)\n }).bind(this));\n }\n\n get customClasses() {\n return this.data.get('custom-classes')?.split(' ') || [];\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"collections-card-slider\"\nexport default class extends Controller {\n static targets = [\"track\", \"indicator\", \"rank\", \"trackTitle\"]\n\n indicatorOnClick(event) {\n let clickedIndex = event.target.getAttribute(\"data-index\");\n this.trackTarget.style = `transform: translateX(-${100 * clickedIndex}%);`;\n this.trackTitleTarget.style = `transform: translateX(-${100 * clickedIndex}%);`;\n\n Array.from(this.indicatorTarget.children).forEach(child => {\n if (child.getAttribute(\"data-index\") == clickedIndex) {\n child.classList.replace(\"bg-gray-400\", \"bg-white\");\n } else {\n child.classList.replace(\"bg-white\", \"bg-gray-400\");\n }\n })\n\n this.rankTarget.innerHTML = `${++clickedIndex}`;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { useDispatch } from 'stimulus-use'\n\n// Connects to data-controller=\"comment-form\"\nexport default class extends Controller {\n static targets = ['actionBtn'];\n\n connect() {\n useDispatch(this);\n }\n\n onFocus() {\n this.actionBtnTarget.classList.replace('hidden', 'flex');\n this.dispatch(\"focus\");\n }\n\n onBlur() {\n this.dispatch(\"blur\");\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { gsap } from \"gsap\";\n\n// Connects to data-controller=\"confetti\"\nexport default class extends Controller {\n connect() {\n if (this.showOnLoad) {\n this.animateConfetti();\n }\n }\n\n animateConfetti() {\n gsap.set(\"img\", { xPercent: \"-50%\", yPercent: \"-50%\" })\n\n const total = 50;\n const w = screen.width;\n const h = screen.height + 100;\n\n for (let i = 0; i < total; i++) {\n const confetti = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n confetti.setAttributeNS(null, \"class\", \"dot\");\n confetti.setAttributeNS(null, \"width\", 15);\n confetti.setAttributeNS(null, \"height\", 20);\n this.element.appendChild(confetti);\n gsap.set(confetti, { x: maxRandom(w), y: 0, rotation: maxRandom(180), opacity: 1, scale: maxRandom(0.5) + 0.5, fill: \"hsl(\" + randomInRange(0, 150) + \",50%,50%)\" });\n animate(confetti);\n }\n\n function animate(element) {\n gsap.to(element, { duration: maxRandom(5) + 4, y: h, ease: 'linear', repeat: 1, delay: -5 });\n gsap.to(element, { duration: maxRandom(5) + 1, x: '+=70', repeat: 3, yoyo: true, ease: 'sine.inOut' })\n gsap.to(element, { duration: maxRandom(5) + 1, scaleX: 0.2, rotation: maxRandom(360), repeat: 3, yoyo: true, ease: 'sine.inOut' })\n gsap.to(element, { duration: maxRandom(1) + 0.5, opacity: 0, repeat: 3, yoyo: true, ease: 'sine.inOut' })\n };\n\n function maxRandom(max) {\n return Math.random() * max;\n }\n\n function randomInRange(min, max) {\n return min + Math.floor(Math.random() * (max - min));\n }\n }\n\n get showOnLoad() {\n return this.data.get('showOnLoad');\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"copy-text\"\nexport default class extends Controller {\n\n static targets = ['copyButton', 'copyTooltip'];\n\n static values = {\n content: String,\n beforeToolTipContent: String,\n afterToolTipContent: String\n }\n\n connect() {\n if (this.hasCopyButtonTarget) {\n this.copyButtonTarget.addEventListener('click', () => {\n this.copyTextToClipboard(this.hasContentValue ? this.contentValue : window.location.href);\n });\n }\n }\n\n fallbackCopyTextToClipboard(text) {\n\n var textArea = document.createElement(\"textarea\");\n textArea.value = text;\n\n // Avoid scrolling to bottom\n textArea.style.top = \"0\";\n textArea.style.left = \"0\";\n textArea.style.position = \"fixed\";\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n var successful = document.execCommand('copy');\n var msg = successful ? 'successful' : 'unsuccessful';\n console.log('Fallback: Copying text command was ' + msg);\n } catch (err) {\n console.error('Fallback: Oops, unable to copy', err);\n }\n\n document.body.removeChild(textArea);\n }\n\n copyTextToClipboard(text) {\n if (!navigator.clipboard) {\n fallbackCopyTextToClipboard(text);\n return;\n }\n navigator.clipboard.writeText(text).then(() => {\n if (this.hasCopyTooltipTarget) {\n this.copyTooltipTarget.innerHTML = this.hasAfterToolTipContentValue ? this.afterToolTipContentValue : \"Link copied!\"\n setTimeout(() => {\n this.copyTooltipTarget.innerHTML = this.hasBeforeToolTipContentValue ? this.beforeToolTipContentValue : \"Copy link\"\n this.copyTooltipTarget.classList.add(\"hidden\")\n }, 2000);\n }\n }, (err) => {\n console.error('Async: Could not copy text: ', err);\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"countdown-timer\"\nexport default class extends Controller {\n static targets = ['days', 'hours', 'minutes', 'seconds']\n\n connect() {\n this.interval = setInterval(this.updateTimer.bind(this), 1000);\n }\n\n updateTimer() {\n // Get today's date and time\n const now = new Date().getTime();\n\n // Find the distance between now and the count down date\n const distance = this.endDate - now;\n\n // Time calculations for days, hours, minutes and seconds\n const days = Math.floor(distance / (1000 * 60 * 60 * 24));\n const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n // Display the result in the elements\n this.daysTarget.innerHTML = this.addPaddingZero(days);\n this.hoursTarget.innerHTML = this.addPaddingZero(hours);\n this.minutesTarget.innerHTML = this.addPaddingZero(minutes);\n this.secondsTarget.innerHTML = this.addPaddingZero(seconds);\n\n // If the count down is finished, set everything to 0\n if (distance < 0) {\n clearInterval(this.interval);\n this.daysTarget.innerHTML = '00';\n this.hoursTarget.innerHTML = '00';\n this.minutesTarget.innerHTML = '00';\n this.secondsTarget.innerHTML = '00';\n }\n }\n\n addPaddingZero(number) {\n const numberString = number.toString();\n return this.shouldPadZero && numberString.length == 1 ? '0' + numberString : numberString;\n }\n\n get endDate() {\n return new Date(this.data.get('endDate'));\n }\n\n get shouldPadZero() {\n const padZero = this.data.get('padZero') || 'false';\n return padZero === 'true';\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { gsap } from \"gsap\";\n\n\nexport default class extends Controller {\n\n static targets = ['checkmarkCircle', 'checkmarkRectSmall', 'checkmarkRectLarge'];\n\n connect() {\n gsap.from(this.checkmarkCircleTarget, { duration: 1, scale: 0, rotation: 500, transformOrigin: \"center center\" });\n gsap.from(this.checkmarkRectSmallTarget, { duration: 0.5, scaleX: 0, delay: 0.5 });\n gsap.from(this.checkmarkRectLargeTarget, { duration: 0.5, scaleX: 0, delay: 0.5 });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { gsap } from \"gsap\";\n\n\nexport default class extends Controller {\n\n static targets = ['progressBar', 'progressUserIcon'];\n\n static values = {\n width: Number,\n remOffset: Number\n }\n\n connect() {\n let self = this;\n\n // 1.8 rem -> px offset for author icon above progress bar\n this.remOffset = 1.8 * parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n let widthObj = { w: 0 };\n gsap.to(widthObj, { duration: 0.5, w: this.widthValue, onUpdate: updateWidth });\n\n function updateWidth() {\n self.progressBarTarget.style.width = `${widthObj.w}%`;\n self.progressUserIconTarget.style.left = `${self.progressBarTarget.clientWidth - self.remOffset}px`;\n }\n }\n}","import { Dropdown } from \"tailwindcss-stimulus-components\"\nimport { useClickOutside } from 'stimulus-use';\n\n// Connects to data-controller=\"custom-dropdown\"\nexport default class extends Dropdown {\n static targets = ['arrow'];\n\n connect() {\n super.connect();\n useClickOutside(this)\n }\n\n openValueChanged() {\n super.openValueChanged();\n if (this.hasArrowTarget) {\n this.openValue ? this.arrowTarget.classList.add('rotate-180') : this.arrowTarget.classList.remove('rotate-180');\n }\n }\n\n hide() {\n this.openValue = false\n }\n\n clickOutside() {\n this.hide();\n }\n}","import { Dropdown } from \"tailwindcss-stimulus-components\"\nimport { useDispatch } from \"stimulus-use\";\n\n// Connects to data-controller=\"custom-select\"\nexport default class extends Dropdown {\n static targets = ['selectedValue', 'option'];\n static values = {\n name: String,\n selected: String,\n };\n\n connect() {\n super.connect();\n useDispatch(this);\n this.selectedValueTarget.innerHTML = this.optionTargets[0].innerHTML;\n }\n\n preview(event) {\n this.selectedValueTarget.innerHTML = event.currentTarget.innerHTML;\n }\n\n select(event) {\n this.selectedValue = event.target.dataset.value;\n this.dispatch('change', { [this.nameValue]: event.target.dataset.value });\n }\n\n clear() {\n this.selectedValue = '';\n }\n\n selectedValueChanged() {\n if (this.selectedValue) {\n this.selectedValueTarget.classList.replace('text-gray-500', 'text-flamingo-800');\n this.selectedValueTarget.classList.add('bg-flamingo-100', 'rounded-md', 'text-flamingo-800', 'px-2');\n this.openValue = false;\n } else {\n this.selectedValueTarget.classList.replace('text-flamingo-800', 'text-gray-500');\n this.selectedValueTarget.classList.remove('bg-flamingo-100', 'rounded-md', 'text-flamingo-800', 'px-2');\n this.openValue = true;\n this.selectedValueTarget.innerHTML = this.optionTargets[0].innerHTML;\n }\n }\n}\n","import { Toggle } from \"tailwindcss-stimulus-components\"\n\n// Connects to data-controller=\"custom-toggle\"\nexport default class extends Toggle {\n static targets = ['arrow', 'showMoreText'];\n\n showWithoutPrevent() {\n this.openValue = true;\n }\n\n openValueChanged() {\n super.openValueChanged();\n if (this.hasArrowTarget) {\n this.arrowTarget.classList.toggle('rotate-180');\n }\n if (this.hasShowMoreTextTarget) {\n if (this.openValue) {\n this.showMoreTextTarget.innerText = 'Show less';\n }\n else {\n this.showMoreTextTarget.innerText = 'Show more';\n }\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { useDebounce } from 'stimulus-use';\n\n// Connects to data-controller=\"filters\"\nexport default class extends Controller {\n static targets = [\"form\", \"searchField\", \"filterDropdownArrow\", \"filtersDropdownContent\", \"pageField\", \"pagination\"];\n static debounces = [\"search\"];\n\n connect() {\n useDebounce(this, { wait: 500 });\n this.inputs = this.formTarget.querySelectorAll('input');\n this.inputs.forEach(input => input.addEventListener('input', this.onInputChange.bind(this)));\n }\n\n paginationTargetConnected() {\n this.paginationLinks = this.element.querySelectorAll('nav.pagination a');\n this.paginationLinks.forEach(input => input.addEventListener('click', this.onPageNavigation.bind(this)));\n }\n\n onInputChange() {\n this.pageFieldTarget.value = \"1\";\n Rails.fire(this.formTarget, \"submit\");\n }\n\n onPageNavigation(event) {\n if (this.hasPageFieldTarget) {\n event.preventDefault();\n const href = event.currentTarget.getAttribute(\"href\");\n const pageNum = /page=([0-9]+)/.test(href) ? href.match(/page=([0-9]+)/)[1] : '1';\n this.pageFieldTarget.value = pageNum;\n Rails.fire(this.formTarget, \"submit\");\n }\n }\n\n search(event) {\n this.searchFieldTarget.value = event.target.value;\n this.searchFieldTarget.dispatchEvent(new Event('input'));\n }\n\n clearAll() {\n this.inputs.forEach((input) => {\n if (input.tagName !== \"INPUT\" || input.type === 'hidden') return;\n\n if (input.type === 'text') {\n input.value = '';\n return;\n }\n input.checked = false;\n });\n Rails.fire(this.formTarget, \"submit\");\n }\n\n toggleFilter() {\n this.filtersDropdownContentTarget.classList.toggle(\"hidden\")\n this.filterDropdownArrowTarget.classList.toggle(\"rotate-180\")\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"flash-message\"\nexport default class extends Controller {\n\n connect() {\n const self = this;\n setTimeout(function () {\n self.fadeOut(self.element);\n }, 10000);\n }\n\n close() {\n this.fadeOut(this.element);\n }\n\n fadeOut(el) {\n el.style.opacity = 1;\n (function fade() {\n if ((el.style.opacity -= .1) < 0) {\n el.style.display = \"none\";\n } else {\n requestAnimationFrame(fade);\n }\n })();\n };\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { gsap } from \"gsap\";\nimport { useIntersection } from 'stimulus-use';\n\n// Connects to data-controller=\"form\"\nexport default class extends Controller {\n static targets = [\"input\", \"fileDropArea\", \"startupTopicCheckbox\", \"avatarPreview\", \"strike\", \"moneySavedButton\", \"avatarActions\", \"animatedButton\", \"endDate\"];\n\n startupTopicSelectionLimit = 4;\n\n connect() {\n if (this.optionalProfile) {\n if (this.hasAnimatedButtonTarget) {\n useIntersection(this, { element: this.animatedButtonTarget, rootMargin: '0px 0px -25% 0px' });\n }\n else {\n this.playPaymentButtonAnimation(true);\n }\n }\n\n let fileInput;\n this.inputTargets.forEach(target => {\n if (target.type === 'submit') {\n this.submitTarget = target;\n }\n else if (target.type === 'file') {\n fileInput = target;\n }\n });\n if (fileInput && this.hasFileDropAreaTarget) {\n const activateDropArea = () => {\n this.fileDropAreaTarget.classList.add('is-active');\n };\n const deActivateDropArea = () => {\n this.fileDropAreaTarget.classList.remove('is-active');\n };\n\n fileInput.addEventListener('dragenter', activateDropArea);\n fileInput.addEventListener('focus', activateDropArea);\n fileInput.addEventListener('click', activateDropArea);\n\n fileInput.addEventListener('dragleave', deActivateDropArea);\n fileInput.addEventListener('blur', deActivateDropArea);\n fileInput.addEventListener('drop', deActivateDropArea);\n }\n if (this.submitTarget && !this.optionalProfile) {\n this.submitTarget.disabled = true;\n }\n }\n\n appear() {\n this.playPaymentButtonAnimation(true);\n }\n\n disconnect() {\n this.paymentButtonAnimationTimeline && this.paymentButtonAnimationTimeline.kill();\n }\n\n onChange() {\n let isValid = true, originalPassword;\n for (let i = 0; i < this.inputTargets.length; i++) {\n const target = this.inputTargets[i];\n if (target.type === 'email' && !this.isEmailValid(target.value)) {\n isValid = false;\n break;\n }\n else if (target.type === 'password') {\n if (target.required && !this.isPasswordValid(target.value)) {\n isValid = false;\n break;\n }\n else if (!originalPassword) {\n originalPassword = target.value;\n }\n else if (target.required && originalPassword !== target.value) {\n isValid = false;\n }\n }\n else if (target.required && !target.value) {\n isValid = false;\n break;\n }\n }\n if (this.submitTarget) {\n this.submitTarget.disabled = !isValid;\n }\n }\n\n onProfileChange() {\n let isValid = false;\n for (let i = 0; i < this.inputTargets.length; i++) {\n const target = this.inputTargets[i];\n if (target.type === 'text' && this.isUrlValid(target.value)) {\n isValid = true;\n break;\n }\n else if (target.type === 'file') {\n isValid = target.files.length > 0;\n }\n }\n if (this.submitTarget) {\n this.submitTarget.disabled = !isValid;\n }\n if (!this.optionalProfile) this.playPaymentButtonAnimation(isValid);\n }\n\n playPaymentButtonAnimation(isValid) {\n if (this.hasStrikeTarget && this.hasMoneySavedButtonTarget) {\n if (!isValid) {\n return this.paymentButtonAnimationTimeline && this.paymentButtonAnimationTimeline.timeScale(3).reverse();\n }\n if (this.paymentButtonAnimationTimeline) {\n return this.paymentButtonAnimationTimeline.timeScale(1).play();\n }\n this.paymentButtonAnimationTimeline = gsap.timeline();\n this.paymentButtonAnimationTimeline.to(this.strikeTarget, {\n scaleX: 1,\n duration: 0.7,\n transformOrigin: 'center left'\n });\n this.paymentButtonAnimationTimeline.to(this.moneySavedButtonTarget, {\n opacity: 1,\n visibility: 'visible',\n duration: 0.75,\n });\n }\n }\n\n onFileUpload(event) {\n const filePath = event.target.value;\n\n // Allowing file type\n const allowedExtensions = /(\\.pdf)$/i;\n if (!filePath) {\n document.querySelector('.file-upload-content').classList.remove('hidden');\n const fileDetails = document.querySelector('.file-details');\n fileDetails.classList.add('hidden');\n fileDetails.classList.remove('flex');\n return false;\n }\n if (!allowedExtensions.exec(filePath)) {\n alert('Only PDF files are supported.');\n event.target.value = '';\n return false;\n }\n document.querySelector('.file-upload-content').classList.add('hidden');\n const fileDetails = document.querySelector('.file-details');\n fileDetails.classList.remove('hidden');\n fileDetails.classList.add('flex');\n document.querySelector('.file-name').innerText = event.target.value.split('\\\\').pop();\n }\n\n isPasswordValid(password) {\n return !!password && password.length >= 8\n }\n\n isEmailValid(email) {\n return !!email && /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w*)+$/.test(email);\n }\n\n isUrlValid(url) {\n if (this.optionalProfile && url.trim() === '') return true;\n\n try {\n if (!URL || !window.URL) {\n return true;\n }\n const urlData = new window.URL(url);\n return true;\n }\n catch (err) {\n return false;\n }\n\n }\n\n togglePasswordVisibility(event) {\n if (event.target.previousElementSibling.type === \"password\") {\n event.target.previousElementSibling.type = \"text\";\n event.target.src = event.target.getAttribute('data-hide-icon');\n }\n else {\n event.target.previousElementSibling.type = \"password\";\n event.target.src = event.target.getAttribute('data-show-icon');\n }\n }\n\n limitCheckBoxSelection(event) {\n let count = 0;\n this.startupTopicCheckboxTargets.forEach(checkbox => {\n if (checkbox.checked) {\n count++;\n }\n });\n if (count > this.startupTopicSelectionLimit) {\n event.target.checked = false;\n }\n }\n\n onAvatarChange(event) {\n if (this.hasAvatarPreviewTarget) {\n const reader = new FileReader();\n reader.readAsDataURL(event.target.files[0]);\n const preview = this.avatarPreviewTarget;\n reader.onload = () => {\n preview.src = reader.result;\n preview.classList.remove('hidden');\n };\n }\n if (this.hasAvatarActionsTarget) {\n if (event.target.files.length > 0) {\n this.avatarActionsTarget.classList.remove('hidden');\n } else {\n this.avatarActionsTarget.classList.add('hidden');\n }\n }\n }\n\n disableEndDate(e) {\n if (e.target.checked) {\n this.endDateTargets.forEach((endDateTarget) => {\n endDateTarget.disabled = true;\n });\n } else {\n this.endDateTargets.forEach((endDateTarget) => {\n endDateTarget.disabled = false;\n });\n }\n }\n\n get optionalProfile() {\n return this.data.get('optionalProfile') === 'true';\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"gfs-result\"\nexport default class extends Controller {\n // connect() {\n // history.pushState(null, '', `/search/${this.slug}`)\n // }\n\n // disconnect() {\n // history.back();\n // }\n\n get slug() {\n return this.data.get('slug') || '';\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport fetchJsonp from 'fetch-jsonp';\n\n// Connects to data-controller=\"gists\"\nexport default class extends Controller {\n\n connect() {\n fetchJsonp(this.url)\n .then(res => res.json())\n .then(res => {\n this.element.insertAdjacentHTML('beforeend', ``);\n this.element.insertAdjacentHTML('beforeend', res.div);\n })\n .catch(console.log);\n }\n\n get url() {\n return this.data.get('url') || '';\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"hamburger-menu\"\nexport default class extends Controller {\n static targets = ['icon', 'menu'];\n\n toggle() {\n this.iconTarget.children[0].classList.toggle('-translate-y-1.5');\n this.iconTarget.children[0].classList.toggle('rotate-45');\n this.iconTarget.children[1].classList.toggle('opacity-0');\n this.iconTarget.children[2].classList.toggle('translate-y-1.5');\n this.iconTarget.children[2].classList.toggle('-rotate-45');\n this.menuTarget.classList.toggle('hidden');\n this.menuTarget.style.height = `calc(100vh - ${this.menuTarget.getBoundingClientRect().top}px)`;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport wrapRange from 'wrap-range-text';\n\n// Connects to data-controller=\"highlights\"\n\nfunction parents(node) {\n let nodes = [node]\n for (; node; node = node.parentNode) {\n nodes.unshift(node)\n }\n return nodes\n};\n\nfunction commonAncestor(node1, node2) {\n let parents1 = parents(node1)\n let parents2 = parents(node2)\n\n if (parents1[0] != parents2[0]) return node1;\n\n for (let i = 0; i < parents1.length; i++) {\n if (parents1[i] != parents2[i]) return parents1[i - 1]\n }\n}\n\n// to check if the element contains text or not. Elements like img, ul, ol will return true.\nfunction isTextElementEmpty(node) {\n const childNodes = node.childNodes;\n if (childNodes.length == 0)\n return true;\n if (childNodes[0].textContent == null || childNodes[0].textContent.trim() == '')\n return true;\n return false;\n}\n\nfunction trimPreview(commonAncestorContainerElement, position, keepPrevSibling, keepNextSibling, originalPreview) {\n\n try {\n let startElement = commonAncestorContainerElement.querySelector(`[data-node-id=\"${position.startContainerId}\"]`)\n let endElement = commonAncestorContainerElement.querySelector(`[data-node-id=\"${position.endContainerId}\"]`)\n\n let prevSibling = startElement.previousElementSibling\n\n if (prevSibling) {\n\n if (isTextElementEmpty(prevSibling)) {\n prevSibling = startElement;\n }\n\n while (prevSibling.previousElementSibling) {\n prevSibling.previousElementSibling.remove();\n }\n\n if (!keepPrevSibling && startElement.previousElementSibling != null) {\n startElement.previousElementSibling.remove();\n }\n }\n\n let startParentElement = startElement.parentElement\n\n while (startParentElement) {\n if (startParentElement.dataset) {\n if (startParentElement.dataset.nodeId == commonAncestorContainerElement.dataset.nodeId) {\n break;\n }\n while (startParentElement.previousElementSibling) {\n startParentElement.previousElementSibling.remove()\n }\n }\n startParentElement = startParentElement.parentElement\n }\n\n let nextSibling = endElement.nextElementSibling\n\n if (nextSibling) {\n\n if (isTextElementEmpty(nextSibling)) {\n nextSibling = endElement;\n }\n\n while (nextSibling.nextElementSibling) {\n nextSibling.nextElementSibling.remove()\n }\n\n if (!keepNextSibling && endElement.nextElementSibling != null) {\n endElement.nextElementSibling.remove();\n }\n }\n\n let endParentElement = endElement.parentElement\n\n while (endParentElement) {\n if (endParentElement.dataset) {\n if (endParentElement.dataset.nodeId == commonAncestorContainerElement.dataset.nodeId) {\n break;\n }\n while (endParentElement.nextElementSibling) {\n endParentElement.nextElementSibling.remove()\n }\n }\n endParentElement = endParentElement.parentElement\n }\n } catch (e) {\n return originalPreview;\n }\n return commonAncestorContainerElement;\n}\n\nfunction getValidNode(node) {\n // get parent of \"#text\" node or \"mark\" node\n if (node.nodeType === Node.TEXT_NODE || node.nodeName === 'MARK') {\n return getValidNode(node.parentNode);\n }\n\n return node;\n}\nexport default class extends Controller {\n static targets = ['menu', 'addHighlightBtn', 'deleteHighlightBtn', 'featuredTooltipText'];\n static values = {\n highlightsUrl: String,\n }\n\n connect() {\n this.topHighlights = {};\n this.userHighlights = {};\n this.lastSelectionValue = '';\n this.csrfToken = document.querySelector(\"[name='csrf-token']\").content;\n this.headers = new Headers();\n this.headers.append('X-CSRF-Token', this.csrfToken);\n this.headers.append('Accept', 'application/json');\n\n if (location && location.search) {\n const searchParams = new URLSearchParams(location.search);\n const sectionId = searchParams.get('h_id');\n const targetElement = sectionId ? document.querySelector(`[data-node-id=\"${sectionId}\"]`) : null;\n if (targetElement) {\n window.scrollTo({\n top: targetElement.offsetTop - 64,\n behavior: \"smooth\"\n });\n }\n }\n\n\n if (this.hasMenuTarget) {\n this.element.addEventListener('mouseup', this.onSelect);\n document.addEventListener('keyup', this.onKeyUp);\n // Add `selectionchange` event listner on touch devices\n if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) {\n document.addEventListener('selectionchange', this.onSelect);\n }\n // to show menu on hover for featured highlight\n this.menuTarget.addEventListener('mouseenter', () => window.menuHover = true);\n this.menuTarget.addEventListener('mouseleave', () => {\n window.menuHover = false;\n setTimeout(() => this.hideMenu(), 250);\n });\n }\n\n // fetch and display highlights for current user\n fetch(this.highlightsUrlValue, { headers: this.headers })\n .then(response => response.json())\n .then((response => {\n if (response && response.user_highlights) {\n response.user_highlights.forEach(highlight => {\n try {\n this.displayHighlight(highlight);\n }\n catch (err) {\n console.log('Error occured while displaying highlight', highlight);\n }\n });\n }\n if (response && response.top_highlights) {\n response.top_highlights.forEach(highlight => {\n try {\n this.displayHighlight(highlight, true);\n }\n catch (err) {\n console.log('Error occured while displaying highlight', highlight);\n }\n });\n }\n if (response && response.id) {\n this.displayHighlight(response);\n }\n }).bind(this));\n }\n\n disconnect() {\n this.element.removeEventListener('mouseup', this.onSelect);\n document.removeEventListener('selectionchange', this.onSelect);\n document.removeEventListener('keyup', this.onKeyUp);\n }\n\n onKeyUp = event => {\n // trigger selection when text is selected using Shift key\n const key = event.code || event.keyCode;\n if (key == 16 || key.toLowerCase().includes('shift')) this.onSelect(event);\n }\n\n onSelect = event => {\n const selection = window.getSelection();\n if (event.type === 'selectionchange' && this.lastSelectionValue === selection.toString().trim()) {\n return;\n }\n this.lastSelectionValue = selection.toString().trim();\n if (selection.toString().trim() === '' || selection.rangeCount !== 1) {\n this.menuTarget.classList.add('invisible', 'opacity-0');\n return;\n }\n\n const range = selection.getRangeAt(0);\n if (!this.isValidRange(range)) {\n this.menuTarget.classList.add('invisible', 'opacity-0');\n return;\n }\n\n this.showMenu(range);\n }\n\n isValidRange(range) {\n const commonAncestorContainerElement = getValidNode(range.commonAncestorContainer);\n const startContainerElement = getValidNode(range.startContainer);\n const endContainerElement = getValidNode(range.endContainer);\n let overlapsOtherHighlights = false;\n document.querySelectorAll('mark').forEach(node => {\n if (range.intersectsNode(node)) {\n overlapsOtherHighlights = true;\n }\n })\n return this.element.contains(range.commonAncestorContainer) &&\n !!commonAncestorContainerElement.dataset.nodeId &&\n !!startContainerElement.dataset.nodeId &&\n !!endContainerElement.dataset.nodeId &&\n range.startContainer.nodeType === Node.TEXT_NODE &&\n range.endContainer.nodeType === Node.TEXT_NODE &&\n !overlapsOtherHighlights &&\n !range.collapsed\n }\n\n onHighlightClick(event) {\n this.showMenu(event.currentTarget);\n }\n\n showMenu = (highlightElement) => {\n if (this.hasDeleteHighlightBtnTarget && this.hasAddHighlightBtnTarget) {\n if (highlightElement.dataset && highlightElement.dataset.highlightId && highlightElement.classList.contains('highlight')) {\n this.addHighlightBtnTarget.classList.add('hidden');\n this.deleteHighlightBtnTarget.classList.remove('hidden');\n this.deleteHighlightBtnTarget.setAttribute('data-highlights-url-param', this.userHighlights[highlightElement.dataset.highlightId].url);\n this.currentHighlightText = this.userHighlights[highlightElement.dataset.highlightId].text_content;\n }\n else {\n this.addHighlightBtnTarget.classList.remove('hidden');\n this.deleteHighlightBtnTarget.classList.add('hidden');\n }\n }\n if (this.hasFeaturedTooltipTextTarget) {\n if (highlightElement.dataset && highlightElement.dataset.count && highlightElement.classList.contains('top-highlight')) {\n this.featuredTooltipTextTarget.innerText = `Highlighted ${highlightElement.dataset.count} times`\n this.featuredTooltipTextTarget.classList.remove('hidden');\n this.currentHighlightText = this.topHighlights[highlightElement.dataset.highlightId].text_content;\n if (this.hasAddHighlightBtnTarget) {\n this.addHighlightBtnTarget.setAttribute('data-highlights-id-param', highlightElement.dataset.highlightId);\n this.addHighlightBtnTarget.setAttribute('data-action', 'click->highlights#onFeatureHighlight');\n }\n }\n else {\n this.featuredTooltipTextTarget.classList.add('hidden');\n if (this.hasAddHighlightBtnTarget) {\n this.addHighlightBtnTarget.setAttribute('data-action', 'click->highlights#onHighlight');\n }\n }\n }\n const { x, y, width } = highlightElement.getBoundingClientRect();\n const menuOffset = (document.querySelector('header.sticky') ? 64 : 0) + 55;\n this.menuTarget.style.left = (x + width / 2) + 'px';\n this.menuTarget.style.top = (y + window.scrollY - menuOffset) + 'px';\n this.menuTarget.classList.remove('invisible', 'opacity-0');\n }\n\n hideMenu = () => {\n if (!window.menuHover) {\n this.menuTarget.classList.add('invisible', 'opacity-0');\n }\n }\n\n shareOnTwitter() {\n let selectedText = window.getSelection().toString().trim();\n if (selectedText === '') {\n selectedText = this.currentHighlightText;\n }\n const shareText = `${selectedText}\\n\\n- buildd\\n\\nRead full article:\\n`\n const shareURL = `https://twitter.com/intent/tweet?url=${encodeURIComponent(window.location.href)}&text=${encodeURIComponent(shareText)}`;\n window.open(shareURL, '_blank');\n }\n\n onHighlight() {\n const selection = window.getSelection();\n const range = selection.getRangeAt(0);\n let keepPrevSibling = false;\n let keepNextSibling = false;\n\n if (range.collapsed || selection.rangeCount !== 1) return;\n\n this.menuTarget.classList.add('invisible', 'opacity-0');\n\n const { commonAncestorContainer, startContainer, endContainer, startOffset, endOffset } = range;\n const startContainerElement = getValidNode(startContainer);\n const endContainerElement = getValidNode(endContainer);\n const absoluteStartOffset = this.calculateAbsoluteOffset(startContainerElement, startContainer, startOffset);\n const absoluteEndOffset = this.calculateAbsoluteOffset(endContainerElement, endContainer, endOffset);\n\n const originalCommonAncestorContainerElement = getValidNode(commonAncestorContainer);\n let commonAncestorContainerElement = originalCommonAncestorContainerElement\n let finalPreview = commonAncestorContainerElement.outerHTML\n\n if (absoluteStartOffset >= 0 && absoluteStartOffset <= 40) {\n if (commonAncestorContainerElement == startContainerElement) {\n commonAncestorContainerElement = commonAncestorContainerElement.parentNode;\n }\n keepPrevSibling = true;\n }\n\n const cleanText = endContainerElement.outerHTML.replace(/<\\/?[^>]+(>|$)/g, \"\");\n const endOffsetLengthDiff = absoluteEndOffset - cleanText.length;\n\n if (endOffsetLengthDiff >= 0 && endOffsetLengthDiff <= 40) {\n if (commonAncestorContainerElement != endContainerElement.parentNode) {\n commonAncestorContainerElement = getValidNode(commonAncestor(commonAncestorContainerElement, endContainerElement.parentNode))\n }\n keepNextSibling = true;\n }\n\n const position = {\n commonAncestorContainerId: originalCommonAncestorContainerElement.dataset.nodeId,\n startContainerId: startContainerElement.dataset.nodeId,\n endContainerId: endContainerElement.dataset.nodeId,\n startOffset: absoluteStartOffset,\n endOffset: absoluteEndOffset,\n }\n\n if (commonAncestorContainerElement != startContainerElement && commonAncestorContainerElement != endContainerElement) {\n finalPreview = trimPreview(commonAncestorContainerElement.cloneNode(true), position, keepPrevSibling, keepNextSibling, originalCommonAncestorContainerElement).outerHTML;\n }\n\n this.postHighlight(range, selection.toString(), finalPreview, position);\n }\n\n calculateAbsoluteOffset(parent, element, offset) {\n if (parent === element) {\n return offset;\n }\n const indexOfElement = Array.from(parent.childNodes).indexOf(element);\n if (indexOfElement === 0) {\n return offset;\n }\n\n const childNodes = this.getTextChildNodes(parent);\n const newIndexOfElement = childNodes.indexOf(element);\n let newOffset = 0;\n for (let index = 0; index < newIndexOfElement; index++) {\n const child = childNodes[index];\n if (child.nodeType === Node.TEXT_NODE) {\n newOffset += child.length;\n }\n }\n return newOffset + offset;\n }\n\n getTextChildNodes(node) {\n const textNodes = [];\n node.childNodes.forEach(child => {\n if (child.nodeType !== Node.TEXT_NODE) {\n textNodes.push(...this.getTextChildNodes(child));\n }\n else {\n textNodes.push(child);\n }\n });\n return textNodes;\n }\n\n onFeatureHighlight({ params: { id } }) {\n this.topHighlights[id].wrap.unwrap();\n const range = this.getRangeFromPosition(this.topHighlights[id].position)\n this.postHighlight(range, this.topHighlights[id].text_content, this.topHighlights[id].preview, this.topHighlights[id].position);\n }\n\n postHighlight(range, selectedText, preview, position) {\n const formData = new FormData();\n formData.append('authenticity_token', this.csrfToken)\n formData.append('highlight[text_content]', selectedText);\n formData.append('highlight[preview]', preview)\n formData.append('highlight[position]', JSON.stringify(position))\n\n fetch(this.highlightsUrlValue, {\n method: 'POST',\n body: formData,\n headers: this.headers\n })\n .then(res => res.json())\n .then((highlight => {\n if (highlight.id) {\n this.wrapHighlightText(highlight, range);\n }\n }).bind(this))\n }\n\n deleteHighlight({ params: { url } }) {\n this.menuTarget.classList.add('invisible', 'opacity-0');\n fetch(url, {\n method: 'DELETE',\n headers: this.headers\n })\n .then(res => res.json())\n .then((highlight => {\n if (this.userHighlights[highlight.id] && this.userHighlights[highlight.id].wrap) {\n this.userHighlights[highlight.id].wrap.unwrap();\n }\n }).bind(this))\n }\n\n displayHighlight = (highlight, featured = false) => {\n const newRange = this.getRangeFromPosition(highlight.position);\n this.wrapHighlightText(highlight, newRange, featured);\n }\n\n getRangeFromPosition(position) {\n const startElement = this.getNodeById(position.startContainerId);\n const endElement = this.getNodeById(position.endContainerId);\n const newRange = new Range();\n const [startElementChildIndex, relativeStartOffset] = this.getChildIndexAndRelativeOffset(startElement, position.startOffset);\n newRange.setStart(startElement.childNodes[startElementChildIndex], relativeStartOffset);\n const [endElementChildIndex, relativeEndOffset] = this.getChildIndexAndRelativeOffset(endElement, position.endOffset);\n newRange.setEnd(endElement.childNodes[endElementChildIndex], relativeEndOffset);\n return newRange;\n }\n\n getChildIndexAndRelativeOffset(element, absoluteOffset) {\n const children = this.getTextChildNodes(element);\n for (let index = 0; index < children.length; index++) {\n let child = children[index];\n if (absoluteOffset <= child.length) {\n const relativeIndex = Array.from(element.childNodes).indexOf(child);\n return [relativeIndex, absoluteOffset];\n }\n absoluteOffset -= child.length;\n }\n }\n\n wrapHighlightText(highlight, range, featured) {\n const wrapper = this.createHighlightWrapper(highlight, featured);\n const wrap = wrapRange(wrapper, range);\n if (featured) {\n this.topHighlights[highlight.id] = { ...highlight, wrap };\n }\n else {\n this.userHighlights[highlight.id] = { ...highlight, wrap };\n }\n wrap.nodes.forEach(node => {\n node.addEventListener('mouseenter', (event) => {\n wrap.nodes.forEach(wrappedNode => wrappedNode.classList.add('active'));\n if (featured) {\n this.showMenu(event.currentTarget);\n window.menuHover = true;\n }\n })\n node.addEventListener('mouseleave', () => {\n wrap.nodes.forEach(wrappedNode => wrappedNode.classList.remove('active'));\n if (featured) {\n window.menuHover = false;\n setTimeout(() => this.hideMenu(), 250);\n\n };\n })\n })\n }\n\n getNodeById(id) {\n return document.querySelector(`[data-node-id=\"${id}\"]`);\n }\n\n createHighlightWrapper(highlight, featured) {\n const wrapper = document.createElement('mark');\n if (featured) {\n wrapper.classList.add('top-highlight');\n wrapper.setAttribute('data-highlight-id', highlight.id);\n wrapper.setAttribute('data-count', highlight.count);\n }\n else {\n wrapper.setAttribute('data-highlights-target', 'highlight');\n wrapper.setAttribute('data-highlight-id', highlight.id);\n if (this.hasMenuTarget) {\n wrapper.setAttribute('data-action', 'click->highlights#onHighlightClick');\n }\n wrapper.classList.add('highlight');\n }\n return wrapper;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport WZoom from 'vanilla-js-wheel-zoom';\n\n// Connects to data-controller=\"image-zoom\"\nexport default class extends Controller {\n connect() {\n this.zoom = WZoom.create(this.element, {\n minScale: 1,\n maxScale: 2,\n disableWheelZoom: true\n });\n }\n\n disconnect() {\n this.zoom.destroy();\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { useDispatch } from \"stimulus-use\";\n\n// Connects to data-controller=\"immersive-page\"\nexport default class extends Controller {\n static targets = ['slide', 'slideContent', 'slideTimelinePoint', 'slideTimelineProgress', 'scrollText', 'lesson', 'backdrop', 'backBtn', 'nextBtn'];\n static values = {\n currentSlideIndex: Number,\n }\n\n initialize() {\n this.onKeyUp = this.onKeyUp.bind(this);\n }\n\n connect() {\n useDispatch(this);\n this.totalSlides = this.slideTargets.length\n this.currentSlideIndexValue = 0;\n\n window.addEventListener('keyup', this.onKeyUp);\n\n gsap.defaults({ overwrite: 'auto', duration: 0.3 });\n\n // stretch out the body height according to however many sections there are. \n gsap.set(\"body\", { height: (this.totalSlides * this.slideTarget.clientHeight) + (this.slideTarget.clientHeight / 2) + \"px\" });\n\n this.slideScrollTriggers = this.slideTargets.map((_, index) => {\n return ScrollTrigger.create({\n start: () => (index - 0.5) * window.innerHeight,\n end: () => (index + 0.5) * window.innerHeight,\n onEnter: () => this.onEnter(index),\n onEnterBack: () => this.onEnterBack(index),\n onLeave: () => this.onLeave(index),\n onLeaveBack: () => this.onLeaveBack(index),\n onUpdate: self => this.onUpdate(self, index),\n });\n });\n }\n\n disconnect() {\n window.removeEventListener('keyup', this.onKeyUp);\n this.slideScrollTriggers.forEach(trigger => trigger.kill());\n }\n\n onEnter(index) {\n this.currentSlideIndexValue = index;\n gsap.to(this.slideTargets[index], { scale: 1, autoAlpha: 1 });\n gsap.to(this.slideContentTargets[index], { x: 0, autoAlpha: 1 })\n if (index > 0 && index < this.totalSlides - 1) {\n const timeline = gsap.timeline();\n if (index > 1) {\n timeline.to(this.slideTimelineProgressTargets[index - 2], { width: '100%', duration: 0.3 });\n }\n timeline.to(this.slideTimelinePointTargets[index - 1], { color: '#8A5CF6' });\n }\n }\n\n onLeave(index) {\n if (index !== this.totalSlides - 1) {\n gsap.to(this.slideTargets[index], { scale: 1.25, autoAlpha: 0 })\n gsap.to(this.slideContentTargets[index], { y: 100, autoAlpha: 0 })\n }\n if (index === 0) {\n gsap.to(this.scrollTextTarget, { y: 10, autoAlpha: 0 })\n }\n this.hideLesson(index)\n }\n\n onEnterBack(index) {\n this.currentSlideIndexValue = index;\n gsap.to(this.slideTargets[index], { scale: 1, autoAlpha: 1 });\n gsap.to(this.slideContentTargets[index], { y: 0, autoAlpha: 1 })\n if (index === 0) {\n gsap.to(this.scrollTextTarget, { y: 0, autoAlpha: 1 })\n }\n this.showLesson(index);\n }\n\n onLeaveBack(index) {\n gsap.to(this.slideTargets[index], { scale: 1.25, autoAlpha: 0 })\n gsap.to(this.slideContentTargets[index], { x: 160, autoAlpha: 0 })\n if (index < this.totalSlides - 1) {\n const timeline = gsap.timeline();\n timeline.to(this.slideTimelinePointTargets[index - 1], { color: '#FFFFFF' });\n if (index > 1) {\n timeline.to(this.slideTimelineProgressTargets[index - 2], { width: '0%', duration: 0.3 });\n }\n }\n this.hideLesson(index)\n }\n\n onUpdate(self, index) {\n const scrollPercent = window.scrollY / (document.documentElement.scrollHeight - window.innerHeight);\n this.dispatch('scroll', { progress: scrollPercent * 100 })\n const progress = self.start < 0 ? self.scroll() / self.end : self.progress;\n if (progress >= 0.5 && self.direction > 0) {\n this.showLesson(index);\n }\n if (progress < 0.5) {\n this.hideLesson(index);\n }\n }\n\n onKeyUp(event) {\n event.preventDefault();\n if (event.key === 'ArrowLeft') {\n this.previousSlide();\n }\n else if (event.key === 'ArrowRight') {\n this.nextSlide();\n }\n }\n\n showLesson(index) {\n if (index > 0 && this.slideContentTargets[index].dataset.hasLesson == 'true') {\n gsap.to(this.lessonTargets[index - 1], { x: 0, autoAlpha: 1, display: 'block', duration: 0.5 });\n gsap.to(this.backdropTarget, { autoAlpha: 0.7, visibility: 'visible', duration: 0.5 });\n }\n }\n\n hideLesson(index) {\n if (this.slideContentTargets[index].dataset.hasLesson == 'true') {\n gsap.to(this.lessonTargets[index - 1], { x: '10rem', autoAlpha: 0, display: 'none' });\n gsap.to(this.backdropTarget, { autoAlpha: 0, visibility: 'hidden', duration: 0.5 });\n }\n }\n\n nextSlide() {\n window.scrollTo({\n top: this.currentScroll + this.scrollStep,\n behavior: 'smooth'\n })\n }\n\n previousSlide() {\n window.scrollTo({\n top: this.currentScroll - this.scrollStep,\n behavior: 'smooth'\n })\n }\n\n currentSlideIndexValueChanged() {\n if (this.currentSlideIndexValue === 0) {\n this.backBtnTarget.classList.add('opacity-30');\n this.backBtnTarget.classList.remove('hover:-translate-x-1', 'active:translate-x-0');\n } else if (this.currentSlideIndexValue === this.totalSlides - 1) {\n this.nextBtnTarget.classList.add('opacity-30');\n this.nextBtnTarget.classList.remove('hover:translate-x-1', 'active:translate-x-0');\n }\n else {\n this.backBtnTarget.classList.remove('opacity-30');\n this.nextBtnTarget.classList.remove('opacity-30');\n this.backBtnTarget.classList.add('hover:-translate-x-1', 'active:translate-x-0');\n this.nextBtnTarget.classList.add('hover:translate-x-1', 'active:translate-x-0');\n }\n }\n\n get currentScroll() {\n return this.slideScrollTriggers[this.currentSlideIndexValue].scroll();\n }\n\n get scrollStep() {\n return (this.slideContentTargets[this.currentSlideIndexValue].dataset.hasLesson == 'true' ? window.innerHeight / 2 : window.innerHeight) - 5;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"lessons-mistakes-toggle\"\nexport default class extends Controller {\n static targets = ['checkbox'];\n static values = {\n isMistakeSelected: { type: Boolean, default: false }\n }\n\n toggle() {\n this.isMistakeSelectedValue = !this.isMistakeSelectedValue;\n }\n\n isMistakeSelectedValueChanged() {\n let arr = window.location.href.split('/')\n if (this.isMistakeSelectedValue) {\n this.element.classList.add('dark');\n arr[3] = \"mistakes\";\n window.history.replaceState({}, '', arr.join(\"/\"));\n } else {\n this.element.classList.remove('dark');\n arr[3] = \"lessons\";\n window.history.replaceState({}, '', arr.join(\"/\"));\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { useDispatch } from \"stimulus-use\";\n\n// Connects to data-controller=\"location\"\nexport default class extends Controller {\n static targets = ['countrySelect', 'stateSelect', 'citySelect']\n\n connect() {\n useDispatch(this);\n this.headers = new Headers();\n const csrfToken = document.querySelector(\"[name='csrf-token']\").content;\n this.headers.append('X-CSRF-Token', csrfToken);\n this.headers.append('Accept', 'application/json');\n }\n\n onCountrySelect(event) {\n const searchParams = new URLSearchParams();\n searchParams.set('country', event.detail.value);\n fetch('/api/v1/locations/states?' + searchParams.toString(), { headers: this.headers })\n .then(response => response.json())\n .then(response => {\n const options = this.defaultOption('state');\n options.push(...response.data.results.map(result => ({ text: result.label, value: result.value })))\n this.dispatch('state:data', { data: options });\n\n });\n }\n\n onStateSelect(event) {\n const searchParams = new URLSearchParams();\n searchParams.set('state', event.detail.value);\n fetch('/api/v1/locations/cities?' + searchParams.toString(), { headers: this.headers })\n .then(response => response.json())\n .then(response => {\n const options = this.defaultOption('city');\n options.push(...response.data.results.map(result => ({ text: result, value: result })))\n this.dispatch('city:data', { data: options });\n });\n }\n\n createOptionTags(options) {\n return options.map(option => {\n if (option.label) {\n return new Option(option.label, option.value);\n }\n return new Option(option, option);\n })\n }\n\n clearOptions(selectTarget) {\n while (selectTarget.firstChild) {\n selectTarget.removeChild(selectTarget.lastChild);\n }\n }\n\n defaultOption(type) {\n return [{ text: 'Select ' + type, value: '' }];\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport mixpanel from 'mixpanel-browser';\n\n// Connects to data-controller=\"mixpanel\"\nexport default class extends Controller {\n static targets = ['track'];\n\n trackButtonClick(event) {\n const { eventname, properties } = event.currentTarget.dataset;\n\n if (!eventname) return;\n\n const formattedEventName = `WEB_BUTTON_CLICK_${eventname.toUpperCase().replace(/[\\s\\t]+(?=\\S)/g, '_')}`;\n\n if (properties) {\n mixpanel.track(formattedEventName, JSON.parse(properties));\n } else {\n mixpanel.track(formattedEventName);\n }\n }\n}\n","import { Dropdown } from \"tailwindcss-stimulus-components\"\n\n// Connects to data-controller=\"module-dropdown\"\nexport default class ModuleDropdown extends Dropdown {\n\n static targets = ['moduleDropdownArrow', 'moduleAboutFigures'];\n\n openValueChanged() {\n if (this.data.get('isUnlocked') === 'true') {\n super.openValueChanged();\n if (this.openValue) {\n this.moduleDropdownArrowTarget.classList.remove('-rotate-90')\n this.moduleAboutFiguresTarget.classList.add('md:hidden')\n } else {\n this.moduleDropdownArrowTarget.classList.add('-rotate-90')\n this.moduleAboutFiguresTarget.classList.remove('md:hidden')\n }\n }\n }\n}","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"multiline-input\"\nexport default class extends Controller {\n static values = {\n formId: String\n }\n\n connect() {\n // Submit form when enter is pressed\n this.element.addEventListener('keydown', ((event) => {\n if (event.keyCode == 13 && !event.shiftKey && this.formIdValue) {\n const form = document.getElementById(this.formIdValue)\n if (form) {\n form.dispatchEvent(\n new Event(\"submit\", { cancelable: true, bubbles: true })\n );\n event.preventDefault();\n event.target.blur();\n return false;\n }\n }\n }));\n\n // Increase height to add new line when needed\n this.element.addEventListener('keyup', ((event) => {\n if (event.target.clientHeight !== event.target.scrollHeight) {\n event.target.style.height = (event.target.scrollHeight) + \"px\";\n }\n }));\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\n\n\n// Connects to data-controller=\"nutshell-transition\"\nexport default class extends Controller {\n static targets = [\"nuthshellOverviewBox\", \"blogSection\", \"articleNutshell\", \"nutshellMainBox\"]\n connect() {\n if (this.hasArticleNutshellTarget && this.hasNuthshellOverviewBox && window.screen.availWidth > 1280) {\n ScrollTrigger.create({\n trigger: this.articleNutshellTarget,\n scrub: true,\n end: 'bottom 0%',\n start: 'bottom 0%',\n onEnter: () => {\n this.nuthshellOverviewBoxTarget.classList.remove('hidden')\n const fade = gsap.fromTo(this.nuthshellOverviewBoxTarget, { opacity: 0, scale: 0 }, { duration: 1.5, opacity: 1, scale: 1, ease: \"power3\" })\n const moveup = gsap.to(this.blogSectionTarget, { duration: 1.5, y: \"0%\", ease: \"power3\" })\n },\n onLeaveBack: () => {\n const fade = gsap.fromTo(this.nuthshellOverviewBoxTarget, { opacity: 1, scale: 1 }, { duration: 1.5, opacity: 0, scale: 0, ease: \"power3\" })\n const moveup = gsap.to(this.blogSectionTarget, { duration: 1.5, y: \"-20%\", ease: \"power3\" })\n }\n })\n }\n }\n scrollToNutshell() {\n this.nutshellMainBoxTarget.scrollIntoView({\n behavior: 'smooth'\n });\n }\n\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\n\n// Connects to data-controller=\"overview\"\nexport default class extends Controller {\n\n static targets = ['index', 'mobileIndex', \"mobileProgressBar\", \"scrollUpButton\"];\n static values = {\n singleProgressBar: Boolean\n }\n\n connect() {\n this.removeElementIfNotNeeded();\n const scrollDownBtn = document.querySelector('#scroll-down');\n if (scrollDownBtn) {\n scrollDownBtn.addEventListener('click', () => {\n const articleSection = document.querySelector('.article');\n const offsetTop = articleSection.getBoundingClientRect().top + document.documentElement.scrollTop;\n window.scrollTo({\n top: offsetTop - 64,\n behavior: \"smooth\"\n });\n });\n }\n\n let header = document.querySelector('.header');\n // Uncomment to enable \"Overview\" in mobile view.\n // if (window.innerWidth < 769) {\n // header = document.querySelector('.header-mobile');\n // }\n // else {\n // header = document.querySelector('.header');\n // }\n\n // header transition\n const headerTwin = gsap.to(header, {\n opacity: 1,\n display: 'block'\n });\n ScrollTrigger.create({\n animation: headerTwin,\n trigger: '.hero-banner',\n scrub: true,\n start: 'bottom 50%',\n end: 'bottom 64',\n });\n\n // progress bar transition\n this.topics = document.querySelectorAll('.topic');\n this.triggers = Array.from(this.topics).map(topic =>\n ScrollTrigger.create({\n trigger: topic,\n scrub: true,\n end: () => `bottom ${window.innerHeight / 4}`,\n start: () => `top ${window.innerHeight / 4}`,\n onEnter: this.startProgress.bind(this),\n onEnterBack: this.startProgress.bind(this),\n onLeave: this.endProgress.bind(this),\n onLeaveBack: this.endProgress.bind(this),\n onUpdate: this.updateProgress.bind(this)\n })\n );\n }\n\n startProgress(self) {\n if (this.hasMobileIndexTarget) {\n this.mobileIndexTarget.innerText = self.trigger.firstElementChild.innerText;\n }\n else if (this.hasIndexTarget) {\n const indexTarget = this.indexTargets.find(index =>\n index.getAttribute('data-overview-topic-param') === self.trigger.getAttribute('id')\n );\n if (indexTarget) {\n indexTarget.classList.add('active');\n }\n }\n }\n\n updateProgress(self) {\n if (this.hasMobileProgressBarTarget) {\n this.mobileProgressBarTarget.style.width = `${self.progress * 100}%`;\n }\n else {\n this.indexTargets.forEach(index => {\n if (index.getAttribute('data-overview-topic-param') === self.trigger.getAttribute('id') && self.isActive) {\n index.style.width = `${self.progress * 100}%`;\n }\n });\n }\n }\n\n endProgress(self) {\n if (!this.hasMobileIndexTarget) {\n const indexTarget = this.indexTargets.find(index =>\n index.getAttribute('data-overview-topic-param') === self.trigger.getAttribute('id')\n );\n if (indexTarget) {\n indexTarget.style.width = '0px';\n indexTarget.classList.remove('active');\n }\n }\n }\n\n disconnect() {\n this.triggers.forEach(trigger => trigger.kill());\n }\n\n removeElementIfNotNeeded() {\n // remove mobile element for desktop view\n if (this.hasMobileProgressBarTarget && window.innerWidth > 768) {\n this.element.remove();\n }\n // remove desktop element for mobile view\n else if (!this.hasMobileProgressBarTarget && window.innerWidth < 768) {\n this.element.remove();\n }\n }\n\n goto({ params: { topic } }) {\n const topicSection = document.querySelector(`#${topic}`)\n const offsetTop = topicSection.getBoundingClientRect().top + document.documentElement.scrollTop;\n window.scrollTo({\n top: (offsetTop - window.innerHeight / 4) + 2,\n behavior: \"smooth\"\n });\n }\n}","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"pending-requests\"\nexport default class extends Controller {\n static targets = ['indicator']\n static values = {\n url: String,\n }\n\n connect() {\n fetch(this.urlValue).then(response => response.json()).then(this.handleReponse.bind(this)).catch(console.log);\n }\n\n handleReponse(response) {\n if (response.data.total > 0) {\n this.indicatorTarget.classList.remove('hidden');\n this.indicatorTarget.innerText = response.data.total;\n }\n }\n}\n","import ScrollTrigger from \"./scroll_trigger_controller\";\nimport Rails from '@rails/ujs';\n\n// Connects to data-controller=\"read-trigger\"\nexport default class extends ScrollTrigger {\n action() {\n Rails.fire(this.element, 'submit');\n this.element.remove();\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"scrape\"\nexport default class extends Controller {\n\n static targets = [\"input\", \"loader\", \"result\", \"resultcontent\", \"textloader\", \"textloadercontent\"];\n\n phrases = [\n \"Scraping the data....\",\n \"Chunking the scraped data....\",\n \"Vectorizing the chunks....\",\n \"Uploading vectors to Pinecone....\"\n ];\n\n connect() {\n this.csrfToken = document.querySelector(\"[name='csrf-token']\").content;\n }\n\n async scrape() {\n const url = this.inputTarget.value;\n\n // Display loader while waiting for response\n this.showLoader();\n this.fadeText();\n\n try {\n const response = await fetch(\"/search_gpt/scrape\", {\n method: \"POST\",\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': this.csrfToken,\n },\n body: JSON.stringify({ url: url }),\n });\n\n const data = await response.json();\n this.setResult(data);\n } catch (error) {\n console.error(\"An error occurred:\", error);\n this.setResult(\"Error fetching data.\");\n } finally {\n // Hide loader once response is received\n this.hideLoader();\n }\n }\n\n showLoader() {\n this.loaderTarget.classList.remove(\"hidden\");\n this.resultTarget.classList.add(\"hidden\");\n }\n\n fadeText() {\n this.textloaderTarget.classList.remove(\"hidden\");\n let currentPhraseIndex = 0;\n let firstTime = true;\n\n const fadeLoop = () => {\n if (currentPhraseIndex >= this.phrases.length) {\n this.textloaderTarget.classList.add(\"hidden\"); // Hide the text loader once fade text is completed\n return;\n }\n\n const fadeDuration = firstTime ? 1000 : 1750; // No fade-in duration for the first time\n this.textloadercontentTarget.textContent = this.phrases[currentPhraseIndex];\n this.textloadercontentTarget.classList.add(\"fade-in\");\n\n setTimeout(() => {\n this.textloadercontentTarget.classList.remove(\"fade-in\");\n this.textloadercontentTarget.classList.add(\"fade-out\");\n currentPhraseIndex++;\n\n setTimeout(() => {\n this.textloadercontentTarget.classList.remove(\"fade-out\");\n fadeLoop();\n }, 500); // Fade out duration\n }, fadeDuration); // Fade in duration\n\n firstTime = false;\n };\n\n fadeLoop();\n }\n\n hideLoader() {\n this.loaderTarget.classList.add(\"hidden\");\n }\n\n setResult(result) {\n this.resultTarget.classList.remove(\"hidden\");\n this.resultcontentTarget.innerHTML = result[\"data\"][\"article_content\"];\n }\n\n}","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"scroll-slider\"\nexport default class extends Controller {\n static targets = [\"track\", \"back\", \"next\"];\n\n static values = {\n slide: Number\n }\n\n disableClasses = ['cursor-not-allowed', 'opacity-30'];\n\n connect() {\n if (this.hasNextTarget && this.hasBackTarget) {\n if (this.trackTarget.scrollWidth <= this.trackTarget.clientWidth) {\n this.nextTarget.classList.remove('md:flex');\n this.backTarget.classList.remove('md:flex');\n }\n else {\n this.disableTarget(this.backTarget);\n }\n this.trackTarget.addEventListener('scroll', this.updateScrollButtons.bind(this));\n }\n }\n\n disconnect() {\n if (this.hasNextTarget && this.hasBackTarget) {\n this.trackTarget.removeEventListener('scroll', this.updateScrollButtons.bind(this));\n }\n }\n\n scroll({ params: { direction } }) {\n this.trackTarget.scrollTo({\n left: direction === 'back' ?\n this.trackTarget.scrollLeft - this.slideValue :\n this.trackTarget.scrollLeft + this.slideValue,\n behavior: \"smooth\"\n });\n }\n\n updateScrollButtons() {\n if (this.trackTarget.scrollLeft === 0) {\n this.disableTarget(this.backTarget);\n }\n else {\n this.enableTarget(this.backTarget);\n }\n if (this.trackTarget.scrollLeft === this.trackTarget.scrollWidth - this.trackTarget.clientWidth) {\n this.disableTarget(this.nextTarget);\n }\n else {\n this.enableTarget(this.nextTarget);\n }\n }\n\n disableTarget(target) {\n target.disabled = true;\n target.classList.add(...this.disableClasses);\n }\n\n enableTarget(target) {\n target.disabled = false;\n target.classList.remove(...this.disableClasses);\n }\n\n autoScroll(event) {\n const currentTabIndex = event.detail.tabIndex;\n this.trackTarget.scrollTo({\n left: this.slideValue * currentTabIndex,\n behavior: \"smooth\"\n });\n }\n\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"scroll-to\"\nexport default class extends Controller {\n static targets = [\"container\"];\n static values = {\n offset: Number\n }\n\n connect() {\n if (location && location.search) {\n const searchParams = new URLSearchParams(location.search);\n const sectionId = searchParams.get('sec_id');\n const targetElement = sectionId ? document.querySelector(`#${sectionId}`) : null;\n if (targetElement) {\n window.scrollTo({\n top: targetElement.offsetTop - this.offsetValue,\n behavior: \"smooth\"\n });\n }\n }\n }\n\n scroll(event) {\n event.preventDefault();\n const { id, offset } = event.params;\n let currentContainer = id ? document.querySelector(id) : this.containerTarget;\n window.scrollTo({\n top: currentContainer.offsetTop - (offset || this.offsetValue || 0),\n behavior: \"smooth\"\n })\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"scroll-to-top\"\nexport default class extends Controller {\n connect() {\n this.lastscrollY = 0;\n window.addEventListener('scroll', this.onScroll.bind(this));\n }\n\n disconnect() {\n window.removeEventListener('scroll', this.onScroll.bind(this));\n }\n\n onScroll(event) {\n const scrollY = window.pageYOffset || document.documentElement.scrollTop;\n if (this.lastscrollY > scrollY && this.getScrollPercent() > 50) {\n this.element.classList.add(\"md:flex\");\n }\n else {\n this.element.classList.remove(\"md:flex\");\n }\n this.lastscrollY = scrollY <= 0 ? 0 : scrollY;;\n }\n\n getScrollPercent() {\n let elementHeight = document.documentElement,\n body = document.body,\n scrollTop = 'scrollTop',\n scrollHeight = 'scrollHeight';\n return (elementHeight[scrollTop] || body[scrollTop]) / ((elementHeight[scrollHeight] || body[scrollHeight]) - elementHeight.clientHeight) * 100;\n }\n\n scrollToTop() {\n this.element.classList.add(\"hidden\")\n window.scrollTo({\n top: 0,\n behavior: \"smooth\"\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { post } from '@rails/request.js';\nimport { useDispatch } from \"stimulus-use\";\n\n// Connects to data-controller=\"search-box\"\nexport default class extends Controller {\n static targets = ['placeholder', 'intentTypeSection', 'topicSection', 'searchSection', 'resultsSection', 'intentTypeInput', 'topicInput', 'searchInput'];\n static values = {\n intentType: String,\n topic: String,\n searchQuery: String,\n searchStarted: Boolean,\n };\n\n connect() {\n this.searchStarteValue = false;\n useDispatch(this);\n }\n\n onSelectInput(event) {\n if (event.detail.topic) {\n this.topicValue = event.detail.topic;\n } else if (event.detail.intentType) {\n this.intentTypeValue = event.detail.intentType;\n }\n }\n\n clear(event) {\n event.preventDefault();\n this.topicValue = this.intentTypeValue = '';\n this.searchInputTarget.value = '';\n this.resultsSectionTarget.innerHTML = null;\n this.searchStartedValue = false;\n this.dispatch('clear');\n }\n\n topicValueChanged() {\n this.topicInputTarget.value = this.topicValue;\n if (this.topicValue) {\n this.searchSectionTargets.forEach(target => target.classList.remove('hidden'));\n this.searchInputTarget.focus();\n } else {\n this.searchSectionTargets.forEach(target => target.classList.add('hidden'));\n }\n }\n\n onSearchStart() {\n this.searchStartedValue = true;\n }\n\n searchStartedValueChanged() {\n if (this.searchStartedValue) {\n this.placeholderTarget.classList.add('hidden');\n this.intentTypeSectionTarget.classList.remove('hidden');\n } else {\n this.placeholderTarget.classList.remove('hidden');\n this.intentTypeSectionTarget.classList.add('hidden');\n\n }\n }\n\n async intentTypeValueChanged() {\n this.intentTypeInputTarget.value = this.intentTypeValue;\n if (this.intentTypeValue) {\n await post('/search/topics', { body: { intent_type: this.intentTypeValue }, responseKind: 'turbo-stream' });\n } else {\n this.topicSectionTarget.innerHTML = null;\n }\n }\n}\n","import { Tabs } from \"tailwindcss-stimulus-components\"\n\n// Connects to data-controller=\"search-tab\"\nexport default class extends Tabs {\n static targets = ['blinker'];\n\n change(event) {\n super.change(event);\n // index is 1, then remove the blinker\n if (this.hasBlinkerTarget && parseInt(this.data.get('index') || 0) == 1) {\n this.blinkerTarget.classList.add('hidden');\n }\n }\n}\n\n","import { Controller } from \"@hotwired/stimulus\"\nimport { post } from '@rails/request.js'\n\n\n// Connects to data-controller=\"share-button\"\nexport default class extends Controller {\n async onClick({ params: { path } }) {\n await post(path, { responseKind: 'turbo-stream' })\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"show-more\"\nexport default class extends Controller {\n static targets = [\"showMoreContainer\", \"showMore\", \"content\", \"arrow\"];\n connect() {\n if (this.contentTarget.scrollHeight <= this.contentTarget.clientHeight) {\n this.showMoreContainerTarget.classList.add('hidden');\n }\n }\n\n showToggle() {\n if (this.showMoreTarget.innerText === \"Show More\") {\n this.contentTarget.style.maxHeight = this.contentTarget.scrollHeight + 'px';\n this.showMoreTarget.innerText = \"Show Less\"\n this.arrowTarget.classList.add(\"rotate-180\")\n }\n else {\n this.contentTarget.style.maxHeight = '60vh';\n this.showMoreTarget.innerText = \"Show More\"\n this.arrowTarget.classList.remove(\"rotate-180\")\n }\n }\n}\n","import { Slideover } from \"tailwindcss-stimulus-components\";\nimport { useClickOutside } from 'stimulus-use'\n\n// Connects to data-controller=\"slideover\"\nexport default class extends Slideover {\n static targets = ['menu', 'overlay', 'sidebar', 'container']\n\n connect() {\n super.connect();\n useClickOutside(this, { element: this.containerTarget })\n }\n\n clickOutside() {\n this.openValue = false;\n }\n\n\n async _show() {\n this.sidebarTarget.classList.remove(this.toggleClass)\n this.overlayTarget.classList.remove(this.toggleClass)\n\n const parent_show_promise = this._dropdownShow()\n const transition_promise = transition(\n this.overlayTarget,\n this._enteringClassList[1],\n this._invisibleClassList[1],\n this._visibleClassList[1]);\n await Promise.all([parent_show_promise, transition_promise])\n }\n\n async _hide() {\n const parent_show_promise = this._dropdownHide()\n const transition_promise = await transition(\n this.overlayTarget,\n this._leavingClassList[1],\n this._visibleClassList[1],\n this._invisibleClassList[1]);\n\n await Promise.all([parent_show_promise, transition_promise]);\n\n this.overlayTarget.classList.add(this.toggleClass)\n this.sidebarTarget.classList.add(this.toggleClass)\n }\n\n async _dropdownShow(cb) {\n // this.menuTarget.classList.remove(this.toggleClass)\n this.element.setAttribute(\"aria-expanded\", \"true\")\n\n await transition(\n this.menuTarget,\n this._enteringClassList[0],\n this._invisibleClassList[0],\n this._visibleClassList[0]);\n\n if (typeof cb == 'function') {\n await cb()\n }\n }\n\n async _dropdownHide(cb) {\n await transition(\n this.menuTarget,\n this._leavingClassList[0],\n this._visibleClassList[0],\n this._invisibleClassList[0]);\n\n if (typeof cb == 'function') {\n await cb()\n }\n\n this.element.setAttribute(\"aria-expanded\", \"false\")\n // this.menuTarget.classList.add(this.toggleClass)\n }\n\n\n}\n\nexport async function transition(target, transitionClassList, startClassList, endClassList) {\n transitionClassList.forEach(klass => target.classList.add(klass))\n startClassList.forEach(klass => target.classList.add(klass))\n await nextFrame();\n startClassList.forEach(klass => target.classList.remove(klass))\n endClassList.forEach(klass => target.classList.add(klass))\n await afterTransition(target)\n endClassList.forEach(klass => target.classList.remove(klass))\n transitionClassList.forEach(klass => target.classList.remove(klass))\n}\n\nfunction nextFrame() {\n return new Promise(resolve => {\n requestAnimationFrame(() => {\n requestAnimationFrame(resolve)\n });\n });\n}\n\nfunction afterTransition(element) {\n return new Promise(resolve => {\n // safari return string with comma separate values\n const computedDuration = getComputedStyle(element).transitionDuration.split(\",\")[0]\n const duration = Number(computedDuration.replace('s', '')) * 1000;\n setTimeout(() => {\n resolve()\n }, duration)\n });\n}\n\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class SliderController extends Controller {\n static targets = [\"track\", \"indicator\", \"back\", \"next\"];\n\n static values = {\n count: Number,\n slide: Number\n }\n\n initialize() {\n this.index = 0;\n }\n\n back() {\n if (this.index > 0) {\n this.index--;\n this.showCurrentSlide();\n }\n }\n\n next() {\n if (this.index < this.countValue - 1) {\n this.index++;\n this.showCurrentSlide();\n }\n }\n\n showCurrentSlide() {\n this.trackTarget.style = `transform: translateX(${this.index * -(this.slideValue)}%);`;\n }\n}","import { Controller } from \"@hotwired/stimulus\"\nimport SlimSelect from 'slim-select/dist/slimselect.es';\nimport { useDispatch } from \"stimulus-use\";\n// import 'slim-select/dist/slimselect.css';\n\n// Connects to data-controller=\"slim-select\"\nexport default class extends Controller {\n initialize() {\n this.bindedOnData = this.onData.bind(this);\n }\n\n connect() {\n useDispatch(this);\n this.select = new SlimSelect({\n select: this.element,\n settings: {\n allowDeselect: true,\n placeholderText: `Select ${this.name || 'value'}`,\n },\n events: {\n afterChange: this.onChange.bind(this)\n }\n })\n\n window.addEventListener(`location:${this.name}:data`, this.bindedOnData);\n }\n\n disconnect() {\n this.select.destroy()\n window.removeEventListener(`location:${this.name}:data`, this.bindedOnData);\n }\n\n onChange(selectedOption) {\n this.dispatch(this.name + ':select', { value: selectedOption[0] ? selectedOption[0].value : '' });\n }\n\n onData(event) {\n this.select.setData(event.detail.data);\n }\n\n get name() {\n return this.data.get('name') || ''\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { fetchEventSource } from '@microsoft/fetch-event-source';\n// import mixpanel from 'mixpanel-browser';\n\n// To create HTML structure for searchGPT result resource\nfunction getHTMLContentForSearchableResource(resource) {\n return `\n
\n
\n
\n
\n ${resource.curator.full_name}\n
\n
\n
Curated by
\n
\n ${resource.curator.full_name}\n
\n
\n
\n

${resource.title}

\n

\n ${resource.description}\n

\n
\n
\n `;\n}\n\nfunction getContentFromData(msg) {\n let data;\n if (typeof msg.data === \"string\") {\n try {\n data = JSON.parse(msg.data);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return null;\n }\n } else {\n data = msg.data;\n }\n\n if (data && data.hasOwnProperty(\"content\")) {\n return data.content;\n }\n\n return null\n}\n\nfunction getArrowElement() {\n const arrow = document.createElement('i');\n arrow.classList.add('ri-arrow-right-line', 'text-xl', 'ml-1', 'group-hover:translate-x-1', 'transition-transform');\n\n return arrow;\n}\n\nfunction createSignInButton() {\n const a = document.createElement('a');\n a.href = decodeURI('/login');\n a.classList.add('button', 'group', 'button-primary', 'mt-6', 'flex', 'items-center', 'align-center');\n a.innerText = 'Sign in to get insights from your network';\n a.appendChild(getArrowElement());\n return a;\n}\n\nfunction createPostButton(query) {\n const div = document.createElement('div');\n\n const p = document.createElement('p');\n p.innerText = \"This will post a question on your feed, so that your connections on buildd can respond with their insights on the topic.\";\n p.classList.add('text-sm', 'text-slate-500', 'mt-1');\n\n const button = document.createElement('a');\n button.innerText = 'Want insights from your network? Ask now';\n button.classList.add('button', 'group', 'button-primary', 'mt-6', 'flex', 'items-center', 'align-center');\n\n const arrow = getArrowElement();\n button.appendChild(arrow);\n\n button.addEventListener('click', () => {\n const csrfToken = document.querySelector(\"[name='csrf-token']\").content;\n\n // Disable the button\n button.disabled = true;\n\n // Create the spinner element\n const spinner = document.createElement('div');\n spinner.innerHTML = `\n
\n Loading...\n
\n `;\n\n button.innerText = ''\n\n button.appendChild(spinner);\n\n fetch('/api/v1/posts', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': csrfToken,\n },\n body: JSON.stringify({ description: query }),\n })\n .then(response => {\n // Redirect to the \"/home\" path after the API request completes\n window.location.href = '/home';\n })\n .catch(error => {\n // Re-enable the button and remove the spinner element\n button.disabled = false;\n button.removeChild(spinner);\n button.innerText = 'Want insights from your network? Ask now';\n });\n });\n\n div.appendChild(button);\n div.appendChild(p);\n\n return div;\n}\n\n// Connects to data-controller=\"stream\"\nexport default class extends Controller {\n static targets = ['form', 'button', 'result', 'loader', 'responseContainer', 'resourcesSection', 'resourcesNote', 'networkResourcesNote', 'resourcesList', 'networkResponseContainer', 'networkResourcesSection', 'networkResult', 'networkResourcesList', 'networkLoader', 'blinker', 'networkConnectionsSection'];\n static values = {\n product: String,\n builddUserId: Number || null\n }\n\n connect() {\n this.csrfToken = document.querySelector(\"[name='csrf-token']\").content;\n this.showFormattedHighlights = !(window.location.pathname.includes('v1') || window.location.pathname.includes('v2'));\n this.showAskQuestionButton = !(window.location.pathname.includes('v2') || window.location.pathname.includes('v3'));\n this.content = \"\";\n this.networkContent = \"\";\n\n this.formTarget.addEventListener('submit', (event) => {\n event.preventDefault();\n\n this.disableButton();\n\n this.responseContainerTarget.classList.remove('hidden');\n if (this.hasNetworkResponseContainerTarget) {\n this.networkResponseContainerTarget.classList.remove('hidden');\n }\n\n this.resultTarget.classList.add('hidden');\n if (this.hasNetworkResultTarget) {\n this.networkResultTarget.classList.add('hidden');\n }\n\n this.loaderTarget.classList.remove('hidden');\n if (this.hasNetworkLoaderTarget) {\n this.networkLoaderTarget.classList.remove('hidden');\n }\n\n this.resourcesSectionTarget.classList.add('hidden');\n if (this.hasNetworkResourcesSectionTarget) {\n this.networkResourcesSectionTarget.classList.add('hidden');\n }\n\n if (this.hasNetworkConnectionsSectionTarget) {\n this.networkConnectionsSectionTarget.classList.add('hidden');\n }\n\n this.resourcesListTarget.innerHTML = '';\n if (this.hasNetworkResourcesListTarget) {\n this.networkResourcesListTarget.innerHTML = '';\n }\n\n const formData = new FormData(event.target);\n\n if (!formData.get('query')) {\n this.displayStatusMessage({ event: 'error', data: 'Please enter a valid query.' });\n this.enableButton();\n return;\n }\n\n const current_url = window.location.href\n const is_search_gpt = current_url.includes('/search/');\n const version = is_search_gpt ? current_url.substring(current_url.lastIndexOf('/') + 1) : null\n\n fetchEventSource('/api/v1/search', {\n openWhenHidden: true, // keep the connection when user switches tab\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': this.csrfToken,\n },\n body: JSON.stringify({\n query: formData.get('query'),\n product: this.productValue,\n buildd_user_id: this.builddUserIdValue,\n prompt: formData.get('prompt'),\n prompt_1: formData.get('prompt_1'),\n prompt_2: formData.get('prompt_2'),\n version: version,\n }),\n\n onopen: (async (response) => {\n try {\n if (['buildd.co'].includes(window.location.host)) {\n mixpanel.track(\"WEB_BUTTON_CLICK_SEARCH_OR_SEO_GPT_QUERY\", {\n query: formData.get('query'),\n prompt: formData.get('prompt'),\n });\n }\n } catch (error) {\n console.log(error)\n }\n\n this.content = this.resultTarget.innerText = '';\n\n this.resultTarget.classList.add('hidden');\n if (this.hasNetworkResultTarget) {\n this.networkContent = this.networkResultTarget.innerText = '';\n this.networkResultTarget.classList.add('hidden');\n }\n\n if (this.hasBlinkerTarget) {\n this.blinkerTarget.children[0].innerText = \"Fetching...\";\n this.blinkerTarget.classList.add('hidden');\n }\n\n if (this.hasNetworkConnectionsSectionTarget) {\n this.networkConnectionsSectionTarget.classList.add('hidden');\n }\n\n this.loaderTarget.classList.remove('hidden');\n if (this.hasNetworkLoaderTarget) {\n this.networkLoaderTarget.classList.remove('hidden');\n }\n\n this.resourcesSectionTarget.classList.add('hidden');\n if (this.hasNetworkResourcesSectionTarget) {\n this.networkResourcesSectionTarget.classList.add('hidden');\n }\n\n this.resourcesListTarget.innerHTML = '';\n if (this.hasNetworkResourcesListTarget) {\n this.networkResourcesListTarget.innerHTML = '';\n }\n\n const EventStreamContentType = 'text/event-stream';\n if (response.ok && response.headers.get('content-type') === EventStreamContentType) {\n return; // everything's good\n } else if (response.status === 204) {\n this.displayStatusMessage({ event: 'error', data: { 'content': 'Please enter a valid query.' } });\n } else if (response.status === 429) {\n this.displayStatusMessage({ event: 'error', data: { 'content': 'You have reached the limit. Please try again later!' } });\n } else {\n this.displayStatusMessage({ event: 'error', data: { 'content': 'Oops! Something went wrong. Please try again.' } });\n }\n }).bind(this),\n\n onmessage: ((msg) => {\n // if the server emits an error message, throw an exception\n // so it gets handled by the onerror callback below:\n\n if (msg.event === 'error') {\n this.displayStatusMessage(msg);\n }\n else if (msg.event == 'resources') {\n this.resourcesSectionTarget.classList.remove('hidden');\n try {\n const resources = JSON.parse(msg.data).resources;\n resources.forEach(((resource) => {\n const li = document.createElement('li');\n const a = document.createElement('a');\n a.href = decodeURI(resource.url);\n if (resource.resource_class == 'SearchableContent') {\n if (this.showFormattedHighlights) {\n a.innerHTML = getHTMLContentForSearchableResource(resource);\n } else {\n a.innerText = resource.title;\n a.classList.add('text-slate-500', 'underline')\n this.resourcesListTarget.classList.add('list-disc', 'list-inside')\n }\n } else {\n a.innerHTML = `\n
\n
\n \n \n \n \n
\n
\n

${resource.title}

\n

\n ${resource.description}\n

\n
\n
\n `;\n }\n a.target = '_blank';\n li.appendChild(a);\n this.resourcesListTarget.appendChild(li);\n }).bind(this));\n } catch (error) {\n if (this.hasResourcesNoteTarget) {\n this.resourcesNoteTarget.innerText = getContentFromData(msg);\n }\n }\n } else if (msg.event == 'network_resources') {\n this.networkResourcesSectionTarget.classList.remove('hidden');\n try {\n const network_resources = JSON.parse(msg.data).resources;\n network_resources.forEach(((resource) => {\n const li = document.createElement('li');\n const a = document.createElement('a');\n a.href = decodeURI(resource.url);\n if (this.showFormattedHighlights) {\n a.innerHTML = getHTMLContentForSearchableResource(resource);\n } else {\n a.innerText = resource.title;\n a.classList.add('text-slate-500', 'underline')\n this.networkResourcesListTarget.classList.add('list-disc', 'list-inside')\n }\n a.target = '_blank';\n li.appendChild(a);\n this.networkResourcesListTarget.appendChild(li);\n }).bind(this));\n } catch (error) {\n if (this.hasNetworkResourcesNoteTarget) {\n this.networkResourcesNoteTarget.innerText = getContentFromData(msg);\n this.networkResultTarget.appendChild(createPostButton(formData.get('query')));\n }\n }\n if (this.hasBlinkerTarget) {\n this.blinkerTarget.classList.remove('hidden');\n }\n } else if (msg.event == 'network_result') {\n // network results exist\n this.showNetworkResult(msg);\n this.networkResultTarget.innerText = this.networkContent;\n } else if (msg.event == 'login_for_network_result') {\n // network results do not exist because user is not logged in\n this.showNetworkResult(msg);\n this.networkResultTarget.innerText = \"Get answers from content handpicked by your network.\";\n this.networkResultTarget.appendChild(createSignInButton());\n } else if (msg.event == 'no_network_result') {\n // network results do not exist because user's connections haven't curated any resource related to query\n // if (version == 'v4') {\n this.showNetworkResult(msg);\n\n const isOnlyNoNetwork = getContentFromData(msg) != ''\n const row = document.createElement('hr');\n row.classList.add(isOnlyNoNetwork ? 'mt-2' : 'mt-8', 'mb-4');\n const messageContainer = document.createElement('div');\n //messageContainer.innerText = \"Want more in-depth answer? Get help from your network!\";\n if (this.showAskQuestionButton) {\n messageContainer.appendChild(createPostButton(formData.get('query')));\n }\n if (isOnlyNoNetwork) {\n const p = document.createElement('p');\n p.innerText = getContentFromData(msg);\n p.classList.add('text-slate-600', 'mt-2');\n this.networkResultTarget.appendChild(p);\n if (this.hasNetworkConnectionsSectionTarget) {\n this.networkConnectionsSectionTarget.classList.remove('hidden');\n }\n }\n this.networkResultTarget.appendChild(row);\n this.networkResultTarget.appendChild(messageContainer);\n if (this.hasBlinkerTarget) {\n this.blinkerTarget.classList.remove('hidden');\n }\n // }\n // else {\n // this.showNetworkResult(msg);\n // this.networkResultTarget.innerText = \"Your network hasn\\'t shared any content on this yet!\";\n // if (this.showAskQuestionButton) {\n // this.networkResultTarget.appendChild(createPostButton(formData.get('query')));\n // }\n // }\n } else if (msg.event == 'status') {\n this.displayStatusMessage(msg);\n } else {\n const contentData = getContentFromData(msg)\n if (contentData) {\n this.content += contentData == '' ? '\\n' : contentData;\n this.loaderTarget.classList.add('hidden')\n this.resultTarget.classList.remove('hidden')\n this.resultTarget.innerText = this.content;\n }\n }\n }).bind(this),\n\n onclose: (() => {\n this.enableButton();\n if (this.hasBlinkerTarget) {\n this.blinkerTarget.children[0].innerText = \"Ready\";\n }\n }).bind(this),\n\n onerror(err) {\n console.log(err);\n this.enableButton();\n }\n });\n });\n }\n\n displayStatusMessage(message) {\n if (getContentFromData(message)) {\n this.resultTarget.innerHTML = '';\n this.loaderTarget.classList.add('hidden')\n this.resultTarget.classList.remove('hidden')\n const statusMessage = document.createElement('p');\n statusMessage.innerText = getContentFromData(message);\n statusMessage.classList.add('italic', 'test-base', message.event === 'error' ? 'text-rose-500' : 'text-slate-500');\n this.resultTarget.appendChild(statusMessage);\n if (this.hasNetworkLoaderTarget) {\n this.networkLoaderTarget.classList.remove('hidden');\n }\n if (this.hasNetworkResultTarget) {\n this.networkResultTarget.innerHTML = '';\n this.networkResultTarget.classList.remove('hidden')\n this.networkResultTarget.appendChild(statusMessage.cloneNode(true));\n }\n }\n }\n\n showNetworkResult(msg) {\n this.networkContent += getContentFromData(msg) == '' ? '\\n' : getContentFromData(msg);\n this.networkLoaderTarget.classList.add('hidden')\n this.networkResultTarget.classList.remove('hidden')\n }\n\n disableButton() {\n if (this.hasButtonTarget) {\n this.buttonTarget.disabled = true;\n }\n }\n\n enableButton() {\n if (this.hasButtonTarget) {\n this.buttonTarget.disabled = false;\n }\n }\n}\n","import SliderController from \"./slider_controller\"\n\nexport default class extends SliderController {\n\n initialize() {\n super.initialize();\n\n this.sliderCount = Math.ceil(parseFloat(this.countValue) / 2);\n this.indicatorWidth = this.indicatorTarget.parentElement.clientWidth / this.sliderCount;\n this.indicatorTarget.style.width = `${this.indicatorWidth}px`;\n this.showCurrentSlide();\n }\n\n showCurrentSlide() {\n super.showCurrentSlide();\n\n // indicator\n this.indicatorTarget.style.left = `${this.index * this.indicatorWidth}px`;\n\n // if total testimonials are odd\n // shift last testimonial to center\n if (this.countValue & 1) {\n this.trackTarget.children[this.trackTarget.children.length - 1].classList.add(\"md:ml-[50%]\");\n this.trackTarget.children[this.trackTarget.children.length - 1].classList.add(\"md:translate-x-[-50%]\");\n }\n\n }\n\n next() {\n\n if (this.index === this.sliderCount - 1) {\n // Reached the last slide, so loop back to the first slide\n this.index = 0;\n } else {\n this.index++;\n }\n this.showCurrentSlide();\n }\n\n back() {\n if (this.index === 0) {\n // Reached the first slide, so loop back to the last slide\n this.index = this.sliderCount - 1;\n } else {\n this.index--;\n }\n this.showCurrentSlide();\n }\n}","import { Controller } from \"@hotwired/stimulus\"\nimport { gsap } from \"gsap\";\n\n// Connects to data-controller=\"text-change-animation\"\nexport default class extends Controller {\n\n connect() {\n this.counter = 1\n this.element.innerText = this.textValues[0];\n if (this.typing) {\n setInterval(this.eraseText.bind(this), 3000);\n }\n else {\n setInterval(this.hideText.bind(this), 3000);\n }\n }\n\n eraseText() {\n const self = this;\n gsap.fromTo(this.element, {\n width: `${this.element.scrollWidth}px`,\n }, {\n width: 0,\n ease: `steps (${this.element.innerText.length})`,\n duration: 1,\n onComplete: this.typeText.bind(this)\n });\n }\n\n typeText() {\n this.element.innerText = this.textValues[this.counter];\n this.counter++;\n if (this.counter >= this.textValues.length) { this.counter = 0; }\n gsap.fromTo(this.element, {\n width: 0,\n }, {\n width: `${this.element.scrollWidth}px`,\n ease: `steps (${this.element.innerText.length})`,\n duration: 1,\n });\n }\n\n hideText() {\n const self = this;\n gsap.to(this.element, {\n opacity: 0,\n onComplete: this.changeText.bind(this)\n });\n }\n\n changeText() {\n this.element.innerText = this.textValues[this.counter];\n this.counter++;\n if (this.counter >= this.textValues.length) { this.counter = 0; }\n gsap.to(this.element, { opacity: 1 });\n }\n\n get textValues() {\n const text = this.data.get('textValues') || '';\n return text.split(',').filter(value => value);\n }\n\n get typing() {\n const text = this.data.get('typing') || 'false';\n return text == 'true';\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"text-clamp\"\nexport default class extends Controller {\n static targets = ['text', 'buttonText', 'arrow'];\n\n static values = {\n isActive: Boolean\n }\n\n toggle(e) {\n e.preventDefault();\n this.textTarget.classList.toggle('paragraph-clamp');\n this.arrowTarget.classList.toggle('rotate-180');\n this.isActiveValue = !this.isActiveValue;\n }\n\n isActiveValueChanged() {\n this.buttonTextTarget.innerText = this.isActiveValue ? 'Show less' : 'Show more';\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { gsap } from \"gsap\";\n\n// Connects to data-controller=\"tweets-slider\"\nexport default class extends Controller {\n static targets = [ \"track\" ];\n\n initialize() {\n const tweets = gsap.utils.toArray(this.trackTarget.children);\n tweets.concat(tweets);\n let loop = this.horizontalLoop(tweets, {paused: false, repeat: -1, speed: 0.25});\n }\n\n // https://greensock.com/docs/v3/HelperFunctions#loop\n horizontalLoop(items, config) {\n items = gsap.utils.toArray(items);\n config = config || {};\n let tl = gsap.timeline({repeat: config.repeat, paused: config.paused, defaults: {ease: \"none\"}, onReverseComplete: () => tl.totalTime(tl.rawTime() + tl.duration() * 100)}),\n length = items.length,\n startX = items[0].offsetLeft,\n times = [],\n widths = [],\n xPercents = [],\n curIndex = 0,\n pixelsPerSecond = (config.speed || 1) * 100,\n snap = config.snap === false ? v => v : gsap.utils.snap(config.snap || 1), // some browsers shift by a pixel to accommodate flex layouts, so for example if width is 20% the first element's width might be 242px, and the next 243px, alternating back and forth. So we snap to 5 percentage points to make things look more natural\n totalWidth, curX, distanceToStart, distanceToLoop, item, i;\n gsap.set(items, { // convert \"x\" to \"xPercent\" to make things responsive, and populate the widths/xPercents Arrays to make lookups faster.\n xPercent: (i, el) => {\n let w = widths[i] = parseFloat(gsap.getProperty(el, \"width\", \"px\"));\n xPercents[i] = snap(parseFloat(gsap.getProperty(el, \"x\", \"px\")) / w * 100 + gsap.getProperty(el, \"xPercent\"));\n return xPercents[i];\n }\n });\n gsap.set(items, {x: 0});\n totalWidth = items[length-1].offsetLeft + xPercents[length-1] / 100 * widths[length-1] - startX + items[length-1].offsetWidth * gsap.getProperty(items[length-1], \"scaleX\") + (parseFloat(config.paddingRight) || 0);\n for (i = 0; i < length; i++) {\n item = items[i];\n curX = xPercents[i] / 100 * widths[i];\n distanceToStart = item.offsetLeft + curX - startX;\n distanceToLoop = distanceToStart + widths[i] * gsap.getProperty(item, \"scaleX\");\n tl.to(item, {xPercent: snap((curX - distanceToLoop) / widths[i] * 100), duration: distanceToLoop / pixelsPerSecond}, 0)\n .fromTo(item, {xPercent: snap((curX - distanceToLoop + totalWidth) / widths[i] * 100)}, {xPercent: xPercents[i], duration: (curX - distanceToLoop + totalWidth - curX) / pixelsPerSecond, immediateRender: false}, distanceToLoop / pixelsPerSecond)\n .add(\"label\" + i, distanceToStart / pixelsPerSecond);\n times[i] = distanceToStart / pixelsPerSecond;\n }\n function toIndex(index, vars) {\n vars = vars || {};\n (Math.abs(index - curIndex) > length / 2) && (index += index > curIndex ? -length : length); // always go in the shortest direction\n let newIndex = gsap.utils.wrap(0, length, index),\n time = times[newIndex];\n if (time > tl.time() !== index > curIndex) { // if we're wrapping the timeline's playhead, make the proper adjustments\n vars.modifiers = {time: gsap.utils.wrap(0, tl.duration())};\n time += tl.duration() * (index > curIndex ? 1 : -1);\n }\n curIndex = newIndex;\n vars.overwrite = true;\n return tl.tweenTo(time, vars);\n }\n tl.next = vars => toIndex(curIndex+1, vars);\n tl.previous = vars => toIndex(curIndex-1, vars);\n tl.current = () => curIndex;\n tl.toIndex = (index, vars) => toIndex(index, vars);\n tl.times = times;\n tl.progress(1, true).progress(0, true); // pre-render for performance\n if (config.reversed) {\n tl.vars.onReverseComplete();\n tl.reverse();\n }\n return tl;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport Rails from '@rails/ujs';\n\nexport default class extends Controller {\n\n static targets = [\"form\"];\n\n play(event) {\n event.preventDefault();\n if (this.hasFormTarget) {\n Rails.fire(this.formTarget, 'submit');\n this.formTarget.remove();\n }\n }\n}\n","// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport AccordianController from \"./accordian_controller.js\"\napplication.register(\"accordian\", AccordianController)\n\n// import ArticleLoaderController from \"./article_loader_controller.js\"\n// application.register(\"article-loader\", ArticleLoaderController)\n\nimport AutoScrollingCardsController from \"./auto_scrolling_cards_controller.js\"\napplication.register(\"auto-scrolling-cards\", AutoScrollingCardsController)\n\nimport AutoplayVideosController from \"./autoplay_videos_controller.js\"\napplication.register(\"autoplay-videos\", AutoplayVideosController)\n\nimport BottomBarController from \"./bottom_bar_controller.js\"\napplication.register(\"bottom-bar\", BottomBarController)\n\nimport BottomBarScrollTriggerController from \"./bottom_bar_scroll_trigger_controller.js\"\napplication.register('bottom-bar-scroll-trigger', BottomBarScrollTriggerController)\n\nimport ButtonLoaderController from \"./button_loader_controller.js\"\napplication.register(\"button-loader\", ButtonLoaderController)\n\nimport CollectionsCardSliderController from \"./collections_card_slider_controller.js\"\napplication.register(\"collections-card-slider\", CollectionsCardSliderController)\n\nimport CommentFormController from \"./comment_form_controller.js\"\napplication.register(\"comment-form\", CommentFormController)\n\nimport ConfettiController from \"./confetti_controller.js\"\napplication.register(\"confetti\", ConfettiController)\n\nimport CopyTextController from \"./copy_text_controller.js\"\napplication.register(\"copy-text\", CopyTextController)\n\nimport CountdownTimerController from \"./countdown_timer_controller.js\"\napplication.register(\"countdown-timer\", CountdownTimerController)\n\nimport CourseCompletedController from \"./course_completed_controller.js\"\napplication.register(\"course-completed\", CourseCompletedController)\n\nimport CourseProgressBarController from \"./course_progress_bar_controller.js\"\napplication.register(\"course-progress-bar\", CourseProgressBarController)\n\nimport CustomDropdownController from \"./custom_dropdown_controller.js\"\napplication.register(\"custom-dropdown\", CustomDropdownController)\n\nimport CustomSelectController from \"./custom_select_controller.js\"\napplication.register(\"custom-select\", CustomSelectController)\n\nimport CustomToggleController from \"./custom_toggle_controller.js\"\napplication.register(\"custom-toggle\", CustomToggleController)\n\nimport FiltersController from \"./filters_controller.js\"\napplication.register(\"filters\", FiltersController)\n\nimport FlashMessageController from \"./flash_message_controller.js\"\napplication.register(\"flash-message\", FlashMessageController)\n\nimport FormController from \"./form_controller.js\"\napplication.register(\"form\", FormController)\n\nimport GfsResultController from \"./gfs_result_controller.js\"\napplication.register(\"gfs-result\", GfsResultController)\n\nimport GistsController from \"./gists_controller.js\"\napplication.register(\"gists\", GistsController)\n\nimport HamburgerMenuController from \"./hamburger_menu_controller.js\"\napplication.register(\"hamburger-menu\", HamburgerMenuController)\n\nimport HighlightsController from \"./highlights_controller.js\"\napplication.register(\"highlights\", HighlightsController)\n\nimport ImageZoomController from \"./image_zoom_controller.js\"\napplication.register(\"image-zoom\", ImageZoomController)\n\nimport ImmersivePageController from \"./immersive_page_controller.js\"\napplication.register(\"immersive-page\", ImmersivePageController)\n\nimport LessonsMistakesToggleController from \"./lessons_mistakes_toggle_controller.js\"\napplication.register(\"lessons-mistakes-toggle\", LessonsMistakesToggleController)\n\nimport LocationController from \"./location_controller.js\"\napplication.register(\"location\", LocationController)\n\nimport MixpanelController from \"./mixpanel_controller.js\"\napplication.register(\"mixpanel\", MixpanelController)\n\nimport ModuleDropdownController from \"./module_dropdown_controller.js\"\napplication.register(\"module-dropdown\", ModuleDropdownController)\n\nimport MultilineInputController from \"./multiline_input_controller.js\"\napplication.register(\"multiline-input\", MultilineInputController)\n\nimport NutshellTransitionController from \"./nutshell_transition_controller.js\"\napplication.register(\"nutshell-transition\", NutshellTransitionController)\n\nimport OverviewController from \"./overview_controller.js\"\napplication.register(\"overview\", OverviewController)\n\nimport PendingRequestsController from \"./pending_requests_controller.js\"\napplication.register(\"pending-requests\", PendingRequestsController)\n\nimport ReadTriggerController from \"./read_trigger_controller.js\"\napplication.register(\"read-trigger\", ReadTriggerController)\n\nimport ScrapeController from \"./scrape_controller.js\"\napplication.register(\"scrape\", ScrapeController)\n\nimport ScrollSliderController from \"./scroll_slider_controller.js\"\napplication.register(\"scroll-slider\", ScrollSliderController)\n\nimport ScrollToController from \"./scroll_to_controller.js\"\napplication.register(\"scroll-to\", ScrollToController)\n\nimport ScrollToTopController from \"./scroll_to_top_controller.js\"\napplication.register(\"scroll-to-top\", ScrollToTopController)\n\nimport ScrollTriggerController from \"./scroll_trigger_controller.js\"\napplication.register(\"scroll-trigger\", ScrollTriggerController)\n\nimport SearchBoxController from \"./search_box_controller.js\"\napplication.register(\"search-box\", SearchBoxController)\n\nimport SearchTabsController from \"./search_tabs_controller.js\"\napplication.register(\"search-tabs\", SearchTabsController)\n\nimport ShareButtonController from \"./share_button_controller.js\"\napplication.register(\"share-button\", ShareButtonController)\n\nimport ShowMoreController from \"./show_more_controller.js\"\napplication.register(\"show-more\", ShowMoreController)\n\nimport SlideoverController from \"./slideover_controller.js\"\napplication.register(\"slideover\", SlideoverController)\n\nimport SliderController from \"./slider_controller.js\"\napplication.register(\"slider\", SliderController)\n\nimport SlimSelectController from \"./slim_select_controller.js\"\napplication.register(\"slim-select\", SlimSelectController)\n\nimport StreamController from \"./stream_controller.js\"\napplication.register(\"stream\", StreamController)\n\nimport TestimonialSliderController from \"./testimonial_slider_controller.js\"\napplication.register(\"testimonial-slider\", TestimonialSliderController)\n\nimport TextChangeAnimationController from \"./text_change_animation_controller.js\"\napplication.register(\"text-change-animation\", TextChangeAnimationController)\n\nimport TextClampController from \"./text_clamp_controller.js\"\napplication.register(\"text-clamp\", TextClampController)\n\nimport TweetsSliderController from \"./tweets_slider_controller.js\"\napplication.register(\"tweets-slider\", TweetsSliderController)\n\nimport VideoViewController from \"./video_view_controller.js\"\napplication.register(\"video-view\", VideoViewController)\n","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nimport Rails from \"@rails/ujs\"\nimport \"@hotwired/turbo-rails\"\nimport * as ActiveStorage from \"@rails/activestorage\"\nimport \"channels\"\nimport \"controllers/index\"\nimport \"../../components/index\"\nrequire(\"jquery\")\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport posthog from 'posthog-js'\nimport mixpanel from 'mixpanel-browser';\n\nfunction getCookie(key) {\n // Get name followed by anything except a semicolon\n var cookiestring = RegExp(key + \"=[^;]+\").exec(document.cookie);\n // Return everything after the equal sign, or an empty string if the cookie name not found\n return decodeURIComponent(!!cookiestring ? cookiestring.toString().replace(/^[^=]+./, \"\") : \"\");\n}\n\ndocument.addEventListener('turbo:load', () => {\n if (['buildd.co'].includes(window.location.host)) {\n mixpanel.init('fe9e7d66ce886af373db34f01fa98a7b', {\n autotrack: true, loaded: function (mixpanel) {\n const builddUserId = getCookie('buildd_user_id');\n if (builddUserId) {\n mixpanel.identify(builddUserId);\n }\n }\n });\n window.mixpanel = mixpanel;\n // tracking all pageviews with Mixpanel\n mixpanel.track(\"Page View\", {\n \"page_title\": document.title,\n \"page_url\": window.location.href\n });\n posthog.init('phc_Hj7mvZiTCqU9dl7kgGElP1VosTVheoPn8H1KvyAVnDB', {\n api_host: 'https://app.posthog.com',\n autocapture: {\n dom_event_allowlist: ['click'],\n event_allowlist: ['click'], // DOM events from this list ['click', 'change', 'submit']\n // element_allowlist: ['button', 'a'], // DOM elements from this list ['a', 'button', 'form', 'input', 'select', 'textarea', 'label']\n css_selector_allowlist: ['[buildd-ph-track]'],\n },\n capture_pageview: false,\n capture_pageleave: false,\n loaded: function (posthog) {\n const builddUserId = getCookie('buildd_user_id');\n if (builddUserId) {\n posthog.identify(builddUserId);\n }\n }\n });\n }\n});\n\n\ngsap.registerPlugin(ScrollTrigger);\n\nRails.start()\nActiveStorage.start()\nwindow.Rails = Rails;\n\n// export function showLesson(event) {\n// let lessonsTimeline = [];\n// const currentDate = new Date();\n\n// if (localStorage.getItem(\"lessons\") !== null) {\n\n// lessonsTimeline = JSON.parse(localStorage.getItem(\"lessons\"));\n// const lastLessonDate = new Date(lessonsTimeline.slice(-1)[0]);\n// const differenceInDays = (Math.abs(currentDate - lastLessonDate) / (1000 * 60 * 60 * 24));\n\n// // we only want to show lessons once in a day, and max 10 in a lifetime\n// if (differenceInDays < 1.0 || lessonsTimeline.length > 10) {\n// return;\n// }\n// }\n\n// const loader = document.querySelector('#loader');\n// if (loader) {\n\n// lessonsTimeline.push(currentDate);\n// localStorage.setItem(\"lessons\", JSON.stringify(lessonsTimeline));\n\n// const csrfToken = document.querySelector(\"[name='csrf-token']\").content;\n// const headers = new Headers();\n// headers.append('X-CSRF-Token', csrfToken);\n// headers.append('Accept', 'application/json');\n\n// fetch('/update_lessons_count', {\n// method: 'POST',\n// headers: headers\n// })\n// .then(res => res.json())\n\n// event.preventDefault();\n// loader.classList.remove('hidden');\n// setTimeout(() => event.detail.resume(), 2000);\n// }\n\n// };\n// show loading screen for every navigation to home page\n// document.addEventListener('turbo:before-fetch-request', async (event) => {\n// if (event.detail.url.pathname === '/' && event.target.tagName !== 'TURBO-FRAME' && event.detail.fetchOptions.method === 'GET') {\n// showLesson(event);\n// }\n// });\n\ndocument.addEventListener('turbo:load', async (event) => {\n const loader = document.querySelector('#loader');\n if (loader) {\n loader.classList.add('hidden');\n }\n const scrollProgressBar = document.querySelector(\"#scroll-progress\");\n if (scrollProgressBar) {\n window.onscroll = () => {\n const winScroll = document.body.scrollTop || document.documentElement.scrollTop;\n const height = document.documentElement.scrollHeight - document.documentElement.clientHeight;\n const scrolled = (winScroll / height) * 100;\n scrollProgressBar.style.width = `${scrolled}%`;\n }\n }\n\n const progressBar = document.querySelector('.progress');\n if (progressBar) {\n progressBar.style.width = progressBar.getAttribute('data-percent') + \"%\";\n }\n});"],"names":["Controller","static","connect","super","this","action","modalElement","document","querySelector","event","Event","dispatchEvent","hasVideoTarget","videoTarget","play","updateProgress","circumference","data","get","Math","PI","offset","detail","progress","progressBarTarget","style","strokeDashoffset","progressTextTarget","innerText","parseInt","showTab","tabTargets","forEach","tab","index","panel","panelTargets","mobilePanel","mobilePanelTargets","classList","remove","inactiveTabClasses","add","activeTabClasses","tabContentElement","tabContentTargets","scrollHeight","id","location","hash","context","keys","path","mod","identifier","replace","showOnLoad","window","CustomEvent","element","lockScroll","scrollbarWidth","innerWidth","documentElement","clientWidth","body","paddingRight","restoreScrollValue","saveScrollPosition","top","scrollPosition","async","close","downloadImage","target","href","params","filename","imageSrc","image","fetch","imageBlog","blob","imageURL","URL","createObjectURL","link","createElement","download","appendChild","click","removeChild","count","Number","initialize","showCurrentSlide","back","dispatch","next","countValue","move","trackTarget","indicatorTarget","navigatorTargets","backTarget","nextTarget","wait","interval","setInterval","updateTimer","bind","stopped","waitValue","clearInterval","waitValueChanged","countdownTarget","pause","resume","hide","preventDefault","stopPropagation","end","slide","disableClasses","hasNextTarget","hasBackTarget","scrollWidth","disableTarget","addEventListener","updateScrollButtons","disconnect","removeEventListener","scroll","direction","scrollTo","left","scrollLeft","slideValue","behavior","enableTarget","disabled","autoScroll","currentTabIndex","tabIndex","tabContainerTarget","threshold","numberOfTabs","length","change","stopAutoswitch","appear","startProgressBarTransition","switchTab","progressPathTargets","progressPath","scrollIntoView","offsetTop","map","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","Error","code","Object","resolve","module","exports","webpackEmptyContext","channels","require","application","Application","register","Alert","Modal","Dropdown","Tabs","Toggle","Popover","Slideover","debug","Stimulus","boundedTrigger","trigger","scrollY","innerHeight","scrollPercentValue","console","log","scrollPercent","currentTarget","dataset","findIndex","indexOf","hasArrowTarget","arrowTargets","arrowTarget","getBoundingClientRect","scrollTop","value","set","isHorizontal","startHorizontalAnimation","startVerticalAnimation","cards","gsap","children","totalHeight","offsetHeight","card","cardDistance","repeat","defaults","ease","duration","to","y","modifiers","parseFloat","totalWidth","offsetWidth","offsetLeft","x","observer","IntersectionObserver","handleIntersection","videos","video","muted","autoplay","observe","entries","intersectingVideo","find","entry","isIntersecting","videoTargets","toggleTagsSection","toggle","showComments","triggered","hideBottomBar","isSectionInView","triggerSectionValue","showBottomBar","sectionId","section","getElementById","triggerSection","String","onClick","loader","customClasses","buttonTargets","buttonTarget","submitter","innerHTML","setTimeout","split","indicatorOnClick","clickedIndex","getAttribute","trackTitleTarget","Array","from","child","rankTarget","useDispatch","onFocus","actionBtnTarget","onBlur","animateConfetti","xPercent","yPercent","w","screen","width","h","height","i","confetti","createElementNS","setAttributeNS","maxRandom","rotation","opacity","scale","fill","min","max","floor","random","animate","delay","yoyo","scaleX","hasCopyButtonTarget","copyButtonTarget","copyTextToClipboard","hasContentValue","contentValue","fallbackCopyTextToClipboard","text","textArea","position","focus","select","msg","execCommand","err","error","navigator","clipboard","writeText","then","hasCopyTooltipTarget","copyTooltipTarget","hasAfterToolTipContentValue","afterToolTipContentValue","hasBeforeToolTipContentValue","beforeToolTipContentValue","content","beforeToolTipContent","afterToolTipContent","now","Date","getTime","distance","endDate","days","hours","minutes","seconds","daysTarget","addPaddingZero","hoursTarget","minutesTarget","secondsTarget","number","numberString","toString","shouldPadZero","checkmarkCircleTarget","transformOrigin","checkmarkRectSmallTarget","checkmarkRectLargeTarget","self","remOffset","getComputedStyle","fontSize","widthObj","widthValue","onUpdate","progressUserIconTarget","useClickOutside","openValueChanged","openValue","clickOutside","selectedValueTarget","optionTargets","preview","selectedValue","nameValue","clear","selectedValueChanged","name","selected","showWithoutPrevent","hasShowMoreTextTarget","showMoreTextTarget","useDebounce","inputs","formTarget","querySelectorAll","input","onInputChange","paginationTargetConnected","paginationLinks","onPageNavigation","pageFieldTarget","Rails","fire","hasPageFieldTarget","pageNum","test","match","search","searchFieldTarget","clearAll","tagName","type","checked","toggleFilter","filtersDropdownContentTarget","filterDropdownArrowTarget","fadeOut","el","fade","display","requestAnimationFrame","fileInput","optionalProfile","hasAnimatedButtonTarget","useIntersection","animatedButtonTarget","rootMargin","playPaymentButtonAnimation","inputTargets","submitTarget","hasFileDropAreaTarget","activateDropArea","fileDropAreaTarget","deActivateDropArea","paymentButtonAnimationTimeline","kill","onChange","originalPassword","isValid","isEmailValid","required","isPasswordValid","onProfileChange","isUrlValid","files","hasStrikeTarget","hasMoneySavedButtonTarget","timeScale","reverse","strikeTarget","moneySavedButtonTarget","visibility","onFileUpload","filePath","fileDetails","exec","alert","pop","password","email","url","trim","togglePasswordVisibility","previousElementSibling","src","limitCheckBoxSelection","startupTopicCheckboxTargets","checkbox","startupTopicSelectionLimit","onAvatarChange","hasAvatarPreviewTarget","reader","FileReader","readAsDataURL","avatarPreviewTarget","onload","result","hasAvatarActionsTarget","avatarActionsTarget","disableEndDate","endDateTargets","endDateTarget","slug","fetchJsonp","res","json","insertAdjacentHTML","stylesheet","div","catch","iconTarget","menuTarget","parents","node","nodes","parentNode","unshift","isTextElementEmpty","childNodes","textContent","getValidNode","nodeType","Node","TEXT_NODE","nodeName","key","keyCode","toLowerCase","includes","onSelect","selection","getSelection","lastSelectionValue","rangeCount","range","getRangeAt","isValidRange","showMenu","highlightElement","hasDeleteHighlightBtnTarget","hasAddHighlightBtnTarget","highlightId","contains","addHighlightBtnTarget","deleteHighlightBtnTarget","setAttribute","userHighlights","currentHighlightText","text_content","hasFeaturedTooltipTextTarget","featuredTooltipTextTarget","topHighlights","menuOffset","menuHover","highlight","featured","newRange","getRangeFromPosition","wrapHighlightText","csrfToken","headers","Headers","append","URLSearchParams","targetElement","hasMenuTarget","onKeyUp","maxTouchPoints","msMaxTouchPoints","hideMenu","highlightsUrlValue","response","user_highlights","displayHighlight","top_highlights","commonAncestorContainerElement","commonAncestorContainer","startContainerElement","startContainer","endContainerElement","endContainer","overlapsOtherHighlights","intersectsNode","nodeId","collapsed","onHighlightClick","shareOnTwitter","selectedText","shareText","shareURL","encodeURIComponent","open","onHighlight","keepPrevSibling","keepNextSibling","startOffset","endOffset","absoluteStartOffset","calculateAbsoluteOffset","absoluteEndOffset","originalCommonAncestorContainerElement","finalPreview","outerHTML","endOffsetLengthDiff","node1","node2","parents1","parents2","commonAncestor","commonAncestorContainerId","startContainerId","endContainerId","originalPreview","startElement","endElement","prevSibling","startParentElement","parentElement","nextSibling","nextElementSibling","endParentElement","trimPreview","cloneNode","postHighlight","parent","getTextChildNodes","newIndexOfElement","newOffset","textNodes","push","onFeatureHighlight","wrap","unwrap","formData","FormData","JSON","stringify","method","deleteHighlight","getNodeById","Range","startElementChildIndex","relativeStartOffset","getChildIndexAndRelativeOffset","setStart","endElementChildIndex","relativeEndOffset","setEnd","absoluteOffset","wrapper","createHighlightWrapper","wrapRange","wrappedNode","highlightsUrl","zoom","WZoom","minScale","maxScale","disableWheelZoom","destroy","totalSlides","slideTargets","currentSlideIndexValue","overwrite","slideTarget","clientHeight","slideScrollTriggers","_","ScrollTrigger","start","onEnter","onEnterBack","onLeave","onLeaveBack","autoAlpha","slideContentTargets","timeline","slideTimelineProgressTargets","slideTimelinePointTargets","color","scrollTextTarget","hideLesson","showLesson","previousSlide","nextSlide","hasLesson","lessonTargets","backdropTarget","currentScroll","scrollStep","currentSlideIndexValueChanged","backBtnTarget","nextBtnTarget","currentSlideIndex","isMistakeSelectedValue","isMistakeSelectedValueChanged","arr","history","replaceState","join","isMistakeSelected","Boolean","default","onCountrySelect","searchParams","options","defaultOption","results","label","onStateSelect","createOptionTags","option","Option","clearOptions","selectTarget","firstChild","lastChild","trackButtonClick","eventname","properties","formattedEventName","toUpperCase","mixpanel","parse","ModuleDropdown","moduleDropdownArrowTarget","moduleAboutFiguresTarget","shiftKey","formIdValue","form","cancelable","bubbles","blur","formId","hasArticleNutshellTarget","hasNuthshellOverviewBox","availWidth","articleNutshellTarget","scrub","nuthshellOverviewBoxTarget","blogSectionTarget","scrollToNutshell","nutshellMainBoxTarget","removeElementIfNotNeeded","scrollDownBtn","header","headerTwin","animation","topics","triggers","topic","startProgress","endProgress","hasMobileIndexTarget","mobileIndexTarget","firstElementChild","hasIndexTarget","indexTarget","indexTargets","hasMobileProgressBarTarget","mobileProgressBarTarget","isActive","goto","singleProgressBar","urlValue","handleReponse","total","inputTarget","showLoader","fadeText","setResult","hideLoader","loaderTarget","resultTarget","textloaderTarget","currentPhraseIndex","firstTime","fadeLoop","phrases","fadeDuration","textloadercontentTarget","resultcontentTarget","offsetValue","currentContainer","containerTarget","lastscrollY","onScroll","pageYOffset","getScrollPercent","elementHeight","scrollToTop","searchStarteValue","onSelectInput","topicValue","intentType","intentTypeValue","searchInputTarget","resultsSectionTarget","searchStartedValue","topicValueChanged","topicInputTarget","searchSectionTargets","onSearchStart","searchStartedValueChanged","placeholderTarget","intentTypeSectionTarget","intentTypeInputTarget","post","intent_type","responseKind","topicSectionTarget","searchQuery","searchStarted","hasBlinkerTarget","blinkerTarget","contentTarget","showMoreContainerTarget","showToggle","showMoreTarget","maxHeight","sidebarTarget","toggleClass","overlayTarget","parent_show_promise","_dropdownShow","transition_promise","transition","_enteringClassList","_invisibleClassList","_visibleClassList","Promise","all","_dropdownHide","_leavingClassList","cb","transitionClassList","startClassList","endClassList","klass","computedDuration","transitionDuration","SliderController","bindedOnData","onData","SlimSelect","settings","allowDeselect","placeholderText","events","afterChange","selectedOption","setData","getHTMLContentForSearchableResource","resource","curator","full_name","avatar_url","title","description","getContentFromData","hasOwnProperty","getArrowElement","arrow","createPostButton","query","p","button","spinner","showFormattedHighlights","pathname","showAskQuestionButton","networkContent","disableButton","responseContainerTarget","hasNetworkResponseContainerTarget","networkResponseContainerTarget","hasNetworkResultTarget","networkResultTarget","hasNetworkLoaderTarget","networkLoaderTarget","resourcesSectionTarget","hasNetworkResourcesSectionTarget","networkResourcesSectionTarget","hasNetworkConnectionsSectionTarget","networkConnectionsSectionTarget","resourcesListTarget","hasNetworkResourcesListTarget","networkResourcesListTarget","displayStatusMessage","enableButton","current_url","version","substring","lastIndexOf","fetchEventSource","openWhenHidden","product","productValue","buildd_user_id","builddUserIdValue","prompt","prompt_1","prompt_2","onopen","host","track","ok","status","onmessage","resources","li","a","decodeURI","resource_class","image_url","hasResourcesNoteTarget","resourcesNoteTarget","hasNetworkResourcesNoteTarget","networkResourcesNoteTarget","showNetworkResult","createSignInButton","isOnlyNoNetwork","row","messageContainer","contentData","onclose","onerror","message","statusMessage","hasButtonTarget","builddUserId","counter","textValues","typing","eraseText","hideText","onComplete","typeText","changeText","filter","textTarget","isActiveValue","isActiveValueChanged","buttonTextTarget","tweets","concat","horizontalLoop","paused","speed","items","config","curX","distanceToStart","distanceToLoop","item","tl","onReverseComplete","totalTime","rawTime","startX","times","widths","xPercents","curIndex","pixelsPerSecond","snap","v","fromTo","immediateRender","toIndex","vars","abs","newIndex","time","tweenTo","previous","current","reversed","hasFormTarget","AccordianController","AutoScrollingCardsController","AutoplayVideosController","BottomBarController","BottomBarScrollTriggerController","ButtonLoaderController","CollectionsCardSliderController","CommentFormController","ConfettiController","CopyTextController","CountdownTimerController","CourseCompletedController","CourseProgressBarController","CustomDropdownController","CustomSelectController","CustomToggleController","FiltersController","FlashMessageController","FormController","GfsResultController","GistsController","HamburgerMenuController","HighlightsController","ImageZoomController","ImmersivePageController","LessonsMistakesToggleController","LocationController","MixpanelController","ModuleDropdownController","MultilineInputController","NutshellTransitionController","OverviewController","PendingRequestsController","ReadTriggerController","ScrapeController","ScrollSliderController","ScrollToController","ScrollToTopController","ScrollTriggerController","SearchBoxController","SearchTabsController","ShareButtonController","ShowMoreController","SlideoverController","SlimSelectController","StreamController","sliderCount","ceil","indicatorWidth","TextChangeAnimationController","TextClampController","TweetsSliderController","VideoViewController","getCookie","cookiestring","RegExp","cookie","decodeURIComponent","autotrack","loaded","identify","posthog","api_host","autocapture","dom_event_allowlist","event_allowlist","css_selector_allowlist","capture_pageview","capture_pageleave","ActiveStorage","scrollProgressBar","onscroll","scrolled","progressBar"],"sourceRoot":""}