18 Changelog
L4stIdi0t edited this page 2026-10-09 22:01:06 +02:00

Changelog

Generated from the git history by pnpm changelog; edit a commit subject, not this file.

Two blocks per release are computed from the source rather than remembered, and they are the ones an upgrade turns on:

  • API — components and props that came or went, read out of the barrel and the type Props blocks at each tag. A lost prop is a compile error; a new one is usually why you are upgrading.
  • Tokens — added, removed and changed values in tokens.css. This is the quiet one: an app with its own palette will not define a token a release added, var(--new-thing) resolves to nothing, and a surface renders unstyled with no error. Check yours with node node_modules/@l4st/driftwood/scripts/contrast.mjs src/app.css — see docs/theming.md.

v0.24.0 — 2026-10-09

API.

  • new components: DatePicker, ShareBar

Other

  • 0.24.0 (8937a74)
  • Agent skill: ShareBar in the roster and the which-chart guidance (a205887)
  • Tree: a loading folder shows a "Loading" row where its children will appear instead of text spilling over the folder's name, and a tree wider than its box scrolls sideways rather than cutting names short (af7d39b)
  • ShareBar: parts of a whole as one bar with its list; hovering a segment lights its row, a row lights its segment, and a row can pick its part (10442c9)
  • DatePicker: new date field with a YYYY-MM-DD value; a calendar under the trigger, a bottom sheet with swipe on a phone, and year and month lists for jumping far (cefe6cc)
  • 0.23.1 changelog (cbaeb2a)

v0.23.1 — 2026-10-06

API.

  • LineChart gained categoriesLabel
  • BarChart gained categoriesLabel
  • DonutChart gained partsLabel

Other

  • 0.23.1 (34bf45e)
  • LineChart, BarChart, DonutChart: the hidden data table no longer widens a phone page, and its first header is a prop (categoriesLabel, partsLabel) (16f12fa)
  • 0.23.0 changelog (045c82f)

v0.23.0 — 2026-10-06

API.

  • Button gained href, disabled
  • Heatmap gained rowsLabel

Other

  • 0.23.0 (a044aa5)
  • driftwood-ui skill: a navigating button is Button href, a text action in a row is variant="link" (c6c8e53)
  • Button: variant="link" for a text action in a row of buttons, and href renders an in any variant (2ef960b)
  • Heatmap: the hidden data table names its corner header (rowsLabel, default 'Row') and no longer widens a phone page (4531d94)
  • 0.22.0 changelog (f6ed7b1)

v0.22.0 — 2026-10-06

API.

  • new components: CommandPalette
  • Kbd gained reactive

Other

  • 0.22.0 (3245fc4)
  • CommandPalette: the ⌘K box — grouped rows, results from async sources as you type, modes, filter chips, recent picks, and a shortcut you can set (415724f)
  • Kbd: a keycap goes down while its key is held, and keys can be one string ('mod+shift+p') (ff1f957)
  • 0.21.0 changelog (8a7b603)

v0.21.0 — 2026-10-05

API.

  • Table gained group

Other

  • 0.21.0 (d0c8039)
  • Table: rounded row hover, and group for a row with a detail row (a225f10)
  • Progress: the indeterminate fill spans the whole track (8d19821)
  • 0.20.0 changelog (f4e1255)

v0.20.0 — 2026-10-01

API.

  • new components: CopyButton

Verification

  • fail on any uncaught page error, and mount an InlineEdit already open (c344d54)

Other

  • 0.20.0 (161bc29)
  • InlineEdit: the field opens around the text without moving it, and closes onto it (58ca19e)
  • Slider: the thumb grows a little while held and springs back on release (6d1e776)
  • CopyButton: copies text to the clipboard, animates to a check or a cross, and announces the result (dbc2c5e)
  • 0.19.0 changelog (7205e6f)

v0.19.0 — 2026-09-29

API.

  • new components: TagsInput, ContextMenu

Other

  • 0.19.0 (ae200bb)
  • TagsInput: type and press Enter to add a tag; with options it is a multi-select that can also take new values (39bec60)
  • ContextMenu: replaces the browser's menu over a region, opened by right-click, Shift+F10 or a long-press (f4b14ce)
  • Menu: right-clicking an open menu no longer opens the browser's menu over it (19a4044)
  • 0.18.0 changelog (61ee93d)
  • Changelog: the first release is compared with itself, not with HEAD (6ca27e0)

