basalt-ui 1.33.0 → 1.34.1
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 +1 -1
- package/CHANGELOG.md +33 -0
- package/MIGRATING.md +115 -15
- package/README.md +3 -0
- package/agent/skills/basalt-app/SKILL.md +5 -3
- package/configs/oxlint-basalt.json +33 -0
- package/configs/oxlint-plugin.js +21 -6
- package/configs/oxlint-plugin.test.ts +98 -10
- package/configs/oxlint.json +2 -30
- package/dist/cli/check-theme.d.ts.map +1 -1
- package/dist/cli/check-theme.js +40 -36
- package/dist/cli/doctor.d.ts +5 -10
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +7 -5
- package/dist/cli/guard-hook.d.ts.map +1 -1
- package/dist/cli/guard-hook.js +6 -34
- package/dist/cli/index.d.ts +45 -83
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +73 -19
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +7 -16
- package/dist/common/vx-families.d.ts +7 -0
- package/dist/common/vx-families.d.ts.map +1 -0
- package/dist/common/vx-families.js +32 -0
- package/dist/common/vx-family.d.ts +11 -0
- package/dist/common/vx-family.d.ts.map +1 -0
- package/dist/common/vx-family.js +12 -0
- package/dist/guard/index.d.ts +2 -2
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +11 -13
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-mobile-nav.js +2 -1
- package/dist/shell/app-mobile-nav.module.css +12 -0
- package/dist/shell/app-sidebar.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +32 -36
- package/dist/shell/app-sidebar.module.css +6 -0
- package/dist/shell/index.d.ts +0 -1
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +0 -2
- package/dist/shell/nav-glyph.d.ts +14 -0
- package/dist/shell/nav-glyph.d.ts.map +1 -0
- package/dist/shell/nav-glyph.js +21 -0
- package/dist/shell/nav-types.d.ts +1 -0
- package/dist/shell/nav-types.d.ts.map +1 -1
- package/dist/shell/sidebar-search.d.ts.map +1 -1
- package/dist/shell/sidebar-search.js +1 -3
- package/dist/surfaces.d.ts +2 -2
- package/dist/surfaces.js +2 -2
- package/dist/tokens/index.d.ts +1 -1
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +17 -1
- package/dist/tokens/size-classes.d.ts +12 -0
- package/dist/tokens/size-classes.d.ts.map +1 -1
- package/dist/tokens/size-classes.js +11 -5
- package/llms.txt +4 -4
- package/package.json +1 -1
- package/src/cli/check-theme.ts +63 -37
- package/src/cli/doctor.ts +12 -15
- package/src/cli/guard-hook.ts +8 -35
- package/src/cli/index.ts +126 -113
- package/src/cli/sync.ts +7 -16
- package/src/common/vx-families.ts +36 -0
- package/src/common/vx-family.ts +22 -0
- package/src/guard/index.ts +22 -25
- package/src/index.ts +0 -2
- package/src/shell/app-mobile-nav.module.css +12 -0
- package/src/shell/app-mobile-nav.tsx +8 -1
- package/src/shell/app-sidebar.module.css +6 -0
- package/src/shell/app-sidebar.tsx +52 -50
- package/src/shell/index.tsx +0 -1
- package/src/shell/nav-glyph.tsx +38 -0
- package/src/shell/nav-types.ts +1 -0
- package/src/shell/sidebar-search.tsx +1 -5
- package/src/surfaces.ts +2 -2
- package/src/tokens/index.ts +28 -1
- package/src/tokens/size-classes.ts +18 -5
- package/dist/shell/use-breakpoint.d.ts +0 -10
- package/dist/shell/use-breakpoint.d.ts.map +0 -1
- package/dist/shell/use-breakpoint.js +0 -11
- package/src/shell/use-breakpoint.ts +0 -37
|
@@ -47,6 +47,12 @@
|
|
|
47
47
|
margin-inline-end: var(--vx-space-nav-icon-gap);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
/* The first-letter fallback for an icon-less row (`nav-glyph.tsx`) — a glyph, not a text run. */
|
|
51
|
+
.link :global(.mantine-NavLink-section[data-position='left']) > [data-nav-glyph] {
|
|
52
|
+
line-height: 1;
|
|
53
|
+
font-weight: 600;
|
|
54
|
+
}
|
|
55
|
+
|
|
50
56
|
/* Inactive rows: muted text + faint icon. Active rows keep the theme's ink text (via `--nl-color`)
|
|
51
57
|
* untouched — this selector only ever matches when `data-active` is absent. `aria-current` is no
|
|
52
58
|
* longer part of the exclusion: `use-nav.ts` is the sole authority on active, stamping exactly one
|
package/dist/shell/index.d.ts
CHANGED
|
@@ -14,7 +14,6 @@ export { projectMobileNav, type ProjectMobileNavOptions, MOBILE_MAX_TABS_DEFAULT
|
|
|
14
14
|
export { AppBreadcrumbs, type AppBreadcrumbsProps } from './app-breadcrumbs.js';
|
|
15
15
|
export { PageBar, type PageBarProps, type PageBarSlot } from './page-bar.js';
|
|
16
16
|
export { PageAside, type PageAsideProps, type PageAsideSlot } from './page-aside.js';
|
|
17
|
-
export { useBreakpoint, type BreakpointName } from './use-breakpoint.js';
|
|
18
17
|
export { useSizeClass, type SizeClass } from './use-size-class.js';
|
|
19
18
|
export { PageTitle, type PageTitleProps, type PageTitleSlot } from './page-title.js';
|
|
20
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell/index.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAiB,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAYlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACjF,OAAO,KAAK,EACV,eAAe,EAEf,YAAY,EAEZ,cAAc,EACf,MAAM,aAAa,CAAA;AASpB,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACzE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACjF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell/index.tsx"],"names":[],"mappings":"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"}
|
package/dist/shell/index.js
CHANGED
|
@@ -37,7 +37,6 @@ import {
|
|
|
37
37
|
import { AppBreadcrumbs as AppBreadcrumbs2 } from "./app-breadcrumbs.js";
|
|
38
38
|
import { PageBar } from "./page-bar.js";
|
|
39
39
|
import { PageAside } from "./page-aside.js";
|
|
40
|
-
import { useBreakpoint } from "./use-breakpoint.js";
|
|
41
40
|
import { useSizeClass as useSizeClass2 } from "./use-size-class.js";
|
|
42
41
|
import { PageTitle } from "./page-title.js";
|
|
43
42
|
function findActiveCrumb(sections) {
|
|
@@ -256,6 +255,5 @@ export {
|
|
|
256
255
|
SidebarAccount,
|
|
257
256
|
SidebarSearch,
|
|
258
257
|
projectMobileNav2 as projectMobileNav,
|
|
259
|
-
useBreakpoint,
|
|
260
258
|
useSizeClass2 as useSizeClass
|
|
261
259
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/** The first grapheme of a label — the fallback body for an item or action shipping no icon. */
|
|
3
|
+
export declare function initial(label: string): string;
|
|
4
|
+
/** False for everything React renders as nothing — `cond && <Icon />` yields `false`, not `null`. */
|
|
5
|
+
export declare function hasIcon(icon: ReactNode): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* The label's first grapheme as a decorative glyph. The collapsed rail and the landscape tab bar
|
|
8
|
+
* show the icon ALONE, so an absent icon would render a nameless, empty target. `aria-hidden`: the
|
|
9
|
+
* accessible name comes from the label, never the glyph.
|
|
10
|
+
*/
|
|
11
|
+
export declare function initialGlyph(label: string): ReactNode;
|
|
12
|
+
/** A nav item's icon, or its label's first-letter glyph when it ships none. */
|
|
13
|
+
export declare function iconOrInitial(icon: ReactNode, label: string): ReactNode;
|
|
14
|
+
//# sourceMappingURL=nav-glyph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav-glyph.d.ts","sourceRoot":"","sources":["../../src/shell/nav-glyph.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAQtC,gGAAgG;AAChG,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,qGAAqG;AACrG,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAMrD;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAEvE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
const segmenter = typeof Intl !== "undefined" && typeof Intl.Segmenter === "function" ? new Intl.Segmenter(void 0, { granularity: "grapheme" }) : void 0;
|
|
3
|
+
function initial(label) {
|
|
4
|
+
const first = segmenter ? segmenter.segment(label)[Symbol.iterator]().next().value?.segment : [...label][0];
|
|
5
|
+
return first?.toUpperCase() ?? "?";
|
|
6
|
+
}
|
|
7
|
+
function hasIcon(icon) {
|
|
8
|
+
return icon !== null && icon !== void 0 && typeof icon !== "boolean" && icon !== "";
|
|
9
|
+
}
|
|
10
|
+
function initialGlyph(label) {
|
|
11
|
+
return /* @__PURE__ */ jsx("span", { "aria-hidden": true, "data-nav-glyph": true, children: initial(label) });
|
|
12
|
+
}
|
|
13
|
+
function iconOrInitial(icon, label) {
|
|
14
|
+
return hasIcon(icon) ? icon : initialGlyph(label);
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
hasIcon,
|
|
18
|
+
iconOrInitial,
|
|
19
|
+
initial,
|
|
20
|
+
initialGlyph
|
|
21
|
+
};
|
|
@@ -28,6 +28,7 @@ export type SidebarItem = {
|
|
|
28
28
|
short?: string;
|
|
29
29
|
/** Mobile placement. `true` ≡ `'tab'`, `false` ≡ `'hidden'`. @default 'more' */
|
|
30
30
|
mobile?: boolean | NavMobilePlacement;
|
|
31
|
+
/** The collapsed rail and landscape tab bar show the icon alone; `null` falls back to the label's first letter. */
|
|
31
32
|
icon: ReactNode;
|
|
32
33
|
/**
|
|
33
34
|
* The router seam. basalt renders every pixel of chrome (desktop row, 56px slot, 44px sheet
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-types.d.ts","sourceRoot":"","sources":["../../src/shell/nav-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAElD,6FAA6F;AAC7F,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE1D;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IAC9C,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AACD,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,SAAS,CAAA;AAE5D,gCAAgC;AAChC,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,MAAM,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAA;IACrC,IAAI,EAAE,SAAS,CAAA;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;IACjC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;4DACwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;CACzB,CAAA;AAED,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,0FAA0F;IAC1F,GAAG,CAAC,EAAE,IAAI,CAAA;IACV,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,wFAAwF;IACxF,MAAM,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAA;CAClC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;AAEtD,sGAAsG;AACtG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,6FAA6F;IAC7F,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,gBAAgB,EAAE,CAAA;IACzB,qBAAqB;IACrB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,0FAA0F;IAC1F,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IACvB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;CAC3B,CAAA;AAED,mGAAmG;AACnG,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,iEAAiE;IACjE,SAAS,CAAC,EAAE,QAAQ,CAAA;IACpB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IACxB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,SAAS,CAAA;IACf,qBAAqB;IACrB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;CAC7B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,kBAAkB,CAAA;AAEvF,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAExD,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAAA;AAElF,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,WAAW,CAAA;CAClB,GACD;IACE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAEL,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,aAAa,EAAE,CAAA;CAAE,CAAA;AAEvD,MAAM,MAAM,eAAe,GAAG;IAC5B,wFAAwF;IACxF,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;CAC5C,CAAA"}
|
|
1
|
+
{"version":3,"file":"nav-types.d.ts","sourceRoot":"","sources":["../../src/shell/nav-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-search.d.ts","sourceRoot":"","sources":["../../src/shell/sidebar-search.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"sidebar-search.d.ts","sourceRoot":"","sources":["../../src/shell/sidebar-search.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIlD;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvE,MAAM,MAAM,mBAAmB,GAAG;IAChC,iFAAiF;IACjF,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AA2DD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAClD,WAAW,GAAG;IAAE,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEvE,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAuB,EACvB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,SAAS,EACT,KAAK,GACN,EAAE,kBAAkB,+BA+CpB"}
|
|
@@ -2,6 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { ActionIcon, Kbd, Text, UnstyledButton } from "@mantine/core";
|
|
3
3
|
import { OverflowMenu } from "../controls/actions.js";
|
|
4
4
|
import { cx } from "../common/props.js";
|
|
5
|
+
import { initial } from "./nav-glyph.js";
|
|
5
6
|
import classes from "./sidebar-search.module.css";
|
|
6
7
|
function IconSearch() {
|
|
7
8
|
return /* @__PURE__ */ jsxs(
|
|
@@ -23,9 +24,6 @@ function IconSearch() {
|
|
|
23
24
|
}
|
|
24
25
|
);
|
|
25
26
|
}
|
|
26
|
-
function initial(label) {
|
|
27
|
-
return [...label][0]?.toUpperCase() ?? "?";
|
|
28
|
-
}
|
|
29
27
|
function SearchAction({ action }) {
|
|
30
28
|
if (action.kind === "custom") return action.node;
|
|
31
29
|
if (action.kind === "menu") {
|
package/dist/surfaces.d.ts
CHANGED
|
@@ -175,7 +175,7 @@ export declare const SURFACES: {
|
|
|
175
175
|
readonly guardKinds: readonly ["raw-motion-value", "card-with-border", "raw-form-control", "sub-16-input-font", "mantine-shade-index", "in-body-page-title", "raw-spacing", "inline-spacing", "inline-display", "raw-html-layout", "hidden-inline-style", "raw-media-query"];
|
|
176
176
|
readonly pluginRules: readonly ["hand-rolled-shell", "raw-breakpoint", "card-inset", "in-body-page-title", "raw-scroll-container", "page-bar-budget", "shadow-basalt-export", "provider-above-router", "deprecated-export", "no-import-meta-env"];
|
|
177
177
|
readonly advisoryLaws: readonly ["no second cssVariablesResolver — don't hand-build createTheme or re-add the resolver basalt already installs"];
|
|
178
|
-
readonly description: "BasaltProvider, createBasaltTheme, BasaltShell + sidebar/mobile-nav/breadcrumbs, PageBar, PageAside, useSizeClass
|
|
178
|
+
readonly description: "BasaltProvider, createBasaltTheme, BasaltShell + sidebar/mobile-nav/breadcrumbs, PageBar, PageAside, useSizeClass, NavCountBadge, ThemeToggle, ThreadWorkspace + thread-chat components, WidgetHeader, dashboard composites (DeltaBadge, StatCard with threshold tone, EmptyState, QueryState/LoadingState/ErrorState, SettingsSection/SettingsRow/DangerZone), ConnectivityProvider/useConnectivity/ConnectivityIndicator (auto-mounted, C1: absorbed from the dropped ./connectivity), createBasaltQueryClient/unwrap/BasaltQueryDevtools (C1: absorbed from the dropped ./query), BasaltDevDock (C5: lazy Router/Query devtools + theme lab in one dock)";
|
|
179
179
|
readonly optionalPeers: readonly ["react-markdown", "remark-gfm", "rehype-sanitize", "remend", "shiki", "beautiful-mermaid", "@tanstack/react-router-devtools"];
|
|
180
180
|
readonly forbiddenImports: readonly [];
|
|
181
181
|
};
|
|
@@ -409,7 +409,7 @@ export declare const SURFACES: {
|
|
|
409
409
|
readonly './configs/*': {
|
|
410
410
|
readonly kind: "tooling";
|
|
411
411
|
readonly layer: "non-js-asset";
|
|
412
|
-
readonly description: "Raw toolchain presets for consumer extends: oxlint.json, oxfmt.json, tsconfig.*.json, lefthook.yml, check.yml";
|
|
412
|
+
readonly description: "Raw toolchain presets for consumer extends: oxlint.json (or the guards-only oxlint-basalt.json), oxfmt.json, tsconfig.*.json, lefthook.yml, check.yml";
|
|
413
413
|
readonly forbiddenImports: readonly [];
|
|
414
414
|
};
|
|
415
415
|
readonly './llms.txt': {
|
package/dist/surfaces.js
CHANGED
|
@@ -104,7 +104,7 @@ const SURFACES = {
|
|
|
104
104
|
advisoryLaws: [
|
|
105
105
|
"no second cssVariablesResolver \u2014 don't hand-build createTheme or re-add the resolver basalt already installs"
|
|
106
106
|
],
|
|
107
|
-
description: "BasaltProvider, createBasaltTheme, BasaltShell + sidebar/mobile-nav/breadcrumbs, PageBar, PageAside, useSizeClass
|
|
107
|
+
description: "BasaltProvider, createBasaltTheme, BasaltShell + sidebar/mobile-nav/breadcrumbs, PageBar, PageAside, useSizeClass, NavCountBadge, ThemeToggle, ThreadWorkspace + thread-chat components, WidgetHeader, dashboard composites (DeltaBadge, StatCard with threshold tone, EmptyState, QueryState/LoadingState/ErrorState, SettingsSection/SettingsRow/DangerZone), ConnectivityProvider/useConnectivity/ConnectivityIndicator (auto-mounted, C1: absorbed from the dropped ./connectivity), createBasaltQueryClient/unwrap/BasaltQueryDevtools (C1: absorbed from the dropped ./query), BasaltDevDock (C5: lazy Router/Query devtools + theme lab in one dock)",
|
|
108
108
|
optionalPeers: [
|
|
109
109
|
"react-markdown",
|
|
110
110
|
"remark-gfm",
|
|
@@ -448,7 +448,7 @@ const SURFACES = {
|
|
|
448
448
|
"./configs/*": {
|
|
449
449
|
kind: "tooling",
|
|
450
450
|
layer: "non-js-asset",
|
|
451
|
-
description: "Raw toolchain presets for consumer extends: oxlint.json, oxfmt.json, tsconfig.*.json, lefthook.yml, check.yml",
|
|
451
|
+
description: "Raw toolchain presets for consumer extends: oxlint.json (or the guards-only oxlint-basalt.json), oxfmt.json, tsconfig.*.json, lefthook.yml, check.yml",
|
|
452
452
|
forbiddenImports: []
|
|
453
453
|
},
|
|
454
454
|
"./llms.txt": {
|
package/dist/tokens/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export { deriveRadius } from './palette.js';
|
|
|
16
16
|
export type { RadiusValues } from './palette.js';
|
|
17
17
|
export { deriveSpacing } from './palette.js';
|
|
18
18
|
export type { SpaceValues } from './palette.js';
|
|
19
|
-
export { CONTAINER_CLASSES, CONTAINER_GRID_BREAKPOINTS, resolveContainerClass, SIZE_CLASSES, } from './size-classes.js';
|
|
19
|
+
export { CONTAINER_CLASSES, CONTAINER_GRID_BREAKPOINTS, CONTAINER_KEYS, resolveContainerClass, SIZE_CLASSES, } from './size-classes.js';
|
|
20
20
|
export type { ContainerClass } from './size-classes.js';
|
|
21
21
|
/** A per-theme color pair: a hue keeps its identity but shifts shade across schemes. */
|
|
22
22
|
export type ColorPair = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tokens/index.js
CHANGED
|
@@ -10,6 +10,8 @@ import {
|
|
|
10
10
|
} from "./palette.js";
|
|
11
11
|
import { SIZE_CLASSES, sizeClassMaxEm } from "./size-classes.js";
|
|
12
12
|
import { HIT_COARSE, HIT_FINE } from "../common/hit-floor.js";
|
|
13
|
+
import { BASALT_VX_FAMILIES } from "../common/vx-families.js";
|
|
14
|
+
import { vxFamilyOf } from "../common/vx-family.js";
|
|
13
15
|
import { BP, p } from "./palette.js";
|
|
14
16
|
import { DEFAULT_DERIVE_CONFIG, deriveTokens, resolveDeriveConfig } from "./derive.js";
|
|
15
17
|
import { deriveRadius } from "./palette.js";
|
|
@@ -17,6 +19,7 @@ import { deriveSpacing } from "./palette.js";
|
|
|
17
19
|
import {
|
|
18
20
|
CONTAINER_CLASSES,
|
|
19
21
|
CONTAINER_GRID_BREAKPOINTS,
|
|
22
|
+
CONTAINER_KEYS,
|
|
20
23
|
resolveContainerClass,
|
|
21
24
|
SIZE_CLASSES as SIZE_CLASSES2
|
|
22
25
|
} from "./size-classes.js";
|
|
@@ -548,9 +551,21 @@ function frameworkDerived(data, only, legacyAliases) {
|
|
|
548
551
|
return legacyAliases ? `${canonical}
|
|
549
552
|
${frameworkDerivedAliases(data)}` : canonical;
|
|
550
553
|
}
|
|
554
|
+
const warnedVxNames = /* @__PURE__ */ new Set();
|
|
555
|
+
function warnConsumerVxName(name) {
|
|
556
|
+
const family = vxFamilyOf(name);
|
|
557
|
+
if (!BASALT_VX_FAMILIES.includes(family) || warnedVxNames.has(name)) return;
|
|
558
|
+
warnedVxNames.add(name);
|
|
559
|
+
console.warn(
|
|
560
|
+
`[basalt] ${name} is inside basalt's own --vx-${family} family \u2014 name your series group something basalt does not own (groupTokens('app', \u2026)). Throws from 1.35.0.`
|
|
561
|
+
);
|
|
562
|
+
}
|
|
551
563
|
function seriesTokens(map, prefix = "") {
|
|
552
564
|
const out = {};
|
|
553
|
-
for (const key of Object.keys(map))
|
|
565
|
+
for (const key of Object.keys(map)) {
|
|
566
|
+
if (process.env.NODE_ENV !== "production") warnConsumerVxName(`--vx-${prefix}${String(key)}`);
|
|
567
|
+
out[key] = `var(--vx-${prefix}${String(key)})`;
|
|
568
|
+
}
|
|
554
569
|
return out;
|
|
555
570
|
}
|
|
556
571
|
function defineSeries(map) {
|
|
@@ -679,6 +694,7 @@ export {
|
|
|
679
694
|
BREAKPOINTS,
|
|
680
695
|
CONTAINER_CLASSES,
|
|
681
696
|
CONTAINER_GRID_BREAKPOINTS,
|
|
697
|
+
CONTAINER_KEYS,
|
|
682
698
|
DEFAULT_DERIVE_CONFIG,
|
|
683
699
|
SIZE_CLASSES2 as SIZE_CLASSES,
|
|
684
700
|
VX,
|
|
@@ -19,6 +19,18 @@ export declare const CONTAINER_CLASSES: {
|
|
|
19
19
|
readonly wide: 800;
|
|
20
20
|
};
|
|
21
21
|
export type ContainerClass = keyof typeof CONTAINER_CLASSES;
|
|
22
|
+
/**
|
|
23
|
+
* `CONTAINER_CLASSES` as the CSS lengths `<SimpleGrid type="container">` keys take — Mantine writes
|
|
24
|
+
* each key verbatim into `@container simple-grid (min-width: <key>)`, so a theme name (`sm`) is a
|
|
25
|
+
* dead query and the key has to be a px length: `cols={{ base: 1, [CONTAINER_KEYS.regular]: 2 }}`.
|
|
26
|
+
* `micro` has no key — `base` is that class. `basalt/raw-breakpoint` judges theme names only, so a
|
|
27
|
+
* computed key is green.
|
|
28
|
+
*/
|
|
29
|
+
export declare const CONTAINER_KEYS: {
|
|
30
|
+
readonly compact: "240px";
|
|
31
|
+
readonly regular: "480px";
|
|
32
|
+
readonly wide: "800px";
|
|
33
|
+
};
|
|
22
34
|
/**
|
|
23
35
|
* `CONTAINER_CLASSES` as the five-key map `<Grid type="container" breakpoints={…}>` takes (Mantine
|
|
24
36
|
* types it `Record<MantineSize, string>`), so `Grid.Col` keys resolve onto the grid's own width:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"size-classes.d.ts","sourceRoot":"","sources":["../../src/tokens/size-classes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yFAAyF;AACzF,eAAO,MAAM,YAAY;;;;CAAuD,CAAA;AAEhF,2FAA2F;AAC3F,eAAO,MAAM,iBAAiB;;;;;CAA+D,CAAA;AAE7F,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,iBAAiB,CAAA;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B;;;;;;CAM7B,CAAA;AAEV,qGAAqG;AACrG,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAKhE;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;;CAMzB,CAAA;AAEV,mEAAmE;AACnE,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
1
|
+
{"version":3,"file":"size-classes.d.ts","sourceRoot":"","sources":["../../src/tokens/size-classes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yFAAyF;AACzF,eAAO,MAAM,YAAY;;;;CAAuD,CAAA;AAEhF,2FAA2F;AAC3F,eAAO,MAAM,iBAAiB;;;;;CAA+D,CAAA;AAE7F,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,iBAAiB,CAAA;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAA;AAEV;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B;;;;;;CAM7B,CAAA;AAEV,qGAAqG;AACrG,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAKhE;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;;CAMzB,CAAA;AAEV,mEAAmE;AACnE,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
const SIZE_CLASSES = { compact: 0, medium: 840, expanded: 1200 };
|
|
2
2
|
const CONTAINER_CLASSES = { micro: 0, compact: 240, regular: 480, wide: 800 };
|
|
3
|
+
const CONTAINER_KEYS = {
|
|
4
|
+
compact: `${CONTAINER_CLASSES.compact}px`,
|
|
5
|
+
regular: `${CONTAINER_CLASSES.regular}px`,
|
|
6
|
+
wide: `${CONTAINER_CLASSES.wide}px`
|
|
7
|
+
};
|
|
3
8
|
const CONTAINER_GRID_BREAKPOINTS = {
|
|
4
|
-
xs:
|
|
5
|
-
sm:
|
|
6
|
-
md:
|
|
7
|
-
lg:
|
|
8
|
-
xl:
|
|
9
|
+
xs: CONTAINER_KEYS.compact,
|
|
10
|
+
sm: CONTAINER_KEYS.regular,
|
|
11
|
+
md: CONTAINER_KEYS.wide,
|
|
12
|
+
lg: CONTAINER_KEYS.wide,
|
|
13
|
+
xl: CONTAINER_KEYS.wide
|
|
9
14
|
};
|
|
10
15
|
function resolveContainerClass(px) {
|
|
11
16
|
if (px >= CONTAINER_CLASSES.wide) return "wide";
|
|
@@ -29,6 +34,7 @@ function sizeClassMaxEm(minPx) {
|
|
|
29
34
|
export {
|
|
30
35
|
CONTAINER_CLASSES,
|
|
31
36
|
CONTAINER_GRID_BREAKPOINTS,
|
|
37
|
+
CONTAINER_KEYS,
|
|
32
38
|
SIZE_CLASSES,
|
|
33
39
|
SIZE_CLASS_BREAKPOINTS,
|
|
34
40
|
resolveContainerClass,
|
package/llms.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# basalt-ui v1.
|
|
1
|
+
# basalt-ui v1.34.1
|
|
2
2
|
# Opinionated framework for Mantine-based React apps — theme, app shell, visx charts, toolchain presets
|
|
3
3
|
#
|
|
4
4
|
# basalt-ui is an opinionated framework for Mantine-based React apps.
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
# ./tokens.css subpath. Guide: docs/FRAMEWORK-FREE.md in the repo.
|
|
20
20
|
|
|
21
21
|
Package: basalt-ui
|
|
22
|
-
Version: 1.
|
|
22
|
+
Version: 1.34.1
|
|
23
23
|
|
|
24
24
|
## basalt-ui
|
|
25
25
|
Import: import { ... } from 'basalt-ui'
|
|
26
|
-
Description: BasaltProvider, createBasaltTheme, BasaltShell + sidebar/mobile-nav/breadcrumbs, PageBar, PageAside, useSizeClass
|
|
26
|
+
Description: BasaltProvider, createBasaltTheme, BasaltShell + sidebar/mobile-nav/breadcrumbs, PageBar, PageAside, useSizeClass, NavCountBadge, ThemeToggle, ThreadWorkspace + thread-chat components, WidgetHeader, dashboard composites (DeltaBadge, StatCard with threshold tone, EmptyState, QueryState/LoadingState/ErrorState, SettingsSection/SettingsRow/DangerZone), ConnectivityProvider/useConnectivity/ConnectivityIndicator (auto-mounted, C1: absorbed from the dropped ./connectivity), createBasaltQueryClient/unwrap/BasaltQueryDevtools (C1: absorbed from the dropped ./query), BasaltDevDock (C5: lazy Router/Query devtools + theme lab in one dock)
|
|
27
27
|
Layer: mantine-coupled
|
|
28
28
|
Rule: basalt-mantine
|
|
29
29
|
OptionalPeers: react-markdown@^10.1.0, remark-gfm@^4.0.1, rehype-sanitize@^6.0.0, remend@1.3.0, shiki@^4.3.0, beautiful-mermaid@^1.1.0, @tanstack/react-router-devtools@^1.166.13
|
|
@@ -155,7 +155,7 @@ Layer: non-js-asset
|
|
|
155
155
|
|
|
156
156
|
## basalt-ui/configs/*
|
|
157
157
|
Asset: basalt-ui/configs/*
|
|
158
|
-
Description: Raw toolchain presets for consumer extends: oxlint.json, oxfmt.json, tsconfig.*.json, lefthook.yml, check.yml
|
|
158
|
+
Description: Raw toolchain presets for consumer extends: oxlint.json (or the guards-only oxlint-basalt.json), oxfmt.json, tsconfig.*.json, lefthook.yml, check.yml
|
|
159
159
|
Layer: non-js-asset
|
|
160
160
|
|
|
161
161
|
## basalt-ui/llms.txt
|
package/package.json
CHANGED
package/src/cli/check-theme.ts
CHANGED
|
@@ -3,31 +3,83 @@
|
|
|
3
3
|
* Imports its shared plumbing (config/project resolution) back from `./index`, and its
|
|
4
4
|
* `--audit-allows` mode from `./audit-allows`.
|
|
5
5
|
*/
|
|
6
|
-
import { readFileSync } from 'node:fs'
|
|
7
|
-
import { resolve } from 'node:path'
|
|
6
|
+
import { existsSync, readFileSync } from 'node:fs'
|
|
7
|
+
import { dirname, resolve } from 'node:path'
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
10
|
checkSource,
|
|
11
|
-
DEFAULT_GUARD_CONFIG,
|
|
12
11
|
guardKindRemedy,
|
|
13
12
|
TOKENS_ONLY_DISABLED_KINDS,
|
|
14
13
|
unmatchedExemptPatterns,
|
|
15
14
|
} from '../guard'
|
|
16
|
-
import type { Finding
|
|
15
|
+
import type { Finding } from '../guard'
|
|
17
16
|
import { auditAllows } from './audit-allows'
|
|
18
17
|
import { DEFAULT_ROOTS, resolveRoots } from './config'
|
|
19
18
|
import {
|
|
19
|
+
basaltPresetEntry,
|
|
20
20
|
conflictingProfileFlags,
|
|
21
|
+
findRepoRoot,
|
|
21
22
|
declaredProfile,
|
|
22
23
|
hasBasaltKey,
|
|
24
|
+
namesShipped,
|
|
25
|
+
noteRelocation,
|
|
26
|
+
OXLINT_FILES,
|
|
27
|
+
OXLINT_NO_BIN,
|
|
28
|
+
oxlintBinResolves,
|
|
29
|
+
packageRoot,
|
|
30
|
+
parseJsonc,
|
|
23
31
|
readBasaltConfig,
|
|
24
|
-
|
|
32
|
+
readIfExists,
|
|
33
|
+
readSource,
|
|
34
|
+
resolveGuardConfig,
|
|
25
35
|
resolveProjectDir,
|
|
26
36
|
scannableFiles,
|
|
27
37
|
SERIES_MODULE_HINT_RE,
|
|
28
38
|
waiverHintFor,
|
|
29
39
|
} from './index'
|
|
30
40
|
|
|
41
|
+
/**
|
|
42
|
+
* What the `.oxlintrc.json` in `dir` does for the AST lane. A plugin load alone enables no rule, so
|
|
43
|
+
* it counts only beside a `basalt/*` rule of its own; an extends counts when it is a shipped preset.
|
|
44
|
+
*/
|
|
45
|
+
function oxlintLaneAt(dir: string): 'absent' | 'wired' | 'unwired' {
|
|
46
|
+
const raw = readIfExists(resolve(dir, '.oxlintrc.json'))
|
|
47
|
+
if (raw === null) return 'absent'
|
|
48
|
+
const rc = parseJsonc(raw)
|
|
49
|
+
const ownRules = Object.keys(Object(rc?.['rules'])).some((id) => id.startsWith('basalt/'))
|
|
50
|
+
const plugin = ownRules
|
|
51
|
+
? [rc?.['jsPlugins']].flat().find((e) => namesShipped(e, OXLINT_FILES.plugin))
|
|
52
|
+
: undefined
|
|
53
|
+
const entry = basaltPresetEntry(rc?.['extends']) ?? plugin
|
|
54
|
+
return entry !== undefined && existsSync(resolve(dir, entry)) ? 'wired' : 'unwired'
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* One line when the nearest `.oxlintrc.json` up to the repo root does not wire the AST lane: the
|
|
59
|
+
* basalt/* rules — two of the 1.33.0 promotions among them — live only there, and a
|
|
60
|
+
* check-theme-only CI otherwise reads as the whole guard (emailgw r4). Doctor names the fix.
|
|
61
|
+
*/
|
|
62
|
+
function astLaneNotice(cwd: string): string | null {
|
|
63
|
+
const root = findRepoRoot(cwd)
|
|
64
|
+
for (let dir = cwd; ; dir = dirname(dir)) {
|
|
65
|
+
const lane = oxlintLaneAt(dir)
|
|
66
|
+
if (lane === 'wired')
|
|
67
|
+
return oxlintBinResolves(cwd) ? null : `ℹ basalt-ui check-theme: ${OXLINT_NO_BIN}.`
|
|
68
|
+
if (lane === 'unwired' || dir === root || dirname(dir) === dir) break
|
|
69
|
+
}
|
|
70
|
+
const preset = readSource(packageRoot(), OXLINT_FILES.guards)
|
|
71
|
+
const count =
|
|
72
|
+
preset === null
|
|
73
|
+
? `every (${OXLINT_FILES.guards} unreadable, so uncounted)`
|
|
74
|
+
: String(preset.match(/"basalt\/[\w-]+":/g)?.length ?? 0)
|
|
75
|
+
return (
|
|
76
|
+
`ℹ basalt-ui check-theme: AST lane not enforced — ${count} basalt/* rule ids unguarded ` +
|
|
77
|
+
'(incl. the promoted control-outside-home, raw-breakpoint): no .oxlintrc.json up to the repo ' +
|
|
78
|
+
'root extends basalt-ui/configs/oxlint.json (or the guards-only oxlint-basalt.json). `basalt-ui ' +
|
|
79
|
+
'doctor` names the fix.'
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
|
|
31
83
|
/**
|
|
32
84
|
* Theme guard — thin FS walker over the headless `../guard` core. Reads BasaltConfig, builds a
|
|
33
85
|
* GuardConfig, walks roots, calls checkSource per file, collects Finding[], groups/reports, returns
|
|
@@ -40,19 +92,10 @@ export function checkTheme(
|
|
|
40
92
|
invocationCwd: string = process.cwd(),
|
|
41
93
|
flags: readonly string[] = [],
|
|
42
94
|
): number {
|
|
43
|
-
if (conflictingProfileFlags(flags))
|
|
44
|
-
console.error(
|
|
45
|
-
'basalt-ui check-theme: --tokens-only and --framework are alternatives — pass one.',
|
|
46
|
-
)
|
|
47
|
-
return 1
|
|
48
|
-
}
|
|
95
|
+
if (conflictingProfileFlags('check-theme', flags)) return 1
|
|
49
96
|
const project = resolveProjectDir(invocationCwd)
|
|
50
97
|
const cwd = project.dir
|
|
51
|
-
|
|
52
|
-
console.log(
|
|
53
|
-
`basalt-ui check-theme: BASALT_CWD relocated from ${project.relocatedFrom} to ${cwd}.`,
|
|
54
|
-
)
|
|
55
|
-
}
|
|
98
|
+
noteRelocation('check-theme', project)
|
|
56
99
|
const cfg = readBasaltConfig(cwd)
|
|
57
100
|
const roots = resolveRoots(cfg)
|
|
58
101
|
const profile = declaredProfile(cfg, flags)
|
|
@@ -64,27 +107,7 @@ export function checkTheme(
|
|
|
64
107
|
)
|
|
65
108
|
}
|
|
66
109
|
|
|
67
|
-
const guardCfg
|
|
68
|
-
spacingSteps: cfg.spacingSteps ?? DEFAULT_GUARD_CONFIG.spacingSteps,
|
|
69
|
-
rawRadius: cfg.rawRadius ?? DEFAULT_GUARD_CONFIG.rawRadius,
|
|
70
|
-
forbiddenAccents: cfg.forbiddenAccents ?? DEFAULT_GUARD_CONFIG.forbiddenAccents,
|
|
71
|
-
mantineShadeIndex: cfg.mantineShadeIndex ?? DEFAULT_GUARD_CONFIG.mantineShadeIndex,
|
|
72
|
-
rawSurface: cfg.rawSurface ?? DEFAULT_GUARD_CONFIG.rawSurface,
|
|
73
|
-
cardWithBorder: cfg.cardWithBorder ?? DEFAULT_GUARD_CONFIG.cardWithBorder,
|
|
74
|
-
offSystemSurfaceVar: cfg.offSystemSurfaceVar ?? DEFAULT_GUARD_CONFIG.offSystemSurfaceVar,
|
|
75
|
-
rawHtmlLayout: cfg.rawHtmlLayout ?? DEFAULT_GUARD_CONFIG.rawHtmlLayout,
|
|
76
|
-
inlineSpacing: cfg.inlineSpacing ?? DEFAULT_GUARD_CONFIG.inlineSpacing,
|
|
77
|
-
inlineDisplay: cfg.inlineDisplay ?? DEFAULT_GUARD_CONFIG.inlineDisplay,
|
|
78
|
-
rawVisxAxis: cfg.rawVisxAxis ?? DEFAULT_GUARD_CONFIG.rawVisxAxis,
|
|
79
|
-
rawMotionValue: cfg.rawMotionValue ?? DEFAULT_GUARD_CONFIG.rawMotionValue,
|
|
80
|
-
chartMissingAriaLabel: cfg.chartMissingAriaLabel ?? DEFAULT_GUARD_CONFIG.chartMissingAriaLabel,
|
|
81
|
-
rawFormControl: cfg.rawFormControl ?? DEFAULT_GUARD_CONFIG.rawFormControl,
|
|
82
|
-
sub16InputFont: cfg.sub16InputFont ?? DEFAULT_GUARD_CONFIG.sub16InputFont,
|
|
83
|
-
allowComment: 'theme-allow',
|
|
84
|
-
exemptRules: resolveExemptRules(cfg),
|
|
85
|
-
severity: cfg.severity ?? DEFAULT_GUARD_CONFIG.severity,
|
|
86
|
-
...(profile === 'tokens-only' ? { profile: 'tokens-only' as const } : {}),
|
|
87
|
-
}
|
|
110
|
+
const guardCfg = resolveGuardConfig(cfg, profile)
|
|
88
111
|
|
|
89
112
|
const findings: Finding[] = []
|
|
90
113
|
const scanned = scannableFiles(cwd, cfg)
|
|
@@ -142,6 +165,9 @@ export function checkTheme(
|
|
|
142
165
|
)
|
|
143
166
|
}
|
|
144
167
|
|
|
168
|
+
const notice = profile === 'tokens-only' ? null : astLaneNotice(cwd)
|
|
169
|
+
if (notice !== null) console.error(notice)
|
|
170
|
+
|
|
145
171
|
if (findings.length === 0) {
|
|
146
172
|
console.log('✓ Theme guard: no off-palette colors.')
|
|
147
173
|
return 0
|
package/src/cli/doctor.ts
CHANGED
|
@@ -16,6 +16,9 @@ import {
|
|
|
16
16
|
findBasaltInstall,
|
|
17
17
|
findRepoRoot,
|
|
18
18
|
inspectLefthookGate,
|
|
19
|
+
OXLINT_FILES,
|
|
20
|
+
OXLINT_NO_BIN,
|
|
21
|
+
oxlintBinResolves,
|
|
19
22
|
parseJsonc,
|
|
20
23
|
readBasaltConfig,
|
|
21
24
|
readIfExists,
|
|
@@ -114,20 +117,15 @@ function resolveAiMajorSkewReason(cfg: BasaltConfig): {
|
|
|
114
117
|
* version agrees with the manifest's `basaltVersion`.
|
|
115
118
|
* 3. `guard-scan`: `check-theme` would scan more than zero files, sharing `scannableFiles` so the
|
|
116
119
|
* two cannot disagree. Both RESTORED in 1.30.0 after four minors gone with no MIGRATING row —
|
|
117
|
-
* README § `doctor` carries what their absence cost
|
|
118
|
-
* nothing, and two basalt-WRITTEN docs describing output the CLI no longer produced).
|
|
120
|
+
* README § `doctor` carries what their absence cost.
|
|
119
121
|
* 4. `oxlint-preset` ("rules in sync"): the consumer's `.oxlintrc.json` extends the shipped
|
|
120
|
-
* preset AND that path resolves. `init` keeps an existing config, so the framework's whole
|
|
122
|
+
* preset AND that path resolves (warns when no `oxlint` bin does). `init` keeps an existing config, so the framework's whole
|
|
121
123
|
* lint half can be silently off — one repo carried six real violations invisibly across five
|
|
122
124
|
* minors this way.
|
|
123
125
|
* 6. `ai-major-parity`: within THIS package.json, `dependencies`/`devDependencies`/
|
|
124
|
-
* `peerDependencies` agree on the `ai` package's major
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
* dependents for one major while it itself runs another. A detected skew is exempt-able via
|
|
128
|
-
* `basalt.aiMajorSkewReason` (a non-empty reason string, not a bare `true`); missing or
|
|
129
|
-
* invalid still hard-fails as if the key were absent. A declared reason when the majors
|
|
130
|
-
* already agree warns that the exemption is stale.
|
|
126
|
+
* `peerDependencies` agree on the `ai` package's major — the shape `basalt/ai-sdk-major` (per
|
|
127
|
+
* linted FILE) cannot see. A skew is exempt-able via `basalt.aiMajorSkewReason` (a non-empty
|
|
128
|
+
* reason, not a bare `true`); a declared reason when the majors agree warns it is stale.
|
|
131
129
|
*
|
|
132
130
|
* Warning (non-fatal):
|
|
133
131
|
* 5. `lefthook-preset` ("lefthook wired"): a pre-commit command runs `check-theme`, read from
|
|
@@ -140,10 +138,7 @@ function resolveAiMajorSkewReason(cfg: BasaltConfig): {
|
|
|
140
138
|
* Returns the exit code: 0 = all good, 1 = one or more hard failures.
|
|
141
139
|
*/
|
|
142
140
|
export function doctor(invocationCwd: string = process.cwd(), flags: string[] = []): number {
|
|
143
|
-
if (conflictingProfileFlags(flags))
|
|
144
|
-
console.error('basalt-ui doctor: --tokens-only and --framework are alternatives — pass one.')
|
|
145
|
-
return 1
|
|
146
|
-
}
|
|
141
|
+
if (conflictingProfileFlags('doctor', flags)) return 1
|
|
147
142
|
const project = resolveProjectDir(invocationCwd)
|
|
148
143
|
const cwd = project.dir
|
|
149
144
|
const cfg = readBasaltConfig(cwd)
|
|
@@ -256,7 +251,7 @@ export function doctor(invocationCwd: string = process.cwd(), flags: string[] =
|
|
|
256
251
|
)
|
|
257
252
|
} else {
|
|
258
253
|
const entry = basaltPresetEntry(parsed['extends'])
|
|
259
|
-
const correct = shippedAssetPath(install, cwd,
|
|
254
|
+
const correct = shippedAssetPath(install, cwd, OXLINT_FILES.preset)
|
|
260
255
|
if (entry === null) {
|
|
261
256
|
fail(
|
|
262
257
|
'.oxlintrc.json does NOT extend the shipped preset — every basalt/* design rule is off ' +
|
|
@@ -269,6 +264,8 @@ export function doctor(invocationCwd: string = process.cwd(), flags: string[] =
|
|
|
269
264
|
'oxlint refuses to start on a missing extends target (`NotFound`), so nothing is ' +
|
|
270
265
|
`linted at all. Repoint it at "${correct}", where basalt-ui actually resolves.`,
|
|
271
266
|
)
|
|
267
|
+
} else if (!oxlintBinResolves(cwd)) {
|
|
268
|
+
warn(`.oxlintrc.json extends the shipped preset (${entry}), but ${OXLINT_NO_BIN}`)
|
|
272
269
|
} else {
|
|
273
270
|
pass(`.oxlintrc.json extends the shipped basalt-ui oxlint preset (${entry})`)
|
|
274
271
|
}
|