diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 18cac803..2537c1f1 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.3.4" + ".": "0.4.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d4e37c2..455aa332 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,109 @@ # Changelog +## [0.4.0](https://github.com/kirchDev/duxt/compare/v0.3.4...v0.4.0) (2026-09-14) + + +### ⚠ BREAKING CHANGES + +* **sections:** hand a section type its input rather than a string +* **cli:** the `duxt-report` binary is replaced by `duxt report`. Use `pnpm exec duxt report` and `pnpm exec duxt report --json` where `pnpm exec duxt-report` was used. +* **shortcuts:** `duxt.shortcuts` is a policy object, not a binding list. A site that replaced the bindings sets `shortcuts.singleCharacter` instead; there is no per-key override. `onDuxtShortcut()` takes a getter for the live list and an action-keyed handler, and `matchesDuxtShortcut()` and `shortcutLabel()` are gone — `useDuxtShortcuts()` replaces both. + +### Features + +* align machine-readable exports with llms.txt v2 ([3809e2a](https://github.com/kirchDev/duxt/commit/3809e2a6692232a18972ff7a8dfb1a8f02822496)), closes [#71](https://github.com/kirchDev/duxt/issues/71) +* **analytics:** report reader interactions to an opt-in callback ([7b2eb01](https://github.com/kirchDev/duxt/commit/7b2eb01745221c0f0b236c99f857c66bc86e65af)), closes [#50](https://github.com/kirchDev/duxt/issues/50) +* **announcements:** add a configurable site-wide banner ([97617d9](https://github.com/kirchDev/duxt/commit/97617d9039c0c17d0a4b7172a55cc179a8d762e5)), closes [#49](https://github.com/kirchDev/duxt/issues/49) +* **bruno:** build a downloadable archive per version and locale ([3239c09](https://github.com/kirchDev/duxt/commit/3239c095ef6551ec4755238d228efe7e0b159ef8)), closes [#18](https://github.com/kirchDev/duxt/issues/18) +* **bruno:** publish a Bruno collection as a reference section ([b05f825](https://github.com/kirchDev/duxt/commit/b05f825aaa0bb45293cadb738d857501219366b7)), closes [#18](https://github.com/kirchDev/duxt/issues/18) +* **bruno:** read a Bruno collection out of its directory ([af2e1b5](https://github.com/kirchDev/duxt/commit/af2e1b5d684c3d819b814eaf9404f11b4a5ff3e5)), closes [#18](https://github.com/kirchDev/duxt/issues/18) +* **changelog:** show a release's contributors in the history ([4d47767](https://github.com/kirchDev/duxt/commit/4d4776758ff5a63d978c0280425fe76794beba16)), closes [#67](https://github.com/kirchDev/duxt/issues/67) +* **changelog:** version generated changelogs alongside docs and API ([0d0eae8](https://github.com/kirchDev/duxt/commit/0d0eae88a439919ace0bd27d227d134ff1bd17a0)), closes [#83](https://github.com/kirchDev/duxt/issues/83) +* **ci:** cache remote sources for pull-request checks ([4f2f10a](https://github.com/kirchDev/duxt/commit/4f2f10a40dedee15f57e3ed1f5ab8d9fe90827a6)), closes [#36](https://github.com/kirchDev/duxt/issues/36) +* **cli:** make the report command discoverable ([fc1672c](https://github.com/kirchDev/duxt/commit/fc1672c0314bd0db1485a8e97927bff5b0f49b1a)), closes [#73](https://github.com/kirchDev/duxt/issues/73) +* **config:** expose consumer-owned layer behavior ([e35c68b](https://github.com/kirchDev/duxt/commit/e35c68b9a782932202d42b8f56e75da414bb053d)), closes [#14](https://github.com/kirchDev/duxt/issues/14) +* **content:** document and verify the database adapters ([baa18d7](https://github.com/kirchDev/duxt/commit/baa18d7adb5b5aa43e428e3eb4fa76c6ad0ae90c)), closes [#35](https://github.com/kirchDev/duxt/issues/35) +* **demo:** gather openapi, bruno and terraform under /demo ([51de1c8](https://github.com/kirchDev/duxt/commit/51de1c8101c7fd04b28b81c84147fb96cdbcf519)) +* **deploy:** skip superseded builds before publication ([8f5e4c3](https://github.com/kirchDev/duxt/commit/8f5e4c3a36374bcc40000fc7f9014c1da5a94362)), closes [#46](https://github.com/kirchDev/duxt/issues/46) +* **footer:** center and reorder the mobile layout ([dec597c](https://github.com/kirchDev/duxt/commit/dec597c51b3eb4b4e2b281c8de1e8f936c0f2c16)), closes [#41](https://github.com/kirchDev/duxt/issues/41) +* **frontmatter:** let a page control the docs shell around it ([ffff134](https://github.com/kirchDev/duxt/commit/ffff134317d9036ad9e2c8666f50fbe468ece2b0)), closes [#15](https://github.com/kirchDev/duxt/issues/15) +* **header:** add tooltips to header controls ([550d27f](https://github.com/kirchDev/duxt/commit/550d27f713004b0e8a3133f92b6ead8693e28064)) +* **hooks:** open one build-time extension point ([059cd6a](https://github.com/kirchDev/duxt/commit/059cd6a7a4249c1cfbcf7490ad8691c2ea7125bf)), closes [#16](https://github.com/kirchDev/duxt/issues/16) +* **images:** serve responsive sources and show the zoom affordance ([6018680](https://github.com/kirchDev/duxt/commit/6018680a31c3ec395f78abadb043b13fab6661e5)), closes [#17](https://github.com/kirchDev/duxt/issues/17) +* **image:** view images full screen with zoom and theme backgrounds ([273a79f](https://github.com/kirchDev/duxt/commit/273a79fae22e5cde54fe51cbb549c36a1b9f28ae)) +* **landing:** drop the tab strip from the preview window ([ef3cacb](https://github.com/kirchDev/duxt/commit/ef3cacb5a5522b805c8786e2b3fd8fd78b7890ef)) +* **mcp:** deepen the documentation interface ([40d261e](https://github.com/kirchDev/duxt/commit/40d261eafd1d6393d37ade6b00b1b564f2ae4984)), closes [#72](https://github.com/kirchDev/duxt/issues/72) +* **og-image:** cache rendered images between deploys ([c9a2a25](https://github.com/kirchDev/duxt/commit/c9a2a250f919cf7e23920fb5d7554d8ccd4f9334)), closes [#43](https://github.com/kirchDev/duxt/issues/43) +* **prerender:** benchmark the concurrency instead of assuming it ([f9fe00e](https://github.com/kirchDev/duxt/commit/f9fe00e749b0f20f937f04f194bc163e1e101449)), closes [#44](https://github.com/kirchDev/duxt/issues/44) +* **search:** benchmark a candidate index instead of assuming it ([b90611c](https://github.com/kirchDev/duxt/commit/b90611cccdfac741a25d515dbac54879aac648e9)), closes [#33](https://github.com/kirchDev/duxt/issues/33) +* **search:** give palette rows a shared context line ([3565678](https://github.com/kirchDev/duxt/commit/35656781d9829c71cfafe2d550cf5245887412c9)), closes [#78](https://github.com/kirchDev/duxt/issues/78) +* **search:** name sources and preview results ([ba90088](https://github.com/kirchDev/duxt/commit/ba90088d2ef9ea0bccd32c8aa71d88377238ecdd)), closes [#38](https://github.com/kirchDev/duxt/issues/38) +* **sections:** hand a section type its input rather than a string ([9537f7d](https://github.com/kirchDev/duxt/commit/9537f7dad7caaf4f657e78f44b9408b5049cbef1)), closes [#18](https://github.com/kirchDev/duxt/issues/18) +* **sheet:** default the sheet's side to the reader's end ([0f0146e](https://github.com/kirchDev/duxt/commit/0f0146e4d6a90692815f4ae5156c9b2d8c95112b)), closes [#13](https://github.com/kirchDev/duxt/issues/13) +* **shortcuts:** make global keyboard shortcuts configurable ([f13d5ef](https://github.com/kirchDev/duxt/commit/f13d5ef0daecfabe1004edf0af63ec81c857d4b3)), closes [#79](https://github.com/kirchDev/duxt/issues/79) +* **shortcuts:** surface and document the keys ([6cdc8e4](https://github.com/kirchDev/duxt/commit/6cdc8e4678080a0269f17aa3037e710b2bc9094b)), closes [#80](https://github.com/kirchDev/duxt/issues/80) +* **sources:** discover documentation releases ([a1d55f3](https://github.com/kirchDev/duxt/commit/a1d55f3fc0683e08202bf7a6228de25dced5433c)), closes [#60](https://github.com/kirchDev/duxt/issues/60) +* **sources:** key the remote download cache ([e46f24f](https://github.com/kirchDev/duxt/commit/e46f24f363448b0ef61f7dd47681aced7a9e30e8)), closes [#36](https://github.com/kirchDev/duxt/issues/36) +* support tfplugindocs sources ([8e3a973](https://github.com/kirchDev/duxt/commit/8e3a9731970e340e1a7d29b81cc79759789beb4e)), closes [#12](https://github.com/kirchDev/duxt/issues/12) +* **theme:** make direction a property of the theme ([8fd818a](https://github.com/kirchDev/duxt/commit/8fd818afdaa953276fe710423543b7834c8feb45)), closes [#13](https://github.com/kirchDev/duxt/issues/13) + + +### Bug Fixes + +* **api-client:** read the config before the body mode needs it ([8e8900e](https://github.com/kirchDev/duxt/commit/8e8900ea398b9102c0812cd5ea2932fc9ad97d26)) +* **app-config:** read an edited app.config after a dev restart ([1f2c324](https://github.com/kirchDev/duxt/commit/1f2c3247aa5c4eabf68dbd0f395e92b53c447e8d)) +* **bruno:** close the three holes in the redaction guarantee ([86473c9](https://github.com/kirchDev/duxt/commit/86473c90df28ae536be496e27a95dd51b5f7c432)), closes [#18](https://github.com/kirchDev/duxt/issues/18) +* **bruno:** keep two requests that slugify alike from becoming one page ([f3db69a](https://github.com/kirchDev/duxt/commit/f3db69ad3b1dfabe20abf9757a38252fdf5aa20a)), closes [#18](https://github.com/kirchDev/duxt/issues/18) +* **bruno:** put the archive where the build output serves it from ([3004a4f](https://github.com/kirchDev/duxt/commit/3004a4f5e722a7e652d6a3336f4ba26a4b069bca)), closes [#18](https://github.com/kirchDev/duxt/issues/18) +* **changelog:** read release contributors from the own checkout ([a38aa79](https://github.com/kirchDev/duxt/commit/a38aa79121555130764ac71ee2faa374f1296e13)) +* **check-images:** run the badge assertion that never matched ([00a4a98](https://github.com/kirchDev/duxt/commit/00a4a98bcd74399573861b00fa829e52c1920da1)), closes [#17](https://github.com/kirchDev/duxt/issues/17) +* **check-routes:** read the manifest the Cloudflare build actually writes ([a9fd43e](https://github.com/kirchDev/duxt/commit/a9fd43ed6c526c6d24dd34a83a3aeed7d49333f1)), closes [#70](https://github.com/kirchDev/duxt/issues/70) +* **check-routes:** require a row or an exemption for every handler ([d89fcbe](https://github.com/kirchDev/duxt/commit/d89fcbe2e53711ae9d261064f1ccc315417de317)), closes [#70](https://github.com/kirchDev/duxt/issues/70) +* **cli:** point the cache commands at their guide ([332cc18](https://github.com/kirchDev/duxt/commit/332cc188fd0cb219ea4dc11c7906160f157c5ef1)) +* **code:** copy through one composable in the reader's language ([bc11262](https://github.com/kirchDev/duxt/commit/bc11262316240dd92be58ed31512fe24fb3ec1d2)) +* **content:** replace the deprecated nativeSqlite option ([8018cb9](https://github.com/kirchDev/duxt/commit/8018cb9d97095172d651fc710bfe66492278494e)), closes [#34](https://github.com/kirchDev/duxt/issues/34) +* **copy-page:** divide the model hand-off from the source link ([e02ea0a](https://github.com/kirchDev/duxt/commit/e02ea0afaf99810b019a5148552db0a1c8fdcfa6)), closes [#14](https://github.com/kirchDev/duxt/issues/14) +* **demo:** answer every method on the echo route from the page origin ([c2170a4](https://github.com/kirchDev/duxt/commit/c2170a4cfd89d73cb80f04d4c8fe8b1d1bf1a3b3)) +* **dialog:** stop forwarding showCloseButton to reka ([0df73d5](https://github.com/kirchDev/duxt/commit/0df73d5e2bb6e7fe713f293a185390be88c9083a)) +* **dialog:** style the close control as an icon button ([ce300a9](https://github.com/kirchDev/duxt/commit/ce300a9d6a7a8304f2b51e1f1ff33a842ec779d2)) +* **error:** list the nearest pages once and in one column ([3ba32d5](https://github.com/kirchDev/duxt/commit/3ba32d52a1d6f7e569c64d8977b19777ab3fd2cb)) +* **error:** provide tooltips and one title template on the error page ([f24ca0f](https://github.com/kirchDev/duxt/commit/f24ca0fc525d99b270189a3472fbb3be7feb99b2)) +* **frontmatter:** give every boolean page control a default ([df2dabe](https://github.com/kirchDev/duxt/commit/df2dabe4c67d5d06a8a44333abe90793ff60dfee)), closes [#88](https://github.com/kirchDev/duxt/issues/88) +* **header:** hide the shortcuts trigger below lg ([19134a7](https://github.com/kirchDev/duxt/commit/19134a75f1bb554b22e77bb4f4216dac7033b703)) +* **highlight:** load the grammars the landing demos name ([ceebe6e](https://github.com/kirchDev/duxt/commit/ceebe6ed88b6fb7b72b8e70496ec227d04b0e040)) +* **i18n:** register the bruno messages for every locale ([7a82798](https://github.com/kirchDev/duxt/commit/7a82798ba2956701fe7b91f32a1c5be482fb6d62)) +* **images:** restore the zoom and gate its prerendered variants ([06166af](https://github.com/kirchDev/duxt/commit/06166afaa8a0f0a2404470f5a4085ecb1a115f9a)), closes [#17](https://github.com/kirchDev/duxt/issues/17) +* **landing:** crossfade code tabs and keep the prose in place ([d5078c2](https://github.com/kirchDev/duxt/commit/d5078c2a647fc0c363587ea17ab5f65c2db0b9b8)) +* **llms:** avoid loading page bodies for index ([6b196ba](https://github.com/kirchDev/duxt/commit/6b196ba4bcf982857eddc1af689a7e04e7b5a1bb)), closes [#84](https://github.com/kirchDev/duxt/issues/84) +* **locale:** keep machine routes at the root in every locale ([d8be082](https://github.com/kirchDev/duxt/commit/d8be082d5d51c1564bcdaf3088307bd0a6448ab3)) +* **locale:** keep the switcher trigger a single stable element ([a24bcb8](https://github.com/kirchDev/duxt/commit/a24bcb8b18f2ef2503e57f22c2d8c63b76932797)) +* **mcp:** take the request from the event, not from the SDK's extra ([08c7045](https://github.com/kirchDev/duxt/commit/08c7045221eb6a7d5b78eb072ab98f9346fee01a)), closes [#90](https://github.com/kirchDev/duxt/issues/90) +* **navigation:** make `page: false` authoritative for every traversal ([0e93a9b](https://github.com/kirchDev/duxt/commit/0e93a9b61818069b9fb7543c87b6b1ecb5fdd1fb)), closes [#12](https://github.com/kirchDev/duxt/issues/12) +* **navigation:** mark external links with an arrow kept beside the label ([7a032e3](https://github.com/kirchDev/duxt/commit/7a032e3c1f751049fade5ac1f8a473b7f6a981de)) +* **navigation:** resolve the tfplugindocs prefix before the first await ([f9de044](https://github.com/kirchDev/duxt/commit/f9de04404a3b4fa840b6304ec085d86f00bfbf52)) +* **navigation:** skip synthetic tfplugindocs groups ([ee27e00](https://github.com/kirchDev/duxt/commit/ee27e0007993baa3a7c86f7f990a9a6a75e8f2bf)), closes [#12](https://github.com/kirchDev/duxt/issues/12) +* **og-image:** take the cache reset from the removal, not a prior check ([161f1ec](https://github.com/kirchDev/duxt/commit/161f1ec5fce51b5438074daed9ffc859e742f49e)) +* **package:** declare the sitemap dependency the layer imports ([632cbc0](https://github.com/kirchDev/duxt/commit/632cbc007c4f0b0f90c13492b9dfe5eee404c468)), closes [#14](https://github.com/kirchDev/duxt/issues/14) +* **package:** describe duxt as the landing page does ([f04c769](https://github.com/kirchDev/duxt/commit/f04c769e434416a3512c0644ac42d42dd1d6ed21)) +* **package:** ship the tfplugindocs module ([4530e6f](https://github.com/kirchDev/duxt/commit/4530e6f560afd36a008948b4828b3cab76130936)), closes [#12](https://github.com/kirchDev/duxt/issues/12) +* **page-header:** let the title row wrap rather than push the page sideways ([f71143e](https://github.com/kirchDev/duxt/commit/f71143e04e3dea65922650bf3e2ac13b416b43e3)), closes [#91](https://github.com/kirchDev/duxt/issues/91) +* **page:** render a missing page as a 404 without a fatal log ([16db4b5](https://github.com/kirchDev/duxt/commit/16db4b559cc5813525278022307bd89c20def8b8)) +* **page:** render nothing for a missing page on its way to the 404 ([31a0cdf](https://github.com/kirchDev/duxt/commit/31a0cdf38028e5a6d52b22b239efee145b9e0b85)) +* **progress:** measure scroll position once per frame ([54887d6](https://github.com/kirchDev/duxt/commit/54887d63a57c432cb8f06ab46d0442d835594f43)) +* **scripts:** refuse a build run from inside a .git directory ([24e877c](https://github.com/kirchDev/duxt/commit/24e877c1947dc68e6d1f4066a9a70affcb92f9ba)), closes [#87](https://github.com/kirchDev/duxt/issues/87) +* **search:** reach the results from the search input ([ad5e721](https://github.com/kirchDev/duxt/commit/ad5e72174a5e272c785a0849e78014e113d626f9)), closes [#89](https://github.com/kirchDev/duxt/issues/89) +* **search:** show the closest-match note only with results ([44fc6ad](https://github.com/kirchDev/duxt/commit/44fc6adcd2e23f419287938e7dc39d330108cdaf)) +* **section-row:** reserve the bold label width so chips stay put ([9cdce36](https://github.com/kirchDev/duxt/commit/9cdce3637c73e739fb6b8e3d5fc9393756c08e48)) +* **sections:** point a hand-listed per-version section at the reader ([04c0002](https://github.com/kirchDev/duxt/commit/04c0002e5e828bf4c366630b19c46bb7e99dd3da)) +* **sections:** write generated pages through shared markdown helpers ([3e7710c](https://github.com/kirchDev/duxt/commit/3e7710c4de82257154bec6249cfc9d25f9e1a107)) +* **sources:** keep non-Markdown out of the partials collection ([0dd4e69](https://github.com/kirchDev/duxt/commit/0dd4e6982c748d93046861fce1823b1b58bbbe88)), closes [#14](https://github.com/kirchDev/duxt/issues/14) +* **sources:** report unreadable Git tags as a Git failure ([1896bc9](https://github.com/kirchDev/duxt/commit/1896bc9e80db207a53ff0afcdd63cb0b7d17cc39)), closes [#60](https://github.com/kirchDev/duxt/issues/60) +* **storage:** read stored lists through one guarded helper ([8ddd6a8](https://github.com/kirchDev/duxt/commit/8ddd6a819a13fd8b110a5ef33f9583a452231fb5)) +* **theme:** see the direction in a declaration, not only in a utility ([a27a9d8](https://github.com/kirchDev/duxt/commit/a27a9d832031c2a9253c674c6c570ef3cd220949)), closes [#13](https://github.com/kirchDev/duxt/issues/13) +* **ui:** draw every tab and choice strip with one pill ([6a30d84](https://github.com/kirchDev/duxt/commit/6a30d84d8e8db087536f251301af0078445e512e)) +* **version:** point the banner and canonical at a page that exists ([d8f52b6](https://github.com/kirchDev/duxt/commit/d8f52b6685f527cca78ab97d884898574de63e69)), closes [#83](https://github.com/kirchDev/duxt/issues/83) +* **versions:** keep sections, sidebar and search on every edition ([90c716d](https://github.com/kirchDev/duxt/commit/90c716d64c71095d8ad79eae3ce8739bcb684685)) + ## [0.3.4](https://github.com/kirchDev/duxt/compare/v0.3.3...v0.3.4) (2026-09-11) diff --git a/package.json b/package.json index 2826dd17..affd3e56 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://www.schemastore.org/package.json", "name": "@kirchdev/duxt", - "version": "0.3.4", + "version": "0.4.0", "description": "duxt is a Nuxt layer: extend it and your docs/ folder becomes a site, with theme, search, API reference and llms.txt included. Point it at other repositories, or at tags of the same one, and each becomes a version.", "keywords": [ "content-v3",