v0.18.0 — 2026-09-21

API.

  • new components: InlineEdit

Other

  • 0.18.0 (67c0d51)
  • InlineEdit: a value shown as plain text that becomes a field when you click it (7a35670)
  • Probe: fetch the Image server render from the page, not from Node (081a629)
  • Probe: the Image probes poll for the file they expect instead of sleeping a guess (ae0c7ce)
  • 0.17.0 changelog (6e40414)

v0.17.0 — 2026-09-21

API.

  • new components: Image

Other

  • 0.17.0 (f692a26)
  • Image: an with a ThumbHash placeholder, a dark variant, and no broken-image glyph (8a69f2b)
  • 0.16.0 changelog (73b5b37)

v0.16.0 — 2026-09-14

API.

  • Scroller gained showButtons

Other

  • 0.16.0 (237e590)
  • Scroller: the buttons float over the strip at every width, and showButtons can drop them (c1ce7d4)
  • a prefers-color-scheme rule for dark-mode extensions to find (aef9ff1)

v0.15.2 — 2026-09-09

Other

  • 0.15.2 changelog (3ee12c3)
  • 0.15.2 (f3d6339)
  • MultiSelect: emit called itself, so one pick fired the callback until the stack gave out (491e476)

v0.15.1 — 2026-09-09

Other

  • 0.15.1 (31dc821)
  • Dialog and Sheet: closing plays the entrance backwards instead of deleting the node (174b0f6)

v0.15.0 — 2026-09-09

API.

  • new components: Sheet, Drawer

Other

  • 0.15.0 (74d3905)
  • Sheet and Drawer: a panel anchored to an edge, and one that settles at more than one height (13d392e)

v0.14.0 — 2026-09-08

API.

  • Scroller gained yieldWheel; lost wheel

Other

  • 0.14.0 (1f7a48b)
  • Scroller: a vertical wheel is the page's, so a strip moves only sideways (cdd655e)
  • Docs: the kit stands on its own, so the notes stop pointing at the apps it came from (2eea436)

v0.13.0 — 2026-09-08

API.

  • new components: Scroller

Other

  • 0.13.0 (1f718fd)
  • Scroller: a strip that scrolls either way, with buttons, a hidden scrollbar and a load-more channel (4976d2c)

v0.12.0 — 2026-09-08

API.

  • Tree gained loadChildren, onLoadError, loadingLabel, retryLabel

Other

  • 0.12.0 (241f52a)
  • Tree: folders that fetch their own children, so the whole filesystem need not be walked (e999147)

v0.11.0 — 2026-09-03

API.

  • CodeEditor gained readonly

Other

  • 0.11.0 (8ffb211)
  • CodeEditor: a readonly mode that is a reader, not a disabled control (24fd88c)
  • Probe: the comment probes put the document back, and the caret is read a frame later (64f2174)

v0.10.0 — 2026-09-03

API.

  • CodeEditor gained comments

Other

  • 0.10.0 (ddb3018)
  • CodeEditor: comments close and carry on, and Enter keeps the line's shape (ed81408)

v0.9.0 — 2026-09-03

Other

  • 0.9.0 (9c044bf)
  • CodeEditor: the Customizer is syntax, not grey (8de6753)

v0.8.0 — 2026-09-03

API.

  • new components: FileInput, FileList

Other

  • FileInput and FileList: files off the user, as a line or as a drop area (e7e6314)

v0.7.0 — 2026-09-03

API.

  • new components: Sparkline, LineChart, BarChart, DonutChart, Gauge, Heatmap, ChartLegend
  • StatCard gained delta, deltaLabel, goodDirection, trend, class

