(headerItem: TaskListHeaderItem)
| 1920 | } |
| 1921 | |
| 1922 | private createGroupHeader(headerItem: TaskListHeaderItem): HTMLElement { |
| 1923 | // Use correct document for pop-out window support |
| 1924 | const doc = this.containerEl.ownerDocument; |
| 1925 | |
| 1926 | const groupHeader = doc.createElement("div"); |
| 1927 | groupHeader.className = "task-section task-group"; |
| 1928 | |
| 1929 | // Determine header level and set appropriate data attributes |
| 1930 | const isSubHeader = headerItem.type === "sub-header"; |
| 1931 | const level = isSubHeader ? "sub" : "primary"; |
| 1932 | groupHeader.dataset.level = level; |
| 1933 | const groupKey = isSubHeader |
| 1934 | ? `${headerItem.groupKey}:${headerItem.subGroupKey}` |
| 1935 | : headerItem.groupKey; |
| 1936 | |
| 1937 | if (isSubHeader) { |
| 1938 | groupHeader.dataset.groupKey = groupKey; |
| 1939 | groupHeader.dataset.parentKey = headerItem.parentKey; |
| 1940 | } else { |
| 1941 | groupHeader.dataset.groupKey = groupKey; |
| 1942 | } |
| 1943 | |
| 1944 | // Apply collapsed state |
| 1945 | if (headerItem.isCollapsed) { |
| 1946 | groupHeader.classList.add("is-collapsed"); |
| 1947 | } |
| 1948 | |
| 1949 | const headerElement = doc.createElement("h3"); |
| 1950 | headerElement.className = "task-group-header task-list-view__group-header"; |
| 1951 | groupHeader.appendChild(headerElement); |
| 1952 | |
| 1953 | // Add toggle button |
| 1954 | const toggleBtn = doc.createElement("button"); |
| 1955 | toggleBtn.className = "task-group-toggle"; |
| 1956 | toggleBtn.type = "button"; |
| 1957 | toggleBtn.setAttribute("aria-label", "Toggle group"); |
| 1958 | toggleBtn.setAttribute("aria-expanded", String(!headerItem.isCollapsed)); |
| 1959 | toggleBtn.dataset.groupKey = groupKey; |
| 1960 | headerElement.appendChild(toggleBtn); |
| 1961 | |
| 1962 | // Add chevron icon |
| 1963 | setIcon(toggleBtn, "chevron-right"); |
| 1964 | const svg = toggleBtn.querySelector("svg"); |
| 1965 | if (svg) { |
| 1966 | svg.classList.add("chevron"); |
| 1967 | svg.setAttribute("width", "16"); |
| 1968 | svg.setAttribute("height", "16"); |
| 1969 | } |
| 1970 | |
| 1971 | // Add group title |
| 1972 | const titleContainer = headerElement.createSpan({ cls: "task-group-title" }); |
| 1973 | const displayTitle = isSubHeader ? headerItem.subGroupTitle : headerItem.groupTitle; |
| 1974 | this.renderGroupTitle(titleContainer, displayTitle); |
| 1975 | |
| 1976 | // Add count |
| 1977 | headerElement.createSpan({ |
| 1978 | text: ` (${headerItem.taskCount})`, |
| 1979 | cls: "agenda-view__item-count", |
no test coverage detected