import { Controller } from "@hotwired/stimulus" export default class extends Controller { static targets = ["rowsContainer", "row", "amountInput", "remaining", "remainingContainer", "error", "submitButton", "nameInput"] static values = { total: Number, currency: String } connect() { this.updateRemaining() } get rowCount() { return this.rowTargets.length } addRow() { const index = this.rowCount const container = this.rowsContainerTarget const row = document.createElement("div") row.classList.add("p-3", "rounded-lg", "border", "border-secondary", "bg-container") row.dataset.splitTransactionTarget = "row" // Clone category select from the first row const existingCategorySelect = container.querySelector(".category-select-container") let categorySelectHTML = "" if (existingCategorySelect) { const cloned = existingCategorySelect.cloneNode(true) // Reset hidden input value and update name const hiddenInput = cloned.querySelector("input[type='hidden']") if (hiddenInput) { hiddenInput.value = "" hiddenInput.name = `split[splits][${index}][category_id]` } // Reset button to show placeholder text (uncategorized) const button = cloned.querySelector("[data-select-target='button']") if (button) { // Find the uncategorized option text from the menu const uncategorizedOption = cloned.querySelector("[data-value='']") const placeholderText = uncategorizedOption ? uncategorizedOption.dataset.filterName : "(uncategorized)" button.innerHTML = placeholderText button.setAttribute("aria-expanded", "false") } // Reset selected states in menu cloned.querySelectorAll("[role='option']").forEach(option => { option.setAttribute("aria-selected", "false") option.classList.remove("bg-container-inset") const checkIcon = option.querySelector(".check-icon") if (checkIcon) checkIcon.classList.add("hidden") }) // Select the blank/uncategorized option const blankOption = cloned.querySelector("[data-value='']") if (blankOption) { blankOption.setAttribute("aria-selected", "true") blankOption.classList.add("bg-container-inset") const checkIcon = blankOption.querySelector(".check-icon") if (checkIcon) checkIcon.classList.remove("hidden") } // Ensure menu is hidden const menu = cloned.querySelector("[data-select-target='menu']") if (menu && !menu.classList.contains("hidden")) { menu.classList.add("hidden") } categorySelectHTML = cloned.outerHTML } row.innerHTML = `