()
| 464 | }; |
| 465 | |
| 466 | const renderList = (): void => { |
| 467 | listEl.empty(); |
| 468 | const paths = getPaths(); |
| 469 | if (paths.length === 0) { |
| 470 | listEl.createDiv({ |
| 471 | cls: "qa-template-folder-empty", |
| 472 | text: "No folders added yet.", |
| 473 | }); |
| 474 | return; |
| 475 | } |
| 476 | for (const folder of paths) { |
| 477 | const row = listEl.createDiv("qa-template-folder-row"); |
| 478 | // title gives desktop a hover tooltip for paths truncated by ellipsis; |
| 479 | // on mobile (no hover) the path wraps instead — see styles.css. |
| 480 | row.createSpan({ |
| 481 | cls: "qa-template-folder-name", |
| 482 | text: folder, |
| 483 | attr: { title: folder }, |
| 484 | }); |
| 485 | new ExtraButtonComponent(row) |
| 486 | .setIcon("trash-2") |
| 487 | .setTooltip(`Remove ${folder}`) |
| 488 | .onClick(() => { |
| 489 | setPaths(getPaths().filter((f) => f !== folder)); |
| 490 | renderList(); |
| 491 | }); |
| 492 | } |
| 493 | }; |
| 494 | |
| 495 | const inputRow = container.createDiv("qa-template-folder-input-row"); |
| 496 | const input = new TextComponent(inputRow); |
nothing calls this directly
no test coverage detected