apps/web is both airship's home page and the app `make run` points the CLI at — which makes the site the thing that gets edited during development, and therefore the first place a regression in the editor shows up. routeTree.gen.ts is generated and committed on purpose so a clean checkout typechecks without a build first; preflight regenerates and diffs it, because committed generated files drift.
13 lines
579 B
TypeScript
13 lines
579 B
TypeScript
/**
|
|
* Join class names, dropping anything falsy.
|
|
*
|
|
* Deliberately not `clsx` and deliberately not `tailwind-merge`: this page is a
|
|
* CSS-first port whose class names are semantic (`.step-card`, `.toc-link`), not
|
|
* utility soup, so there are no conflicting Tailwind utilities to resolve and
|
|
* nothing to gain from a merge pass. Objects and nested arrays are unsupported
|
|
* for the same reason — if a call site wants one, it can spread it itself.
|
|
*/
|
|
export function cn(...parts: (string | false | null | undefined)[]): string {
|
|
return parts.filter(Boolean).join(" ");
|
|
}
|