Tokens. An app with its own palette must update it before taking this release.

  • changed --chart-1: oklch(0.52 0.13 var(--hue)) → light-dark(oklch(0.53 0.13 var(--hue)), oklch(0.58 0.14 var(--hue)))
  • changed --chart-2: oklch(0.62 0.12 200) → light-dark(oklch(0.75 0.16 77), oklch(0.66 0.15 77))
  • changed --chart-3: oklch(0.7 0.13 160) → light-dark(oklch(0.62 0.13 165), oklch(0.56 0.13 165))
  • changed --chart-4: oklch(0.6 0.14 300) → light-dark(oklch(0.74 0.12 var(--hue)), oklch(0.66 0.11 var(--hue)))
  • changed --chart-5: oklch(0.45 0.11 270) → light-dark(oklch(0.68 0.12 346), oklch(0.58 0.13 346))

Other

  • Charts: six of them and a legend — hover, arrows, and numbers a screen reader can actually read (3c9bf3f)
  • The chart palette is re-stepped, so adjacent series stay apart under colour blindness (18f3903)

v0.6.0 — 2026-09-03

Other

  • CodeEditor: region names in green, and the end of one says what it ends (0fc61b8)
  • CodeEditor: regions fold, and a region name is not another @param (b29f672)
  • CodeEditor: a hover's arguments are a table, not a paragraph (cf65c4d)
  • CodeEditor: OpenSCAD, as a language set an app can import (ff037f6)

v0.5.0 — 2026-09-02

Other

  • Screenshots: the CodeEditor's swatch, caret and wrapped default (a0bf6ef)
  • CodeEditor: a list that opens under the pointer keeps its own selection (f11dd16)
  • CodeEditor: aligned in every engine, fast in every file size (7a855c1)
  • CodeEditor: the colour square sits before the #, not on top of it (c053f25)
  • CodeEditor: the active line is one band, gutter to code (c251dd9)
  • CodeEditor: draw our own caret, and leave the gutter alone (2c7a041)
  • CodeEditor: the gutter reads left to right (1ba218b)
  • CodeEditor: put every glyph back under the caret (0d2d351)
  • CodeEditor: a lucide chevron for the fold control (229833a)
  • Changelog for v0.4.1 (0e338ec)

v0.4.1 — 2026-09-02

API.

  • CodeEditor gained lineWrapping, highlightActiveLine, complete

Other

  • CodeEditor: suggestions, wrapping, the active line, and a tooltip that reads (9aac2c4)
  • Popover: a click in a layer stacked above the panel is not an outside click (8d92c7f)

v0.4.0 — 2026-09-02

API.

  • CodeEditor gained background

Other

  • CodeEditor: JetBrains' 2026 Light and Dark schemes, and a background prop (5231856)

v0.3.0 — 2026-09-02

API.

  • new components: CodeEditor

Components

  • CodeEditor, from webSCAD (60e5489)

Docs

  • stop prose from being parsed as HTML, and audit for it (d6dd57c)
  • publish the component docs to the wiki (779eba1)

Other

  • check the published pages in a browser, not just the markdown (5f395a4)

v0.2.1 — 2026-09-02

Docs

  • rebuild the component pages, document every prop, and make the changelog answer upgrades (568bdef)

v0.2.0 — 2026-09-02

API.

  • new components: Alert, Avatar, Separator, Textarea, Field, RadioGroup, Combobox, Tabs, Table, Pagination, Popover
  • Switch gained name, value
  • Checkbox gained name, value
  • Slider gained name
  • Toggle gained name, value
  • Tooltip gained delay
  • MultiSelect gained id, name, aria-labelledby, onValuesChange

Tokens. An app with its own palette must update it before taking this release.

  • changed --primary: light-dark(oklch(0.52 0.13 var(--hue)), oklch(0.78 0.14 var(--hue))) → light-dark(oklch(0.49 0.13 var(--hue)), oklch(0.78 0.14 var(--hue)))
  • changed --muted-foreground: light-dark(oklch(0.55 0.012 var(--hue)), oklch(0.655 0.012 var(--hue))) → light-dark(oklch(0.5 0.012 var(--hue)), oklch(0.68 0.012 var(--hue)))
  • changed --destructive-foreground: oklch(0.985 0 0) → light-dark(oklch(0.985 0 0), oklch(0.2 0.03 27.325))
  • changed --success: light-dark(oklch(0.58 0.14 150), oklch(0.68 0.15 150)) → light-dark(oklch(0.5 0.13 150), oklch(0.68 0.15 150))
  • changed --success-foreground: oklch(0.985 0.015 150) → light-dark(oklch(0.985 0.015 150), oklch(0.2 0.03 150))
  • changed --ring: light-dark(oklch(0.52 0.13 var(--hue)), oklch(0.78 0.14 var(--hue))) → light-dark(oklch(0.49 0.13 var(--hue)), oklch(0.78 0.14 var(--hue)))
  • changed --sidebar-primary: light-dark(oklch(0.52 0.13 var(--hue)), oklch(0.78 0.14 var(--hue))) → light-dark(oklch(0.49 0.13 var(--hue)), oklch(0.78 0.14 var(--hue)))
  • changed --sidebar-ring: light-dark(oklch(0.52 0.13 var(--hue)), oklch(0.78 0.14 var(--hue))) → light-dark(oklch(0.49 0.13 var(--hue)), oklch(0.78 0.14 var(--hue)))

