basalt-ui 1.20.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +11 -5
- package/CHANGELOG.md +33 -0
- package/MIGRATING.md +231 -50
- package/README.md +57 -10
- package/agent/rules/basalt-app.md +49 -2
- package/agent/rules/basalt-charts.md +15 -12
- package/agent/rules/basalt-content.md +4 -0
- package/agent/rules/basalt-router.md +57 -5
- package/agent/rules/basalt-state.md +21 -3
- package/agent/rules/basalt-tokens.md +78 -16
- package/agent/skills/basalt-app/SKILL.md +5 -1
- package/agent/skills/basalt-charts/SKILL.md +5 -3
- package/agent/templates/CLAUDE-block.md.tpl +11 -5
- package/configs/lefthook.yml +48 -15
- package/configs/oxlint-plugin.js +218 -69
- package/configs/oxlint-plugin.test.ts +331 -9
- package/dist/charts/kinds/Bars.d.ts +1 -1
- package/dist/charts/kinds/Bars.d.ts.map +1 -1
- package/dist/charts/kinds/Donut.d.ts +1 -1
- package/dist/charts/kinds/Donut.d.ts.map +1 -1
- package/dist/charts/kinds/DualPanel.d.ts +1 -1
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/Heatmap.d.ts +1 -1
- package/dist/charts/kinds/Heatmap.d.ts.map +1 -1
- package/dist/charts/kinds/MultiLine.d.ts +1 -1
- package/dist/charts/kinds/MultiLine.d.ts.map +1 -1
- package/dist/charts/kinds/StackedArea.d.ts +1 -1
- package/dist/charts/kinds/StackedArea.d.ts.map +1 -1
- package/dist/charts/kinds/ZonedLine.d.ts +1 -1
- package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
- package/dist/cli/index.d.ts +55 -15
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +521 -71
- package/dist/cli/waiver-audit.test.d.ts +2 -0
- package/dist/cli/waiver-audit.test.d.ts.map +1 -0
- package/dist/guard/index.d.ts +114 -2
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +216 -33
- package/dist/router-tanstack/multi-search-param-store.d.ts +13 -0
- package/dist/router-tanstack/multi-search-param-store.d.ts.map +1 -1
- package/dist/router-tanstack/multi-search-param-store.js +4 -1
- package/dist/router-tanstack/search-param-store.d.ts +29 -5
- package/dist/router-tanstack/search-param-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-param-store.js +31 -3
- package/dist/router-tanstack/search-param-store.test.d.ts +2 -0
- package/dist/router-tanstack/search-param-store.test.d.ts.map +1 -0
- package/dist/shell/index.d.ts +12 -5
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +24 -6
- package/dist/tokens/index.d.ts +3 -1
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +5 -1
- package/dist/tokens/palette.d.ts +2 -2
- package/dist/tokens/palette.js +2 -2
- package/dist/tokens/text-scale.test.d.ts +2 -0
- package/dist/tokens/text-scale.test.d.ts.map +1 -0
- package/dist/tokens.css +4 -2
- package/dist/vite.d.ts +28 -3
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +75 -26
- package/llms.txt +2 -2
- package/package.json +1 -1
- package/src/charts/kinds/Bars.tsx +1 -1
- package/src/charts/kinds/Donut.tsx +1 -1
- package/src/charts/kinds/DualPanel.tsx +2 -2
- package/src/charts/kinds/Heatmap.tsx +1 -1
- package/src/charts/kinds/MultiLine.tsx +1 -1
- package/src/charts/kinds/StackedArea.tsx +1 -1
- package/src/charts/kinds/ZonedLine.tsx +1 -1
- package/src/cli/check-theme.test.ts +35 -0
- package/src/cli/help.test.ts +5 -1
- package/src/cli/index.ts +978 -133
- package/src/cli/init-sync.test.ts +2 -0
- package/src/cli/template-ledger.test.ts +1 -1
- package/src/cli/toolchain-wiring.test.ts +352 -1
- package/src/cli/waiver-audit.test.ts +211 -0
- package/src/guard/check-source.test.ts +638 -1
- package/src/guard/index.ts +556 -63
- package/src/router-tanstack/multi-search-param-store.ts +16 -1
- package/src/router-tanstack/search-param-store.test.ts +135 -0
- package/src/router-tanstack/search-param-store.ts +90 -8
- package/src/shell/app-mobile-nav.tsx +1 -1
- package/src/shell/index.test.tsx +52 -0
- package/src/shell/index.tsx +64 -13
- package/src/tokens/index.ts +24 -1
- package/src/tokens/palette.ts +2 -2
- package/src/tokens/text-scale.test.ts +51 -0
- package/src/vite.test.ts +158 -6
- package/src/vite.ts +176 -34
|
@@ -742,3 +742,38 @@ describe('severity — warnings report, errors fail', () => {
|
|
|
742
742
|
expect(err).toContain('✖ Theme guard')
|
|
743
743
|
})
|
|
744
744
|
})
|
|
745
|
+
|
|
746
|
+
// ── the manifest waiver hint, gated on the profile ────────────────────────────────────────────
|
|
747
|
+
//
|
|
748
|
+
// rollhook. The hint leads with `basaltAppPlugin`, which is right for a Mantine app — a hex in a
|
|
749
|
+
// manifest can never be right, and the plugin removes the hand-copy entirely. A `tokens-only`
|
|
750
|
+
// consumer has definitionally opted out of that layer: rollhook's Astro site has no index.html to
|
|
751
|
+
// transform, imports no basalt JavaScript at all, and owns maskable icons the plugin does not emit.
|
|
752
|
+
// Leading with it there is advice the consumer cannot take.
|
|
753
|
+
|
|
754
|
+
describe('check-theme — the manifest waiver hint follows the profile', () => {
|
|
755
|
+
function manifestFixture(basalt: Record<string, unknown>): void {
|
|
756
|
+
writeFileSync(resolve(dir, 'package.json'), JSON.stringify({ name: 'fixture', basalt }))
|
|
757
|
+
mkdirSync(resolve(dir, 'src'), { recursive: true })
|
|
758
|
+
writeFileSync(resolve(dir, 'src', 'app.tsx'), 'export const App = () => null\n')
|
|
759
|
+
mkdirSync(resolve(dir, 'public'), { recursive: true })
|
|
760
|
+
writeFileSync(
|
|
761
|
+
resolve(dir, 'public', 'site.webmanifest'),
|
|
762
|
+
JSON.stringify({ name: 'x', theme_color: '#18181b' }, null, 2),
|
|
763
|
+
)
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
it('offers basaltAppPlugin first to a framework consumer', () => {
|
|
767
|
+
manifestFixture({ roots: ['src'] })
|
|
768
|
+
const { err } = run()
|
|
769
|
+
expect(err).toContain('let basaltAppPlugin emit it')
|
|
770
|
+
})
|
|
771
|
+
|
|
772
|
+
it('leads with the member for a tokens-only consumer, and says which remedy it withheld', () => {
|
|
773
|
+
manifestFixture({ roots: ['src'], profile: 'tokens-only' })
|
|
774
|
+
const { err } = run()
|
|
775
|
+
expect(err).toContain('JSON has no comments — declare a deliberate exception')
|
|
776
|
+
expect(err).not.toContain('let basaltAppPlugin emit it')
|
|
777
|
+
expect(err).toContain('a tokens-only consumer has opted out of')
|
|
778
|
+
})
|
|
779
|
+
})
|
package/src/cli/help.test.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* matched `cmd === 'sync'` first and `--help` was just another item in `flags`, ignored).
|
|
5
5
|
*/
|
|
6
6
|
import { afterEach, beforeEach, describe, expect, it } from 'bun:test'
|
|
7
|
-
import { existsSync, mkdtempSync, readdirSync, rmSync, writeFileSync } from 'node:fs'
|
|
7
|
+
import { existsSync, mkdirSync, mkdtempSync, readdirSync, rmSync, writeFileSync } from 'node:fs'
|
|
8
8
|
import { tmpdir } from 'node:os'
|
|
9
9
|
import { resolve } from 'node:path'
|
|
10
10
|
|
|
@@ -86,6 +86,10 @@ describe('run() --help short-circuits before dispatch', () => {
|
|
|
86
86
|
})
|
|
87
87
|
|
|
88
88
|
it('`sync` without --help still runs for real and writes the manifest (control case)', () => {
|
|
89
|
+
// `sync` refuses to scaffold where nothing was ever installed, so the control case has to be a
|
|
90
|
+
// repo that HAS an install — which is what `sync` is for.
|
|
91
|
+
mkdirSync(resolve(dir, '.basalt'), { recursive: true })
|
|
92
|
+
writeFileSync(resolve(dir, MANIFEST_PATH), JSON.stringify({ version: 1, files: {} }))
|
|
89
93
|
const { code } = capture(() => run(['sync'], dir))
|
|
90
94
|
expect(code).toBe(0)
|
|
91
95
|
expect(existsSync(resolve(dir, MANIFEST_PATH))).toBe(true)
|