Icon

1288 Heroicons in four variants, passed as components so your bundle only carries what you use.

**The icon is a component, not a name.** A name has to be looked up in a map,
and a map keeps all 1288 icons in your bundle however few you use. An import
is the only form a bundler can follow. Measured: the whole icon set is 226 kB;
one icon is about 30 kB, and most of that is the Svelte runtime.

That is worse ergonomics than Flux's `icon="arrow-down-tray"`, and it is the
trade we made on purpose. There is a test that builds a real app using one
icon and asserts the neighbour in the same barrel file is absent from the
output.

```svelte
import { ArrowDownTray } from '@askrcode/lauf/icons/micro'

<Icon icon={ArrowDownTray} />                    <!-- beside text -->
<Icon icon={ArrowDownTray} label="Download" />   <!-- on its own -->
```

**`label` is not optional when the icon stands alone.** Without it the icon is
`aria-hidden`, which is right next to a text label and wrong when the icon
*is* the label — a close button, a sort arrow.

Four variants, matching Heroicons: `outline` and `solid` at 24px, `mini` at
20, `micro` at 16.