Components

  • the ten primitives an app reached for and did not find (c4c4593)
  • portal, place and inert — and make the controls submittable (45e7dc5)

Theming

  • compute palette contrast, and stop the hover washing out (b500dee)

Verification

  • audit the ARIA this kit hand-writes, and prove the form contract (77d9b87)

Agent bundle

  • ship a bundle a consuming app copies into its own .claude/ (7750d3d)

Tooling

  • run the job the change implicates, not all six every time (1e956e7)
  • one command to regenerate every image and the docs (d8c33d5)

Docs

  • regenerate the changelog for the contrast tooling (bf9f069)
  • a generated 16:9 hero, both themes in one frame (50c4b9e)
  • explain the system theme, and put it in the agent workflows (5788ca0)
  • both apps consume the package now (4cf38ab)
  • install the peers explicitly, and say why (6b8be94)
  • reading the registry needs no credentials (07137d8)
  • the registry install is live (671cbd2)

Other

  • a changelog that says which tokens moved (c0b8bb5)

v0.1.5 — 2026-09-01

Tooling

  • publish with the FORGEJO_USER / FORGEJO_API secrets (4cc5529)

v0.1.4 — 2026-09-01

Tooling

  • authenticate to the package registry with Basic, not Bearer (1fbb80c)

v0.1.3 — 2026-09-01

Tooling

  • upload the publish log, drop --access (d0fc554)

v0.1.2 — 2026-09-01

Tooling

  • publish through pnpm, behind an auth preflight (6766840)

v0.1.1 — 2026-09-01

API.

  • new components: NumberInput
  • Slider gained onValueCommit
  • Accordion gained defaultValue

