| 901 | } |
| 902 | |
| 903 | function buildFindSection(): HTMLDivElement { |
| 904 | const tag = mkInput("tag", ""); |
| 905 | tag.style.width = "60px"; |
| 906 | const text = mkInput("text", ""); |
| 907 | text.style.width = "80px"; |
| 908 | const results = mkNote(""); |
| 909 | const find = mkBtn("Find", "primary", () => { |
| 910 | const query: FindQuery = {}; |
| 911 | if (tag.value.trim()) query.tag = tag.value.trim(); |
| 912 | if (text.value.trim()) query.text = text.value.trim(); |
| 913 | const ids = comp!.find(query); |
| 914 | results.textContent = ids.length ? ids.join(", ") : "(none)"; |
| 915 | logEntry("op", { find: { query, result: ids } }); |
| 916 | }); |
| 917 | return opSection("find(query)", opRow(mkLabel("tag"), tag, mkLabel("text"), text, find), results); |
| 918 | } |
| 919 | |
| 920 | function buildSelectionProxySection(): HTMLDivElement { |
| 921 | const prop = mkInput("prop", "opacity"); |