{"version":3,"file":"js/289-b8c6f0b05f6bfa7a0430.js","mappings":"0FAAA,IAAIA,EAAM,CACT,iBAAkB,CACjB,KACA,EACA,IACA,IACA,KAED,qBAAsB,CACrB,KACA,EACA,IACA,IACA,KAED,aAAc,CACb,KACA,EACA,IACA,KAED,iBAAkB,CACjB,KACA,EACA,IACA,KAED,qBAAsB,CACrB,KACA,EACA,IACA,IACA,KAED,yBAA0B,CACzB,KACA,EACA,IACA,IACA,KAED,4BAA6B,CAC5B,KACA,KAED,gCAAiC,CAChC,KACA,KAED,cAAe,CACd,KACA,EACA,IACA,IACA,KAED,kBAAmB,CAClB,KACA,EACA,IACA,IACA,KAED,sCAAuC,CACtC,KACA,EACA,IACA,KAED,0CAA2C,CAC1C,KACA,EACA,IACA,KAED,aAAc,CACb,KACA,EACA,IACA,KAED,iBAAkB,CACjB,KACA,EACA,IACA,KAED,wBAAyB,CACxB,KACA,EACA,IACA,KAED,4BAA6B,CAC5B,KACA,EACA,IACA,KAED,uCAAwC,CACvC,KACA,EACA,IACA,KAED,2CAA4C,CAC3C,KACA,EACA,IACA,KAED,gBAAiB,CAChB,KACA,EACA,IACA,IACA,KAED,oBAAqB,CACpB,KACA,EACA,IACA,IACA,KAED,wBAAyB,CACxB,KACA,EACA,IACA,KAED,4BAA6B,CAC5B,KACA,EACA,IACA,KAED,eAAgB,CACf,KACA,KAED,mBAAoB,CACnB,KACA,KAED,kBAAmB,CAClB,KACA,KAED,sBAAuB,CACtB,KACA,KAED,sBAAuB,CACtB,KACA,EACA,IACA,IACA,KAED,0BAA2B,CAC1B,KACA,EACA,IACA,IACA,KAED,uBAAwB,CACvB,KACA,EACA,IACA,KAED,2BAA4B,CAC3B,KACA,EACA,IACA,KAED,0BAA2B,CAC1B,KACA,EACA,IACA,IACA,KAED,8BAA+B,CAC9B,KACA,EACA,IACA,IACA,KAED,wBAAyB,CACxB,IACA,KAED,4BAA6B,CAC5B,IACA,MAGF,SAASC,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAEJ,EAAKE,GAC9B,OAAOG,QAAQC,UAAUC,MAAK,WAC7B,IAAIC,EA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","sources":["webpack://yearone/./app/javascript/components/react/ lazy ^\\.\\/.*$ namespace object","webpack://yearone/./app/javascript/controllers/ sync _controller\\.js$","webpack://yearone/./app/javascript/channels/consumer.js","webpack://yearone/./app/javascript/components/date_time_picker.js","webpack://yearone/./app/javascript/controllers/add_an_item_controller.js","webpack://yearone/./app/javascript/controllers/ai_tools_chart_controller.js","webpack://yearone/./app/javascript/controllers/application_controller.js","webpack://yearone/./app/javascript/controllers/autocomplete_multiselect_controller.js","webpack://yearone/./app/javascript/controllers/autocomplete_select_controller.js","webpack://yearone/./app/javascript/controllers/back_button_controller.js","webpack://yearone/./app/javascript/controllers/backflow_table_controller.js","webpack://yearone/./app/javascript/controllers/bug_chart_toggle_controller.js","webpack://yearone/./app/javascript/controllers/burndown_toggle_controller.js","webpack://yearone/./app/javascript/controllers/candidate_conversation_controller.js","webpack://yearone/./app/javascript/controllers/card_controller.js","webpack://yearone/./app/javascript/controllers/carousel_controller.js","webpack://yearone/./app/javascript/controllers/chart_controller.js","webpack://yearone/./app/javascript/controllers/chart_toggle_controller.js","webpack://yearone/./app/javascript/controllers/class_toggle_controller.js","webpack://yearone/./app/javascript/controllers/clickable_controller.js","webpack://yearone/./app/javascript/controllers/collapsible_controller.js","webpack://yearone/./app/javascript/controllers/confirmation_controller.js","webpack://yearone/./app/javascript/controllers/cookie_manager_controller.js","webpack://yearone/./app/javascript/controllers/croppable_image_input_controller.js","webpack://yearone/./app/javascript/controllers/data_table_controller.js","webpack://yearone/./app/javascript/controllers/ddr_game_controller.js","webpack://yearone/./app/javascript/controllers/department_picker_controller.js","webpack://yearone/./app/javascript/controllers/disclosure_controller.js","webpack://yearone/./app/javascript/controllers/dropdown_controller.js","webpack://yearone/./app/javascript/controllers/easter_egg_animation_controller.js","webpack://yearone/./app/javascript/controllers/epic_accordion_controller.js","webpack://yearone/./app/javascript/controllers/event_attendance_controller.js","webpack://yearone/./app/javascript/controllers/event_rating_controller.js","webpack://yearone/./app/javascript/controllers/fade_controller.js","webpack://yearone/./app/javascript/controllers/filter_form_controller.js","webpack://yearone/./app/javascript/controllers/filtered_search_controller.js","webpack://yearone/./app/javascript/controllers/form_controller.js","webpack://yearone/./app/javascript/controllers/form_data_toggle_controller.js","webpack://yearone/./app/javascript/controllers/index.js","webpack://yearone/./app/javascript/controllers/input_toggle_controller.js","webpack://yearone/./app/javascript/controllers/job_interest_controller.js","webpack://yearone/./app/javascript/controllers/link_instrumentation_controller.js","webpack://yearone/./app/javascript/controllers/list_ordering_controller.js","webpack://yearone/./app/javascript/controllers/loading_state_controller.js","webpack://yearone/./app/javascript/controllers/login_form_controller.js","webpack://yearone/./app/javascript/controllers/modal_controller.js","webpack://yearone/./app/javascript/controllers/previewable_image_input_controller.js","webpack://yearone/./app/javascript/controllers/react_controller.js","webpack://yearone/./app/javascript/controllers/reconnection_controller.js","webpack://yearone/./app/javascript/controllers/repository_picker_controller.js","webpack://yearone/./app/javascript/controllers/richtext_controller.js","webpack://yearone/./app/javascript/controllers/search_input_controller.js","webpack://yearone/./app/javascript/controllers/select_navigation_controller.js","webpack://yearone/./app/javascript/controllers/sidebar_controller.js","webpack://yearone/./app/javascript/controllers/spinner_controller.js","webpack://yearone/./app/javascript/controllers/sprint_navigation_controller.js","webpack://yearone/./app/javascript/controllers/sprint_tickets_filter_controller.js","webpack://yearone/./app/javascript/controllers/stripe_controller.js","webpack://yearone/./app/javascript/controllers/syntax_highlighting_controller.js","webpack://yearone/./app/javascript/controllers/tabs_controller.js","webpack://yearone/./app/javascript/controllers/team_picker_controller.js","webpack://yearone/./app/javascript/controllers/time_picker_controller.js","webpack://yearone/./app/javascript/controllers/time_zone_select_controller.js","webpack://yearone/./app/javascript/controllers/tooltip_controller.js","webpack://yearone/./app/javascript/controllers/tracks_controller.js","webpack://yearone/./app/javascript/controllers/trix_controller.js","webpack://yearone/./app/javascript/controllers/user_picker_controller.js","webpack://yearone/./app/javascript/controllers/velocity_chart_toggle_controller.js","webpack://yearone/./app/javascript/controllers/velocity_frame_controller.js","webpack://yearone/./app/javascript/controllers/video_chat_controller.js","webpack://yearone/./app/javascript/controllers/vimeo_player_controller.js","webpack://yearone/./app/javascript/controllers/youtube_player_controller.js","webpack://yearone/./app/javascript/utilities/html_to_elements.js"],"sourcesContent":["var map = {\n\t\"./AiToolsChart\": [\n\t\t5357,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t357\n\t],\n\t\"./AiToolsChart.jsx\": [\n\t\t5357,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t357\n\t],\n\t\"./BarChart\": [\n\t\t3461,\n\t\t6,\n\t\t136,\n\t\t461\n\t],\n\t\"./BarChart.jsx\": [\n\t\t3461,\n\t\t6,\n\t\t136,\n\t\t461\n\t],\n\t\"./CodeQualityChart\": [\n\t\t4306,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t306\n\t],\n\t\"./CodeQualityChart.jsx\": [\n\t\t4306,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t306\n\t],\n\t\"./CommittedVsAddedTooltip\": [\n\t\t8654,\n\t\t654\n\t],\n\t\"./CommittedVsAddedTooltip.jsx\": [\n\t\t8654,\n\t\t654\n\t],\n\t\"./LineChart\": [\n\t\t1608,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t608\n\t],\n\t\"./LineChart.jsx\": [\n\t\t1608,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t608\n\t],\n\t\"./MultiTeamVelocityStoryPointsChart\": [\n\t\t9693,\n\t\t6,\n\t\t136,\n\t\t693\n\t],\n\t\"./MultiTeamVelocityStoryPointsChart.jsx\": [\n\t\t9693,\n\t\t6,\n\t\t136,\n\t\t693\n\t],\n\t\"./PieChart\": [\n\t\t1514,\n\t\t6,\n\t\t630,\n\t\t514\n\t],\n\t\"./PieChart.jsx\": [\n\t\t1514,\n\t\t6,\n\t\t630,\n\t\t514\n\t],\n\t\"./PullRequestBarChart\": [\n\t\t6287,\n\t\t6,\n\t\t136,\n\t\t287\n\t],\n\t\"./PullRequestBarChart.jsx\": [\n\t\t6287,\n\t\t6,\n\t\t136,\n\t\t287\n\t],\n\t\"./SingleTeamVelocityStoryPointsChart\": [\n\t\t8744,\n\t\t6,\n\t\t136,\n\t\t744\n\t],\n\t\"./SingleTeamVelocityStoryPointsChart.jsx\": [\n\t\t8744,\n\t\t6,\n\t\t136,\n\t\t744\n\t],\n\t\"./SprintChart\": [\n\t\t6370,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t370\n\t],\n\t\"./SprintChart.jsx\": [\n\t\t6370,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t370\n\t],\n\t\"./SprintProgressDonut\": [\n\t\t8421,\n\t\t6,\n\t\t630,\n\t\t421\n\t],\n\t\"./SprintProgressDonut.jsx\": [\n\t\t8421,\n\t\t6,\n\t\t630,\n\t\t421\n\t],\n\t\"./SprintTick\": [\n\t\t4503,\n\t\t503\n\t],\n\t\"./SprintTick.jsx\": [\n\t\t4503,\n\t\t503\n\t],\n\t\"./TestComponent\": [\n\t\t7939,\n\t\t939\n\t],\n\t\"./TestComponent.jsx\": [\n\t\t7939,\n\t\t939\n\t],\n\t\"./VelocityLineChart\": [\n\t\t9291,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t291\n\t],\n\t\"./VelocityLineChart.jsx\": [\n\t\t9291,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t291\n\t],\n\t\"./VelocityTrendChart\": [\n\t\t4254,\n\t\t6,\n\t\t136,\n\t\t254\n\t],\n\t\"./VelocityTrendChart.jsx\": [\n\t\t4254,\n\t\t6,\n\t\t136,\n\t\t254\n\t],\n\t\"./WeeklyTimeSeriesChart\": [\n\t\t6481,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t481\n\t],\n\t\"./WeeklyTimeSeriesChart.jsx\": [\n\t\t6481,\n\t\t6,\n\t\t136,\n\t\t676,\n\t\t481\n\t],\n\t\"./shared/SprintAlerts\": [\n\t\t237,\n\t\t237\n\t],\n\t\"./shared/SprintAlerts.jsx\": [\n\t\t237,\n\t\t237\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 4502;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./add_an_item_controller.js\": 4659,\n\t\"./ai_tools_chart_controller.js\": 5421,\n\t\"./application_controller.js\": 9260,\n\t\"./autocomplete_multiselect_controller.js\": 6420,\n\t\"./autocomplete_select_controller.js\": 4605,\n\t\"./back_button_controller.js\": 634,\n\t\"./backflow_table_controller.js\": 9126,\n\t\"./bug_chart_toggle_controller.js\": 9608,\n\t\"./burndown_toggle_controller.js\": 5764,\n\t\"./candidate_conversation_controller.js\": 5873,\n\t\"./card_controller.js\": 1516,\n\t\"./carousel_controller.js\": 7296,\n\t\"./chart_controller.js\": 6194,\n\t\"./chart_toggle_controller.js\": 6545,\n\t\"./class_toggle_controller.js\": 1470,\n\t\"./clickable_controller.js\": 1178,\n\t\"./collapsible_controller.js\": 2130,\n\t\"./confirmation_controller.js\": 8817,\n\t\"./cookie_manager_controller.js\": 2384,\n\t\"./croppable_image_input_controller.js\": 5899,\n\t\"./data_table_controller.js\": 1199,\n\t\"./ddr_game_controller.js\": 8589,\n\t\"./department_picker_controller.js\": 7253,\n\t\"./disclosure_controller.js\": 1573,\n\t\"./dropdown_controller.js\": 3481,\n\t\"./easter_egg_animation_controller.js\": 9729,\n\t\"./epic_accordion_controller.js\": 3830,\n\t\"./event_attendance_controller.js\": 4624,\n\t\"./event_rating_controller.js\": 5154,\n\t\"./fade_controller.js\": 9668,\n\t\"./filter_form_controller.js\": 7969,\n\t\"./filtered_search_controller.js\": 8218,\n\t\"./form_controller.js\": 1588,\n\t\"./form_data_toggle_controller.js\": 3074,\n\t\"./input_toggle_controller.js\": 669,\n\t\"./job_interest_controller.js\": 6660,\n\t\"./link_instrumentation_controller.js\": 2633,\n\t\"./list_ordering_controller.js\": 1125,\n\t\"./loading_state_controller.js\": 7744,\n\t\"./login_form_controller.js\": 2074,\n\t\"./modal_controller.js\": 6221,\n\t\"./previewable_image_input_controller.js\": 1173,\n\t\"./react_controller.js\": 2167,\n\t\"./reconnection_controller.js\": 1985,\n\t\"./repository_picker_controller.js\": 1211,\n\t\"./richtext_controller.js\": 5929,\n\t\"./search_input_controller.js\": 7687,\n\t\"./select_navigation_controller.js\": 4547,\n\t\"./sidebar_controller.js\": 2806,\n\t\"./spinner_controller.js\": 7409,\n\t\"./sprint_navigation_controller.js\": 2463,\n\t\"./sprint_tickets_filter_controller.js\": 7785,\n\t\"./stripe_controller.js\": 3829,\n\t\"./syntax_highlighting_controller.js\": 2606,\n\t\"./tabs_controller.js\": 9686,\n\t\"./team_picker_controller.js\": 3594,\n\t\"./time_picker_controller.js\": 9962,\n\t\"./time_zone_select_controller.js\": 5773,\n\t\"./tooltip_controller.js\": 6747,\n\t\"./tracks_controller.js\": 1198,\n\t\"./trix_controller.js\": 971,\n\t\"./user_picker_controller.js\": 8892,\n\t\"./velocity_chart_toggle_controller.js\": 4957,\n\t\"./velocity_frame_controller.js\": 4373,\n\t\"./video_chat_controller.js\": 7912,\n\t\"./vimeo_player_controller.js\": 142,\n\t\"./youtube_player_controller.js\": 1395,\n\t\"controllers/add_an_item_controller.js\": 4659,\n\t\"controllers/ai_tools_chart_controller.js\": 5421,\n\t\"controllers/application_controller.js\": 9260,\n\t\"controllers/autocomplete_multiselect_controller.js\": 6420,\n\t\"controllers/autocomplete_select_controller.js\": 4605,\n\t\"controllers/back_button_controller.js\": 634,\n\t\"controllers/backflow_table_controller.js\": 9126,\n\t\"controllers/bug_chart_toggle_controller.js\": 9608,\n\t\"controllers/burndown_toggle_controller.js\": 5764,\n\t\"controllers/candidate_conversation_controller.js\": 5873,\n\t\"controllers/card_controller.js\": 1516,\n\t\"controllers/carousel_controller.js\": 7296,\n\t\"controllers/chart_controller.js\": 6194,\n\t\"controllers/chart_toggle_controller.js\": 6545,\n\t\"controllers/class_toggle_controller.js\": 1470,\n\t\"controllers/clickable_controller.js\": 1178,\n\t\"controllers/collapsible_controller.js\": 2130,\n\t\"controllers/confirmation_controller.js\": 8817,\n\t\"controllers/cookie_manager_controller.js\": 2384,\n\t\"controllers/croppable_image_input_controller.js\": 5899,\n\t\"controllers/data_table_controller.js\": 1199,\n\t\"controllers/ddr_game_controller.js\": 8589,\n\t\"controllers/department_picker_controller.js\": 7253,\n\t\"controllers/disclosure_controller.js\": 1573,\n\t\"controllers/dropdown_controller.js\": 3481,\n\t\"controllers/easter_egg_animation_controller.js\": 9729,\n\t\"controllers/epic_accordion_controller.js\": 3830,\n\t\"controllers/event_attendance_controller.js\": 4624,\n\t\"controllers/event_rating_controller.js\": 5154,\n\t\"controllers/fade_controller.js\": 9668,\n\t\"controllers/filter_form_controller.js\": 7969,\n\t\"controllers/filtered_search_controller.js\": 8218,\n\t\"controllers/form_controller.js\": 1588,\n\t\"controllers/form_data_toggle_controller.js\": 3074,\n\t\"controllers/input_toggle_controller.js\": 669,\n\t\"controllers/job_interest_controller.js\": 6660,\n\t\"controllers/link_instrumentation_controller.js\": 2633,\n\t\"controllers/list_ordering_controller.js\": 1125,\n\t\"controllers/loading_state_controller.js\": 7744,\n\t\"controllers/login_form_controller.js\": 2074,\n\t\"controllers/modal_controller.js\": 6221,\n\t\"controllers/previewable_image_input_controller.js\": 1173,\n\t\"controllers/react_controller.js\": 2167,\n\t\"controllers/reconnection_controller.js\": 1985,\n\t\"controllers/repository_picker_controller.js\": 1211,\n\t\"controllers/richtext_controller.js\": 5929,\n\t\"controllers/search_input_controller.js\": 7687,\n\t\"controllers/select_navigation_controller.js\": 4547,\n\t\"controllers/sidebar_controller.js\": 2806,\n\t\"controllers/spinner_controller.js\": 7409,\n\t\"controllers/sprint_navigation_controller.js\": 2463,\n\t\"controllers/sprint_tickets_filter_controller.js\": 7785,\n\t\"controllers/stripe_controller.js\": 3829,\n\t\"controllers/syntax_highlighting_controller.js\": 2606,\n\t\"controllers/tabs_controller.js\": 9686,\n\t\"controllers/team_picker_controller.js\": 3594,\n\t\"controllers/time_picker_controller.js\": 9962,\n\t\"controllers/time_zone_select_controller.js\": 5773,\n\t\"controllers/tooltip_controller.js\": 6747,\n\t\"controllers/tracks_controller.js\": 1198,\n\t\"controllers/trix_controller.js\": 971,\n\t\"controllers/user_picker_controller.js\": 8892,\n\t\"controllers/velocity_chart_toggle_controller.js\": 4957,\n\t\"controllers/velocity_frame_controller.js\": 4373,\n\t\"controllers/video_chat_controller.js\": 7912,\n\t\"controllers/vimeo_player_controller.js\": 142,\n\t\"controllers/youtube_player_controller.js\": 1395\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 = 5124;","// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `bin/rails generate channel` command.\n\nimport { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n","import flatpickr from 'flatpickr'\n\nfunction bindDateTimePickers() {\n [...document.querySelectorAll('[data-type=\"time\"]')].forEach((time) => {\n flatpickr(time, {\n enableTime: true,\n enableSeconds: true,\n noCalendar: true,\n altInput: true,\n altFormat: ' h:i:S K',\n dateFormat: 'H:i:S' // H:i\n })\n });\n\n [...document.querySelectorAll('[data-type=\"datetime\"]')].forEach((time) => {\n flatpickr(time, {\n enableTime: true,\n altInput: true,\n altFormat: 'F J (D), Y - h:i:S K',\n dateFormat: 'Z' // Y-m-d H:i\n })\n });\n\n [...document.querySelectorAll('[data-type=\"date\"]')].forEach((time) => {\n flatpickr(time, {\n enableTime: false,\n altInput: true,\n altFormat: 'F J, Y',\n dateFormat: 'Y-m-d' // Y-m-d H:i\n })\n });\n}\n\ndocument.addEventListener(\"turbo:load\", function () {\n bindDateTimePickers()\n})\n","import ApplicationController from './application_controller'\n\n// Enables the search-to-add-an-item functionality for a listOrderingController implementation. When you search in the\n// input, this uses the provided template to add another element to the DOM representing the item that was just\n// searched for.\nexport default class extends ApplicationController {\n static targets = [\"template\", \"searchInput\", \"items\"]\n\n connect() {\n super.connect()\n\n this.changeHandler = this.changeHandler.bind(this)\n this.template = this.templateTarget\n this.searchInput = this.searchInputTarget\n this.itemsContainer = this.itemsTarget\n\n this.searchInput.closest('[data-controller=autocomplete-select]').addEventListener('autocomplete.change', this.changeHandler)\n }\n\n disconnect() {\n super.disconnect()\n this.searchInput.closest('[data-controller=autocomplete-select]').removeEventListener('autocomplete.change', this.changeHandler)\n }\n\n changeHandler(event) {\n // Grab the event data\n const itemId = event.detail.value\n const itemName = event.detail.textValue\n\n if(this.element.querySelector(`item[data-add-an-item-item-id-value=\"${itemId}\"]`) == null) {\n // Clone the template\n const clone = this.template.content.cloneNode(true)\n\n // Update the elements in the clone with the event data\n const item = clone.querySelector('item')\n item.setAttribute('id', item.getAttribute('id') + itemId)\n item.setAttribute('data-add-an-item-item-id', itemId)\n item.setAttribute('data-list-ordering-id-number-value', itemId)\n clone.querySelector('span').textContent = itemName\n const hiddenInput = clone.querySelector('input[type=hidden]')\n hiddenInput.setAttribute('id', hiddenInput.getAttribute('id') + itemId)\n hiddenInput.setAttribute('value', itemId)\n\n // Add the clone to the item list\n this.itemsContainer.appendChild(clone)\n }\n\n // Empty out the search field\n this.searchInput.value = \"\"\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"ai-tools-chart\"\nexport default class extends Controller {\n static targets = [\"chart\"]\n static values = { props: Object }\n \n // Keep track of selected tools\n selectedTools = []\n \n connect() {\n // Store original chart props when controller connects\n this.originalProps = this.propsValue\n \n // Initialize selected tools with top 5\n this.selectedTools = this.originalProps.lines\n .slice(0, 5)\n .map(line => line.name)\n \n // Add event listener for checkbox changes\n document.addEventListener('change', this.handleCheckboxChange.bind(this))\n \n // Initialize chart with selected tools\n this.updateChartWithSelectedTools()\n \n // Set up MutationObserver to watch for DataTable redraws\n this.setupMutationObserver()\n }\n \n disconnect() {\n // Remove event listener when controller disconnects\n document.removeEventListener('change', this.handleCheckboxChange.bind(this))\n \n // Disconnect mutation observer if it exists\n if (this.observer) {\n this.observer.disconnect()\n }\n }\n \n setupMutationObserver() {\n // Create a MutationObserver to watch for changes to the table\n this.observer = new MutationObserver((mutations) => {\n // Check if any mutations involve adding nodes (like when DataTable redraws)\n const hasAddedNodes = mutations.some(mutation => \n mutation.type === 'childList' && mutation.addedNodes.length > 0\n )\n \n if (hasAddedNodes) {\n // Update checkbox states after table is redrawn\n this.updateCheckboxStates()\n }\n })\n \n // Find the table element\n const tableElement = document.getElementById('ai-tools-table')\n if (tableElement) {\n // Start observing the table for changes\n this.observer.observe(tableElement, { \n childList: true, \n subtree: true \n })\n }\n }\n \n handleCheckboxChange(event) {\n // Check if the changed element is a tool checkbox\n if (event.target.matches('[data-ai-tools-chart-checkbox]')) {\n const toolName = event.target.value\n const isChecked = event.target.checked\n \n // Update selectedTools array\n if (isChecked && !this.selectedTools.includes(toolName)) {\n this.selectedTools.push(toolName)\n } else if (!isChecked && this.selectedTools.includes(toolName)) {\n this.selectedTools = this.selectedTools.filter(name => name !== toolName)\n }\n \n // Update chart with selected tools\n this.updateChartWithSelectedTools()\n }\n }\n \n updateCheckboxStates() {\n // Update all checkboxes in the table to match the selected state\n document.querySelectorAll('[data-ai-tools-chart-checkbox]').forEach(checkbox => {\n checkbox.checked = this.selectedTools.includes(checkbox.value)\n })\n }\n \n updateChartWithSelectedTools() {\n // Create new props with filtered lines\n const newProps = JSON.parse(JSON.stringify(this.originalProps))\n \n // Filter lines to only include selected tools\n newProps.lines = this.originalProps.lines.filter(line => \n this.selectedTools.includes(line.name)\n )\n \n // Update the React component props\n this.chartTarget.setAttribute(\"data-react-props-value\", JSON.stringify(newProps))\n \n // Force re-render by completely replacing the element\n const chartElement = this.chartTarget\n const parent = chartElement.parentNode\n const reactComponent = chartElement.getAttribute(\"data-react-component\")\n \n // Create a new element with the same attributes\n const newElement = document.createElement(\"div\")\n newElement.id = chartElement.id\n newElement.style.height = \"324px\"\n newElement.setAttribute(\"data-ai-tools-chart-target\", \"chart\")\n newElement.setAttribute(\"data-controller\", \"react\")\n newElement.setAttribute(\"data-react-component\", reactComponent)\n newElement.setAttribute(\"data-react-props-value\", JSON.stringify(newProps))\n \n // Replace the old element with the new one\n parent.replaceChild(newElement, chartElement)\n }\n}\n","import { Controller } from 'stimulus'\nimport StimulusReflex from 'stimulus_reflex'\n\n/* This is your ApplicationController.\n * All StimulusReflex controllers should inherit from this class.\n *\n * Example:\n *\n * import ApplicationController from './application_controller'\n *\n * export default class extends ApplicationController { ... }\n *\n * Learn more at: https://docs.stimulusreflex.com\n */\nexport default class extends Controller {\n connect () {\n StimulusReflex.register(this)\n }\n\n // Debugging assistance\n log(...messages) {\n let identity = \"[\" + this.identifier + \": \" + this.element.localName\n if(this.element.id) {\n identity = identity + \"#\" + this.element.id + \"]\"\n console.log(identity, ...messages)\n } else {\n identity = identity + \"]\"\n console.log(identity, this.element, ...messages)\n }\n }\n\n // POST, PATCH, and DELETE calls need the X-CSRF-Token header to be set, but in test the token\n // doesn't exist. This function DRYs up the logic for getting the token.\n ajaxHeaders() {\n let tokenElement = document.head.querySelector('meta[name=\"csrf-token\"]')\n if(tokenElement) {\n return {\n \"X-CSRF-Token\": tokenElement.getAttribute('content')\n }\n } else {\n return {}\n }\n }\n\n /* Application-wide lifecycle methods\n *\n * Use these methods to handle lifecycle concerns for the entire application.\n * Using the lifecycle is optional, so feel free to delete these stubs if you don't need them.\n *\n * Arguments:\n *\n * element - the element that triggered the reflex\n * may be different than the Stimulus controller's this.element\n *\n * reflex - the name of the reflex e.g. \"Example#demo\"\n *\n * error/noop - the error message (for reflexError), otherwise null\n *\n * reflexId - a UUID4 or developer-provided unique identifier for each Reflex\n */\n\n beforeReflex (element, reflex, noop, reflexId) {\n document.body.classList.add('wait')\n }\n\n reflexSuccess (element, reflex, noop, reflexId) {\n // show success message\n }\n\n reflexError (element, reflex, error, reflexId) {\n console.warn(\"Reflex error: \", error)\n console.warn(\" reflex: \", reflex)\n }\n\n reflexHalted (element, reflex, error, reflexId) {\n console.warn(\"Reflex halted: \", error)\n console.warn(\" reflex: \", reflex)\n }\n\n reflexForbidden (element, reflex, noop, reflexId) {\n console.warn('Reflex authentication failure.', reflex)\n }\n\n afterReflex (element, reflex, noop, reflexId) {\n document.body.classList.remove('wait')\n }\n\n finalizeReflex (element, reflex, noop, reflexId) {\n // all operations have completed, animation etc is now safe\n }\n}\n","// Based on https://github.com/afcapel/stimulus-autocomplete\n\nimport ApplicationController from './application_controller'\nimport debounce from \"lodash.debounce\"\n\nexport default class extends ApplicationController {\n // the \"pillbox\" shows selected items, the \"input\" is displayed for text entry, the \"hidden\" is submitted,\n // and \"results\" is where the search results go\n static targets = [\"pillbox\", \"input\", \"hidden\", \"results\", \"closeButtonTemplate\"]\n static values = {\n minLength: Number,\n inputName: String,\n submitOnEnter: Boolean,\n url: String\n }\n\n connect() {\n this.resultsTarget.hidden = true\n\n this.inputTarget.setAttribute(\"autocomplete\", \"off\")\n this.inputTarget.setAttribute(\"spellcheck\", \"false\")\n\n this.mouseDown = false\n\n this.onInputChange = debounce(this.onInputChange.bind(this), 300)\n this.onResultsClick = this.onResultsClick.bind(this)\n this.onResultsMouseDown = this.onResultsMouseDown.bind(this)\n this.onInputBlur = this.onInputBlur.bind(this)\n this.onKeydown = this.onKeydown.bind(this)\n\n this.inputTarget.addEventListener(\"keydown\", this.onKeydown)\n this.inputTarget.addEventListener(\"blur\", this.onInputBlur)\n this.inputTarget.addEventListener(\"input\", this.onInputChange)\n this.resultsTarget.addEventListener(\"mousedown\", this.onResultsMouseDown)\n this.resultsTarget.addEventListener(\"click\", this.onResultsClick)\n\n // Set up a blank so that, in case all the pills are removed, the field is still submitted\n // Without that, Rails won't update the field/association\n let input = document.createElement(\"input\")\n input.name = this.inputNameValue\n this.hiddenTarget.append(input)\n\n if (typeof this.inputTarget.getAttribute(\"autofocus\") === \"string\") {\n this.inputTarget.focus()\n }\n\n // Instrument the starting pills' close boxes\n this.pillboxTarget.querySelectorAll('.pill').forEach(\n (pill)=>{\n const removeButton = pill.querySelector('.remove_button')\n const id = pill.getAttribute('data-select-id')\n removeButton.addEventListener('click', ()=>{ this.removeValue(id) })\n }\n )\n\n // Listen for form reset events\n this.inputTarget.closest('form').addEventListener('reset', ()=>{\n this.hiddenTarget.querySelectorAll('input').forEach((el)=>{\n this.removeValue(el.getAttribute('value'))\n })\n })\n\n }\n\n disconnect() {\n if (this.hasInputTarget) {\n this.inputTarget.removeEventListener(\"keydown\", this.onKeydown)\n this.inputTarget.removeEventListener(\"focus\", this.onInputFocus)\n this.inputTarget.removeEventListener(\"blur\", this.onInputBlur)\n this.inputTarget.removeEventListener(\"input\", this.onInputChange)\n }\n if (this.hasResultsTarget) {\n this.resultsTarget.removeEventListener(\n \"mousedown\",\n this.onResultsMouseDown\n )\n this.resultsTarget.removeEventListener(\"click\", this.onResultsClick)\n }\n }\n\n sibling(next) {\n const options = Array.from(\n this.resultsTarget.querySelectorAll(\n '[role=\"option\"]:not([aria-disabled])'\n )\n )\n const selected = this.resultsTarget.querySelector('[aria-selected=\"true\"]')\n const index = options.indexOf(selected)\n const sibling = next ? options[index + 1] : options[index - 1]\n const def = next ? options[0] : options[options.length - 1]\n return sibling || def\n }\n\n // Select the correct option from the dropdown, triggered by keyboard input like up/down arrows\n select(target) {\n for (const el of this.resultsTarget.querySelectorAll(\n '[aria-selected=\"true\"]'\n )) {\n el.removeAttribute(\"aria-selected\")\n el.classList.remove(\"active\")\n }\n target.setAttribute(\"aria-selected\", \"true\")\n target.classList.add(\"active\")\n this.inputTarget.setAttribute(\"aria-activedescendant\", target.id)\n this.inputTarget.scrollIntoView({block: 'center'})\n }\n\n onKeydown(event) {\n switch (event.key) {\n case \"Escape\":\n if (!this.resultsTarget.hidden) {\n this.hideAndRemoveOptions()\n event.stopPropagation()\n event.preventDefault()\n }\n break\n case \"ArrowDown\":\n {\n const item = this.sibling(true)\n if (item) this.select(item)\n event.preventDefault()\n }\n break\n case \"ArrowUp\":\n {\n const item = this.sibling(false)\n if (item) this.select(item)\n event.preventDefault()\n }\n break\n case \"Tab\":\n {\n const selected = this.resultsTarget.querySelector(\n '[aria-selected=\"true\"]'\n )\n if (selected) {\n this.commit(selected)\n }\n }\n break\n case \"Enter\":\n {\n if(!this.resultsTarget.hidden) {\n // If the user has selected an option, use it\n let selected = this.resultsTarget.querySelector(\n '[aria-selected=\"true\"]'\n )\n if(!selected) {\n // If there is only one option, use it\n const results = this.resultsTarget.querySelectorAll('li')\n if(results.length == 1) {\n selected = results[0]\n }\n }\n if (selected) {\n this.commit(selected)\n }\n if (!this.hasSubmitOnEnterValue) {\n event.preventDefault()\n }\n }\n }\n break\n }\n }\n\n onInputBlur() {\n if (this.mouseDown) return\n this.resultsTarget.hidden = true\n }\n\n commit(selected) {\n if (selected.hasAttribute(\"aria-disabled\")) return\n\n if (selected instanceof HTMLAnchorElement) {\n selected.click()\n this.resultsTarget.hidden = true\n return\n }\n\n const textValue = this.extractTextValue(selected)\n const value = selected.getAttribute(\"data-autocomplete-multiselect-value\") || selected.getAttribute(\"data-autocomplete-value\") || textValue\n\n if (this.hasHiddenTarget) {\n // Clear the input text\n this.inputTarget.value = ''\n\n if (this.getPill(value)) return\n\n this.addValue(textValue, value)\n\n this.hiddenTarget.dispatchEvent(new Event(\"input\"))\n this.hiddenTarget.dispatchEvent(new Event(\"change\"))\n } else {\n this.inputTarget.value = value\n }\n\n this.inputTarget.focus()\n this.hideAndRemoveOptions()\n }\n\n getPill(value) {\n let pill = this.pillboxTarget.querySelector(\".pill[data-select-id='\" + value + \"']\")\n return pill\n }\n\n addPill(text, value) {\n let pill = document.createElement(\"div\")\n pill.setAttribute('class', 'pill')\n pill.setAttribute('data-select-id', value)\n pill.appendChild(document.createTextNode(text))\n pill.appendChild(this.closeButtonTemplateTarget.content.cloneNode(true))\n pill.firstElementChild.addEventListener('click', ()=>{ this.removeValue(value) })\n this.pillboxTarget.appendChild(pill)\n }\n\n removePill(value) {\n let pill = this.getPill(value)\n if (pill) {\n pill.remove()\n }\n }\n\n addValue(text, value) {\n let input = document.createElement(\"input\")\n input.name = this.inputNameValue\n input.setAttribute('value', value)\n this.hiddenTarget.append(input)\n this.addPill(text, value)\n this.inputTarget.innerHTML = ''\n this.broadcastChange(value, text, 'addition')\n }\n\n removeValue(value) {\n this.hiddenTarget.querySelectorAll(\"input[value='\" + value + \"']\").forEach((el) => { el.remove() })\n this.removePill(value)\n\n this.hiddenTarget.dispatchEvent(new Event(\"input\"))\n this.hiddenTarget.dispatchEvent(new Event(\"change\"))\n this.broadcastChange(value, '', 'deletion')\n }\n\n broadcastChange(value, textValue, type) {\n this.element.dispatchEvent(\n new CustomEvent(\"autocompleteMultiselect.change\", {\n bubbles: true,\n detail: { value: value, textValue: textValue, type: type }\n })\n )\n }\n\n onResultsClick(event) {\n if (!(event.target instanceof Element)) return\n const selected = event.target.closest('[role=\"option\"]')\n if (selected) this.commit(selected)\n }\n\n onResultsMouseDown() {\n this.mouseDown = true\n this.resultsTarget.addEventListener(\n \"mouseup\",\n () => (this.mouseDown = false),\n { once: true }\n )\n }\n\n onInputChange() {\n this.element.removeAttribute(\"value\")\n this.fetchResults()\n }\n\n identifyOptions() {\n let id = 0\n for (const el of this.resultsTarget.querySelectorAll(\n '[role=\"option\"]:not([id])'\n )) {\n el.id = `${this.resultsTarget.id}-option-${id++}`\n }\n }\n\n hideAndRemoveOptions() {\n this.resultsTarget.hidden = true\n this.resultsTarget.innerHTML = null\n }\n\n fetchResults(ids = []) {\n const query = this.inputTarget.value.trim()\n if (!query || query.length < this.minLengthValue) {\n this.hideAndRemoveOptions()\n return\n }\n\n if (!this.hasUrlValue) return\n\n const headers = { \"X-Requested-With\": \"XMLHttpRequest\" }\n const url = new URL(this.urlValue, window.location.href)\n const params = new URLSearchParams(url.search.slice(1))\n if (ids.length > 0) {\n params.append(\"ids\", ids)\n } else {\n params.append(\"q\", query)\n }\n url.search = params.toString()\n\n this.element.dispatchEvent(new CustomEvent(\"loadstart\"))\n\n fetch(url.toString(), { headers })\n .then(response => response.text())\n .then(html => {\n this.resultsTarget.innerHTML = html\n this.identifyOptions()\n const hasResults = !!this.resultsTarget.querySelector('[role=\"option\"]')\n this.resultsTarget.hidden = !hasResults\n this.element.dispatchEvent(new CustomEvent(\"load\"))\n this.element.dispatchEvent(new CustomEvent(\"loadend\"))\n })\n .catch(() => {\n this.element.dispatchEvent(new CustomEvent(\"error\"))\n this.element.dispatchEvent(new CustomEvent(\"loadend\"))\n })\n }\n\n open() {\n if (!this.resultsTarget.hidden) return\n this.resultsTarget.hidden = false\n this.element.setAttribute(\"aria-expanded\", \"true\")\n this.element.dispatchEvent(\n new CustomEvent(\"toggle\", {\n detail: { input: this.input, results: this.results }\n })\n )\n }\n\n close() {\n if (this.resultsTarget.hidden) return\n this.resultsTarget.hidden = true\n this.inputTarget.removeAttribute(\"aria-activedescendant\")\n this.element.setAttribute(\"aria-expanded\", \"false\")\n this.element.dispatchEvent(\n new CustomEvent(\"toggle\", {\n detail: { input: this.input, results: this.results }\n })\n )\n }\n\n extractTextValue = el =>\n el.hasAttribute(\"data-autocomplete-multiselect-label\")\n ? el.getAttribute(\"data-autocomplete-multiselect-label\")\n : el.textContent.trim()\n}\n","// Forked from https://github.com/afcapel/stimulus-autocomplete.\n\nimport ApplicationController from './application_controller'\nimport debounce from \"lodash.debounce\"\n\nexport default class extends ApplicationController {\n static targets = [\"input\", \"hidden\", \"results\"]\n static values = {\n submitOnEnter: Boolean,\n url: String,\n minLength: Number\n }\n\n connect() {\n this.resultsTarget.hidden = true\n\n this.inputTarget.setAttribute(\"autocomplete\", \"off\")\n this.inputTarget.setAttribute(\"spellcheck\", \"false\")\n\n this.mouseDown = false\n\n this.onInputChange = debounce(this.onInputChange.bind(this), 300)\n this.onResultsClick = this.onResultsClick.bind(this)\n this.onResultsMouseDown = this.onResultsMouseDown.bind(this)\n this.onInputBlur = this.onInputBlur.bind(this)\n this.onKeydown = this.onKeydown.bind(this)\n\n this.inputTarget.addEventListener(\"keydown\", this.onKeydown)\n this.inputTarget.addEventListener(\"blur\", this.onInputBlur)\n this.inputTarget.addEventListener(\"input\", this.onInputChange)\n this.resultsTarget.addEventListener(\"mousedown\", this.onResultsMouseDown)\n this.resultsTarget.addEventListener(\"click\", this.onResultsClick)\n\n if (typeof this.inputTarget.getAttribute(\"autofocus\") === \"string\") {\n this.inputTarget.focus()\n }\n }\n\n disconnect() {\n if (this.hasInputTarget) {\n this.inputTarget.removeEventListener(\"keydown\", this.onKeydown)\n this.inputTarget.removeEventListener(\"focus\", this.onInputFocus)\n this.inputTarget.removeEventListener(\"blur\", this.onInputBlur)\n this.inputTarget.removeEventListener(\"input\", this.onInputChange)\n }\n if (this.hasResultsTarget) {\n this.resultsTarget.removeEventListener(\n \"mousedown\",\n this.onResultsMouseDown\n )\n this.resultsTarget.removeEventListener(\"click\", this.onResultsClick)\n }\n }\n\n sibling(next) {\n const options = Array.from(\n this.resultsTarget.querySelectorAll(\n '[role=\"option\"]:not([aria-disabled])'\n )\n )\n const selected = this.resultsTarget.querySelector('[aria-selected=\"true\"]')\n const index = options.indexOf(selected)\n const sibling = next ? options[index + 1] : options[index - 1]\n const def = next ? options[0] : options[options.length - 1]\n return sibling || def\n }\n\n select(target) {\n for (const el of this.resultsTarget.querySelectorAll(\n '[aria-selected=\"true\"]'\n )) {\n el.removeAttribute(\"aria-selected\")\n el.classList.remove(\"active\")\n }\n target.setAttribute(\"aria-selected\", \"true\")\n target.classList.add(\"active\")\n this.inputTarget.setAttribute(\"aria-activedescendant\", target.id)\n this.inputTarget.scrollIntoView({block: 'center'})\n }\n\n onKeydown(event) {\n switch (event.key) {\n case \"Escape\":\n if (!this.resultsTarget.hidden) {\n this.hideAndRemoveOptions()\n event.stopPropagation()\n event.preventDefault()\n }\n break\n case \"ArrowDown\":\n {\n const item = this.sibling(true)\n if (item) this.select(item)\n event.preventDefault()\n }\n break\n case \"ArrowUp\":\n {\n const item = this.sibling(false)\n if (item) this.select(item)\n event.preventDefault()\n }\n break\n case \"Tab\":\n {\n const selected = this.resultsTarget.querySelector(\n '[aria-selected=\"true\"]'\n )\n if (selected) {\n this.commit(selected)\n }\n }\n break\n case \"Enter\":\n {\n const selected = this.resultsTarget.querySelector(\n '[aria-selected=\"true\"]'\n )\n if (selected && !this.resultsTarget.hidden) {\n this.commit(selected)\n if (!this.hasSubmitOnEnterValue) {\n event.preventDefault()\n }\n }\n }\n break\n }\n }\n\n onInputBlur() {\n if (this.mouseDown) return\n this.resultsTarget.hidden = true\n }\n\n commit(selected) {\n let textValue\n let value\n\n if (selected === null || selected === undefined) {\n textValue = \"\"\n value = \"\"\n } else {\n if (selected.hasAttribute(\"aria-disabled\")) return\n\n if (selected instanceof HTMLAnchorElement) {\n selected.click()\n this.resultsTarget.hidden = true\n return\n }\n\n textValue = this.extractTextValue(selected)\n value = selected.getAttribute(\"data-autocomplete-value\") || textValue\n }\n\n this.inputTarget.value = textValue\n\n if (this.hasHiddenTarget) {\n this.hiddenTarget.value = value\n this.hiddenTarget.dispatchEvent(new Event(\"input\"))\n this.hiddenTarget.dispatchEvent(new Event(\"change\"))\n }\n\n this.inputTarget.focus()\n this.hideAndRemoveOptions()\n\n this.element.dispatchEvent(\n new CustomEvent(\"autocomplete.change\", {\n bubbles: true,\n detail: { value: value, textValue: textValue }\n })\n )\n }\n\n onResultsClick(event) {\n if (!(event.target instanceof Element)) return\n const selected = event.target.closest('[role=\"option\"]')\n if (selected) this.commit(selected)\n }\n\n onResultsMouseDown() {\n this.mouseDown = true\n this.resultsTarget.addEventListener(\n \"mouseup\",\n () => (this.mouseDown = false),\n { once: true }\n )\n }\n\n onInputChange() {\n this.element.removeAttribute(\"value\")\n this.fetchResults()\n }\n\n identifyOptions() {\n let id = 0\n for (const el of this.resultsTarget.querySelectorAll(\n '[role=\"option\"]:not([id])'\n )) {\n el.id = `${this.resultsTarget.id}-option-${id++}`\n }\n }\n\n hideAndRemoveOptions() {\n this.resultsTarget.hidden = true\n this.resultsTarget.innerHTML = null\n }\n\n fetchResults() {\n const query = this.inputTarget.value.trim()\n if (!query || query.length < this.minLengthValue) {\n this.hideAndRemoveOptions()\n\n return\n }\n\n if (!this.hasUrlValue) return\n\n const headers = { \"X-Requested-With\": \"XMLHttpRequest\" }\n const url = new URL(this.urlValue, window.location.href)\n const params = new URLSearchParams(url.search.slice(1))\n params.append(\"q\", query)\n url.search = params.toString()\n\n this.element.dispatchEvent(new CustomEvent(\"loadstart\"))\n\n fetch(url.toString(), { headers })\n .then(response => response.text())\n .then(html => {\n this.resultsTarget.innerHTML = html\n this.identifyOptions()\n const hasResults = !!this.resultsTarget.querySelector('[role=\"option\"]')\n this.resultsTarget.hidden = !hasResults\n this.element.dispatchEvent(new CustomEvent(\"load\"))\n this.element.dispatchEvent(new CustomEvent(\"loadend\"))\n })\n .catch(() => {\n this.element.dispatchEvent(new CustomEvent(\"error\"))\n this.element.dispatchEvent(new CustomEvent(\"loadend\"))\n })\n }\n\n open() {\n if (!this.resultsTarget.hidden) return\n this.resultsTarget.hidden = false\n this.element.setAttribute(\"aria-expanded\", \"true\")\n this.element.dispatchEvent(\n new CustomEvent(\"toggle\", {\n detail: { input: this.input, results: this.results }\n })\n )\n }\n\n close() {\n if (this.resultsTarget.hidden) return\n this.resultsTarget.hidden = true\n this.inputTarget.removeAttribute(\"aria-activedescendant\")\n this.element.setAttribute(\"aria-expanded\", \"false\")\n this.element.dispatchEvent(\n new CustomEvent(\"toggle\", {\n detail: { input: this.input, results: this.results }\n })\n )\n }\n\n extractTextValue = el =>\n el.hasAttribute(\"data-autocomplete-label\")\n ? el.getAttribute(\"data-autocomplete-label\")\n : el.textContent.trim()\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"text\", \"icon\"]\n static values = {\n title: { type: String, default: null }\n }\n\n connect() {\n this.updateText = this.updateText.bind(this)\n setTimeout(() => {\n this.updateText()\n this.iconTarget.style.opacity = \"1\"\n }, 100)\n document.addEventListener(\"turbo:load\", this.updateText)\n }\n\n disconnect() {\n document.removeEventListener(\"turbo:load\", this.updateText)\n }\n\n updateText() {\n if (!this.hasTextTarget) return\n\n let newText = \"Back\"\n if (this.hasTitleValue && this.titleValue) {\n newText = `Back to ${this.titleValue}`\n } else {\n const previousTitle = localStorage.getItem(\"previousPageTitle\")\n if (previousTitle) {\n newText = `Back to ${previousTitle}`\n }\n }\n\n if (this.textTarget.textContent !== newText) {\n this.textTarget.style.opacity = \"0\"\n setTimeout(() => {\n this.textTarget.textContent = newText\n this.textTarget.style.opacity = \"1\"\n }, 200)\n }\n }\n\n goBack() {\n history.back()\n }\n} ","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n insightId: String\n }\n\n connect() {\n console.log(\"Backflow table controller connected\")\n }\n\n loadBackflowDetails(event) {\n const state = event.currentTarget.dataset.state\n const urlParams = new URLSearchParams(window.location.search)\n const timeWindow = urlParams.get(\"tw\")\n const userId = urlParams.get(\"user_id\")\n const teamId = urlParams.get(\"id\")\n \n const params = new URLSearchParams({\n state,\n ...(timeWindow && { tw: timeWindow }),\n ...(userId && { user_id: userId }),\n ...(teamId && { id: teamId })\n })\n \n // Update backflow details\n const url = `/insights/productivity/backflow_details?${params}`\n const frame = document.getElementById(\"backflow_details\")\n frame.setAttribute(\"src\", url)\n \n // Update selected state\n this.element.querySelectorAll(\".backflow-item\").forEach(item => {\n item.classList.remove(\"selected\")\n })\n event.currentTarget.classList.add(\"selected\")\n\n // After the frame loads, scroll to it\n frame.addEventListener(\"turbo:frame-load\", () => {\n const detailsElement = document.querySelector(\".backflow-details-table\")\n if (detailsElement) {\n detailsElement.scrollIntoView({ behavior: \"smooth\", block: \"start\" })\n }\n }, { once: true })\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"count\", \"priority\"]\n\n connect() {\n // Get initial metric type from URL\n const urlParams = new URLSearchParams(window.location.search)\n const metricType = urlParams.get(\"bug_display_type\") || \"count\"\n \n // Set initial button states\n this.updateButtonStates(metricType)\n \n // Add event listener for turbo:frame-load to handle completion\n document.addEventListener(\"turbo:frame-load\", this.handleFrameLoad)\n }\n \n disconnect() {\n // Clean up event listener when controller is disconnected\n document.removeEventListener(\"turbo:frame-load\", this.handleFrameLoad)\n }\n \n handleFrameLoad = (event) => {\n // Only handle events for our specific frame\n if (event.target.id === \"efficiency_content\") {\n // Frame has loaded, any cleanup needed can be done here\n console.log(\"Frame load complete\")\n }\n }\n\n toggleMetric(event) {\n const button = event.currentTarget\n const metricType = button.dataset.metricType\n\n // Update button states\n this.updateButtonStates(metricType)\n\n // Update URL and add to browser history\n const url = new URL(window.location.href)\n url.searchParams.set(\"bug_display_type\", metricType)\n window.history.pushState({}, \"\", url.toString())\n\n // Get the current path and update it for the frame request\n const frame = document.getElementById(\"efficiency_content\")\n if (frame) {\n // Create URL for the frame request\n const frameUrl = new URL(window.location.href)\n frameUrl.pathname = \"/insights/efficiency\"\n \n // Get all current URL parameters\n const currentParams = new URLSearchParams(window.location.search)\n \n // Add all existing parameters to the frame URL\n currentParams.forEach((value, key) => {\n frameUrl.searchParams.set(key, value)\n })\n \n // Update or add the metric_type parameter\n frameUrl.searchParams.set(\"bug_display_type\", metricType)\n \n // Find chart container and metric boxes container\n const toggleContainer = this.element.closest('.chart-header')\n const header = toggleContainer ? toggleContainer.closest('header') : null\n const card = header ? header.closest('.chart-card') : null\n const cardBody = card ? card.querySelector('cardbody') : null\n const contentDiv = cardBody ? cardBody.querySelector('div[style*=\"padding: 25px\"]') : null\n const metricBoxesContainer = contentDiv ? contentDiv.querySelector('.metric_boxes') : null\n let chartContainer = null\n if (contentDiv) {\n chartContainer = contentDiv.querySelector('[data-react-component=\"WeeklyTimeSeriesChart\"]')\n }\n \n // Add shimmer animation if it doesn't exist\n if (!document.getElementById('shimmer-animation')) {\n const style = document.createElement('style')\n style.id = 'shimmer-animation'\n style.textContent = `\n .shimmer {\n background-image: linear-gradient(\n 90deg,\n var(--color-neutral-10) 0%,\n var(--color-neutral-20) 50%,\n var(--color-neutral-10) 100%\n );\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n }\n \n @keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n }\n `\n document.head.appendChild(style)\n }\n \n // Function to set metric box skeletons\n const setMetricBoxSkeletons = () => {\n if (metricBoxesContainer) {\n const metricBoxes = metricBoxesContainer.querySelectorAll('.card')\n metricBoxes.forEach(box => {\n const originalHeight = box.offsetHeight + 'px'\n box.innerHTML = `\n \n
\n
\n
\n
\n
\n
\n `\n })\n }\n }\n \n // Function to set chart skeleton\n const setChartSkeleton = () => {\n if (chartContainer) {\n // Save the original height\n const height = chartContainer.style.height\n \n // Fetch the skeleton chart partial and insert it into the chart container\n fetch('/shared/skeleton_chart?height=' + (height || '400px'))\n .then(response => response.text())\n .then(html => {\n chartContainer.innerHTML = html\n // Set metric box skeletons at the same time\n setMetricBoxSkeletons()\n })\n .catch(() => {\n // Fallback if fetch fails - use a simple loading message\n chartContainer.innerHTML = `\n
\n
\n

Loading chart...

\n
\n
\n `\n // Still set metric box skeletons even if fetch fails\n setMetricBoxSkeletons()\n })\n } else {\n // If no chart container, still set metric box skeletons\n setMetricBoxSkeletons()\n }\n }\n \n // Start the loading process\n setChartSkeleton();\n \n // Make the frame request\n Turbo.visit(frameUrl.toString(), { frame: \"efficiency_content\" });\n }\n }\n\n updateButtonStates(metricType) {\n this.countTarget.dataset.active = (metricType === \"count\").toString()\n this.priorityTarget.dataset.active = (metricType === \"priority\").toString()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"partialCredit\", \"allOrNothing\"]\n\n connect() {\n // Check for burndown_type in URL\n const urlParams = new URLSearchParams(window.location.search)\n const burndownTypeFromUrl = urlParams.get('burndown_type')\n \n // Determine which burndown type to show\n let burndownType\n if (burndownTypeFromUrl === 'partial_credit' || burndownTypeFromUrl === 'standard') {\n burndownType = burndownTypeFromUrl\n } else {\n // Fall back to data-active attributes if no valid URL parameter\n burndownType = this.hasPartialCreditTarget && this.partialCreditTarget.dataset.active === \"true\" ? \"partial_credit\" : \"standard\"\n }\n \n // Update burndown button states\n if (this.hasPartialCreditTarget && this.hasAllOrNothingTarget) {\n this.updateBurndownButtonStates(burndownType)\n }\n }\n\n toggleBurndownType(event) {\n const button = event.currentTarget\n const burndownType = button.dataset.burndownType\n const TRANSITION_DURATION = 400 // ms, matching CSS transition time\n const MINIMUM_LOADING_TIME = 600 // ms\n\n // Update button states\n this.updateBurndownButtonStates(burndownType)\n\n // Refresh the burndown chart with the selected type\n const chartContainer = event.currentTarget.closest('.sprint-details__tab-content').querySelector('.sprint-details__chart')\n if (chartContainer) {\n // Get the chart element\n const chartElement = chartContainer.querySelector('#burndown_chart')\n \n // Start the fade-out animation\n chartElement.classList.add('fade-out')\n \n // Record the time when loading started\n const loadingStartTime = Date.now()\n \n // Wait for the fade-out to complete before loading new data\n setTimeout(() => {\n // Create URL for the request\n const url = new URL(window.location.href)\n \n // Update or add the burndown_type parameter\n url.searchParams.set(\"burndown_type\", burndownType)\n \n // Make the request to update the chart\n fetch(url.toString(), { headers: { \"Accept\": \"text/vnd.turbo-stream.html\" }})\n .then(response => response.text())\n .then(html => {\n // Calculate how long we've been loading\n const currentLoadTime = Date.now() - loadingStartTime\n const remainingWaitTime = Math.max(0, MINIMUM_LOADING_TIME - currentLoadTime)\n \n // Wait for minimum loading time before showing the new chart\n setTimeout(() => {\n // Find the turbo-stream element for the burndown chart\n const parser = new DOMParser()\n const doc = parser.parseFromString(html, \"text/html\")\n const stream = doc.querySelector('turbo-stream[target=\"burndown_chart\"]')\n \n if (stream) {\n // Update the chart content\n chartElement.innerHTML = stream.querySelector('template').content.firstElementChild.innerHTML\n \n // Fade in the new chart\n chartElement.classList.remove('fade-out')\n chartElement.classList.add('fade-in')\n \n // Remove the fade-in class after animation completes\n setTimeout(() => {\n chartElement.classList.remove('fade-in')\n }, TRANSITION_DURATION)\n } else {\n // If no turbo-stream found, just show chart\n chartElement.classList.remove('fade-out')\n console.error(\"Could not find burndown chart in response\")\n }\n }, remainingWaitTime)\n })\n .catch(error => {\n console.error('Error updating burndown chart:', error)\n \n // Show chart on error\n chartElement.classList.remove('fade-out')\n })\n \n // Update the main URL without reloading the page\n const newUrl = new URL(window.location.href)\n newUrl.searchParams.set(\"burndown_type\", burndownType)\n window.history.pushState({}, \"\", newUrl.toString())\n }, TRANSITION_DURATION)\n }\n }\n \n updateBurndownButtonStates(burndownType) {\n this.partialCreditTarget.dataset.active = (burndownType === \"partial_credit\").toString()\n this.allOrNothingTarget.dataset.active = (burndownType === \"standard\").toString()\n }\n} ","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static targets = ['icon']\n\n connect() {\n this.setHintText(this.element)\n }\n\n setHintText(element) {\n const hint = this.contacted ? `You have already talked to ${this.candidateName}. Reach out to ${this.candidateObjectPronoun} again?` : `Start a conversation with ${this.candidateName}?`\n element.setAttribute('title', hint)\n }\n\n confirmationMessage() {\n let message = ''\n\n if(this.contacted) {\n message += `Are you sure you want to reach out to ${this.candidateName} again? It looks like someone in your company already has.`\n } else {\n message += `Are you interested in reaching out to ${this.candidateName} for ${this.jobId ? 'this' : 'a'} role?`\n }\n\n message += `\\n\\nIf you are interested, we'll send an email on your behalf ${this.jobId ? 'referencing this job posting ' : ''}and ask ${this.candidateObjectPronoun} to respond to start the interview process!`\n\n if(!this.jobId) {\n message += `\\n\\nIf you're interested in ${this.candidateName} for a particular role you can reach out to ${this.candidateObjectPronoun} from the jobs section of the YearOne platform, and we can include the job details in the initial email.`\n }\n return message\n }\n\n get contacted() {\n return this.element.classList.contains('contacted')\n }\n\n get candidateName() {\n return this.element.dataset.candidateFirstName\n }\n\n get candidateObjectPronoun() {\n return this.element.dataset.candidateObjectPronoun\n }\n\n get jobId() {\n return this.element.dataset.jobId\n }\n\n createContact(event) {\n event.stopPropagation()\n event.preventDefault()\n\n // JS confirm\n if(!confirm(this.confirmationMessage())) {\n return\n }\n\n this.ping()\n\n // trigger the job\n this.log(\"Sending contact email to candidate\", this.element.dataset.candidateId)\n fetch(this.element.href, {\n method: 'POST',\n headers: this.ajaxHeaders()\n }).then(response => {\n if(response.status == 200) {\n if(this.element.dataset.customerEmail) {\n alert(`We have reached out. ${this.candidateName} will get back to you by email at ${this.element.dataset.customerEmail}.`)\n } else {\n alert(`We have reached out. ${this.candidateName} will get back to you by email.`)\n }\n this.markAllCardsAsContacted()\n } else {\n alert(\"Something went wrong and we couldn't reach out! Please try again and contact support@joinyearone.io if the problem persists.\")\n }\n })\n }\n\n // send a tracking ping to the server\n ping() {\n if(this.element.dataset.pingUrl) {\n fetch(this.element.dataset.pingUrl, {\n method: 'POST',\n headers: {...this.ajaxHeaders(), 'ping-from': window.location.href, 'ping-to': this.element.href}\n }).then(response => { this.log('ping complete') })\n }\n }\n\n // Flip the toggle in the UI, for all instances of the candidate card.\n // This isn't a real toggle -- it's one-way -- so the logic is relatively simple.\n markAllCardsAsContacted() {\n let selector = 'a[data-controller=\"candidate-conversation\"][data-candidate-id=\"' + this.element.dataset.candidateId + '\"]'\n this.log(\"updating cards with selector\", selector)\n\n document.querySelectorAll(selector).forEach(linkElement => {\n linkElement.classList.add('contacted')\n linkElement.children[0].classList.add('inverted')\n this.setHintText(linkElement)\n })\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static targets = [\"ignoreClicks\"]\n static values = {\n markAsSelectedOnClick: Boolean, // Defaults to true\n ping: String\n }\n\n connect() {\n super.connect()\n\n this.markAsSelectedOnClick = this.hasMarkAsSelectedOnClickValue ? this.markAsSelectedOnClickValue : true\n\n const magicLink = this.element.querySelector('.magic_link')\n if(magicLink) {\n this.magicLink = magicLink\n } else {\n this.magicLink = document.createElement('a')\n this.magicLink.href = this.element.dataset.href\n if(this.element.attributes.target) {\n this.magicLink.dataset.turboFrame = this.element.attributes.target.nodeValue\n } else {\n if(this.element.dataset.turboFrame) {\n this.magicLink.dataset.turboFrame = this.element.dataset.turboFrame\n }\n if(this.element.dataset.turboAction) {\n this.magicLink.dataset.turboAction = this.element.dataset.turboAction\n }\n if(this.element.dataset.method) {\n this.magicLink.setAttribute('method', this.element.dataset.method)\n }\n }\n this.magicLink.classList = 'magic_link hidden'\n this.element.prepend(this.magicLink)\n }\n }\n\n openDetail(event) {\n const clickedElement = event.target\n const interactiveElements = ['a', 'button', 'input', 'textarea', 'select', 'dropdown', 'toggle']\n\n // Filter out clicks on active links, form elements, and targets where we ignore clicks; we only want clicks on the card\n if((clickedElement.disabled || !interactiveElements.includes(clickedElement.localName)) && !clickedElement.closest(\"[data-card-target=ignoreClicks]\")) {\n event.stopPropagation()\n event.preventDefault()\n\n this.markCardAsSelected()\n\n if(this.hasPingValue) {\n fetch(this.pingValue, {method: 'POST'}) // Telemetry collection: fire and forget\n }\n\n // If the card opens a modal, make sure we know when the modal closes so we can handle history correctly\n if(this.magicLink.dataset.turboFrame == 'modal') {\n document.querySelector('#modal')\n .addEventListener('modal:closed', this.modalCloseHandler.bind(this), {once: true})\n }\n\n // Non-same-origin links can't be pushed onto the state, and should be opened in a new window anyway\n // So rather than parsing links, if the pushState() call throws an error, we catch it go to new window\n try {\n history.pushState({}, '', this.element.dataset.historyHref || this.element.dataset.href)\n }\n catch(err) {\n this.magicLink.target = '_blank'\n this.magicLink.setAttribute('aria-label', 'opens in a new window')\n }\n this.magicLink.click()\n }\n }\n\n markCardAsSelected() {\n if(this.markAsSelectedOnClick) {\n const selectedSibling = this.element.parentElement.querySelector(this.element.tagName + '.selected')\n if(selectedSibling) {\n selectedSibling.classList.remove('selected')\n }\n this.element.classList.add('selected')\n }\n }\n\n deselectCard() {\n this.element.classList.remove('selected')\n }\n\n modalCloseHandler() {\n this.deselectCard()\n history.back()\n }\n}\n\n","import ApplicationController from './application_controller'\nimport throttle from \"lodash.throttle\"\n\n// Controller for handling a Carousel, which is a modified card grid.\nexport default class extends ApplicationController {\n static values = {\n throttleDuration: {type: Number, default: 150}\n }\n\n connect() {\n super.connect()\n this.cardGrid = this.element.querySelector('.card_grid')\n this.createExtraMarkup()\n this.instrumentNavigation()\n this.toggleScrollButtonStatus()\n this.prepareForResizing()\n }\n\n // Generate the custom markup the carousel needs, for prev & next buttons\n createExtraMarkup() {\n this.element.setAttribute('aria-label', 'carousel')\n this.element.setAttribute('role', 'contentinfo')\n this.cardGrid.classList.add('carousel')\n\n this.prevScrollButton = document.createElement('div')\n this.prevScrollButton.setAttribute('aria-label', 'scroll carousel left')\n this.prevScrollButton.setAttribute('role', 'button')\n this.prevScrollButton.setAttribute('tabindex', 0)\n this.prevScrollButton.classList.add('carousel-prev')\n this.element.appendChild(this.prevScrollButton)\n\n this.nextScrollButton = document.createElement('div')\n this.nextScrollButton.setAttribute('aria-label', 'scroll carousel right')\n this.nextScrollButton.setAttribute('role', 'button')\n this.nextScrollButton.setAttribute('tabindex', 0)\n this.nextScrollButton.classList.add('carousel-next')\n this.element.appendChild(this.nextScrollButton)\n }\n\n // Instrument the prev & next buttons so we can handle their clicks\n instrumentNavigation() {\n this.scrollPrev = this.scrollPrev.bind(this)\n this.scrollNext = this.scrollNext.bind(this)\n this.toggleScrollButtonStatus = this.toggleScrollButtonStatus.bind(this)\n\n this.prevScrollButton.addEventListener('click', this.scrollPrev)\n this.nextScrollButton.addEventListener('click', this.scrollNext)\n this.cardGrid.addEventListener('scroll', throttle(this.toggleScrollButtonStatus, this.throttleDurationValue))\n }\n\n // Calculate the width of the viewport\n viewportWidth() {\n return this.element.offsetWidth\n }\n\n // Calculate the width of the carousel content\n totalWidth() {\n return this.cardGrid.scrollWidth\n }\n\n // Based on the relative widths of the content & viewport, do we even need a carousel?\n carouselIsNeeded() {\n return this.viewportWidth() < this.totalWidth()\n }\n\n // Setup\n prepareForResizing() {\n this.enableOrDisable = this.enableOrDisable.bind(this)\n window.addEventListener('resize', throttle(this.enableOrDisable, this.throttleDurationValue))\n this.enableOrDisable()\n }\n\n // Event handler that decides if the carousel is needed (based on content width & viewport width), and toggles\n // the carousel on or off accordingly.\n enableOrDisable(event) {\n if(this.carouselIsNeeded()) {\n if(this.element.classList.contains('disabled')) {\n this.element.classList.remove('disabled')\n this.cardGrid.scrollTo({left: 0, behavior: 'smooth'})\n this.toggleScrollButtonStatus()\n }\n } else {\n this.element.classList.add('disabled')\n }\n }\n\n // Calculate the width of a card plus the grid cap. Get it from the CSS.\n cardWidthWithGap() {\n const card = this.cardGrid.querySelector('.card')\n const columnGap = parseInt(getComputedStyle(this.cardGrid).getPropertyValue('column-gap').split('px')[0]);\n return card.offsetWidth + columnGap\n }\n\n // Scroll one card to the left\n scrollPrev() {\n const card = this.cardGrid.querySelector('.card')\n this.cardGrid.scrollTo({left: this.cardGrid.scrollLeft - this.cardWidthWithGap(), behavior: 'smooth'})\n }\n\n // Scroll one card to the right\n scrollNext() {\n const card = this.cardGrid.querySelector('.card')\n this.cardGrid.scrollTo({left: this.cardGrid.scrollLeft + this.cardWidthWithGap(), behavior: 'smooth'})\n }\n\n // Switch the prev/next buttons on or off depending on the scroll location\n toggleScrollButtonStatus() {\n if(this.cardGrid.scrollLeft == 0) {\n this.prevScrollButton.classList.add('disabled')\n } else {\n this.prevScrollButton.classList.remove('disabled')\n }\n if(this.cardGrid.scrollLeft + this.viewportWidth() >= this.totalWidth()) {\n this.nextScrollButton.classList.add('disabled')\n } else {\n this.nextScrollButton.classList.remove('disabled')\n }\n }\n}\n","import ApplicationController from './application_controller'\nimport Chart from 'chart.js/auto'\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\n// Controller to wrap up Chart.js. The controller is really tightly coupled to the ChartComponent, takes the component's\n// output, and wraps it all up into a Chart.js call. The only spicy thing in here is the definition of callback\n// functions to format numbers with the appropriate prefix & suffix; otherwise, it's a pass-through between the\n// component and the charting library.\nexport default class extends ApplicationController {\n static values = {\n type: String,\n chartData: String,\n labels: String,\n numberFormattingOptions: String,\n options: String,\n tooltips: String,\n }\n\n connect() {\n super.connect()\n\n this._initChart = this._initChart.bind(this)\n if (typeof Chart !== \"undefined\" && Chart !== null) {\n this._initChart()\n } else {\n document.addEventListener(\"turbo:load\", this._initChart, false)\n }\n }\n\n disconnect() {\n document.removeEventListener(\"turbo:load\", this._initChart)\n this._chart.destroy()\n super.disconnect()\n }\n\n // Initialize the Chart.js Chart object\n _initChart() {\n let opts = this.options\n opts.onResize = (chart) => { chart.resize() }\n\n let chartConfig = {\n data: {\n labels: this.labels,\n datasets: this.chartData.map((dataset) => ({\n ...dataset,\n yAxisID: dataset.yAxisID // Use the yAxisID from the dataset\n }))\n },\n options: opts\n }\n if(this.chartType) {\n chartConfig.type = this.chartType\n if(this.chartType === \"tree\") {\n chartConfig.plugins = [ChartDataLabels]\n chartConfig.options.plugins[\"datalabels\"] = {\n align: 'right',\n formatter: (value, context) => {\n return value.name\n }\n }\n chartConfig.options.plugins.tooltip.enabled = false\n chartConfig.data.datasets[0].edgeLineBorderDash = (ctx) => {\n if(chartConfig.data.datasets[0].data[ctx.dataIndex + 1].line_type == \"dotted_line\") {\n return [6, 4]\n } else {\n return [] // Solid line per https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash\n }\n\n }\n }\n }\n\n chartConfig.options.plugins.legend = {labels: {\n filter: function(item, chart) {\n // Logic to remove a particular legend item goes here\n return !item.text.includes('label to remove');\n }\n },\n position: \"bottom\"\n }\n\n\n this._chart = new Chart(this.element.querySelector(\"canvas\").getContext(\"2d\"), chartConfig)\n const loadingDiv = this.element.querySelector(\".loading\")\n if(loadingDiv) {\n loadingDiv.classList.remove('loading')\n }\n }\n\n get chart() {\n return this._chart\n }\n\n get chartType() {\n return this.typeValue\n }\n\n get chartData() {\n return this._chartData = this._chartData || JSON.parse(this.chartDataValue)\n }\n\n get labels() {\n return this._labels = this._labels || JSON.parse(this.labelsValue)\n }\n\n get tooltips() {\n return this._tooltips = this._tooltips || JSON.parse(this.tooltipsValue)\n }\n\n get numberFormattingOptions() {\n return this._numberFormattingOptions = this._numberFormattingOptions || JSON.parse(this.numberFormattingOptionsValue)\n }\n\n get options() {\n if(this._options) {\n return this._options\n }\n this._options = JSON.parse(this.optionsValue)\n this._options.scales.y.ticks.callback = (value, index, ticks) => this.numberFormattingOptions.prefix + value + this.numberFormattingOptions.suffix\n this._options.plugins.tooltip.callbacks = {\n label: (context) => {\n if(this.tooltips[context.dataset.label]?.[context.dataIndex]) {\n return this.tooltips[context.dataset.label][context.dataIndex]\n } else if(this.tooltips[context.dataset.label]?.[context.label]) {\n return this.tooltips[context.dataset.label][context.label]\n } else {\n return this.numberFormattingOptions.prefix + context.parsed.y + this.numberFormattingOptions.suffix\n }\n }\n }\n // For now, the only annotations we have are Chart::HorizontalLine objects. If that changes, this code will need adjusting.\n if(this._options?.plugins?.annotation?.annotations) {\n const hovers = {\n enter({element}, event) {\n element.label.options.display = true\n return true;\n },\n leave({element}, event) {\n element.label.options.display = false\n return true\n }\n }\n Object.entries(this._options.plugins.annotation.annotations).forEach(([key, value]) => {\n this._options.plugins.annotation.annotations[key] = {...value, ...hovers}\n })\n }\n return this._options\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n// Turbo is already available globally via import in packs/application.js\n\nexport default class extends Controller {\n static targets = [\"line\", \"bar\"]\n\n connect() {\n // Check for chart_type in URL\n const urlParams = new URLSearchParams(window.location.search)\n const chartTypeFromUrl = urlParams.get('chart_type')\n \n // Determine which chart type to show\n let chartType\n if (chartTypeFromUrl === 'line' || chartTypeFromUrl === 'bar') {\n chartType = chartTypeFromUrl\n } else {\n // Fall back to data-active attributes if no valid URL parameter\n chartType = this.lineTarget.dataset.active === \"true\" ? \"line\" : \"bar\"\n }\n \n // Update button states\n this.updateButtonStates(chartType)\n \n // If the chart type from URL doesn't match the data-active attribute,\n // we need to load the correct chart content\n const activeFromData = this.lineTarget.dataset.active === \"true\" ? \"line\" : \"bar\"\n if (chartType !== activeFromData) {\n const frame = document.getElementById(\"productivity-chart-content\")\n if (frame) {\n // Show skeleton chart while loading\n this.showSkeletonChart(frame)\n \n // Create URL for the frame request\n const frameUrl = new URL(window.location.origin + \"/team_insights_overview/productivity/chart_content\")\n \n // Add all existing parameters to the frame URL\n urlParams.forEach((value, key) => {\n frameUrl.searchParams.set(key, value)\n })\n \n // Update or add the chart_type parameter\n frameUrl.searchParams.set(\"chart_type\", chartType)\n \n // Make the frame request\n window.Turbo.visit(frameUrl.toString(), { frame: \"productivity-chart-content\" })\n }\n }\n }\n\n toggleChartType(event) {\n const button = event.currentTarget\n const chartType = button.dataset.chartType\n\n // Update button states\n this.updateButtonStates(chartType)\n\n // Update only the chart content frame with the selected chart type\n const frame = document.getElementById(\"productivity-chart-content\")\n if (frame) {\n // Show skeleton chart while loading\n this.showSkeletonChart(frame)\n \n // Create URL for the frame request\n const frameUrl = new URL(window.location.origin + \"/team_insights_overview/productivity/chart_content\")\n \n // Get all current URL parameters\n const currentParams = new URLSearchParams(window.location.search)\n \n // Add all existing parameters to the frame URL\n currentParams.forEach((value, key) => {\n frameUrl.searchParams.set(key, value)\n })\n \n // Update or add the chart_type parameter\n frameUrl.searchParams.set(\"chart_type\", chartType)\n \n // Make the frame request\n window.Turbo.visit(frameUrl.toString(), { frame: \"productivity-chart-content\" })\n \n // Update the main URL without reloading the page\n const newUrl = new URL(window.location.href)\n newUrl.searchParams.set(\"chart_type\", chartType)\n window.history.pushState({}, \"\", newUrl.toString())\n }\n }\n\n updateButtonStates(chartType) {\n this.lineTarget.dataset.active = (chartType === \"line\").toString()\n this.barTarget.dataset.active = (chartType === \"bar\").toString()\n }\n \n showSkeletonChart(frame) {\n // Fetch the skeleton chart from the server\n fetch('/shared/skeleton_chart')\n .then(response => response.text())\n .then(html => {\n frame.innerHTML = html\n })\n .catch(error => {\n console.error('Error loading skeleton chart:', error)\n // Fallback to a simple loading message if the partial can't be loaded\n frame.innerHTML = '
'\n })\n }\n}\n","import ApplicationController from './application_controller'\n\n// Simple controller for toggling a CSS class based on clicks. Makes no assumptions about starting state,\n// so whatever the markup has will be toggled on click.\nexport default class extends ApplicationController {\n static values = {\n cssClass: String\n }\n\n connect() {\n super.connect()\n this._documentClickHandler = this._documentClickHandler.bind(this)\n this.status = 'closed'\n }\n\n _bindDocumentClicks() {\n document.addEventListener('click', this._documentClickHandler)\n }\n\n _unbindDocumentClicks() {\n document.removeEventListener('click', this._documentClickHandler)\n }\n\n _documentClickHandler(event) {\n const clickedElement = event.target\n const closestToggle = clickedElement.closest(`[data-controller=\"class-toggle\"]`)\n\n if (closestToggle === this.element) {\n // No-op; let handling proceed as normal\n } else {\n // The click was outside this.element, so close it if open\n if (this.status === 'open') {\n this.toggle()\n }\n }\n }\n\n toggle() {\n const element = this.element\n const button = element.querySelector(\"button\")\n const menu = element.querySelector(\".dropdown-menu\")\n const isOpen = element.classList.contains(this.cssClassValue)\n\n element.classList.toggle(this.cssClassValue)\n button.setAttribute(\"aria-expanded\", !isOpen)\n \n if (isOpen) {\n menu.setAttribute(\"hidden\", \"\")\n } else {\n menu.removeAttribute(\"hidden\")\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n ping: String\n }\n\n connect() {\n super.connect()\n\n if(!this.element.dataset.href) {\n return;\n }\n\n const magicLink = this.element.querySelector('.magic_link')\n if(magicLink) {\n this.magicLink = magicLink\n } else {\n this.magicLink = document.createElement('a')\n this.magicLink.href = this.element.dataset.href\n if(this.element.attributes.target) {\n this.magicLink.dataset.turboFrame = this.element.attributes.target.nodeValue\n } else {\n if(this.element.dataset.turboFrame) {\n this.magicLink.dataset.turboFrame = this.element.dataset.turboFrame\n }\n if(this.element.dataset.turboAction) {\n this.magicLink.dataset.turboAction = this.element.dataset.turboAction\n }\n if(this.element.dataset.method) {\n this.magicLink.setAttribute('method', this.element.dataset.method)\n }\n }\n this.magicLink.classList = 'magic_link hidden'\n this.element.prepend(this.magicLink)\n }\n\n this.click = this.click.bind(this)\n this.element.addEventListener('click', this.click)\n }\n\n click(event) {\n const clickedElement = event.target\n const interactiveElements = ['a', 'button', 'input', 'textarea', 'select', 'dropdown']\n\n // Filter out clicks on active links and form elements; we only want clicks that don't have a handler\n if(clickedElement.disabled || !interactiveElements.includes(clickedElement.localName)) {\n event.stopPropagation()\n event.preventDefault()\n\n if(this.hasPingValue) {\n fetch(this.pingValue, {method: 'POST'}) // Telemetry collection: fire and forget\n }\n\n // If the link opens a modal, make sure we know when the modal closes so we can\n // handle history correctly\n if(this.magicLink.dataset.turboFrame == 'modal') {\n document.querySelector('#modal')\n .addEventListener('modal:closed', this.modalCloseHandler.bind(this), {once: true})\n }\n\n const urlForHistory = this.element.dataset.historyUrl ? this.element.dataset.historyUrl : this.element.dataset.href\n\n // Non-same-origin links can't be pushed onto the state, and should be opened in a new window anyway\n // So rather than parsing links, if the pushState() call throws an error, we catch it go to new window\n try {\n history.pushState({}, '', urlForHistory)\n }\n catch(err) {\n this.magicLink.target = '_blank'\n this.magicLink.setAttribute('aria-label', 'opens in a new window')\n }\n this.magicLink.click()\n }\n }\n\n modalCloseHandler() {\n history.back()\n }\n}\n\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"content\", \"icon\"]\n\n toggle() {\n const isExpanded = this.contentTarget.classList.contains(\"expanded\")\n this.contentTarget.classList.toggle(\"expanded\")\n \n // Toggle CSS classes instead of inline styles\n if (isExpanded) {\n this.iconTarget.classList.remove(\"expanded\")\n this.iconTarget.classList.add(\"collapsed\")\n } else {\n this.iconTarget.classList.remove(\"collapsed\")\n this.iconTarget.classList.add(\"expanded\")\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n message: String\n }\n\n connect () {\n console.log('connecting', this.messageValue)\n }\n\n confirm(event) {\n console.log(\"CONFIRMING\", this.messageValue)\n if (!(window.confirm(this.messageValue))) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n}\n","import ApplicationController from './application_controller'\n\n// _ _\n// _/0\\/ \\_\n// .-. .-` \\_/\\0/ '-.\n// /:::\\ / ,_________, \\\n// /\\:::/ \\ '. (:::/ `'-;\n// \\ `-'`\\ '._ `\"'\"'\\__ \\\n// `'-. \\ `)-=-=( `, |\n// \\ `-\"` `\"-` /\n\nexport default class extends ApplicationController {\n static targets = [\"acceptButton\", \"rejectButton\", \"closeButton\"]\n\n connect() {\n super.connect()\n\n this.cookieName = 'opted_out_cookie_categories'\n\n this._setOptOutCookie = this._setOptOutCookie.bind(this)\n this.acceptAll = this.acceptAll.bind(this)\n this.rejectAll = this.rejectAll.bind(this)\n this.closeCookieManagerPane = this.closeCookieManagerPane.bind(this)\n\n this.acceptButtonTargets.forEach((elem) => { elem.addEventListener('click', this.acceptAll) })\n this.rejectButtonTargets.forEach((elem) => { elem.addEventListener('click', this.rejectAll) })\n this.closeButtonTargets.forEach((elem) => { elem.addEventListener('click', this.closeCookieManagerPane) })\n\n this.checkBoxes = Array.from(this.element.querySelectorAll(\"input[type=checkbox]:not([disabled=disabled])\"))\n this.checkBoxes.forEach((elem) => { elem.addEventListener('change', this._setOptOutCookie) })\n\n this._setOptOutCookie() // Ensure we have a default setting in place\n }\n\n disconnect() {\n this.acceptButtonTargets.forEach((elem) => { elem.removeEventListener('click', this.acceptAll) })\n this.rejectButtonTargets.forEach((elem) => { elem.removeEventListener('click', this.rejectAll) })\n this.closeButtonTargets.forEach((elem) => { elem.removeEventListener('click', this.closeCookieManagerPane) })\n this.checkBoxes.forEach((elem) => { elem.removeEventListener('change', this._setOptOutCookie) })\n super.disconnect()\n }\n\n closeCookieManagerPane(event) {\n if(event) {\n event.stopPropagation()\n event.preventDefault()\n }\n this.element.remove()\n }\n\n acceptAll(event) {\n if(event) {\n event.stopPropagation()\n event.preventDefault()\n }\n this.checkBoxes.forEach((elem) => {\n elem.checked = true\n })\n this._setOptOutCookie()\n this.closeCookieManagerPane()\n }\n\n rejectAll(event) {\n if(event) {\n event.stopPropagation()\n event.preventDefault()\n }\n this.checkBoxes.forEach((elem) => {\n elem.checked = false\n })\n this._setOptOutCookie()\n this.closeCookieManagerPane()\n }\n\n // When a form input is changed,\n _setOptOutCookie(event) {\n if(event) {\n event.stopPropagation()\n }\n // Names look like: cookie_manager[performance]. The slice pulls out the contents of the [].\n const uncheckedInputs = Array.from(this.element.querySelectorAll(\"input[type=checkbox]:not(:checked)\"))\n if(uncheckedInputs.length == 0) {\n this._setPermanentCookie(this.cookieName, \"none\")\n } else {\n this._setPermanentCookie(this.cookieName, uncheckedInputs.map(elem => elem.getAttribute(\"name\").slice(15, -1)).join(\"|\"))\n }\n }\n\n // Low-level function to parse document.cookie and get a cookie's value\n _getCookie(name) {\n const allCookies = document.cookie\n let cookieValue = allCookies.split('; ').find((row) => row.startsWith(`${name}=`))?.split(\"=\")[1]\n if(cookieValue) {\n return decodeURI(cookieValue).split('|')\n } else {\n return null\n }\n }\n\n // Low-level function to set a permanent cookie, defined as a 1-year validity period\n _setPermanentCookie(name, value, path = '/') {\n let expiration = new Date()\n expiration.setTime(expiration.getTime() + 365 * 24 * 60 * 60 * 1000) // 1 year in the future\n return this._setCookie(name, value, expiration, path)\n }\n\n // Low-level function to set a cookie\n _setCookie(name, value, expiration, path = '/') {\n document.cookie = `${name}=${value}; expires=${expiration.toGMTString()}; path=${path}`\n }\n}\n\n","import ApplicationController from './application_controller'\nimport Croppie from 'croppie' // http://foliotek.github.io/Croppie/\n\n// Simple controller for toggling a CSS class based on clicks. Makes no assumptions about starting state,\n// so whatever the markup has will be toggled on click.\nexport default class extends ApplicationController {\n static targets = ['preview', 'input', 'base64input']\n static values = {\n maxWidth: Number,\n maxHeight: Number\n }\n\n connect() {\n const viewportRatio = this.maxWidthValue / this.maxHeightValue\n const viewportScalingFactor = (viewportRatio > 1 ? this.maxWidthValue / 200 : this.maxHeightValue / 200)\n const styles = getComputedStyle(this.element)\n const innerPadding = styles.getPropertyValue('--croppable-image-inner-padding')\n const viewportOptions = {\n width: `calc(${this.maxWidthValue / viewportScalingFactor}px - 2 * ${innerPadding})`,\n height: `calc(${this.maxHeightValue / viewportScalingFactor}px - 2 * ${innerPadding})`\n }\n\n this.croppie = new Croppie(this.previewTarget, {\n viewport: {\n ...viewportOptions,\n type: 'circle'\n },\n boundary: {\n ...viewportOptions\n }\n })\n\n this.base64inputTarget.value = null // Zero it out so we don't re-submit the data\n this.preprocessingComplete = true // Track if we've done the work.\n this.formTarget = this.inputTarget.closest('form')\n\n this.onInputChange = this.onInputChange.bind(this)\n this.inputTarget.addEventListener(\"change\", this.onInputChange)\n this.onFormSubmit = this.onFormSubmit.bind(this)\n this.formTarget.addEventListener(\"submit\", this.onFormSubmit)\n this.instrumentDragAndDropEvents = this.instrumentDragAndDropEvents.bind(this)\n // Give croppie a chance to init so we don't automatically call the callback\n setTimeout(this.instrumentDragAndDropEvents, 250)\n }\n\n // Set up all of the drag & drop events\n instrumentDragAndDropEvents() {\n this.onCrop = this.onCrop.bind(this)\n this.highlightDropArea = this.highlightDropArea.bind(this)\n this.unhighlightDropArea = this.unhighlightDropArea.bind(this)\n this.onFileDrop = this.onFileDrop.bind(this)\n\n this.croppie.elements.zoomer.addEventListener('change', this.onCrop)\n\n this.element.addEventListener('dragenter', this.highlightDropArea)\n this.element.addEventListener('dragover', this.highlightDropArea)\n this.element.addEventListener('dragleave', this.unhighlightDropArea)\n this.element.addEventListener('drop', this.unhighlightDropArea)\n this.element.addEventListener('drop', this.onFileDrop)\n }\n\n // If the crop is changed, we have work to do\n onCrop(event) {\n this.preprocessingComplete = false\n }\n\n highlightDropArea(event) {\n event.stopPropagation()\n event.preventDefault()\n this.inputTarget.classList.add('hover')\n }\n\n unhighlightDropArea(event) {\n event.stopPropagation()\n event.preventDefault()\n this.inputTarget.classList.remove('hover')\n }\n\n // If a file is dropped onto the croppie, pass it through to the file input\n onFileDrop(event) {\n event.stopPropagation()\n event.preventDefault()\n if(event.dataTransfer && event.dataTransfer.files) {\n this.bindToCroppie(event.dataTransfer.files[0])\n }\n }\n\n // If a new image is added to the input, we have work to do\n onInputChange(event) {\n this.preprocessingComplete = false\n\n let files = event.target.files\n\n if(files && files.length > 0) {\n this.bindToCroppie(files[0])\n }\n }\n\n bindToCroppie(file) {\n let reader = new FileReader()\n reader.onload = (event) => {\n this.croppie.bind(event.target.result) // Bind the image to croppie\n }\n reader.readAsDataURL(file)\n }\n\n onFormSubmit(event) {\n if(this.preprocessingComplete) {\n // In this case, we have done the pre-processing, so let the form submit\n return\n } else {\n // Halt the event so we can do the image pre-processing\n event.preventDefault()\n event.stopPropagation()\n }\n\n let croppedImage = this.croppie.result({\n type: 'base64',\n size: {\n width: this.maxWidth,\n height: this.maxHeight\n },\n format: 'jpeg',\n circle: false\n }) // returns a promise\n\n croppedImage.then(base64image => {\n this.inputTarget.disabled = true // Disable the original input so it doesn't send to the server\n\n // Now, resize the image to fit in the maxWidth and maxHeight\n let image = new Image()\n image.onload = ()=>{\n let ratio = 1\n if(image.width > this.maxWidthValue) {\n ratio = this.maxWidthValue / image.width\n } else if(image.height > this.maxHeightValue) {\n ratio = this.maxHeightValue / image.height\n }\n\n // We're done if we don't need to downsize\n if(ratio == 1) {\n this.completePreprocessing(base64image)\n return\n }\n\n let canvasCopy = document.createElement(\"canvas\")\n let copyContext = canvasCopy.getContext(\"2d\")\n\n canvasCopy.width = image.width * ratio\n canvasCopy.height = image.height * ratio\n copyContext.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvasCopy.width, canvasCopy.height)\n\n this.completePreprocessing(canvasCopy.toDataURL())\n }\n image.src = base64image\n })\n }\n\n completePreprocessing(base64image) {\n this.base64inputTarget.value = base64image;\n this.preprocessingComplete = true\n\n // Trigger the form submission in a way that Turbo will pick it up\n this.formTarget.dispatchEvent(new Event('form:submit')) // ensure event listeners will know the form is submitting\n this.formTarget.requestSubmit()\n }\n}\n","import ApplicationController from './application_controller'\nimport DataTable from 'datatables.net-dt'\nimport 'datatables.net-buttons/js/dataTables.buttons'\nimport 'datatables.net-buttons/js/buttons.colVis'\n\nexport default class extends ApplicationController {\n static values = {\n config: String,\n defaultSortColumnIndex: {type: Number, default: null},\n hiddenColumns: Array,\n stateSave: Boolean,\n pageLength: {type: Number, default: 10}\n }\n\n _table = null\n\n connect() {\n super.connect()\n this._initTable()\n this._initColumnFilters()\n this._restoreFilterState()\n }\n\n disconnect() {\n super.disconnect()\n this._destroyTable()\n }\n\n _initTable() {\n if (this._table) return\n\n const tableContent = this.element.tagName === 'TABLE' ? this.element : this.element.querySelector('table')\n if (!tableContent) return\n\n const thead = tableContent.querySelector('thead')\n const tr = thead ? thead.querySelector('tr') : null\n \n if (!thead || !tr) return\n\n const columnCount = tr.children.length\n const hiddenColumns = this.hiddenColumnsValue.filter(index => index < columnCount)\n const anyHiddenColumns = hiddenColumns.length > 0\n\n // Only include the colvis button if there are hidden columns\n const buttons = [\n {\n text: \"\\u21BA Reset\",\n action: (e, dt, node, config) => {\n this.clearState();\n }\n },\n {\n extend: 'collection',\n text: 'Export',\n buttons: ['csv', 'copy']\n },\n 'pageLength'\n ]\n\n if (anyHiddenColumns) {\n buttons.push({\n extend: 'colvis',\n text: 'Show/Hide Columns'\n })\n }\n\n const order = this.defaultSortColumnIndexValue !== undefined\n ? [[this.defaultSortColumnIndexValue, 'desc']]\n : []\n\n this._table = new DataTable(tableContent, {\n colReorder: true,\n autoWidth: false,\n order: order,\n stateSave: this.stateSaveValue,\n pageLength: this.pageLengthValue,\n layout: {\n topStart: {\n buttons: buttons\n }\n },\n columnDefs: [\n {\n targets: hiddenColumns,\n visible: false,\n searchable: true\n }\n ]\n });\n }\n\n _initColumnFilters() {\n // Get filters within this table's wrapper only\n const filters = this.element.querySelectorAll('.table-column-filter')\n if (!this._table) return\n\n filters.forEach(filter => {\n filter.addEventListener('change', (e) => {\n const targetColumn = filter.dataset.targetColumn\n if (!targetColumn) return\n\n // Only save filter state if stateSave is true\n if (this.stateSaveValue) {\n localStorage.setItem(`${this.element.id}_${targetColumn}_filter`, e.target.value)\n }\n\n // Find all columns with matching data-column-name\n this._table\n .columns(`th[data-column-name=\"${targetColumn}\"]`)\n .search(e.target.value)\n .draw()\n })\n })\n }\n\n _restoreFilterState() {\n // Only restore filter state if stateSave is true\n if (!this.stateSaveValue) return\n\n // Get filters within this table's wrapper only\n const filters = this.element.querySelectorAll('.table-column-filter')\n \n filters.forEach(filter => {\n const targetColumn = filter.dataset.targetColumn\n if (!targetColumn) return\n\n const savedValue = localStorage.getItem(`${this.element.id}_${targetColumn}_filter`)\n if (savedValue !== null) {\n filter.value = savedValue\n }\n })\n }\n\n _initStatusFilter() {\n this._initColumnFilters()\n }\n\n _destroyTable() {\n if (this._table) {\n this._table.destroy()\n this._table = null\n }\n }\n\n clearState() {\n if (this._table) {\n // Clear DataTable state\n this._table.state.clear()\n\n // Clear filter states from localStorage\n const filters = document.querySelectorAll('.table-column-filter')\n filters.forEach(filter => {\n const targetColumn = filter.dataset.targetColumn\n if (targetColumn) {\n localStorage.removeItem(`${this.element.id}_${targetColumn}_filter`)\n }\n })\n\n window.location.reload()\n }\n }\n\n get table() {\n return this._table\n }\n \n // Allow external access to search specific columns\n searchColumn(columnSelector, searchTerm, regex = false, smart = true) {\n if (!this._table) return\n return this._table.column(columnSelector).search(searchTerm, regex, smart).draw()\n }\n \n // Reset all filters and searches\n resetFilters() {\n if (!this._table) return\n this._table.search(\"\").columns().search(\"\").draw()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"canvas\", \"score\", \"startButton\", \"gameContainer\"]\n static values = {\n speed: {type: Number, default: 5},\n spawnRate: {type: Number, default: 1000}\n }\n\n connect() {\n this.canvas = this.canvasTarget\n this.ctx = this.canvas.getContext(\"2d\")\n this.resetGame()\n }\n\n resetGame() {\n this.score = 0\n this.arrows = []\n this.keys = {\n ArrowUp: false,\n ArrowDown: false,\n ArrowLeft: false,\n ArrowRight: false\n }\n \n // Set canvas size\n this.canvas.width = 400\n this.canvas.height = 600\n\n // Clear any existing game loop\n if (this.gameLoop) {\n cancelAnimationFrame(this.gameLoop)\n }\n if (this.spawnInterval) {\n clearInterval(this.spawnInterval)\n }\n\n // Reset score display\n this.scoreTarget.textContent = \"0\"\n\n // Clear canvas\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\n }\n\n startGame() {\n this.resetGame()\n this.startButtonTarget.style.display = \"none\"\n this.gameContainerTarget.style.display = \"block\"\n \n // Start game loop\n this.gameLoop = requestAnimationFrame(this.update.bind(this))\n this.spawnInterval = setInterval(this.spawnArrow.bind(this), this.spawnRateValue)\n \n // Add event listeners\n document.addEventListener(\"keydown\", this.handleKeyDown.bind(this))\n document.addEventListener(\"keyup\", this.handleKeyUp.bind(this))\n }\n\n disconnect() {\n cancelAnimationFrame(this.gameLoop)\n clearInterval(this.spawnInterval)\n document.removeEventListener(\"keydown\", this.handleKeyDown.bind(this))\n document.removeEventListener(\"keyup\", this.handleKeyUp.bind(this))\n }\n\n update() {\n // Clear canvas\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\n \n // Draw target zone\n this.ctx.fillStyle = \"rgba(255, 255, 255, 0.2)\"\n this.ctx.fillRect(0, 500, this.canvas.width, 50)\n \n // Update and draw arrows\n this.arrows = this.arrows.filter(arrow => {\n arrow.y += this.speedValue\n \n // Check if arrow is in target zone\n if (arrow.y >= 500 && arrow.y <= 550) {\n if (this.keys[arrow.direction]) {\n this.score += 100\n this.scoreTarget.textContent = this.score\n return false\n }\n }\n \n // Remove arrows that went off screen\n if (arrow.y > this.canvas.height) {\n return false\n }\n \n // Draw arrow\n this.drawArrow(arrow)\n return true\n })\n \n this.gameLoop = requestAnimationFrame(this.update.bind(this))\n }\n\n spawnArrow() {\n const directions = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"]\n const direction = directions[Math.floor(Math.random() * directions.length)]\n \n this.arrows.push({\n direction,\n x: this.getArrowX(direction),\n y: -50\n })\n }\n\n drawArrow(arrow) {\n this.ctx.save()\n this.ctx.translate(arrow.x + 25, arrow.y + 25)\n \n switch (arrow.direction) {\n case \"ArrowUp\":\n break\n case \"ArrowDown\":\n this.ctx.rotate(Math.PI)\n break\n case \"ArrowLeft\":\n this.ctx.rotate(-Math.PI / 2)\n break\n case \"ArrowRight\":\n this.ctx.rotate(Math.PI / 2)\n break\n }\n \n // Draw arrow\n this.ctx.beginPath()\n this.ctx.moveTo(0, -15)\n this.ctx.lineTo(10, 0)\n this.ctx.lineTo(5, 0)\n this.ctx.lineTo(5, 15)\n this.ctx.lineTo(-5, 15)\n this.ctx.lineTo(-5, 0)\n this.ctx.lineTo(-10, 0)\n this.ctx.closePath()\n \n this.ctx.fillStyle = \"white\"\n this.ctx.fill()\n this.ctx.restore()\n }\n\n getArrowX(direction) {\n switch (direction) {\n case \"ArrowLeft\": return 50\n case \"ArrowDown\": return 150\n case \"ArrowUp\": return 250\n case \"ArrowRight\": return 350\n }\n }\n\n handleKeyDown(event) {\n if (this.keys.hasOwnProperty(event.key)) {\n event.preventDefault()\n this.keys[event.key] = true\n }\n }\n\n handleKeyUp(event) {\n if (this.keys.hasOwnProperty(event.key)) {\n event.preventDefault()\n this.keys[event.key] = false\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n departmentIdParam: String\n }\n\n connect() {\n super.connect();\n }\n\n update(event) {\n event.preventDefault();\n const selectElement = event.currentTarget;\n const departmentIdParam = selectElement.value || this.departmentIdParamValue;\n const url = new URL(window.location);\n \n // Get the current tab from URL or localStorage\n let currentTab = url.searchParams.get('tab');\n if (!currentTab) {\n currentTab = localStorage.getItem('yearOneCurrentTab');\n }\n \n if (departmentIdParam) {\n url.searchParams.set('department_id', departmentIdParam);\n url.searchParams.delete('id'); // if you change departments, you don't want to keep the team param\n url.searchParams.delete('user_id'); // if you change departments, you don't want to keep the user param\n } else {\n url.searchParams.delete('department_id'); // all departments = no param\n }\n \n // Restore the tab parameter if it existed\n if (currentTab) {\n url.searchParams.set('tab', currentTab);\n }\n \n window.location = url.toString();\n }\n}","import ApplicationController from './application_controller'\nimport throttle from \"lodash.throttle\"\n\n// Stimulus controller for governing the behavior of disclosure panes. There are two targets, representing the element\n// that is the toggle (the thing you click to open/close the pane), and the pane itself. The controller accepts\n// some values: \"open\" which is set to true/false and determines the default open/closed state of the pane, and\n// \"storageKey\" which determines the localStorage key used to track the open/closed state.\n//\n// The widget will default to being open the first time a user sees it, then closed on subsquent views. If the user\n// interacts with the widget, the state they set (open/closed) will be preserved in the localStorage key.\n//\n// If the storageKey is set to \"false\" (the string, not the boolean!) then the state will not be stored, and subsequent\n// page loads will always be in the default state as specified by the \"open\" value.\nexport default class extends ApplicationController {\n static targets = ['toggle', 'pane']\n static values = {\n open: Boolean,\n storageKey: String,\n forceOpen: Boolean\n }\n\n connect() {\n super.connect()\n if(this.hasToggleTarget) {\n this.toggleElement = this.toggleTarget\n } else {\n this.toggleElement = this.element\n }\n this.toggle = this.toggle.bind(this)\n this.adjustHeight = throttle(this.adjustHeight.bind(this), 150)\n this.toggleElement.addEventListener('click', this.toggle)\n window.addEventListener('resize', this.adjustHeight)\n this.storageKeyValue ||= window.location.href\n this.forceOpen = this.element.dataset.disclosureForceOpen || false\n\n // Set the default open/closed state. First we see if there's a saved state, and if so, we honor it.\n // Failing that, we check if there is an instruction. If there is, we honor it. If not, it's the first load,\n // so we default to open, but set the state to closed so it's there on the next page load.\n if(this.savedState() != null) {\n // with a closed save state + open value, we force it open\n if(this.savedState() == 'open' || this.forceOpen) {\n this.openPane()\n } else {\n this.closePane()\n }\n } else if(this.hasOpenValue) {\n if (this.openValue) {\n this.openPane()\n } else {\n this.closePane()\n }\n } else {\n // First-time load: default to open, but set it to be closed next time\n this.openPane()\n this.saveState('closed')\n }\n }\n\n disconnect() {\n this.toggleElement.removeEventListener('click', this.toggle)\n window.removeEventListener('resize', this.adjustHeight)\n }\n\n savedState() {\n if(this.storageKeyValue === 'false') {\n return null\n } else {\n return window.localStorage.getItem(this.storageKeyValue)\n }\n }\n\n saveState(value) {\n if(this.storageKeyValue !== 'false') {\n window.localStorage.setItem(this.storageKeyValue, value)\n }\n return value\n }\n\n toggle(event) {\n const clickedElement = event.target\n const interactiveElements = ['a', 'button', 'input', 'textarea', 'select', 'dropdown']\n\n // Filter out clicks on active links and form elements; we only want clicks on the toggle\n if(clickedElement.disabled || !interactiveElements.includes(clickedElement.localName)) {\n if(this.status === 'open') {\n this.closePane()\n } else {\n this.openPane()\n }\n }\n event.preventDefault()\n event.stopPropagation()\n }\n\n openPane() {\n this.status = 'open'\n this.paneTargets.forEach((paneTarget) => {paneTarget.classList.remove('closed')})\n this.paneTargets.forEach((paneTarget) => {paneTarget.classList.add('open')});\n this.toggleElement.classList.remove('closed')\n this.toggleElement.classList.add('open')\n this.adjustHeight()\n this.saveState('open')\n }\n\n closePane() {\n this.status = 'closed'\n this.paneTargets.forEach((paneTarget) => {paneTarget.classList.remove('open')})\n this.paneTargets.forEach((paneTarget) => {paneTarget.classList.add('closed')})\n this.toggleElement.classList.remove('open')\n this.toggleElement.classList.add('closed')\n this.adjustHeight()\n this.saveState('closed')\n }\n\n adjustHeight() {\n if(this.status === 'open') {\n this.paneTargets.forEach((paneTarget) => {paneTarget.style.height = this.paneTarget.scrollHeight + 'px'})\n } else {\n this.paneTargets.forEach((paneTarget) => {paneTarget.style.height = 0 + 'px'})\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static targets = ['toggle', 'pane']\n\n connect() {\n super.connect()\n this.toggleElement = this.hasToggleTarget ? this.toggleTarget : this.element\n this._boundToggle = this.toggle.bind(this)\n this._boundHandleKeyDown = this.handleKeyDown.bind(this)\n this._boundHandleOptionKeyDown = this.handleOptionKeyDown.bind(this)\n this._documentClickHandler = this._handleDocumentClick.bind(this)\n \n this.toggleElement.addEventListener('click', this._boundToggle)\n this.toggleElement.addEventListener('keydown', this._boundHandleKeyDown)\n \n // Add keyboard listeners to all options\n this._addOptionEventListeners()\n \n this.status = 'closed'\n this._initialClose()\n }\n\n disconnect() {\n if (this.toggleElement) {\n this.toggleElement.removeEventListener('click', this._boundToggle)\n this.toggleElement.removeEventListener('keydown', this._boundHandleKeyDown)\n }\n this._removeOptionEventListeners()\n document.removeEventListener('click', this._documentClickHandler)\n }\n\n _addOptionEventListeners() {\n const options = this.paneTarget.querySelectorAll('[role=\"option\"]')\n options.forEach(option => {\n option.addEventListener('keydown', this._boundHandleOptionKeyDown)\n })\n }\n\n _removeOptionEventListeners() {\n const options = this.paneTarget.querySelectorAll('[role=\"option\"]')\n options.forEach(option => {\n option.removeEventListener('keydown', this._boundHandleOptionKeyDown)\n })\n }\n\n toggle(event) {\n if (event) event.preventDefault()\n this.status === 'open' ? this.closePane() : this.openPane()\n }\n\n openPane() {\n document.addEventListener('click', this._documentClickHandler)\n this.status = 'open'\n this._toggleClasses(true)\n this.toggleElement.setAttribute('aria-expanded', 'true')\n \n // Focus the first option or the currently selected option\n requestAnimationFrame(() => {\n const selectedOption = this.paneTarget.querySelector('.current[role=\"option\"]')\n const firstOption = this.paneTarget.querySelector('[role=\"option\"]')\n ;(selectedOption || firstOption)?.focus()\n })\n }\n\n closePane() {\n document.removeEventListener('click', this._documentClickHandler)\n this.status = 'closed'\n this._toggleClasses(false)\n this.toggleElement.setAttribute('aria-expanded', 'false')\n this.toggleElement.focus()\n }\n\n handleKeyDown(event) {\n switch (event.key) {\n case \"Enter\":\n case \" \":\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n break\n case \"ArrowDown\":\n event.preventDefault()\n if (this.status === 'closed') {\n this.openPane()\n } else {\n this._focusNextOption()\n }\n break\n case \"ArrowUp\":\n event.preventDefault()\n if (this.status === 'closed') {\n this.openPane()\n this._focusLastOption()\n } else {\n this._focusPreviousOption()\n }\n break\n case \"Escape\":\n if (this.status === 'open') {\n event.preventDefault()\n this.closePane()\n }\n break\n case \"Tab\":\n if (this.status === 'open') {\n this.closePane()\n }\n break\n }\n }\n\n handleOptionKeyDown(event) {\n switch (event.key) {\n case \"Enter\":\n case \" \":\n event.preventDefault()\n event.stopPropagation()\n event.target.querySelector('a')?.click()\n break\n case \"ArrowDown\":\n event.preventDefault()\n this._focusNextOption()\n break\n case \"ArrowUp\":\n event.preventDefault()\n this._focusPreviousOption()\n break\n case \"Escape\":\n event.preventDefault()\n this.closePane()\n break\n case \"Tab\":\n this.closePane()\n break\n }\n }\n\n _handleDocumentClick(event) {\n if (!this.element.contains(event.target)) {\n this.closePane()\n }\n }\n\n _toggleClasses(isOpen) {\n const action = isOpen ? 'add' : 'remove'\n const oppositeAction = isOpen ? 'remove' : 'add'\n \n this.paneTarget.classList[action]('open')\n this.paneTarget.classList[oppositeAction]('closed')\n this.toggleElement.classList[action]('open')\n this.toggleElement.classList[oppositeAction]('closed')\n }\n\n _focusNextOption() {\n const options = Array.from(this.paneTarget.querySelectorAll('[role=\"option\"]'))\n const currentIndex = options.findIndex(option => option === document.activeElement)\n const nextIndex = currentIndex < options.length - 1 ? currentIndex + 1 : 0\n options[nextIndex]?.focus()\n }\n\n _focusPreviousOption() {\n const options = Array.from(this.paneTarget.querySelectorAll('[role=\"option\"]'))\n const currentIndex = options.findIndex(option => option === document.activeElement)\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1\n options[previousIndex]?.focus()\n }\n\n _focusLastOption() {\n const options = Array.from(this.paneTarget.querySelectorAll('[role=\"option\"]'))\n options[options.length - 1]?.focus()\n }\n\n _initialClose() {\n document.removeEventListener('click', this._documentClickHandler)\n this.status = 'closed'\n this._toggleClasses(false)\n this.toggleElement.setAttribute('aria-expanded', 'false')\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n connect() {\n super.connect()\n // Let any ease-in animation complete, then remove it to allow the next animation to play\n setTimeout(() => {\n this.element.classList.remove(\"ease-in\")\n }, 500)\n this.clickCount = 0\n this._bindClickHandler()\n }\n\n _bindClickHandler() {\n this.element.addEventListener('click', this.handleClick.bind(this))\n }\n\n handleClick(event) {\n this.clickCount++\n\n if (this.clickCount === 20) {\n this.element.innerHTML = \"
Wow, you're persistent.
\"\n this.element.removeEventListener('click', this.handleClick)\n return\n }\n\n if (this.clickCount === 10) {\n this.element.innerHTML = \"
That's enough clicking for one day.
\"\n return\n }\n\n const animations = ['bounce', 'shake', 'spin', 'pop', 'wobble']\n const randomAnimation = animations[Math.floor(Math.random() * animations.length)]\n \n // Remove any existing animation classes\n animations.forEach(animation => {\n this.element.classList.remove(`animation-${animation}`)\n })\n \n // Add new random animation class\n this.element.classList.add(`animation-${randomAnimation}`)\n \n // Dispatch event for the animation\n this.element.dispatchEvent(new Event('animation:complete'))\n }\n\n disconnect() {\n this.element.removeEventListener('click', this.handleClick)\n }\n}","import ApplicationController from \"./application_controller\"\n\nexport default class extends ApplicationController {\n static targets = [\"section\", \"icon\"]\n\n connect() {\n super.connect()\n this.initializeAccordions()\n }\n\n initializeAccordions() {\n // Close all ticket sections initially\n this.sectionTargets.forEach(section => {\n if (section.dataset.type === \"ticket\") {\n section.style.maxHeight = \"0px\"\n } else if (section.dataset.type === \"main\") {\n section.style.maxHeight = \"1000px\"\n }\n })\n }\n\n toggle(event) {\n const clickedElement = event.currentTarget\n const sectionId = clickedElement.dataset.sectionId\n const section = this.sectionTargets.find(target => target.id === sectionId)\n const icon = this.iconTargets.find(target => target.dataset.sectionId === sectionId)\n \n if (section && icon) {\n const isVisible = section.style.maxHeight !== \"0px\"\n section.style.maxHeight = isVisible ? \"0px\" : `${section.scrollHeight}px`\n icon.style.transform = isVisible ? \"rotate(0deg)\" : \"rotate(180deg)\"\n }\n }\n} ","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n join(event) {\n sessionStorage.setItem(this.storageKey, Date.now())\n this.stimulate('EventAttendance#attended!')\n }\n\n leave(event) {\n const startTime = sessionStorage.getItem(this.storageKey)\n const durationInMilliseconds = startTime ? Date.now() - startTime : 0\n this.stimulate('EventAttendance#left!', durationInMilliseconds)\n }\n\n get storageKey() {\n return \"event\" + this.element.dataset.eventId + \"StartTime\"\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n eventAttendanceId: Number,\n rating: Number\n }\n\n connect() {\n super.connect()\n\n this._clickHandler = this._clickHandler.bind(this)\n\n this._instrumentClicks();\n }\n\n afterReflex() {\n this._instrumentClicks();\n }\n\n _instrumentClicks() {\n this.element.querySelectorAll('i.fa-thin').forEach((elem) => {\n elem.addEventListener('click', this._clickHandler)\n })\n }\n\n _clickHandler(event) {\n if(event.target.classList.contains('rating')) return true\n\n let stimulateOptions = {\n eventAttendanceId: this.eventAttendanceId,\n rating: event.target.dataset.rating\n }\n this.stimulate('EventAttendance#rate!', stimulateOptions)\n }\n}\n","import ApplicationController from './application_controller'\n\n// Simple controller for fading out an element. See the fade.scss file for animation details.\nexport default class extends ApplicationController {\n static values = {\n direction: {type: String, default: 'out'}\n }\n\n connect() {\n super.connect()\n\n if(this.directionValue == 'in') {\n this.element.addEventListener('animationend', ()=>{\n this.element.classList.add('faded_in')\n this.element.classList.remove('fade_in')\n })\n this.element.classList.add('fade_in')\n } else if(this.directionValue == 'out') {\n this.element.addEventListener('animationend', ()=>{\n this.element.remove()\n })\n this.element.classList.add('fade_out')\n } else {\n this.log(\"Don't understand how to fade \", this.directionValue)\n }\n }\n}\n","import ApplicationController from './application_controller'\nimport { Turbo } from '@hotwired/turbo-rails'\n\nexport default class extends ApplicationController {\n connect() {\n super.connect()\n this._instrumentChanges()\n }\n\n disconnect() {\n this.element.querySelectorAll('select').forEach((elem)=>{\n elem.removeEventListener('change', this.processChangeHandler)\n })\n }\n\n processChange(event) {\n Turbo.visit(this._destinationUrl(event.target))\n }\n\n _instrumentChanges() {\n this.processChangeHandler = this.processChange.bind(this)\n this.element.querySelectorAll('select').forEach((elem)=>{\n elem.addEventListener('change', this.processChangeHandler)\n })\n }\n\n _destinationUrl(element) {\n let url = new URL(window.location.href)\n var paramName = element.name.substring(\n element.name.lastIndexOf(\"[\") + 1,\n element.name.lastIndexOf(\"]\")\n )\n url.searchParams.set(paramName, element.value)\n return url\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static targets = ['form']\n\n connect() {\n this.formTarget.querySelectorAll('[data-controller=\"autocomplete-multiselect\"]').forEach(\n (multiselect) => {\n multiselect.addEventListener('autocompleteMultiselect.change', (ev)=>{ this.search() })\n }\n )\n this.saveUrlParams(this.getUrlParams())\n }\n\n search() {\n // Update the URL with our search (to make it bookmarkable)\n const newUrlParams = this.getUrlParams()\n // Don't run the search unless the params have changed\n if(newUrlParams != this.urlParams) {\n this.saveUrlParams(newUrlParams)\n history.pushState({}, '', '?' + newUrlParams)\n\n // Trigger the form submission in a way that Turbo will pick it up\n this.formTarget.dispatchEvent(new Event('form:submit')) // ensure event listeners will know the form is submitting\n this.formTarget.requestSubmit()\n }\n }\n\n reset() {\n this.application.getControllerForElementAndIdentifier(this.formTarget, 'form').reset()\n this.search()\n }\n\n getUrlParams() {\n return (new URLSearchParams(new FormData(this.formTarget))).toString()\n }\n\n saveUrlParams(newParams) {\n this.urlParams = newParams\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n disableWith: String,\n onChange: String\n }\n static targets = [\n 'button'\n ]\n\n connect() {\n super.connect()\n this._instrumentButtons()\n this._instrumentChanges()\n }\n\n disableSubmitButton(event) {\n this.buttons.forEach((button) => {\n button.innerHTML = this.disableWith\n button.disabled = true\n button.classList.add('disabled')\n })\n }\n\n enableSubmitButton(event) {\n this.buttons.forEach((button) => {\n button.innerHTML = this.originalText[button]\n button.disabled = false\n button.classList.remove('disabled')\n })\n }\n\n processChange(event) {\n this.stimulate(this.onChangeValue)\n }\n\n reset() {\n // Reset the form to default values (and cause multiselect to empty out)\n this.element.reset()\n\n // Now, empty out all of the remaining fields\n Array.from(this.element.elements).forEach((formElement)=>{\n switch (formElement.type.toLowerCase()) {\n case \"text\":\n case \"password\":\n case \"textarea\":\n case \"hidden\":\n formElement.value = \"\"\n break\n case \"radio\":\n case \"checkbox\":\n if (formElement.checked) {\n formElement.checked = false\n }\n break\n case \"select-one\":\n case \"select-multi\":\n formElement.selectedIndex = -1\n break\n default:\n break\n }\n })\n }\n\n _instrumentButtons() {\n this.disableWith = this.disableWithValue || \"Sending...\" + window.spinnerTemplate\n if(this.hasButtonTarget) {\n this.buttons = [this.buttonTarget]\n } else {\n this.buttons = this.element.querySelectorAll('button[type=submit], a.button')\n }\n\n this.originalText = {}\n this.buttons.forEach((button) => {\n this.originalText[button] = button.innerHTML\n })\n this.element.addEventListener('enableButtons', this.enableSubmitButton.bind(this))\n }\n\n _instrumentChanges() {\n if (this.hasOnChangeValue) {\n this.processChangeHandler = this.processChange.bind(this)\n this.element.querySelectorAll('input, textarea, trix-editor').forEach((elem)=>{\n elem.addEventListener('blur', this.processChangeHandler)\n })\n this.element.querySelectorAll('select').forEach((elem)=>{\n elem.addEventListener('change', this.processChangeHandler)\n })\n this.element.querySelectorAll('input[type=checkbox]').forEach((elem)=>{\n elem.addEventListener('change', this.processChangeHandler)\n })\n }\n }\n}\n","import ApplicationController from './application_controller'\n\n// Simple controller for toggling a CSS class based on form select & checkbox elements. The exact behaviors are\n// controlled with data attributes. The intent is to dynamically alter a form based on the user's inputs.\nexport default class extends ApplicationController {\n static values = {\n cssClass: String,\n triggerValues: Array // The values of the input that will add the cssClass\n }\n static targets = [\n 'trigger', // The element that triggers the behavior\n 'target' // The element that receives the cssClass\n ]\n\n connect() {\n if(this.triggerTarget.type && this.triggerTarget.type.toLowerCase() == 'select-one') {\n this.processSelectChange = this.processSelectChange.bind(this)\n this.triggerTarget.addEventListener('change', this.processSelectChange)\n this.processSelectChange()\n } else if(this.triggerTarget.type && this.triggerTarget.type.toLowerCase() == 'checkbox') {\n this.processCheckboxChange = this.processCheckboxChange.bind(this)\n this.triggerTarget.addEventListener('change', this.processCheckboxChange)\n this.processCheckboxChange()\n }\n }\n\n processCheckboxChange(e) {\n if(this.triggerValuesValue.includes('checked')) {\n if(this.triggerTarget.checked) {\n this._addCssClassValue()\n } else {\n this._removeCssClassValue()\n }\n } else {\n if(this.triggerTarget.checked) {\n this._removeCssClassValue()\n } else {\n this._addCssClassValue()\n }\n }\n }\n\n processSelectChange(e) {\n if(this.triggerValuesValue.includes(this.triggerTarget.value)) {\n this._addCssClassValue()\n } else {\n this._removeCssClassValue()\n }\n }\n\n _addCssClassValue() {\n this.targetTargets.forEach((target) => {target.classList.add(this.cssClassValue)})\n }\n\n _removeCssClassValue() {\n this.targetTargets.forEach((target) => {target.classList.remove(this.cssClassValue)})\n }\n}\n","// Load all the controllers within this directory and all subdirectories.\n// Controller files must be named *_controller.js.\n\nimport { Application } from \"stimulus\"\nimport { definitionsFromContext } from \"stimulus/webpack-helpers\"\nimport StimulusReflex from 'stimulus_reflex'\nimport consumer from '../channels/consumer'\nimport controller from '../controllers/application_controller'\n\nconst application = Application.start()\nconst context = require.context(\"controllers\", true, /_controller\\.js$/)\napplication.load(definitionsFromContext(context))\napplication.consumer = consumer\nStimulusReflex.initialize(application, { controller, isolate: true })\nStimulusReflex.debug = process.env.RAILS_ENV === 'development'\n\nif (process.env.RAILS_ENV === 'development' || process.env.RAILS_ENV === 'test') {\n import('radiolabel').then(Radiolabel =>\n application.register('radiolabel', Radiolabel.default)\n )\n}\n\nimport CableReady from \"cable_ready\"\nCableReady.initialize({ consumer })\n","import ApplicationController from './application_controller'\n\n// Simple controller for toggling a CSS class based on clicks. Makes no assumptions about starting state,\n// so whatever the markup has will be toggled on click.\nexport default class extends ApplicationController {\n static targets = ['input']\n\n toggleTarget() {\n this.inputTarget.click()\n }\n\n toggleTargetIfChecked() {\n if(this.element.checked) {\n this.toggleTarget()\n }\n }\n\n uncheckTargetIfChecked(e) {\n if(e.target.checked && this.inputTarget.checked) {\n this.toggleTarget()\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static targets = ['link']\n\n favoriteOrUnfavorite(event) {\n event.preventDefault()\n event.stopPropagation()\n if(this.linkTarget.innerText == 'Applied') {\n this.unfavorite()\n } else {\n this.favorite()\n }\n }\n\n favorite() {\n this.log(\"Favoriting Job \", this.linkTarget.dataset.jobId)\n fetch(this.linkTarget.dataset.favoritePath, {\n method: 'POST',\n headers: this.ajaxHeaders()\n }).then(response => {\n if(response.status == 200) {\n this.updateAllJobCardsTo('favorited')\n }\n })\n }\n\n unfavorite() {\n this.log(\"Unfavoriting Job \", this.linkTarget.dataset.jobId)\n fetch(this.linkTarget.dataset.unfavoritePath, {\n method: 'DELETE',\n headers: this.ajaxHeaders()\n }).then(response => {\n if(response.status == 200) {\n this.updateAllJobCardsTo('unfavorited')\n }\n })\n }\n\n updateAllJobCardsTo(favoriteStatus) {\n let selector = 'a[data-job-gid=\"' + this.linkTarget.dataset.jobGid + '\"][data-job-interest-target=\"link\"]'\n this.log(\"updating cards with selector\", selector)\n document.querySelectorAll(selector).forEach(linkElement => {\n if(favoriteStatus == 'favorited') {\n linkElement.innerText = 'Applied'\n linkElement.classList.add('bordered')\n } else {\n linkElement.innerText = 'Apply'\n linkElement.classList.remove('bordered')\n }\n })\n }\n}\n","import ApplicationController from './application_controller'\n\n// Intended to give us visibility into when users click links in text blobs. Mostly those links are going to be\n// external links. For internal links, we will see the page load on the receiving side, but for external links,\n// we have to report the data ourselves. The controller will use whatever pingUrlValue is provided, and append\n// the link text to it as a query parameter (eg '/ping' => '/foo?link_text=My%20Link%20Text').\n//\n// The provided pingUrlValue must be a fully qualified URL (including the protocol & domain)\nexport default class extends ApplicationController {\n static values = {\n instrumentationRoot: String, // Will default to '.trix-content'\n pingUrl: String\n }\n\n connect() {\n super.connect()\n // TODO: call _instrumentLinks() in response to turbo:load events, so we can instrument dynamically added markup\n this._instrumentLinks()\n }\n\n _instrumentLinks() {\n let instrumentationRoot = this.hasInstrumentationRootValue ? this.instrumentationRootValue : '.trix-content'\n\n let links = this.element.querySelectorAll(instrumentationRoot + ' a:not([ping])')\n\n links.forEach(linkElement => {\n let pingTarget = new URL(this.pingUrlValue)\n pingTarget.searchParams.append('link_text', linkElement.textContent)\n\n linkElement.addEventListener('click', event => {\n fetch(pingTarget, {method: 'POST'}) // Telemetry collection: fire and forget\n })\n })\n }\n}\n","import ApplicationController from './application_controller'\n// import debounce from \"lodash.debounce\"\n\nexport default class extends ApplicationController {\n connect() {\n super.connect()\n this._instrumentEvents()\n }\n\n disconnect() {\n this._uninstrumentEvents()\n super.disconnect()\n }\n\n dragStart(event) {\n event.dataTransfer.effectAllowed = \"move\"\n event.target.classList.add(\"dragging\")\n this.draggedElement = event.target\n }\n\n dragOver(event) {\n if(this._figureOutDropTarget(event)) {\n event.preventDefault() // Allows drop event to fire\n }\n return true\n }\n\n dragEnter(event) {\n let dropTarget = this._figureOutDropTarget(event)\n if(dropTarget) {\n if(this.currentDragHover != dropTarget) {\n this.currentDragHover = dropTarget\n dropTarget.classList.add('drag_hover')\n this.element.querySelectorAll(`[draggable=true].drag_hover:not(.dragging):not([data-list-ordering-id-number-value='${dropTarget.getAttribute('data-list-ordering-id-number-value')}'])`).forEach((elem) => {\n elem.classList.remove('drag_hover')\n })\n }\n event.preventDefault()\n }\n }\n\n dragLeave(event) {\n let dropTarget = this._figureOutDropTarget(event)\n if(dropTarget) {\n event.preventDefault()\n }\n }\n\n dragEnd(event) {\n event.target.classList.remove('dragging')\n this.draggedElement = null\n\n this.element.querySelectorAll('[draggable=true].drag_hover').forEach((elem) => {\n elem.classList.remove('drag_hover')\n })\n this.currentDragHover = null\n }\n\n drop(event) {\n const dropTarget = this._figureOutDropTarget(event) || this.currentDragHover\n\n const positionComparison = dropTarget.compareDocumentPosition(this.draggedElement)\n if(positionComparison & Node.DOCUMENT_POSITION_FOLLOWING) {\n dropTarget.insertAdjacentElement('beforebegin', this.draggedElement)\n } else if (positionComparison & Node.DOCUMENT_POSITION_PRECEDING) {\n dropTarget.insertAdjacentElement('afterend', this.draggedElement)\n } else {\n this.log(\"couldn't drop\", positionComparison)\n }\n\n event.preventDefault()\n }\n\n _figureOutDropTarget(event) {\n const dropTarget = event.target\n if(!dropTarget) {\n return null\n }\n\n return dropTarget.closest('[draggable=true]:not(.dragging)')\n }\n\n _instrumentEvents() {\n this.dragStart = this.dragStart.bind(this)\n this.dragOver = this.dragOver.bind(this)\n this.dragEnter = this.dragEnter.bind(this)\n this.dragLeave = this.dragLeave.bind(this)\n this.dragEnd = this.dragEnd.bind(this)\n this.drop = this.drop.bind(this)\n this.element.addEventListener('dragstart', this.dragStart)\n this.element.addEventListener('dragover', this.dragOver)\n this.element.addEventListener('dragenter', this.dragEnter)\n this.element.addEventListener('dragleave', this.dragLeave)\n this.element.addEventListener('dragend', this.dragEnd)\n this.element.addEventListener('drop', this.drop)\n }\n\n _uninstrumentEvents() {\n this.element.removeEventListener('dragstart', this.dragStart)\n this.element.removeEventListener('dragover', this.dragOver)\n this.element.removeEventListener('dragenter', this.dragEnter)\n this.element.removeEventListener('dragleave', this.dragLeave)\n this.element.removeEventListener('dragend', this.dragEnd)\n this.element.removeEventListener('drop', this.drop)\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"loadingIndicator\", \"content\"]\n \n connect() {\n // Add a listener for turbo:submit-start which is triggered when a form is submitted\n document.addEventListener(\"turbo:submit-start\", this.showLoading.bind(this))\n \n // Add a listener for turbo:frame-render which is triggered when the frame is updated\n document.addEventListener(\"turbo:frame-render\", this.hideLoading.bind(this))\n \n // Fallback for completing the loading state if render doesn't fire\n document.addEventListener(\"turbo:frame-load\", this.hideLoading.bind(this))\n }\n \n disconnect() {\n // Clean up event listeners when controller is disconnected\n document.removeEventListener(\"turbo:submit-start\", this.showLoading)\n document.removeEventListener(\"turbo:frame-render\", this.hideLoading)\n document.removeEventListener(\"turbo:frame-load\", this.hideLoading)\n }\n \n showLoading(event) {\n // Only show loading if the form submit is for this turbo frame\n if (event.target.closest(`[data-turbo-frame=\"${this.element.id}\"]`)) {\n this.loadingIndicatorTarget.style.display = \"block\"\n this.contentTarget.style.display = \"none\"\n }\n }\n \n hideLoading(event) {\n // Only hide loading if this frame was the one that loaded\n if (event.target.id === this.element.id) {\n this.loadingIndicatorTarget.style.display = \"none\"\n this.contentTarget.style.display = \"block\"\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"loadingIndicator\", \"content\", \"dots\"]\n \n connect() {\n // Non-Turbo form handling for login\n this.element.addEventListener(\"submit\", this.handleFormSubmit.bind(this))\n \n // Start dots animation if dots targets exist\n this.startDotsAnimation()\n }\n \n disconnect() {\n // Clean up event listeners when controller is disconnected\n this.element.removeEventListener(\"submit\", this.handleFormSubmit)\n \n // Clear animation interval\n if (this.dotsInterval) {\n clearInterval(this.dotsInterval)\n }\n }\n \n handleFormSubmit(event) {\n // Show loading state when the form is submitted\n this.showLoading()\n }\n \n showLoading() {\n if (this.hasLoadingIndicatorTarget && this.hasContentTarget) {\n this.loadingIndicatorTarget.style.display = \"block\"\n this.contentTarget.style.display = \"none\"\n }\n }\n \n startDotsAnimation() {\n if (this.hasDotsTarget) {\n const states = [\".\", \"..\", \"...\"]\n let index = 0\n \n this.dotsInterval = setInterval(() => {\n this.dotsTargets.forEach(dots => {\n dots.textContent = states[index]\n })\n index = (index + 1) % states.length\n }, 500)\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static targets = ['container', 'content']\n\n initialize() {\n super.initialize()\n\n this._clickHandler = this._clickHandler.bind(this)\n this.closeModal = this.closeModal.bind(this)\n this.openModal = this.openModal.bind(this)\n\n // Goal: Trap click events, look for any on modal links, and ensure we open the modal.\n // If the element that was clicked has a data-reflex attribute, its click event will be trapped by StimulusReflex,\n // so we have to get creative, so we also check the stimulus-reflex:before. The _clickHandler is idempotent.\n document.addEventListener('click', this._clickHandler)\n document.addEventListener('stimulus-reflex:before', this._clickHandler)\n document.addEventListener('modal:open', this.openModal)\n document.addEventListener('modal:close', this.closeModal)\n }\n\n connect() {\n super.connect()\n\n // Trap click events, so we can close the modal when the user clicks outside the content region. Behind the content\n // region is the container, which goes edge-to-edge. So a click outside the content must be on the container.\n this.containerTarget.addEventListener('click', event => {\n if(event.target == this.containerTarget) {\n this.closeModal()\n }\n })\n }\n\n closeModal() {\n this.containerTarget.classList.add('hidden')\n this.contentTarget.innerHTML = 'Loading… ' + window.spinnerTemplate\n this.containerTarget.dispatchEvent(new Event('modal:closed'))\n }\n\n openModal() {\n this.containerTarget.classList.remove('hidden')\n this.containerTarget.dispatchEvent(new Event('modal:opened'))\n }\n\n _clickHandler(event) {\n let element = event.target.closest('[data-turbo-frame=\"modal\"]')\n if(element?.dataset?.turboFrame == 'modal' || event.detail?.element?.dataset?.turboFrame == 'modal') {\n this.openModal()\n }\n }\n\n handleSubmit(event) {\n if (event.detail.success) {\n this.closeModal()\n }\n }\n}\n","import ApplicationController from './application_controller'\n\n// Simple controller for toggling a CSS class based on clicks. Makes no assumptions about starting state,\n// so whatever the markup has will be toggled on click.\nexport default class extends ApplicationController {\n static targets = ['preview', 'input']\n static values = {\n width: Number,\n height: Number\n }\n\n connect() {\n this.onInputChange = this.onInputChange.bind(this)\n this.inputTarget.addEventListener(\"change\", this.onInputChange)\n this.instrumentDragAndDropEvents()\n }\n\n // Set up all of the drag & drop events\n instrumentDragAndDropEvents() {\n this.highlightDropArea = this.highlightDropArea.bind(this)\n this.unhighlightDropArea = this.unhighlightDropArea.bind(this)\n this.showFileDropped = this.showFileDropped.bind(this)\n\n this.inputTarget.addEventListener('dragenter', this.highlightDropArea)\n this.inputTarget.addEventListener('dragover', this.highlightDropArea)\n this.inputTarget.addEventListener('dragleave', this.unhighlightDropArea)\n this.inputTarget.addEventListener('drop', this.unhighlightDropArea)\n this.inputTarget.addEventListener('drop', this.showFileDropped)\n }\n\n highlightDropArea(event) {\n this.element.classList.add('hover')\n this.inputTarget.classList.add('hover')\n }\n\n unhighlightDropArea(event) {\n this.element.classList.remove('hover')\n this.inputTarget.classList.remove('hover')\n }\n\n showFileDropped(event) {\n this.inputTarget.classList.add('attached')\n }\n\n // If a new image is added to the input, change the preview\n onInputChange(event) {\n if(this.inputTarget.files.length >= 1) {\n this.previewTarget.innerHTML = ``\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { BrowserRouter } from 'react-router-dom';\n\n\nexport default class extends Controller {\n static values = { props: Object, };\n connect() {\n const componentName = this.element.dataset.reactComponent;\n\n if (!componentName) {\n console.error(\"No React component specified\");\n return;\n }\n import(`../components/react/${componentName}`)\n .then((module) => {\n const Component = module.default;\n this.root = createRoot(this.element);\n this.root.render();\n })\n\n }\n\n disconnect() {\n if (this.root) {\n this.root.unmount();\n } }\n}","import ApplicationController from './application_controller'\n\n// Controller for rebroacasting reflexes in the case of a websocket reconnect\nexport default class extends ApplicationController { \n // reflex to rerun\n static values = {reflex: String}\n\n // Listen for the \"reconnected\" event\n connect() {\n super.connect()\n this.onReconnect = this.onReconnect.bind(this)\n document.addEventListener('reconnected', this.onReconnect)\n }\n\n disconnect() {\n document.removeEventListener('reconnected', this.onReconnect)\n super.disconnect()\n }\n\n // Re-run the provided reflex, if the page contains a loading class\n onReconnect() {\n this.log(\"reconnect\")\n if(this.element.classList.contains('loading')) {\n this.stimulate(this.reflexValue)\n }\n document.removeEventListener('reconnected', this.onReconnect)\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n repositoryIdParam: String\n }\n\n connect() {\n super.connect();\n }\n\n update(event) {\n event.preventDefault();\n const selectElement = event.currentTarget;\n const repositoryIdParam = selectElement.value || this.repositoryIdParamValue;\n const url = new URL(window.location);\n if (repositoryIdParam) {\n url.searchParams.set('repo_id', repositoryIdParam);\n } else {\n url.searchParams.delete('repo_id'); // all repositories = no param\n }\n window.location = url.toString();\n }\n}","import ApplicationController from './application_controller'\n\n// Make links in rich text areas open in a new tab/window\nexport default class extends ApplicationController {\n connect() {\n super.connect()\n this.log(\"element: \", this.element)\n this.element.querySelectorAll('a').forEach(function(link) {\n if (link.host !== window.location.host) {\n link.target = \"_blank\"\n link.setAttribute('aria-label', 'opens in a new window')\n }\n })\n }\n}\n","import ApplicationController from './application_controller'\nimport debounce from \"lodash.debounce\"\n\nexport default class extends ApplicationController {\n static targets = [\"input\", \"toggle\"]\n\n connect() {\n this.clearSearch = this.clearSearch.bind(this)\n this.onKeydown = debounce(this.onKeydown.bind(this), 300)\n if(this.hasInputTarget) {\n this.inputTarget.addEventListener(\"keydown\", this.onKeydown)\n }\n if(this.hasToggleTarget) {\n this.toggleTarget.addEventListener(\"click\", this.clearSearch)\n }\n }\n\n disconnect() {\n if(this.hasInputTarget) {\n this.inputTarget.removeEventListener(\"keydown\", this.onKeydown)\n }\n if (this.hasToggleTarget) {\n this.toggleTarget.removeEventListener(\"click\", this.clearSearch)\n }\n }\n\n onKeydown(event) {\n if(event.key == \"Escape\") {\n event.stopPropagation()\n event.preventDefault()\n this.clearSearch()\n }\n }\n\n clearSearch() {\n this.inputTarget.value = null;\n\n if(this.hasInputTarget) {\n let inputForm = this.inputTarget.closest('form')\n if(inputForm) {\n // Trigger the form submission in a way that Turbo will pick it up\n inputForm.dispatchEvent(new Event('form:submit')) // ensure event listeners will know the form is submitting\n inputForm.requestSubmit()\n }\n }\n\n }\n}\n","import ApplicationController from './application_controller'\n\n// Connect this controller to a to drive navigation. When the form element, if the element doesn't have a selected value, this controller\n// will use the browser's configured time zone to choose one.\nexport default class extends ApplicationController {\n connect() {\n super.connect()\n\n if(this.element.querySelectorAll('option[selected]').length == 0) {\n this.element.querySelector(`option[value=\"${Intl.DateTimeFormat().resolvedOptions().timeZone}\"]`).setAttribute(\"selected\", \"selected\")\n }\n }\n}\n","import ApplicationController from './application_controller'\nimport {computePosition, autoUpdate, offset, flip, shift, autoPlacement, arrow} from '@floating-ui/dom';\n\nexport default class extends ApplicationController {\n static values = {\n text: String,\n id: String,\n url: String,\n placement: String,\n hideArrow: { type: Boolean, default: false },\n trigger: { type: String, default: \"hover\" }\n }\n\n // Track the currently active tooltip controller\n static activeController = null;\n\n connect() {\n super.connect()\n this.tooltip = document.querySelector('#tooltip')\n if (!this.tooltip) return\n\n this.defaultState = this.tooltip.querySelector('.default_state')\n this.tooltipContent = this.tooltip.querySelector('#tooltip_content')\n if (!this.tooltipContent) return\n\n this.tooltipContent.setAttribute('role', 'tooltip')\n \n // Set up event listeners based on trigger type\n if (this.triggerValue === \"click\") {\n this.element.addEventListener('click', this.handleClick.bind(this))\n document.addEventListener('click', this.handleDocumentClick.bind(this))\n } else {\n this.element.addEventListener('mouseenter', this.handleMouseEnter.bind(this))\n this.element.addEventListener('mouseleave', this.handleMouseLeave.bind(this))\n this.element.addEventListener('focus', this.handleFocus.bind(this))\n this.element.addEventListener('blur', this.handleBlur.bind(this))\n }\n\n // Add tooltip hover handlers\n this.tooltip.addEventListener('mouseenter', this.handleTooltipEnter.bind(this))\n this.tooltip.addEventListener('mouseleave', this.handleTooltipLeave.bind(this))\n\n // Add escape key handler\n this.handleEscapeKey = this.handleEscapeKey.bind(this)\n document.addEventListener('keydown', this.handleEscapeKey)\n\n // Initialize show delay timeout\n this.showDelay = 500 // 500ms delay before showing tooltip\n this.showTimeout = null\n }\n\n disconnect() {\n if (this.cleanup) this.cleanup()\n this.removeArrow()\n\n // Clear any pending timeouts\n if (this.showTimeout) {\n clearTimeout(this.showTimeout)\n this.showTimeout = null\n }\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout)\n this.hideTimeout = null\n }\n\n // Clean up event listeners\n if (this.triggerValue === \"click\") {\n this.element.removeEventListener('click', this.handleClick.bind(this))\n document.removeEventListener('click', this.handleDocumentClick.bind(this))\n } else {\n this.element.removeEventListener('mouseenter', this.handleMouseEnter.bind(this))\n this.element.removeEventListener('mouseleave', this.handleMouseLeave.bind(this))\n this.element.removeEventListener('focus', this.handleFocus.bind(this))\n this.element.removeEventListener('blur', this.handleBlur.bind(this))\n }\n\n // Clean up tooltip hover handlers\n this.tooltip.removeEventListener('mouseenter', this.handleTooltipEnter.bind(this))\n this.tooltip.removeEventListener('mouseleave', this.handleTooltipLeave.bind(this))\n\n // Clean up escape key handler\n document.removeEventListener('keydown', this.handleEscapeKey)\n }\n\n handleMouseEnter() {\n // Clear any existing show timeout\n if (this.showTimeout) {\n clearTimeout(this.showTimeout)\n }\n \n this.isHovering = true\n // Set new show timeout\n this.showTimeout = setTimeout(() => {\n if (this.isHovering) {\n this.show()\n }\n }, this.showDelay)\n }\n\n handleFocus() {\n // For keyboard navigation, show immediately without delay\n this.show()\n }\n\n handleClick(event) {\n event.stopPropagation()\n if (this.tooltip.hasAttribute('data-show')) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n handleDocumentClick(event) {\n if (!this.tooltip.contains(event.target) && !this.element.contains(event.target)) {\n this.hide()\n }\n }\n\n createArrow() {\n // Clean up any existing arrows first\n this.removeArrow()\n\n if (!this.hideArrowValue) {\n this.tooltipArrow = document.createElement('div')\n this.tooltipArrow.id = 'tooltip_arrow'\n this.tooltipArrow.setAttribute('data-popper-arrow', '')\n this.tooltip.insertBefore(this.tooltipArrow, this.tooltip.firstChild)\n }\n }\n\n removeArrow() {\n // Remove any existing arrows\n const existingArrow = this.tooltip.querySelector('#tooltip_arrow')\n if (existingArrow) {\n existingArrow.remove()\n }\n this.tooltipArrow = null\n }\n\n show() {\n // If there's another active controller, hide its tooltip immediately\n if (this.constructor.activeController && this.constructor.activeController !== this) {\n this.constructor.activeController.hide()\n }\n \n // Set this as the active controller\n this.constructor.activeController = this\n\n // Clear any existing hide timeouts when showing a new tooltip\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout)\n this.hideTimeout = null\n }\n\n // Create fresh arrow for this tooltip\n this.createArrow()\n\n if (this.hasUrlValue) {\n this.tooltipContent.innerHTML = this.defaultState.innerHTML\n const frame = document.createElement('turbo-frame')\n frame.id = 'tooltip_content'\n frame.src = this.urlValue\n this.tooltipContent.replaceChildren(frame)\n } else if (this.hasIdValue) {\n const content = document.querySelector('#' + this.idValue)\n if (content) {\n this.tooltipContent.innerHTML = content.innerHTML\n }\n } else if (this.hasTextValue) {\n this.tooltipContent.innerHTML = this.textValue\n }\n\n this.tooltip.setAttribute('data-show', '')\n \n Object.assign(this.tooltip.style, {\n display: 'block',\n visibility: 'visible',\n position: 'fixed',\n zIndex: '9999'\n })\n\n const updatePosition = () => {\n const middleware = [\n offset(6),\n this.hasPlacementValue ? flip() : autoPlacement(),\n shift({padding: 5})\n ]\n\n // Only add arrow middleware if we have an arrow\n if (this.tooltipArrow) {\n middleware.push(arrow({element: this.tooltipArrow}))\n }\n\n computePosition(this.element, this.tooltip, {\n placement: this.hasPlacementValue ? this.placementValue : undefined,\n middleware,\n strategy: 'fixed'\n }).then(({x, y, placement, middlewareData}) => {\n Object.assign(this.tooltip.style, {\n left: `${x}px`,\n top: `${y}px`\n })\n\n // Handle arrow positioning if we have one\n if (this.tooltipArrow && middlewareData.arrow) {\n const {x: arrowX, y: arrowY} = middlewareData.arrow\n const staticSide = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right'\n }[placement.split('-')[0]]\n\n Object.assign(this.tooltipArrow.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n [staticSide]: '-4px'\n })\n }\n })\n }\n\n // Initial position\n updatePosition()\n\n // Keep position updated\n this.cleanup = autoUpdate(\n this.element,\n this.tooltip,\n updatePosition,\n {\n ancestorScroll: true,\n ancestorResize: true,\n elementResize: true,\n layoutShift: true\n }\n )\n }\n\n hide() {\n // Only clear active controller if it's this one\n if (this.constructor.activeController === this) {\n this.constructor.activeController = null\n }\n\n // Clear any pending hide timeouts\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout)\n this.hideTimeout = null\n }\n\n if (this.cleanup) {\n this.cleanup()\n this.cleanup = null\n }\n \n this.tooltip.removeAttribute('data-show')\n this.tooltipContent.innerHTML = ''\n Object.assign(this.tooltip.style, {\n display: 'none',\n visibility: 'hidden'\n })\n\n // Reset hover state when hiding\n this.isTooltipHovered = false\n\n // Clean up arrow when hiding\n this.removeArrow()\n }\n\n handleMouseLeave() {\n this.isHovering = false\n // Clear the show timeout if it exists\n if (this.showTimeout) {\n clearTimeout(this.showTimeout)\n this.showTimeout = null\n }\n\n // Only set hide timeout if this is the active controller\n if (this.constructor.activeController === this) {\n this.hideTimeout = setTimeout(() => {\n if (!this.isTooltipHovered) {\n this.hide()\n }\n }, 150)\n }\n }\n\n handleBlur() {\n // Only hide if not hovering over tooltip\n if (!this.isTooltipHovered) {\n this.hide()\n }\n }\n\n handleTooltipEnter() {\n this.isTooltipHovered = true\n // Clear any pending hide timeout\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout)\n this.hideTimeout = null\n }\n }\n\n handleTooltipLeave() {\n this.isTooltipHovered = false\n // Only set hide timeout if this is the active controller\n if (this.constructor.activeController === this) {\n this.hideTimeout = setTimeout(() => {\n if (!this.element.matches(':hover')) {\n this.hide()\n }\n }, 150)\n }\n }\n\n handleEscapeKey(event) {\n if (event.key === \"Escape\" && this.tooltip.hasAttribute('data-show')) {\n this.hide()\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n trackQuizId: Number,\n userId: Number\n }\n\n connect () {\n super.connect()\n\n this.quizCompleted = this.quizCompleted.bind(this)\n document.addEventListener('quiz.completed', this.quizCompleted)\n }\n\n disconnect () {\n super.connect()\n \n document.removeEventListener('quiz.completed', this.quizCompleted)\n }\n\n quizCompleted = event => {\n const { quizContext, quizId } = event.detail\n if (this.trackQuizIdValue == quizId && quizContext == \"Pre-Assessment\") {\n [...this.element.querySelectorAll('.disabled')].forEach((elem) => elem.classList.remove('disabled'))\n }\n }\n}\n","import ApplicationController from './application_controller'\n\n// The controller's sole purpose is to ensure that trix-editor elements that get morphed will still work after the\n// morph. Trix stores state in the DOM, and morphdom has a tendency to wipe out and replace the DOM element, which\n// leaves the Trix JS unattached to the DOM, and the new DOM element devoid of JS behavior. Trix also doesn't provide\n// a \"re-init\" or manual init method. The code here attempts to hack around that, so that if we morph a trix-editor it\n// will still work after the morph. The code is also sensitive to the fact that not all trix-editors get morphed when a\n// morph happens, and makes sure that unmorphed trix-editor elements continue to work.\nexport default class extends ApplicationController {\n connect() {\n super.connect()\n this._instrumentEvents()\n }\n\n disconnect() {\n this._uninstrumentEvents()\n super.disconnect()\n }\n\n _instrumentEvents() {\n this._beforeReflexCallback = this._beforeReflexCallback.bind(this)\n this._afterReflexCallback = this._afterReflexCallback.bind(this)\n document.body.addEventListener('stimulus-reflex:before', this._beforeReflexCallback)\n document.body.addEventListener('stimulus-reflex:after', this._afterReflexCallback)\n }\n\n _uninstrumentEvents() {\n document.body.removeEventListener('stimulus-reflex:before', this._beforeReflexCallback)\n document.body.removeEventListener('stimulus-reflex:after', this._afterReflexCallback)\n }\n\n _beforeReflexCallback() {\n // Save these for the afterReflexCallback()\n this.trixId = this.element.trixId\n this.toolbarElementId = this.element.getAttribute('toolbar')\n\n // Remove all of the state Trix stores in the DOM that lets Trix know the element is initialized\n this.element.disconnectedCallback()\n this.element.removeAttribute('data-trix-internal')\n this.element.removeAttribute('toolbar')\n this.element.removeAttribute('contenteditable')\n this.element.editorController = false\n }\n\n _afterReflexCallback() {\n // The conditional is asking if the trix-editor element was around before the reflex started\n if(this.trixId && this.toolbarElementId) {\n let toolbar = document.querySelector(`#${this.toolbarElementId}`)\n if(toolbar) {\n // We're about to ask Trix to re-init the toolbar, so we prevent double toolbars because ETOOMANYTOOLBARS\n toolbar.remove()\n }\n this.element.connectedCallback()\n this.element.toolbarElement\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n userIdParam: String\n }\n\n connect() {\n super.connect();\n }\n\n update(event) {\n event.preventDefault();\n const selectElement = event.currentTarget;\n const userIdParam = selectElement.value || this.userIdParamValue;\n const url = new URL(window.location);\n \n // Get the current tab from URL or localStorage\n let currentTab = url.searchParams.get('tab');\n if (!currentTab) {\n currentTab = localStorage.getItem('yearOneCurrentTab');\n }\n \n if (userIdParam) {\n url.searchParams.set('user_id', userIdParam);\n } else {\n url.searchParams.delete('user_id'); // all teams = no param\n }\n \n // Restore the tab parameter if it existed\n if (currentTab) {\n url.searchParams.set('tab', currentTab);\n }\n \n window.location = url.toString();\n }\n}","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"storyPoints\", \"tickets\"]\n\n connect() {\n // Get initial metric type from URL\n const urlParams = new URLSearchParams(window.location.search)\n const metricType = urlParams.get(\"metric_type\") || \"story_points\"\n \n // Set initial button states\n this.updateButtonStates(metricType)\n }\n\n toggleMetric(event) {\n const button = event.currentTarget\n const metricType = button.dataset.metricType\n\n // Update button states\n this.updateButtonStates(metricType)\n\n // Update URL and add to browser history\n const url = new URL(window.location.href)\n url.searchParams.set(\"metric_type\", metricType)\n window.history.pushState({}, \"\", url.toString())\n\n // Get the current path and update it for the frame request\n const frame = document.getElementById(\"productivity_content\")\n if (frame) {\n // Create URL for the frame request\n const frameUrl = new URL(window.location.href)\n frameUrl.pathname = \"/insights/productivity\"\n \n // Get all current URL parameters\n const currentParams = new URLSearchParams(window.location.search)\n \n // Add all existing parameters to the frame URL\n currentParams.forEach((value, key) => {\n frameUrl.searchParams.set(key, value)\n })\n \n // Update or add the metric_type parameter\n frameUrl.searchParams.set(\"metric_type\", metricType)\n \n // Make the frame request\n Turbo.visit(frameUrl.toString(), { frame: \"productivity_content\" })\n }\n }\n\n updateButtonStates(metricType) {\n this.storyPointsTarget.dataset.active = (metricType === \"story_points\").toString()\n this.ticketsTarget.dataset.active = (metricType === \"tickets\").toString()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n const turboFrame = this.element\n const baseUrl = turboFrame.getAttribute(\"src\")\n\n if (baseUrl) {\n const urlParams = new URLSearchParams(window.location.search)\n const metricType = urlParams.get(\"metric_type\")\n if (metricType) {\n // Handle relative URLs by prepending origin\n const fullUrl = baseUrl.startsWith(\"/\") ? `${window.location.origin}${baseUrl}` : baseUrl\n const currentSrc = new URL(fullUrl)\n currentSrc.searchParams.set(\"metric_type\", metricType)\n turboFrame.setAttribute(\"src\", currentSrc.toString())\n }\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n userName: String,\n videoChatUrl: String,\n videoParticipantToken: String,\n eventEndTime: Number,\n themeJson: String\n }\n\n connect() {\n super.connect()\n\n this.videoChatContainer = document.getElementById('video_chat')\n if(this.videoChatContainer) {\n if(window.DailyIframe) {\n this.log(\"creating frame immediately\")\n this.createDailyFrame()\n } else {\n this.log(\"delaying creating frame\")\n setTimeout(this.createDailyFrame.bind(this), 5000)\n }\n }\n } // connect()\n\n createDailyFrame() {\n this.videoChatContainer.innerHTML = ''\n const dailyOptions = {\n showLeaveButton: true,\n showFullscreenButton: true,\n userName: this.userNameValue,\n url: this.videoChatUrlValue,\n theme: JSON.parse(this.themeJsonValue)\n }\n let callFrame = window.DailyIframe.createFrame(this.videoChatContainer, dailyOptions)\n\n callFrame\n .join({token: this.videoParticipantTokenValue})\n .then(participants => this.videoChatContainer.dispatchEvent(new CustomEvent('videoChatJoined', {bubbles: true})) )\n .catch(error => console.log(\"ERROR\", error))\n\n callFrame.on('left-meeting', (event) => {\n const goodbyeContainer = document.getElementById('goodbye_message')\n if(goodbyeContainer) {\n this.videoChatContainer.classList.add('hidden')\n goodbyeContainer.classList.remove('hidden')\n }\n this.videoChatContainer.dispatchEvent(new CustomEvent('videoChatLeft', {bubbles: true}) )\n })\n let closeInterval = (new Date(this.eventEndTimeValue) - new Date)\n setTimeout(() => { location.reload() }, closeInterval); // Refresh the page when the room shuts\n\n }\n}\n","import ApplicationController from './application_controller'\nimport Player from '@vimeo/player'\n\nexport default class extends ApplicationController {\n static values = {\n url: String,\n chapterId: String,\n codingProblemId: String,\n nextVideoUrl: String,\n userId: String,\n videoId: String\n }\n\n connect() {\n super.connect()\n\n // Set up callback functions with correct binding\n this._playCallback = this._playCallback.bind(this)\n this._playingCallback = this._playingCallback.bind(this)\n this._stopCallback = this._stopCallback.bind(this)\n\n // Initialize some data\n this.secondsViewed = 0\n this.instrumentationData = {}\n\n // Start the player\n const vimeoOptions = {\n url: this.urlValue,\n responsive: true\n }\n this.element.innerHTML = '' // Empty it out, to remove any \"loading\" content such as spinners\n this.vimeoPlayer = new Player(this.element.id, vimeoOptions)\n\n // Handle the instrumentation\n this._getInstrumentationData()\n this.vimeoPlayer.on('play', this._playCallback)\n this.vimeoPlayer.on('timeupdate', this._playingCallback)\n this.vimeoPlayer.on('pause', this._stopCallback)\n this.vimeoPlayer.on('ended', this._stopCallback)\n }\n\n _getInstrumentationData() {\n this.instrumentationData.videoUrl = this.urlValue\n this.instrumentationData.userId = this.hasUserIdValue ? this.userIdValue : 'r' + Math.floor(Math.random() * 10000)\n\n this.vimeoPlayer.getVideoId().then((id) => {\n this.instrumentationData.videoId = id\n this.instrumentationData.playbackId = `${this.userIdValue}_${id}_${Date.now()}`\n }).catch((error)=>{\n this.instrumentationData.videoId = this._errorInterpreter(error)\n })\n\n this.vimeoPlayer.getVideoTitle().then((title) => {\n this.instrumentationData.videoTitle = title\n }).catch((error)=>{\n this.instrumentationData.videoTitle = this._errorInterpreter(error)\n })\n\n Promise.all([this.vimeoPlayer.getVideoWidth(), this.vimeoPlayer.getVideoHeight()]).then((dimensions) => {\n this.instrumentationData.videoWidth = dimensions[0]\n this.instrumentationData.videoHeight = dimensions[1]\n })\n }\n\n _playCallback(data) {\n // data is { \"duration\": 61.857, \"percent\": 0.049, \"seconds\": 3.034 }\n this.instrumentationData.videoDuration ||= data.duration\n if(data.percent === 0 && window.newrelic) {\n window.newrelic.addPageAction('videoPlayStart', {...this.instrumentationData, \"seconds\": 0, \"percentViewed\": 0})\n }\n }\n\n // This callback gets triggered every ~250ms during playback. We have a max number of events of ~4/s\n // (collected as 120 events every 30s), so we want to drop many of these events\n _playingCallback(data) {\n // data is { \"duration\": 61.857, \"percent\": 0.049, \"seconds\": 3.034 }\n const viewed = Math.floor(data.seconds)\n if (viewed > this.secondsViewed) {\n this.secondsViewed = viewed\n if(this.hasChapterIdValue) {\n this.stimulate('VideoProgress#capture_education', this.chapterIdValue, data.seconds, data.percent)\n } else if(this.hasCodingProblemIdValue) {\n this.stimulate('VideoProgress#capture_coding_problem', this.codingProblemIdValue, data.seconds, data.percent)\n } else if(this.hasVideoIdValue) {\n this.stimulate('VideoProgress#capture_video', this.videoIdValue, data.seconds, data.percent)\n }\n if(window.newrelic) {\n window.newrelic.addPageAction('videoPlayContinue', {...this.instrumentationData, \"seconds\": data.seconds, \"percentViewed\": data.percent})\n\n }\n }\n }\n\n _stopCallback(data) {\n // data is { \"duration\": 61.857, \"percent\": 0.049, \"seconds\": 3.034 }\n if(this.hasNextVideoUrlValue && data.percent >= 0.99) {\n // Note: If you change the behavior here, also change it in the YoutubePlayerController\n const loadingScreen = this.element.parentElement.querySelector('#loading_screen')\n if(loadingScreen) {\n loadingScreen.classList.remove(\"hidden\")\n setTimeout(() => Turbo.visit(this.nextVideoUrlValue), 2000)\n }\n }\n if(window.newrelic) {\n window.newrelic.addPageAction('videoPlayStop', {...this.instrumentationData, \"seconds\": data.seconds, \"percentViewed\": data.percent})\n }\n }\n\n _errorInterpreter(error) {\n switch (error.name) {\n case 'PrivacyError':\n return '[Redacted by privacy settings]'\n break;\n default:\n return `[Ommitted because of ${error.name}]`\n break;\n }\n }\n}\n","import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n static values = {\n id: String,\n chapterId: String,\n nextVideoUrl: String,\n origin: String,\n userId: String,\n videoId: String\n }\n\n connect() {\n super.connect()\n\n // Configure YouTube\n window.YTConfig ||= {}\n window.YTConfig['host'] = 'https://www.youtube-nocookie.com'\n\n // Set up callback functions with correct binding\n this._playingCallback = this._playingCallback.bind(this)\n this._readyCallback = this._readyCallback.bind(this)\n this._stateChangeCallback = this._stateChangeCallback.bind(this)\n this._initYouTube = this._initYouTube.bind(this)\n\n // Initialize some data\n this.duration = 0\n this.secondsViewed = 0\n this.instrumentationData = {}\n this.initialized = false\n\n // Set up the instrumentation interval\n this.playbackInterval = null\n\n if(window.onYouTubeIframeAPIReady) {\n // This is the second video on the page, so the usual YT init stuff doesn't work (the magical\n // onYouTubeIframeAPIReady function has already been called), so we must init by hand\n this._initYouTube()\n } else {\n // Start the player. This is a magic-name function; the YouTube script invokes it.\n this._youTubeCallback = this._youTubeCallback.bind(this)\n window.onYouTubeIframeAPIReady = this._youTubeCallback\n }\n }\n\n _youTubeCallback() {\n this.initialized = true\n this.youtubePlayer = new YT.Player(this.element.id, {\n height: this.element.offsetHeight,\n host: 'https://www.youtube-nocookie.com',\n videoId: this.idValue,\n width: this.element.offsetWidth,\n playerVars: {\n 'modestbranding': 1,\n 'origin': this.originValue,\n 'playsinline': 1\n },\n events: {\n 'onReady': this._readyCallback,\n 'onStateChange': this._stateChangeCallback\n }\n })\n }\n\n // When the current video is the *second* video to be shown on the page, eg after a nav event from the\n // chapters playlist, window.onYouTubeIframeAPIReady() isn't called again, because the calling script\n // has already been loaded. However, it appears that the YT.PlayerState doesn't exist when the first\n // video is loaded. So we check to see if YT.PlayerState exists; if it does, we assume we're at a video\n // after the first, and that we should call window.onYouTubeIframeAPIReady() by hand since YouTube is\n // incapable of functioning on the modern web.\n _initYouTube() {\n if(this.initialized) {\n return true\n } else if(window.YT && window.YT.PlayerState) {\n window.onYouTubeIframeAPIReady = this._youTubeCallback.bind(this)\n this._youTubeCallback()\n } else {\n setTimeout(this._initYouTube, 50)\n }\n }\n\n _getInstrumentationData() {\n this.instrumentationData.videoId = this.idValue\n this.instrumentationData.userId = this.hasUserIdValue ? this.userIdValue : 'r' + Math.floor(Math.random() * 10000)\n this.instrumentationData.playbackId = `${this.userIdValue}_${this.idValue}_${Date.now()}`\n this.instrumentationData.videoDuration = this.youtubePlayer.playerInfo.duration\n this.instrumentationData.videoTitle = this.youtubePlayer.getVideoData().title\n this.instrumentationData.videoWidth = this.element.offsetWidth\n this.instrumentationData.videoHeight = this.element.offsetHeight\n }\n\n _readyCallback(event) {\n this._getInstrumentationData()\n }\n\n _stateChangeCallback(event) {\n if(event.data === YT.PlayerState.PLAYING) {\n if (this.duration === 0) {\n this.duration = this.youtubePlayer.playerInfo.duration\n this.instrumentationData.videoDuration = this.duration\n if(window.newrelic) {\n window.newrelic.addPageAction('videoPlayStart', {...this.instrumentationData, \"seconds\": 0, \"percentViewed\": 0})\n }\n }\n this._startInstrumentationInterval()\n } else if(event.data === YT.PlayerState.PAUSED || event.data === YT.PlayerState.ENDED) {\n this._stopInstrumentationInterval()\n this._stopCallback()\n }\n }\n\n _startInstrumentationInterval() {\n this.playbackInterval = setInterval(this._playingCallback, 1000)\n }\n\n _stopInstrumentationInterval() {\n clearInterval(this.playbackInterval)\n }\n\n // This callback gets triggered every 1s during playback.\n _playingCallback() {\n const secondsViewed = this.youtubePlayer.playerInfo.currentTime\n const percentViewed = secondsViewed / this.duration\n if (secondsViewed > this.secondsViewed) {\n this.secondsViewed = secondsViewed\n if(this.hasChapterIdValue) {\n this.stimulate('VideoProgress#capture_education', this.chapterIdValue, secondsViewed, percentViewed)\n }\n if(this.hasVideoIdValue) {\n this.stimulate('VideoProgress#capture_video', this.videoIdValue, secondsViewed, percentViewed)\n }\n if(window.newrelic) {\n window.newrelic.addPageAction('videoPlayContinue', {...this.instrumentationData, \"seconds\": secondsViewed, \"percentViewed\": percentViewed})\n\n }\n }\n }\n\n _stopCallback() {\n const secondsViewed = this.youtubePlayer.playerInfo.currentTime\n const percentViewed = secondsViewed / this.duration\n if(this.hasNextVideoUrlValue && percentViewed >= 0.99) {\n // Note: If you change the behavior here, also change it in the VimeoPlayerController\n const loadingScreen = this.element.parentElement.querySelector('#loading_screen')\n if(loadingScreen) {\n loadingScreen.classList.remove(\"hidden\")\n setTimeout(() => Turbo.visit(this.nextVideoUrlValue), 2000)\n }\n }\n if(window.newrelic) {\n window.newrelic.addPageAction('videoPlayStop', {...this.instrumentationData, \"seconds\": secondsViewed, \"percentViewed\": percentViewed})\n }\n }\n}\n","window.htmlToElements = function(htmlString) {\n var template = document.createElement('template')\n template.innerHTML = htmlString\n return template.content.childNodes\n}"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","all","slice","keys","Object","module","exports","webpackContext","webpackContextResolve","createConsumer","document","addEventListener","querySelectorAll","forEach","time","flatpickr","enableTime","enableSeconds","noCalendar","altInput","altFormat","dateFormat","_class","ApplicationController","connect","super","this","changeHandler","bind","template","templateTarget","searchInput","searchInputTarget","itemsContainer","itemsTarget","closest","disconnect","removeEventListener","event","itemId","detail","value","itemName","textValue","element","querySelector","clone","content","cloneNode","item","setAttribute","getAttribute","textContent","hiddenInput","appendChild","targets","Controller","constructor","args","selectedTools","originalProps","propsValue","lines","line","name","handleCheckboxChange","updateChartWithSelectedTools","setupMutationObserver","observer","MutationObserver","mutations","some","mutation","type","addedNodes","length","updateCheckboxStates","tableElement","getElementById","observe","childList","subtree","target","matches","toolName","isChecked","checked","includes","push","filter","checkbox","newProps","JSON","parse","stringify","chartTarget","chartElement","parent","parentNode","reactComponent","newElement","createElement","style","height","replaceChild","values","props","StimulusReflex","log","messages","identity","identifier","localName","console","ajaxHeaders","tokenElement","head","beforeReflex","reflex","noop","reflexId","body","classList","add","reflexSuccess","reflexError","error","warn","reflexHalted","reflexForbidden","afterReflex","remove","finalizeReflex","extractTextValue","el","hasAttribute","trim","resultsTarget","hidden","inputTarget","mouseDown","onInputChange","debounce","onResultsClick","onResultsMouseDown","onInputBlur","onKeydown","input","inputNameValue","hiddenTarget","append","focus","pillboxTarget","pill","removeButton","removeValue","hasInputTarget","onInputFocus","hasResultsTarget","sibling","next","options","Array","from","selected","index","indexOf","def","select","removeAttribute","scrollIntoView","block","key","hideAndRemoveOptions","stopPropagation","preventDefault","commit","results","hasSubmitOnEnterValue","HTMLAnchorElement","click","hasHiddenTarget","getPill","addValue","dispatchEvent","Event","addPill","text","createTextNode","closeButtonTemplateTarget","firstElementChild","removePill","innerHTML","broadcastChange","CustomEvent","bubbles","Element","once","fetchResults","identifyOptions","query","minLengthValue","hasUrlValue","url","URL","urlValue","window","location","href","params","URLSearchParams","search","toString","fetch","headers","response","html","hasResults","catch","open","close","minLength","Number","inputName","String","submitOnEnter","Boolean","undefined","updateText","setTimeout","iconTarget","opacity","hasTextTarget","newText","hasTitleValue","titleValue","previousTitle","localStorage","getItem","textTarget","goBack","history","back","title","default","loadBackflowDetails","state","currentTarget","dataset","urlParams","timeWindow","get","userId","teamId","tw","user_id","frame","detailsElement","behavior","insightId","handleFrameLoad","metricType","updateButtonStates","toggleMetric","searchParams","set","pushState","frameUrl","pathname","toggleContainer","header","card","cardBody","contentDiv","metricBoxesContainer","chartContainer","setMetricBoxSkeletons","box","originalHeight","offsetHeight","setChartSkeleton","Turbo","visit","countTarget","active","priorityTarget","burndownTypeFromUrl","burndownType","hasPartialCreditTarget","partialCreditTarget","hasAllOrNothingTarget","updateBurndownButtonStates","toggleBurndownType","loadingStartTime","Date","now","currentLoadTime","remainingWaitTime","Math","max","stream","DOMParser","parseFromString","newUrl","allOrNothingTarget","setHintText","hint","contacted","candidateName","candidateObjectPronoun","confirmationMessage","message","jobId","contains","candidateFirstName","createContact","confirm","ping","candidateId","method","status","customerEmail","alert","markAllCardsAsContacted","pingUrl","selector","linkElement","children","markAsSelectedOnClick","hasMarkAsSelectedOnClickValue","markAsSelectedOnClickValue","magicLink","attributes","turboFrame","nodeValue","turboAction","prepend","openDetail","clickedElement","disabled","markCardAsSelected","hasPingValue","pingValue","modalCloseHandler","historyHref","err","selectedSibling","parentElement","tagName","deselectCard","cardGrid","createExtraMarkup","instrumentNavigation","toggleScrollButtonStatus","prepareForResizing","prevScrollButton","nextScrollButton","scrollPrev","scrollNext","throttle","throttleDurationValue","viewportWidth","offsetWidth","totalWidth","scrollWidth","carouselIsNeeded","enableOrDisable","scrollTo","left","cardWidthWithGap","columnGap","parseInt","getComputedStyle","getPropertyValue","split","scrollLeft","throttleDuration","_initChart","Chart","_chart","destroy","opts","onResize","chart","resize","chartConfig","data","labels","datasets","chartData","yAxisID","chartType","plugins","ChartDataLabels","align","formatter","context","tooltip","enabled","edgeLineBorderDash","ctx","dataIndex","line_type","legend","position","getContext","loadingDiv","typeValue","_chartData","chartDataValue","_labels","labelsValue","tooltips","_tooltips","tooltipsValue","numberFormattingOptions","_numberFormattingOptions","numberFormattingOptionsValue","_options","optionsValue","scales","y","ticks","callback","prefix","suffix","callbacks","label","parsed","annotation","annotations","hovers","enter","display","leave","entries","chartTypeFromUrl","lineTarget","showSkeletonChart","origin","toggleChartType","barTarget","_documentClickHandler","_bindDocumentClicks","_unbindDocumentClicks","toggle","button","menu","isOpen","cssClassValue","cssClass","urlForHistory","historyUrl","isExpanded","contentTarget","messageValue","stopImmediatePropagation","cookieName","_setOptOutCookie","acceptAll","rejectAll","closeCookieManagerPane","acceptButtonTargets","elem","rejectButtonTargets","closeButtonTargets","checkBoxes","uncheckedInputs","_setPermanentCookie","join","_getCookie","allCookies","cookie","cookieValue","find","row","startsWith","decodeURI","path","expiration","setTime","getTime","_setCookie","toGMTString","viewportScalingFactor","maxWidthValue","maxHeightValue","innerPadding","viewportOptions","width","croppie","Croppie","previewTarget","viewport","boundary","base64inputTarget","preprocessingComplete","formTarget","onFormSubmit","instrumentDragAndDropEvents","onCrop","highlightDropArea","unhighlightDropArea","onFileDrop","elements","zoomer","dataTransfer","files","bindToCroppie","file","reader","FileReader","onload","result","readAsDataURL","size","maxWidth","maxHeight","format","circle","base64image","image","Image","ratio","completePreprocessing","canvasCopy","copyContext","drawImage","toDataURL","src","requestSubmit","_table","_initTable","_initColumnFilters","_restoreFilterState","_destroyTable","tableContent","thead","tr","columnCount","hiddenColumns","hiddenColumnsValue","buttons","action","dt","node","config","clearState","extend","order","defaultSortColumnIndexValue","DataTable","colReorder","autoWidth","stateSave","stateSaveValue","pageLength","pageLengthValue","layout","topStart","columnDefs","visible","searchable","filters","targetColumn","setItem","columns","draw","savedValue","_initStatusFilter","clear","removeItem","reload","table","searchColumn","columnSelector","searchTerm","regex","smart","column","resetFilters","defaultSortColumnIndex","canvas","canvasTarget","resetGame","score","arrows","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","gameLoop","cancelAnimationFrame","spawnInterval","clearInterval","scoreTarget","clearRect","startGame","startButtonTarget","gameContainerTarget","requestAnimationFrame","update","setInterval","spawnArrow","spawnRateValue","handleKeyDown","handleKeyUp","fillStyle","fillRect","arrow","speedValue","direction","drawArrow","directions","floor","random","x","getArrowX","save","translate","rotate","PI","beginPath","moveTo","lineTo","closePath","fill","restore","hasOwnProperty","speed","spawnRate","departmentIdParam","departmentIdParamValue","currentTab","delete","hasToggleTarget","toggleElement","toggleTarget","adjustHeight","storageKeyValue","forceOpen","disclosureForceOpen","savedState","openPane","closePane","hasOpenValue","openValue","saveState","paneTargets","paneTarget","scrollHeight","storageKey","_boundToggle","_boundHandleKeyDown","_boundHandleOptionKeyDown","handleOptionKeyDown","_handleDocumentClick","_addOptionEventListeners","_initialClose","_removeOptionEventListeners","option","_toggleClasses","selectedOption","firstOption","_focusNextOption","_focusLastOption","_focusPreviousOption","oppositeAction","currentIndex","findIndex","activeElement","nextIndex","previousIndex","clickCount","_bindClickHandler","handleClick","animations","randomAnimation","animation","initializeAccordions","sectionTargets","section","sectionId","icon","iconTargets","isVisible","transform","sessionStorage","stimulate","startTime","durationInMilliseconds","eventId","_clickHandler","_instrumentClicks","stimulateOptions","eventAttendanceId","rating","directionValue","_instrumentChanges","processChangeHandler","processChange","_destinationUrl","paramName","substring","lastIndexOf","multiselect","ev","saveUrlParams","getUrlParams","newUrlParams","reset","application","getControllerForElementAndIdentifier","FormData","newParams","_instrumentButtons","disableSubmitButton","disableWith","enableSubmitButton","originalText","onChangeValue","formElement","toLowerCase","selectedIndex","disableWithValue","spinnerTemplate","hasButtonTarget","buttonTarget","hasOnChangeValue","onChange","triggerTarget","processSelectChange","processCheckboxChange","triggerValuesValue","_addCssClassValue","_removeCssClassValue","targetTargets","triggerValues","Application","start","require","load","definitionsFromContext","consumer","controller","isolate","debug","process","CableReady","initialize","toggleTargetIfChecked","uncheckTargetIfChecked","favoriteOrUnfavorite","linkTarget","innerText","unfavorite","favorite","favoritePath","updateAllJobCardsTo","unfavoritePath","favoriteStatus","jobGid","_instrumentLinks","instrumentationRoot","hasInstrumentationRootValue","instrumentationRootValue","pingTarget","pingUrlValue","_instrumentEvents","_uninstrumentEvents","dragStart","effectAllowed","draggedElement","dragOver","_figureOutDropTarget","dragEnter","dropTarget","currentDragHover","dragLeave","dragEnd","drop","positionComparison","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","insertAdjacentElement","DOCUMENT_POSITION_PRECEDING","showLoading","hideLoading","loadingIndicatorTarget","handleFormSubmit","startDotsAnimation","dotsInterval","hasLoadingIndicatorTarget","hasContentTarget","hasDotsTarget","states","dotsTargets","dots","closeModal","openModal","containerTarget","handleSubmit","success","showFileDropped","widthValue","heightValue","componentName","Component","root","createRoot","render","React","BrowserRouter","unmount","onReconnect","reflexValue","repositoryIdParam","repositoryIdParamValue","link","host","clearSearch","inputForm","defaultWidth","minWidth","innerWidth","collapse","sidebarTarget","collapsedClass","marginLeft","savedWidth","checkIconOnlyMode","boundHandleResize","handleResize","boundStopResize","stopResize","iconOnlyValue","expand","showResizeCursor","hideResizeCursor","handle","startResize","cursor","transition","clientX","min","newWidth","currentWidth","resetWidth","classes","iconOnly","replaceWithSpinner","originalHTML","hasDisabledClassValue","disabledClassValue","removeSpinner","hasDisableWithValue","_afterReflexCallback","disabledClass","spinnerClass","navigate","baseUrl","baseUrlValue","targetUrl","currentParams","initTable","setupFilterButtons","dataTableElement","dataTableController","activeButton","filterButtonTargets","btn","filterType","applyFilter","currentAction","newAction","handleFilterClick","mixpanel","track","element_type","element_category","element_action","element_label","trackLabel","stripe","Stripe","publishableKeyValue","checkoutButtonHandler","getSessionAndRedirectToStripe","json","session","redirectToCheckout","sessionId","publishableKey","Prism","highlightAllUnder","initializeTab","tabId","activateTabById","hasInitialTabValue","initialTabValue","activateTab","change","clickedTab","tabTargets","tab","underscoreId","replace","hyphenId","i","updateUrlWithTabId","pane","navigator","replaceState","handleKeydown","newIndex","initialTab","selectedValue","teamIdParam","timeWindowParam","timeWindowParamValue","Intl","DateTimeFormat","resolvedOptions","timeZone","defaultState","tooltipContent","triggerValue","handleDocumentClick","handleMouseEnter","handleMouseLeave","handleFocus","handleBlur","handleTooltipEnter","handleTooltipLeave","handleEscapeKey","showDelay","showTimeout","cleanup","removeArrow","clearTimeout","hideTimeout","isHovering","show","hide","createArrow","hideArrowValue","tooltipArrow","insertBefore","firstChild","existingArrow","activeController","replaceChildren","hasIdValue","idValue","hasTextValue","assign","visibility","zIndex","updatePosition","middleware","offset","hasPlacementValue","flip","autoPlacement","shift","padding","computePosition","placement","placementValue","strategy","middlewareData","top","arrowX","arrowY","staticSide","right","bottom","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","isTooltipHovered","hideArrow","trigger","quizCompleted","quizContext","quizId","trackQuizIdValue","trackQuizId","_beforeReflexCallback","trixId","toolbarElementId","disconnectedCallback","editorController","toolbar","connectedCallback","toolbarElement","userIdParam","userIdParamValue","storyPointsTarget","ticketsTarget","fullUrl","currentSrc","videoChatContainer","DailyIframe","createDailyFrame","dailyOptions","showLeaveButton","showFullscreenButton","userName","userNameValue","videoChatUrlValue","theme","themeJsonValue","callFrame","createFrame","token","videoParticipantTokenValue","participants","on","goodbyeContainer","closeInterval","eventEndTimeValue","videoChatUrl","videoParticipantToken","eventEndTime","themeJson","_playCallback","_playingCallback","_stopCallback","secondsViewed","instrumentationData","vimeoOptions","responsive","vimeoPlayer","Player","_getInstrumentationData","videoUrl","hasUserIdValue","userIdValue","getVideoId","videoId","playbackId","_errorInterpreter","getVideoTitle","videoTitle","getVideoWidth","getVideoHeight","dimensions","videoWidth","videoHeight","videoDuration","duration","percent","newrelic","addPageAction","viewed","seconds","hasChapterIdValue","chapterIdValue","hasCodingProblemIdValue","codingProblemIdValue","hasVideoIdValue","videoIdValue","hasNextVideoUrlValue","loadingScreen","nextVideoUrlValue","chapterId","codingProblemId","nextVideoUrl","YTConfig","_readyCallback","_stateChangeCallback","_initYouTube","initialized","playbackInterval","onYouTubeIframeAPIReady","_youTubeCallback","youtubePlayer","YT","playerVars","originValue","events","PlayerState","playerInfo","getVideoData","PLAYING","_startInstrumentationInterval","PAUSED","ENDED","_stopInstrumentationInterval","currentTime","percentViewed","htmlToElements","htmlString","childNodes"],"sourceRoot":""}