Tokens. An app with its own palette must update it before taking this release.

  • changed --background: oklch(0.165 0.006 var(--hue)) → light-dark(oklch(1 0 0), oklch(0.165 0.006 var(--hue)))
  • changed --foreground: oklch(0.97 0.003 var(--hue)) → light-dark(oklch(0.19 0.008 var(--hue)), oklch(0.97 0.003 var(--hue)))
  • changed --card: oklch(0.205 0.008 var(--hue)) → light-dark(oklch(1 0 0), oklch(0.205 0.008 var(--hue)))
  • changed --card-foreground: oklch(0.97 0.003 var(--hue)) → light-dark(oklch(0.19 0.008 var(--hue)), oklch(0.97 0.003 var(--hue)))
  • changed --popover: oklch(0.205 0.008 var(--hue)) → light-dark(oklch(1 0 0), oklch(0.205 0.008 var(--hue)))
  • changed --popover-foreground: oklch(0.97 0.003 var(--hue)) → light-dark(oklch(0.19 0.008 var(--hue)), oklch(0.97 0.003 var(--hue)))
  • changed --primary: oklch(0.78 0.14 var(--hue)) → light-dark(oklch(0.52 0.13 var(--hue)), oklch(0.78 0.14 var(--hue)))
  • changed --primary-foreground: oklch(0.18 0.03 var(--hue)) → light-dark(oklch(0.99 0.01 var(--hue)), oklch(0.18 0.03 var(--hue)))
  • changed --secondary: oklch(0.25 0.009 var(--hue)) → light-dark(oklch(0.96 0.004 var(--hue)), oklch(0.25 0.009 var(--hue)))
  • changed --secondary-foreground: oklch(0.97 0.003 var(--hue)) → light-dark(oklch(0.25 0.01 var(--hue)), oklch(0.97 0.003 var(--hue)))
  • changed --muted: oklch(0.25 0.009 var(--hue)) → light-dark(oklch(0.96 0.004 var(--hue)), oklch(0.25 0.009 var(--hue)))
  • changed --muted-foreground: oklch(0.655 0.012 var(--hue)) → light-dark(oklch(0.55 0.012 var(--hue)), oklch(0.655 0.012 var(--hue)))
  • changed --accent: oklch(0.28 0.04 var(--hue)) → light-dark(oklch(0.95 0.02 var(--hue)), oklch(0.28 0.04 var(--hue)))
  • changed --accent-foreground: oklch(0.85 0.09 var(--hue)) → light-dark(oklch(0.33 0.07 var(--hue)), oklch(0.85 0.09 var(--hue)))
  • changed --destructive: oklch(0.704 0.191 22.216) → light-dark(oklch(0.577 0.245 27.325), oklch(0.704 0.191 22.216))
  • changed --success: oklch(0.68 0.15 150) → light-dark(oklch(0.58 0.14 150), oklch(0.68 0.15 150))
  • changed --warning: oklch(0.83 0.14 85) → light-dark(oklch(0.8 0.14 85), oklch(0.83 0.14 85))
  • changed --border: oklch(1 0 0 / 11%) → light-dark(oklch(0.92 0.005 var(--hue)), oklch(1 0 0 / 11%))
  • changed --input: oklch(1 0 0 / 15%) → light-dark(oklch(0.92 0.005 var(--hue)), oklch(1 0 0 / 15%))
  • changed --ring: oklch(0.78 0.14 var(--hue)) → light-dark(oklch(0.52 0.13 var(--hue)), oklch(0.78 0.14 var(--hue)))
  • changed --sidebar: oklch(0.205 0.008 var(--hue)) → light-dark(oklch(0.985 0.002 var(--hue)), oklch(0.205 0.008 var(--hue)))
  • changed --sidebar-foreground: oklch(0.97 0.003 var(--hue)) → light-dark(oklch(0.19 0.008 var(--hue)), oklch(0.97 0.003 var(--hue)))
  • changed --sidebar-primary: oklch(0.78 0.14 var(--hue)) → light-dark(oklch(0.52 0.13 var(--hue)), oklch(0.78 0.14 var(--hue)))
  • changed --sidebar-primary-foreground: oklch(0.18 0.03 var(--hue)) → light-dark(oklch(0.99 0.01 var(--hue)), oklch(0.18 0.03 var(--hue)))
  • changed --sidebar-accent: oklch(0.25 0.009 var(--hue)) → light-dark(oklch(0.96 0.004 var(--hue)), oklch(0.25 0.009 var(--hue)))
  • changed --sidebar-accent-foreground: oklch(0.97 0.003 var(--hue)) → light-dark(oklch(0.25 0.01 var(--hue)), oklch(0.97 0.003 var(--hue)))
  • changed --sidebar-border: oklch(1 0 0 / 11%) → light-dark(oklch(0.92 0.005 var(--hue)), oklch(1 0 0 / 11%))
  • changed --sidebar-ring: oklch(0.78 0.14 var(--hue)) → light-dark(oklch(0.52 0.13 var(--hue)), oklch(0.78 0.14 var(--hue)))

Fixes

  • a git install produced a package with no dist/ (6008b89)

Theming

  • follow the system, and tell the browser about it (95a46d4)

Tooling

  • assert the tarball with npm's own file list, not tar (9a72d45)
  • check every push, publish to the registry on a tag (e24a6b8)
  • commit the WebStorm project, add .editorconfig (1f14ed6)

Docs

  • warn that v0.1.0 installs without dist/ (a29074f)
  • group the component index, document every component, shoot AccordionItem (3d074d3)
  • the registry is the install path, and tw-animate-css is a peer (baaafb8)

Other

  • generated component docs, screenshots, and the commit channel (ec3895c)

v0.1.0 — 2026-09-01

Theming

  • make --hue real, and set the base defaults once (573949e)

Docs

  • install over HTTPS (d238043)

Other

  • extract the shared Svelte component kit (54a55f8)