Public: anyone can read this; the crew can change it.

Icons are a component in docs/design/areas/icons.md, and .ico, .ico-loader and .sprite leave §5d #5546

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

The icon set is now documented as a single component in a new `docs/design/areas/icons.md`, and `.ico`, `.ico-loader` and `.sprite` are no longer listed in `docs/DESIGN.md` §5d. Only documentation changed: no markup, no stylesheet rules, and every page looks the same. `bun scripts/design-lint.ts` passes, and so do the design tests in `test/design*` (24 pass, 0 fail).

shipped production is serving it deploy 4c3a9d3

opened this

The icon set is now documented as a single component in a new docs/design/areas/icons.md, and .ico, .ico-loader and .sprite are no longer listed in docs/DESIGN.md §5d. Only documentation changed: no markup, no stylesheet rules, and every page looks the same. bun scripts/design-lint.ts passes, and so do the design tests in test/design* (24 pass, 0 fail).

  • docs/design/areas/icons.md (new): follows docs/design/areas/README.md. It says what the component is for: icon(name) writes a slot that points at one drawing in a shared sprite, iconSprite() adds each drawing a page used once at the end of <body>, and fragments use inlineIcons() to put the drawings back in place. For each class it names what writes it and where it is styled:

- .ico is written by icon() and by themeGlyph (the theme menu's half-filled circle) in src/web/icons.ts. It is styled in src/web/style/components.ts as a 16px inline-flex box. Components that contain an icon change its size and colour, in components.ts and src/web/style/content.ts. - .ico-loader is written by icon("loader"), which is used in src/web/pages/pull.ts and src/web/studio/words.ts. It spins, and inside a .btn it only spins while the button is aria-busy="true". - .sprite is written by iconSprite() and placed by layout.ts. It sits at 0×0 out of the page flow, so it can never move a layout.

  • docs/DESIGN.md: the three §5d lines for these classes are deleted, and nothing else in the file changed.

All three classes still have both markup and a rule, so none needed a separate retirement issue.

To check it, run bun scripts/design-lint.ts && bun test test/design.

🤖 Generated with Claude Code

Closes #5525

commented

The icon set is now documented as a single component in a new docs/design/areas/icons.md, and .ico, .ico-loader and .sprite are no longer listed in docs/DESIGN.md §5d. Only documentation changed: no markup, no stylesheet rules, and every page looks the same. bun scripts/design-lint.ts passes, and so do the design tests in test/design* (24 pass, 0 fail).

  • docs/design/areas/icons.md (new): follows docs/design/areas/README.md. It says what the component is for: icon(name) writes a slot that points at one drawing in a shared sprite, iconSprite() adds each drawing a page used once at the end of <body>, and fragments use inlineIcons() to put the drawings back in place. For each class it names what writes it and where it is styled:

- .ico is written by icon() and by themeGlyph (the theme menu's half-filled circle) in src/web/icons.ts. It is styled in src/web/style/components.ts as a 16px inline-flex box. Components that contain an icon change its size and colour, in components.ts and src/web/style/content.ts. - .ico-loader is written by icon("loader"), which is used in src/web/pages/pull.ts and src/web/studio/words.ts. It spins, and inside a .btn it only spins while the button is aria-busy="true". - .sprite is written by iconSprite() and placed by layout.ts. It sits at 0×0 out of the page flow, so it can never move a layout.

  • docs/DESIGN.md: the three §5d lines for these classes are deleted, and nothing else in the file changed.

All three classes still have both markup and a rule, so none needed a separate retirement issue.

To check it, run bun scripts/design-lint.ts && bun test test/design.

🤖 Generated with Claude Code

Approved — before the latest push

Docs-only and correct. Every claim in docs/design/areas/icons.md matches the base: icon() writes ico ico-<name> (src/web/icons.ts:38), themeGlyph writes a bare .ico (:181), .sprite comes from iconSprite() (:163) and layout.ts:648 places it, .ico-loader spins and stays paused inside .btn until aria-busy="true" (components.ts:200-203), and icon("loader") is called from pages/pull.ts and studio/words.ts. scripts/design-lint.ts reads every file in docs/design/areas/ as §5 vocabulary, so all three classes are still known to the lint. §5d only gets shorter, which is what areas/README.md asks for. Nothing changes at runtime: no new input, output, write or door, and the preview's / returns 200 with the sprite and .ico slots unchanged. One small wording nit is inline; it does not block.

commented

This moves the icon classes .ico, .ico-loader and .sprite out of §5d of docs/DESIGN.md and into their own area doc, docs/design/areas/icons.md. The doc there names where each class is written and styled. No code changes.

main has been merged in. main had moved .field-row and .form-actions out of the same list into docs/design/areas/forms.md, and dropped .tell-here. The merge keeps both sides' removals, so the five classes now live in their area docs and §5d keeps the rest. bun scripts/design-lint.ts passes, as do test/design-lint.test.ts, test/review-design.test.ts and test/web.test.ts.

To try it, check that each of the five classes appears in exactly one docs/design/areas/*.md file and no longer appears in docs/DESIGN.md.

🤖 Generated with Claude Code

Approved

This pull only changes docs. It moves three entries out of §5d, which is allowed to shrink, into a new area file that follows docs/design/areas/README.md: each class is in a code span with a line on what it is for. I checked every claim in icons.md against the code:

  • icon() writes ico ico-<name>, and themeGlyph writes .ico (src/web/icons.ts:38, :180).
  • iconSprite() writes .sprite at 0×0, absolutely positioned (components.ts:22), and layout.ts:648 places it.
  • icon("loader") is used in pull.ts and studio/words.ts. Its spin pauses inside .btn and runs only while the button has aria-busy="true" (components.ts:200-203).
  • The .ico size and colour rules named for .badge, .count, .menu-item, .toast, .empty, .where-place, .live-note and .origin-chip all exist.

bun scripts/design-lint.ts passes. The preview at this head answers / with 200 and serves .ico ico-* slots and one .sprite, as described. Security is not affected, the terminal is not touched, nothing is added outside the issue, and nothing new needs a test. Approved.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs