# @codefast/theme

## 0.8.1

### Patch Changes

- [#748](https://github.com/codefastlabs/codefast/pull/748) [`bde6d1b`](https://github.com/codefastlabs/codefast/commit/bde6d1b46f55f65039f8a3c8e062693fe328952a) Thanks [@thevuong](https://github.com/thevuong)! - Mirror the committed appearance ref in a layout effect so a programmatic `setAppearance` landing before the passive
  flush compares against the just-committed appearance instead of the previous one.

## 0.8.0

### Minor Changes

- [#745](https://github.com/codefastlabs/codefast/pull/745) [`5cbb93a`](https://github.com/codefastlabs/codefast/commit/5cbb93aa42a63f2baa320eb1684267d310018741) Thanks [@thevuong](https://github.com/thevuong)! - fix(theme): harden appearance provider/script and tighten public types

  Three correctness fixes plus two type-safety tightenings:

  - Overlapping `setAppearance` calls with `disableTransition` enabled could orphan a transition-suppression `<style>` —
    `enableTransitionsRef` was overwritten before the previous cleanup ran — leaving `*{transition:none}` in `<head>`
    forever and permanently disabling CSS transitions. Each call now flushes the pending suppression before injecting a
    new one.
  - `AppearanceScript` now runtime-validates its `appearance` prop (as `AppearanceProvider` already did), so an invalid
    value can no longer be written to `<html>` before first paint or diverge from the provider's fallback.
  - `applyColorScheme` no-ops during SSR instead of throwing on `window` access, matching its sibling
    `suppressTransitions`.
  - Public props on `AppearanceProvider` and `AppearanceScript` now accept explicit `undefined` (`?: T | undefined`) under
    `exactOptionalPropertyTypes`, so JSX callers can pass possibly-undefined expressions such as `nonce` and `appearance`.

  Breaking (type surface only, no runtime behavior change): `appearances` is now `ReadonlyArray<Appearance>` (was
  `Array<Appearance>`), so assigning it to a mutable `Appearance[]` is now a compile error.

## 0.7.0

## 0.6.2

## 0.6.1

## 0.6.0

### Patch Changes

- [#690](https://github.com/codefastlabs/codefast/pull/690) [`f4b1aa6`](https://github.com/codefastlabs/codefast/commit/f4b1aa6335f535574eae5cf559b81a568f5a7a30) Thanks [@thevuong](https://github.com/thevuong)! - Report the failures that were being swallowed or mislabelled, and derive the types the build emits.

  `@codefast/di`:

  - `@inject`, `@postConstruct` and `@preDestroy` on a static member now throw `StaticMemberDecoratorError` instead of
    `InternalError`. All three act on one instance, so this is caller misuse — and `InternalError` means the library
    broke, which sent anyone catching it to file a bug against their own mistake. SPEC §10 already recorded that mistake
    for predicate ambiguity.
  - `AsyncResolutionError` names the token the caller asked for and the token whose factory is async, which is what SPEC
    has always specified. Every throw site passed the same token twice, so the message read "Token 'X' requires async
    resolution because 'X' in its dependency chain has an async factory"; a `resolve(App)` that fails on an async
    `Database` now says so. `asyncSourceToken` defaults to `tokenName` for the case where the requested binding is itself
    the source.
  - A `MetadataReader` that names a `@postConstruct`/`@preDestroy` method the instance does not have raises
    `InvalidMetadataError` instead of skipping the hook — a hook that silently never runs is the failure a caller cannot
    see. `InvalidMetadataError`'s message no longer says "constructor", since it now covers both answers; the specifics
    moved into `reason`.
  - `MissingScopeContextError` from `ScopeManager` names its token instead of `"(unknown)"`, and the scoped read takes one
    map lookup where it took two.
  - `Token`, `Constructor` and `InjectionDescriptor` declare `out Value`, so the compiler checks the covariance the engine
    already relied on.

  Repo-wide: `isolatedDeclarations` is on for every package that emits declarations, so a public type can always be
  written down from the source file alone. `allowJs` is gone from the shared base config — no package has JavaScript
  sources. `@codefast/theme` and `@codefast/tracking` gained explicit annotations on four exported constants to satisfy
  it; the emitted types are unchanged. `@codefast/ui` and `@codefast/benchmark-viewer` opt out for reasons recorded in
  their configs.

## 0.5.0

### Minor Changes

- [`c634b17`](https://github.com/codefastlabs/codefast/commit/c634b17e6a8d742cbc54e4074408eea51fb55d40) Thanks [@thevuong](https://github.com/thevuong)! - Rename `AppearanceContextType` to `AppearanceContextValue` — the "Type" suffix carried no information (every exported type is a type), while "Value" states the role: the payload provided through `AppearanceContext` and returned by `useAppearance`.

- [#547](https://github.com/codefastlabs/codefast/pull/547) [`c7d6818`](https://github.com/codefastlabs/codefast/commit/c7d68182f875040993c1cec8f34914dc37f5237d) Thanks [@thevuong](https://github.com/thevuong)! - Add a `storageKey` prop to `AppearanceProvider` for a fully client-side color scheme path (no server framework, cookie, or loader). When set, the provider reads the persisted preference from `localStorage` in its initial client render, auto-persists changes there (unless an explicit `persistColorScheme` is given), and syncs across tabs via the `storage` event. Paired with `<AppearanceScript storageKey>` using the same key, the inline script applies the stored value before first paint — so there is **no flash even on statically prerendered / CDN-served pages**, where an httpOnly cookie can't reach the pre-paint script and a post-mount server round-trip would otherwise flip the appearance.

  `AppearanceScript` and `AppearanceProvider` now also mirror the **preference** (`light` / `dark` / `automatic`) to a `data-appearance` attribute on `<html>` — set by the inline script before first paint and kept in sync by the provider. This lets preference-aware UI (e.g. a 3-state theme toggle that shows a distinct "system" icon) render the correct state purely from CSS, with no hydration flash from reading client-only state.

- [#526](https://github.com/codefastlabs/codefast/pull/526) [`fad5a21`](https://github.com/codefastlabs/codefast/commit/fad5a21a8b60d9dafc1efc00addf146608bfbb89) Thanks [@thevuong](https://github.com/thevuong)! - Add the `@codefast/theme/vite` plugin. TanStack Start registers the server functions shipped in `@codefast/theme/start` at the consumer's build time, so the package must not be externalized for SSR nor pre-bundled for the client. The new `codefastTheme()` plugin applies that configuration automatically, so consumers no longer need to hand-write `ssr.noExternal` / `optimizeDeps.exclude`.

### Patch Changes

- [#676](https://github.com/codefastlabs/codefast/pull/676) [`641e233`](https://github.com/codefastlabs/codefast/commit/641e2338d77fb61be2ca585a5986f34cf32ec746) Thanks [@thevuong](https://github.com/thevuong)! - Collapse the `types` and `default` lanes of `package.json#imports` from fallback arrays to single strings.

  Node resolves an imports array by taking the first candidate it can parse, without checking that the file exists and without falling through — a specifier whose first candidate is missing throws `ERR_MODULE_NOT_FOUND` rather than trying the second. `./dist/*/index.js` and `./dist/*/index.d.ts` could therefore never be reached, so they read as a safety net that does not exist. The `source` lane keeps its extension candidates, which only `tsc` and Vite read and both probe.

- [#550](https://github.com/codefastlabs/codefast/pull/550) [`0feb8cd`](https://github.com/codefastlabs/codefast/commit/0feb8cd747cf3831dbba9bc9ed0fb819ec4c9a2b) Thanks [@thevuong](https://github.com/thevuong)! - Rename the public API to follow Apple's Human Interface Guidelines vocabulary: **appearance** is the user's preference (`"light" | "dark" | "automatic"`, like macOS System Settings → Appearance), **color scheme** is the resolved light-or-dark value actually applied (like SwiftUI `ColorScheme` and CSS `color-scheme`). Source files are also flattened so each subpath names what it exports.

  **Breaking renames:**

  - Types: `ColorScheme` → `Appearance`; `ResolvedColorScheme` → `ColorScheme`; `ColorSchemeContextType` → `AppearanceContextType`; `colorSchemeSchema` → `appearanceSchema`; `colorSchemes` → `appearances`.
  - Hook: `useColorScheme()` → `useAppearance()`, returning `{ appearance, colorScheme, setAppearance, isPending }` (was `{ colorScheme, resolvedColorScheme, setColorScheme, isPending }`).
  - Provider props: `colorScheme` → `appearance`; `persistColorScheme` → `persistAppearance`. Script prop: `colorScheme` → `appearance`. Context: `ColorSchemeContext` → `AppearanceContext`.
  - Constants: `DEFAULT_COLOR_SCHEME` → `DEFAULT_APPEARANCE` (`"automatic"`); `DEFAULT_RESOLVED_COLOR_SCHEME` → `DEFAULT_COLOR_SCHEME` (`"dark"`). ⚠️ `DEFAULT_COLOR_SCHEME` still exists but now means the resolved fallback — the prop renames make stale usage a compile error.
  - Subpaths: `./types` → `./appearance`; `./core/provider` → `./appearance-provider`; `./core/use-theme` → `./use-appearance`; `./core/context` → `./appearance-context`; `./script/theme-script` → `./appearance-script`; `./utils/system` → `./color-scheme`; `./utils/dom` → `./dom`.

  - Persisted values: the default `STORAGE_KEY` is now `"ui-appearance"` (was `"ui-theme"`) — returning visitors fall back to `"automatic"` once. The internal `BroadcastChannel` is now `"appearance-sync"` (was `"color-scheme-sync"`).

  Unchanged: `AppearanceProvider` / `AppearanceScript` component names, the `data-appearance` attribute, `resolveColorScheme()` / `getSystemColorScheme()` / `applyColorScheme()` / `suppressTransitions()`.

- [#549](https://github.com/codefastlabs/codefast/pull/549) [`2d16644`](https://github.com/codefastlabs/codefast/commit/2d16644c22f1ad45bb6803ae086caa40e7323576) Thanks [@thevuong](https://github.com/thevuong)! - Remove all server-side handling — the color scheme preference now lives entirely on the client in `localStorage`.

  **Breaking:**

  - Removed `@codefast/theme/start`, `@codefast/theme/vite`, and `@codefast/theme/adapters/tanstack-start/server` — the TanStack Start server functions, httpOnly cookie persistence, and the Vite plugin that wired them into consumer builds.
  - Removed `AppearanceProvider`'s `ssrColorScheme` and `syncFromServer` props; the provider also no longer re-syncs from a changed `colorScheme` prop after mount (it is a static fallback now).
  - `resolveColorScheme()` no longer takes an `ssrColorScheme` argument; on the server, `"automatic"` resolves to `DEFAULT_RESOLVED_COLOR_SCHEME`.
  - Dropped the optional `@tanstack/react-start` and `vite` peer dependencies.

  **Changed defaults:** `storageKey` now defaults to `STORAGE_KEY` (`"ui-appearance"`) and `colorScheme` to `DEFAULT_COLOR_SCHEME` (`"automatic"`) on both `AppearanceScript` and `AppearanceProvider`, so `<AppearanceScript />` + `<AppearanceProvider>` work with zero configuration. `persistColorScheme` / `onPersistError` remain for custom persistence.

  Migration: drop the root loader and the `codefastTheme()` Vite plugin, render the defaults on `<html>` with `suppressHydrationWarning`, and let the inline script correct the class before paint — see the README's TanStack Start recipe.

## 0.5.0-canary.9

### Patch Changes

- [#676](https://github.com/codefastlabs/codefast/pull/676) [`641e233`](https://github.com/codefastlabs/codefast/commit/641e2338d77fb61be2ca585a5986f34cf32ec746) Thanks [@thevuong](https://github.com/thevuong)! - Collapse the `types` and `default` lanes of `package.json#imports` from fallback arrays to single strings.

  Node resolves an imports array by taking the first candidate it can parse, without checking that the file exists and without falling through — a specifier whose first candidate is missing throws `ERR_MODULE_NOT_FOUND` rather than trying the second. `./dist/*/index.js` and `./dist/*/index.d.ts` could therefore never be reached, so they read as a safety net that does not exist. The `source` lane keeps its extension candidates, which only `tsc` and Vite read and both probe.

## 0.5.0-canary.8

## 0.5.0-canary.7

## 0.5.0-canary.6

### Minor Changes

- [`c634b17`](https://github.com/codefastlabs/codefast/commit/c634b17e6a8d742cbc54e4074408eea51fb55d40) Thanks [@thevuong](https://github.com/thevuong)! - Rename `AppearanceContextType` to `AppearanceContextValue` — the "Type" suffix carried no information (every exported type is a type), while "Value" states the role: the payload provided through `AppearanceContext` and returned by `useAppearance`.

- [#547](https://github.com/codefastlabs/codefast/pull/547) [`c7d6818`](https://github.com/codefastlabs/codefast/commit/c7d68182f875040993c1cec8f34914dc37f5237d) Thanks [@thevuong](https://github.com/thevuong)! - Add a `storageKey` prop to `AppearanceProvider` for a fully client-side color scheme path (no server framework, cookie, or loader). When set, the provider reads the persisted preference from `localStorage` in its initial client render, auto-persists changes there (unless an explicit `persistColorScheme` is given), and syncs across tabs via the `storage` event. Paired with `<AppearanceScript storageKey>` using the same key, the inline script applies the stored value before first paint — so there is **no flash even on statically prerendered / CDN-served pages**, where an httpOnly cookie can't reach the pre-paint script and a post-mount server round-trip would otherwise flip the appearance.

  `AppearanceScript` and `AppearanceProvider` now also mirror the **preference** (`light` / `dark` / `automatic`) to a `data-appearance` attribute on `<html>` — set by the inline script before first paint and kept in sync by the provider. This lets preference-aware UI (e.g. a 3-state theme toggle that shows a distinct "system" icon) render the correct state purely from CSS, with no hydration flash from reading client-only state.

- [#526](https://github.com/codefastlabs/codefast/pull/526) [`fad5a21`](https://github.com/codefastlabs/codefast/commit/fad5a21a8b60d9dafc1efc00addf146608bfbb89) Thanks [@thevuong](https://github.com/thevuong)! - Add the `@codefast/theme/vite` plugin. TanStack Start registers the server functions shipped in `@codefast/theme/start` at the consumer's build time, so the package must not be externalized for SSR nor pre-bundled for the client. The new `codefastTheme()` plugin applies that configuration automatically, so consumers no longer need to hand-write `ssr.noExternal` / `optimizeDeps.exclude`.

### Patch Changes

- [#550](https://github.com/codefastlabs/codefast/pull/550) [`0feb8cd`](https://github.com/codefastlabs/codefast/commit/0feb8cd747cf3831dbba9bc9ed0fb819ec4c9a2b) Thanks [@thevuong](https://github.com/thevuong)! - Rename the public API to follow Apple's Human Interface Guidelines vocabulary: **appearance** is the user's preference (`"light" | "dark" | "automatic"`, like macOS System Settings → Appearance), **color scheme** is the resolved light-or-dark value actually applied (like SwiftUI `ColorScheme` and CSS `color-scheme`). Source files are also flattened so each subpath names what it exports.

  **Breaking renames:**

  - Types: `ColorScheme` → `Appearance`; `ResolvedColorScheme` → `ColorScheme`; `ColorSchemeContextType` → `AppearanceContextType`; `colorSchemeSchema` → `appearanceSchema`; `colorSchemes` → `appearances`.
  - Hook: `useColorScheme()` → `useAppearance()`, returning `{ appearance, colorScheme, setAppearance, isPending }` (was `{ colorScheme, resolvedColorScheme, setColorScheme, isPending }`).
  - Provider props: `colorScheme` → `appearance`; `persistColorScheme` → `persistAppearance`. Script prop: `colorScheme` → `appearance`. Context: `ColorSchemeContext` → `AppearanceContext`.
  - Constants: `DEFAULT_COLOR_SCHEME` → `DEFAULT_APPEARANCE` (`"automatic"`); `DEFAULT_RESOLVED_COLOR_SCHEME` → `DEFAULT_COLOR_SCHEME` (`"dark"`). ⚠️ `DEFAULT_COLOR_SCHEME` still exists but now means the resolved fallback — the prop renames make stale usage a compile error.
  - Subpaths: `./types` → `./appearance`; `./core/provider` → `./appearance-provider`; `./core/use-theme` → `./use-appearance`; `./core/context` → `./appearance-context`; `./script/theme-script` → `./appearance-script`; `./utils/system` → `./color-scheme`; `./utils/dom` → `./dom`.

  - Persisted values: the default `STORAGE_KEY` is now `"ui-appearance"` (was `"ui-theme"`) — returning visitors fall back to `"automatic"` once. The internal `BroadcastChannel` is now `"appearance-sync"` (was `"color-scheme-sync"`).

  Unchanged: `AppearanceProvider` / `AppearanceScript` component names, the `data-appearance` attribute, `resolveColorScheme()` / `getSystemColorScheme()` / `applyColorScheme()` / `suppressTransitions()`.

- [#549](https://github.com/codefastlabs/codefast/pull/549) [`2d16644`](https://github.com/codefastlabs/codefast/commit/2d16644c22f1ad45bb6803ae086caa40e7323576) Thanks [@thevuong](https://github.com/thevuong)! - Remove all server-side handling — the color scheme preference now lives entirely on the client in `localStorage`.

  **Breaking:**

  - Removed `@codefast/theme/start`, `@codefast/theme/vite`, and `@codefast/theme/adapters/tanstack-start/server` — the TanStack Start server functions, httpOnly cookie persistence, and the Vite plugin that wired them into consumer builds.
  - Removed `AppearanceProvider`'s `ssrColorScheme` and `syncFromServer` props; the provider also no longer re-syncs from a changed `colorScheme` prop after mount (it is a static fallback now).
  - `resolveColorScheme()` no longer takes an `ssrColorScheme` argument; on the server, `"automatic"` resolves to `DEFAULT_RESOLVED_COLOR_SCHEME`.
  - Dropped the optional `@tanstack/react-start` and `vite` peer dependencies.

  **Changed defaults:** `storageKey` now defaults to `STORAGE_KEY` (`"ui-appearance"`) and `colorScheme` to `DEFAULT_COLOR_SCHEME` (`"automatic"`) on both `AppearanceScript` and `AppearanceProvider`, so `<AppearanceScript />` + `<AppearanceProvider>` work with zero configuration. `persistColorScheme` / `onPersistError` remain for custom persistence.

  Migration: drop the root loader and the `codefastTheme()` Vite plugin, render the defaults on `<html>` with `suppressHydrationWarning`, and let the inline script correct the class before paint — see the README's TanStack Start recipe.

## 1.0.0-canary.7

## 1.0.0-canary.6

## 0.5.0-canary.5

## 0.5.0-canary.4

### Minor Changes

- [`c634b17`](https://github.com/codefastlabs/codefast/commit/c634b17e6a8d742cbc54e4074408eea51fb55d40) Thanks [@thevuong](https://github.com/thevuong)! - Rename `AppearanceContextType` to `AppearanceContextValue` — the "Type" suffix carried no information (every exported type is a type), while "Value" states the role: the payload provided through `AppearanceContext` and returned by `useAppearance`.

## 0.5.0-canary.3

## 0.5.0-canary.2

### Patch Changes

- [#550](https://github.com/codefastlabs/codefast/pull/550) [`0feb8cd`](https://github.com/codefastlabs/codefast/commit/0feb8cd747cf3831dbba9bc9ed0fb819ec4c9a2b) Thanks [@thevuong](https://github.com/thevuong)! - Rename the public API to follow Apple's Human Interface Guidelines vocabulary: **appearance** is the user's preference (`"light" | "dark" | "automatic"`, like macOS System Settings → Appearance), **color scheme** is the resolved light-or-dark value actually applied (like SwiftUI `ColorScheme` and CSS `color-scheme`). Source files are also flattened so each subpath names what it exports.

  **Breaking renames:**

  - Types: `ColorScheme` → `Appearance`; `ResolvedColorScheme` → `ColorScheme`; `ColorSchemeContextType` → `AppearanceContextType`; `colorSchemeSchema` → `appearanceSchema`; `colorSchemes` → `appearances`.
  - Hook: `useColorScheme()` → `useAppearance()`, returning `{ appearance, colorScheme, setAppearance, isPending }` (was `{ colorScheme, resolvedColorScheme, setColorScheme, isPending }`).
  - Provider props: `colorScheme` → `appearance`; `persistColorScheme` → `persistAppearance`. Script prop: `colorScheme` → `appearance`. Context: `ColorSchemeContext` → `AppearanceContext`.
  - Constants: `DEFAULT_COLOR_SCHEME` → `DEFAULT_APPEARANCE` (`"automatic"`); `DEFAULT_RESOLVED_COLOR_SCHEME` → `DEFAULT_COLOR_SCHEME` (`"dark"`). ⚠️ `DEFAULT_COLOR_SCHEME` still exists but now means the resolved fallback — the prop renames make stale usage a compile error.
  - Subpaths: `./types` → `./appearance`; `./core/provider` → `./appearance-provider`; `./core/use-theme` → `./use-appearance`; `./core/context` → `./appearance-context`; `./script/theme-script` → `./appearance-script`; `./utils/system` → `./color-scheme`; `./utils/dom` → `./dom`.

  - Persisted values: the default `STORAGE_KEY` is now `"ui-appearance"` (was `"ui-theme"`) — returning visitors fall back to `"automatic"` once. The internal `BroadcastChannel` is now `"appearance-sync"` (was `"color-scheme-sync"`).

  Unchanged: `AppearanceProvider` / `AppearanceScript` component names, the `data-appearance` attribute, `resolveColorScheme()` / `getSystemColorScheme()` / `applyColorScheme()` / `suppressTransitions()`.

- [#549](https://github.com/codefastlabs/codefast/pull/549) [`2d16644`](https://github.com/codefastlabs/codefast/commit/2d16644c22f1ad45bb6803ae086caa40e7323576) Thanks [@thevuong](https://github.com/thevuong)! - Remove all server-side handling — the color scheme preference now lives entirely on the client in `localStorage`.

  **Breaking:**

  - Removed `@codefast/theme/start`, `@codefast/theme/vite`, and `@codefast/theme/adapters/tanstack-start/server` — the TanStack Start server functions, httpOnly cookie persistence, and the Vite plugin that wired them into consumer builds.
  - Removed `AppearanceProvider`'s `ssrColorScheme` and `syncFromServer` props; the provider also no longer re-syncs from a changed `colorScheme` prop after mount (it is a static fallback now).
  - `resolveColorScheme()` no longer takes an `ssrColorScheme` argument; on the server, `"automatic"` resolves to `DEFAULT_RESOLVED_COLOR_SCHEME`.
  - Dropped the optional `@tanstack/react-start` and `vite` peer dependencies.

  **Changed defaults:** `storageKey` now defaults to `STORAGE_KEY` (`"ui-appearance"`) and `colorScheme` to `DEFAULT_COLOR_SCHEME` (`"automatic"`) on both `AppearanceScript` and `AppearanceProvider`, so `<AppearanceScript />` + `<AppearanceProvider>` work with zero configuration. `persistColorScheme` / `onPersistError` remain for custom persistence.

  Migration: drop the root loader and the `codefastTheme()` Vite plugin, render the defaults on `<html>` with `suppressHydrationWarning`, and let the inline script correct the class before paint — see the README's TanStack Start recipe.

## 0.5.0-canary.1

### Minor Changes

- [#547](https://github.com/codefastlabs/codefast/pull/547) [`c7d6818`](https://github.com/codefastlabs/codefast/commit/c7d68182f875040993c1cec8f34914dc37f5237d) Thanks [@thevuong](https://github.com/thevuong)! - Add a `storageKey` prop to `AppearanceProvider` for a fully client-side color scheme path (no server framework, cookie, or loader). When set, the provider reads the persisted preference from `localStorage` in its initial client render, auto-persists changes there (unless an explicit `persistColorScheme` is given), and syncs across tabs via the `storage` event. Paired with `<AppearanceScript storageKey>` using the same key, the inline script applies the stored value before first paint — so there is **no flash even on statically prerendered / CDN-served pages**, where an httpOnly cookie can't reach the pre-paint script and a post-mount server round-trip would otherwise flip the appearance.

  `AppearanceScript` and `AppearanceProvider` now also mirror the **preference** (`light` / `dark` / `automatic`) to a `data-appearance` attribute on `<html>` — set by the inline script before first paint and kept in sync by the provider. This lets preference-aware UI (e.g. a 3-state theme toggle that shows a distinct "system" icon) render the correct state purely from CSS, with no hydration flash from reading client-only state.

## 0.5.0-canary.0

### Minor Changes

- [#526](https://github.com/codefastlabs/codefast/pull/526) [`fad5a21`](https://github.com/codefastlabs/codefast/commit/fad5a21a8b60d9dafc1efc00addf146608bfbb89) Thanks [@thevuong](https://github.com/thevuong)! - Add the `@codefast/theme/vite` plugin. TanStack Start registers the server functions shipped in `@codefast/theme/start` at the consumer's build time, so the package must not be externalized for SSR nor pre-bundled for the client. The new `codefastTheme()` plugin applies that configuration automatically, so consumers no longer need to hand-write `ssr.noExternal` / `optimizeDeps.exclude`.

## 0.4.0

### Patch Changes

- [`2397801`](https://github.com/codefastlabs/codefast/commit/239780172d7a71c3426382ec66309ec7f39bd883) Thanks [@thevuong](https://github.com/thevuong)! - chore: align package config globs

- [`17c6445`](https://github.com/codefastlabs/codefast/commit/17c6445017ed3ffcc3a04db128362329669124e3) Thanks [@thevuong](https://github.com/thevuong)! - Security, correctness, and performance improvements to `ThemeProvider` and `ThemeScript`.

  **Security**

  - Validate `BroadcastChannel` messages with `themeSchema.safeParse` before applying — prevents injection from browser extensions or other same-origin scripts
  - Use `JSON.stringify` in `ThemeScript` inline script to safely serialise the theme value

  **Correctness**

  - `ThemeProvider` now re-syncs internal state when the `theme` prop changes after mount (e.g. router re-runs the root loader), making the server the authoritative source of truth
  - Fixed `disableTransitionOnChange` timing: animation cleanup now fires after `applyTheme` commits to the DOM instead of prematurely in the async persist `finally` block
  - Added last-write-wins guard (`intentRef`) so rapid `setTheme` calls only commit the most recent intent

  **Performance**

  - `setTheme` callback is now stable across theme commits (reads `committedThemeRef` instead of capturing `theme` in deps) — prevents unnecessary re-renders in consumers
  - `BroadcastChannel` is reused from a shared ref instead of opening a new channel on every `setTheme` call
  - Removed obsolete `-moz-`, `-o-`, `-ms-` vendor prefixes from the `disableAnimation` CSS injection

  **Features**

  - `ThemeScript` accepts a new `storageKey` prop: when set, the inline script reads `localStorage` before first paint for FOUC-free client-only apps
  - Runtime Zod validation of the `theme` prop in `ThemeProvider` guards against invalid values bypassing TypeScript

  **Docs / Tests**

  - Fixed README: `THEME_STORAGE_KEY` import example now correctly points to `@codefast/theme/constants`
  - Added integration tests for the TanStack Start adapter server functions
  - New test coverage for all security and correctness fixes above

- [`f79b333`](https://github.com/codefastlabs/codefast/commit/f79b333d0599c19028f29b9889afcbfb99db91a1) Thanks [@thevuong](https://github.com/thevuong)! - feat(dev): enable source condition for zero-rebuild HMR in apps/docs

- [`5c82b5e`](https://github.com/codefastlabs/codefast/commit/5c82b5ea742701ac7836ffa8bb4bf4135e069d1d) Thanks [@thevuong](https://github.com/thevuong)! - Use minimum `>=` ranges in peerDependencies instead of `^` caret ranges.

- [`ebdf9e3`](https://github.com/codefastlabs/codefast/commit/ebdf9e396d3c3a826f05f278c93d391a0ae5ca45) Thanks [@thevuong](https://github.com/thevuong)! - feat(web): refactor theme management to color scheme system

- [`6c3ac44`](https://github.com/codefastlabs/codefast/commit/6c3ac44b7ddb9e5bcf3fbe0757e00ef86f27b513) Thanks [@thevuong](https://github.com/thevuong)! - Normalize import statement order and package.json key order repo-wide via the new oxfmt `sortImports`/`sortPackageJson` settings — purely mechanical, no runtime behavior change.

- [`b2cad2e`](https://github.com/codefastlabs/codefast/commit/b2cad2e180977106accbc978131a32d50ef91f9f) Thanks [@thevuong](https://github.com/thevuong)! - fix(theme): migrate `setColorSchemeServerFn` to TanStack Start `.validator` API

## 0.4.0-canary.6

## 0.4.0-canary.5

### Patch Changes

- [#501](https://github.com/codefastlabs/codefast/pull/501) [`407d88e`](https://github.com/codefastlabs/codefast/commit/407d88ed1a1fd8e97f224a4fb09fd279f0159936) Thanks [@thevuong](https://github.com/thevuong)! - fix(theme): migrate `setColorSchemeServerFn` to TanStack Start `.validator` API

## 0.4.0-canary.4

### Patch Changes

- [#495](https://github.com/codefastlabs/codefast/pull/495) [`fa338d6`](https://github.com/codefastlabs/codefast/commit/fa338d61fbfafb94beaa4d05d93d01e2c005cc91) Thanks [@thevuong](https://github.com/thevuong)! - Normalize import statement order and package.json key order repo-wide via the new oxfmt `sortImports`/`sortPackageJson` settings — purely mechanical, no runtime behavior change.

## 0.3.16-canary.3

### Patch Changes

- [`3fc56a8`](https://github.com/codefastlabs/codefast/commit/3fc56a84c4c39c6510ce509d43daeae32fe90638) Thanks [@thevuong](https://github.com/thevuong)! - Security, correctness, and performance improvements to `ThemeProvider` and `ThemeScript`.

  **Security**

  - Validate `BroadcastChannel` messages with `themeSchema.safeParse` before applying — prevents injection from browser extensions or other same-origin scripts
  - Use `JSON.stringify` in `ThemeScript` inline script to safely serialise the theme value

  **Correctness**

  - `ThemeProvider` now re-syncs internal state when the `theme` prop changes after mount (e.g. router re-runs the root loader), making the server the authoritative source of truth
  - Fixed `disableTransitionOnChange` timing: animation cleanup now fires after `applyTheme` commits to the DOM instead of prematurely in the async persist `finally` block
  - Added last-write-wins guard (`intentRef`) so rapid `setTheme` calls only commit the most recent intent

  **Performance**

  - `setTheme` callback is now stable across theme commits (reads `committedThemeRef` instead of capturing `theme` in deps) — prevents unnecessary re-renders in consumers
  - `BroadcastChannel` is reused from a shared ref instead of opening a new channel on every `setTheme` call
  - Removed obsolete `-moz-`, `-o-`, `-ms-` vendor prefixes from the `disableAnimation` CSS injection

  **Features**

  - `ThemeScript` accepts a new `storageKey` prop: when set, the inline script reads `localStorage` before first paint for FOUC-free client-only apps
  - Runtime Zod validation of the `theme` prop in `ThemeProvider` guards against invalid values bypassing TypeScript

  **Docs / Tests**

  - Fixed README: `THEME_STORAGE_KEY` import example now correctly points to `@codefast/theme/constants`
  - Added integration tests for the TanStack Start adapter server functions
  - New test coverage for all security and correctness fixes above

- [`2a82188`](https://github.com/codefastlabs/codefast/commit/2a82188264c204b0b519b3324402ae962594d29b) Thanks [@thevuong](https://github.com/thevuong)! - feat(dev): enable source condition for zero-rebuild HMR in apps/docs

- [`9b94464`](https://github.com/codefastlabs/codefast/commit/9b94464be2247bd5ead32dc3d5c921ae3a52070c) Thanks [@thevuong](https://github.com/thevuong)! - Use minimum `>=` ranges in peerDependencies instead of `^` caret ranges.

- [`bed2f30`](https://github.com/codefastlabs/codefast/commit/bed2f30df74128fe3b1a98dd9d03f6bb96099164) Thanks [@thevuong](https://github.com/thevuong)! - feat(web): refactor theme management to color scheme system

## 0.3.16-canary.2

### Patch Changes

- [`1ad2cb7`](https://github.com/codefastlabs/codefast/commit/1ad2cb73a3f6f8bff2b001e9df2f2492efd89aa2) Thanks [@thevuong](https://github.com/thevuong)! - chore: align package config globs

## 0.3.16-canary.1

## 0.3.16-canary.0

## 0.3.15

### Patch Changes

- [`4df6e65`](https://github.com/codefastlabs/codefast/commit/4df6e6579faf21c6dc7622eb424ad213b120dabb) Thanks [@thevuong](https://github.com/thevuong)! - chore(tsdown): remove bench exclusions and streamline configuration files

## 0.3.14

### Patch Changes

- [`4957e0e`](https://github.com/codefastlabs/codefast/commit/4957e0e8b4b2428447ef11380397b03deef0b092) Thanks [@thevuong](https://github.com/thevuong)! - fix(vitest): update test file patterns to use .test extension

- [`b728f3e`](https://github.com/codefastlabs/codefast/commit/b728f3e74c94ce448b48b2cfd3e7a119b9649cb1) Thanks [@thevuong](https://github.com/thevuong)! - docs(theme): update README.md for clarity and structure

- [`b44597c`](https://github.com/codefastlabs/codefast/commit/b44597c9ec3a121a707aa269d7f68550ae1da72a) Thanks [@thevuong](https://github.com/thevuong)! - docs: enhance type annotations and comments for clarity across multiple files

- [`8109f4e`](https://github.com/codefastlabs/codefast/commit/8109f4e1f8186b91c296d25d640594b43493cdef) Thanks [@thevuong](https://github.com/thevuong)! - docs: update README.md files across packages for consistency and clarity

## 0.3.14-canary.2

### Patch Changes

- [`4957e0e`](https://github.com/codefastlabs/codefast/commit/4957e0e8b4b2428447ef11380397b03deef0b092) Thanks [@thevuong](https://github.com/thevuong)! - fix(vitest): update test file patterns to use .test extension

## 0.3.14-canary.1

## 0.3.14-canary.0

### Patch Changes

- [`b728f3e`](https://github.com/codefastlabs/codefast/commit/b728f3e74c94ce448b48b2cfd3e7a119b9649cb1) Thanks [@thevuong](https://github.com/thevuong)! - docs(theme): update README.md for clarity and structure

- [`b44597c`](https://github.com/codefastlabs/codefast/commit/b44597c9ec3a121a707aa269d7f68550ae1da72a) Thanks [@thevuong](https://github.com/thevuong)! - docs: enhance type annotations and comments for clarity across multiple files

- [`8109f4e`](https://github.com/codefastlabs/codefast/commit/8109f4e1f8186b91c296d25d640594b43493cdef) Thanks [@thevuong](https://github.com/thevuong)! - docs: update README.md files across packages for consistency and clarity

## 0.3.13

### Patch Changes

- [`02b16bc`](https://github.com/codefastlabs/codefast/commit/02b16bcb5e13712294a2fe285461bd8c9faa3c51) Thanks [@thevuong](https://github.com/thevuong)! - refactor(config): update tsconfig and tsdown for consistency

- [`93b7399`](https://github.com/codefastlabs/codefast/commit/93b7399737eb2220866338da31023f95665021a0) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): enhance CLI structure and update dependencies

- [`a042ee5`](https://github.com/codefastlabs/codefast/commit/a042ee5a6a10973492665b90d750a8b86817bf7d) Thanks [@thevuong](https://github.com/thevuong)! - feat: standardize TypeScript build configurations across packages

- [`4248d75`](https://github.com/codefastlabs/codefast/commit/4248d75f2d547247dde937c322c2ed48d484f9e0) Thanks [@thevuong](https://github.com/thevuong)! - chore(tests): streamline test coverage commands and configurations

- [`2340231`](https://github.com/codefastlabs/codefast/commit/23402311084871d238ec50aa23061afd4b14e61e) Thanks [@thevuong](https://github.com/thevuong)! - refactor(imports): standardize import paths across applications and benchmarks

- [`35329d5`](https://github.com/codefastlabs/codefast/commit/35329d5f17682542e3ef0907d4936fa513346a72) Thanks [@thevuong](https://github.com/thevuong)! - feat(tsconfig): enforce module detection in TypeScript configuration

- [`fd3ee2e`](https://github.com/codefastlabs/codefast/commit/fd3ee2ee35dc780e8e925759e6520e51f0cb6320) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): enhance export generation and stale export pruning

- [`dea6bbc`](https://github.com/codefastlabs/codefast/commit/dea6bbcebaaecc09808c42b3f93e0fbf2296eb5b) Thanks [@thevuong](https://github.com/thevuong)! - refactor(di, theme): streamline imports and remove unused files

## 0.3.13-canary.4

### Patch Changes

- [`93b7399`](https://github.com/codefastlabs/codefast/commit/93b7399737eb2220866338da31023f95665021a0) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): enhance CLI structure and update dependencies

- [`4248d75`](https://github.com/codefastlabs/codefast/commit/4248d75f2d547247dde937c322c2ed48d484f9e0) Thanks [@thevuong](https://github.com/thevuong)! - chore(tests): streamline test coverage commands and configurations

- [`2340231`](https://github.com/codefastlabs/codefast/commit/23402311084871d238ec50aa23061afd4b14e61e) Thanks [@thevuong](https://github.com/thevuong)! - refactor(imports): standardize import paths across applications and benchmarks

- [`35329d5`](https://github.com/codefastlabs/codefast/commit/35329d5f17682542e3ef0907d4936fa513346a72) Thanks [@thevuong](https://github.com/thevuong)! - feat(tsconfig): enforce module detection in TypeScript configuration

- [`dea6bbc`](https://github.com/codefastlabs/codefast/commit/dea6bbcebaaecc09808c42b3f93e0fbf2296eb5b) Thanks [@thevuong](https://github.com/thevuong)! - refactor(di, theme): streamline imports and remove unused files

## 0.3.13-canary.3

## 0.3.13-canary.2

### Patch Changes

- [`a042ee5`](https://github.com/codefastlabs/codefast/commit/a042ee5a6a10973492665b90d750a8b86817bf7d) Thanks [@thevuong](https://github.com/thevuong)! - feat: standardize TypeScript build configurations across packages

## 0.3.13-canary.1

### Patch Changes

- [`02b16bc`](https://github.com/codefastlabs/codefast/commit/02b16bcb5e13712294a2fe285461bd8c9faa3c51) Thanks [@thevuong](https://github.com/thevuong)! - refactor(config): update tsconfig and tsdown for consistency

- [`fd3ee2e`](https://github.com/codefastlabs/codefast/commit/fd3ee2ee35dc780e8e925759e6520e51f0cb6320) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): enhance export generation and stale export pruning

## 0.3.13-canary.0

## 0.3.12

### Patch Changes

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`b393c9b`](https://github.com/codefastlabs/codefast/commit/b393c9b780c6776c04cc26d6058c574929bbc6b5) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): update imports to use scoped `@codefast/tailwind-variants`

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`e1b045f`](https://github.com/codefastlabs/codefast/commit/e1b045f16621807e61648cd77cc2486e10021ce5) Thanks [@thevuong](https://github.com/thevuong)! - feat(scripts): add bucket label summarization for grouping

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`165e92a`](https://github.com/codefastlabs/codefast/commit/165e92a92f6198493e17d29fc225216622c6c5ab) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): improve test coverage and simplify utilities

- [`b3dfccb`](https://github.com/codefastlabs/codefast/commit/b3dfccbccff8961ca75a4671ae39e7616a7fa59c) Thanks [@thevuong](https://github.com/thevuong)! - refactor: switch package build scripts from tsdown to TypeScript build configs, align UI CSS exports to source CSS paths, and remove obsolete migration tooling

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`8670d9e`](https://github.com/codefastlabs/codefast/commit/8670d9e2dc593fc569471dd96e2df185fa0a68b5) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): enhance comments and logging in `arrange` module

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`5165100`](https://github.com/codefastlabs/codefast/commit/5165100bdf6af2b13c30cc3f257f05dd7b3c859b) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): remove outdated unit tests for `arrange`

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`881b85f`](https://github.com/codefastlabs/codefast/commit/881b85fc2759c49137e7dcb049fb1a88a9ad67f0) Thanks [@thevuong](https://github.com/thevuong)! - refactor(ui): reduce visual noise in Tailwind classes

- [`cb53569`](https://github.com/codefastlabs/codefast/commit/cb5356985d4f349dd12a32f9de85cc7d13e8cc74) Thanks [@thevuong](https://github.com/thevuong)! - refactor: migrate package dependencies to catalog references

- [`5f01705`](https://github.com/codefastlabs/codefast/commit/5f01705816cbac5ef012e46a0e11a642e76a36d0) Thanks [@thevuong](https://github.com/thevuong)! - refactor: migrate ui to Node subpath imports

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`b7feafb`](https://github.com/codefastlabs/codefast/commit/b7feafb02188ea6fcc34a75440d190dd5809b744) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): standardize variable names in `arrange` module for clarity

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`2f14ad3`](https://github.com/codefastlabs/codefast/commit/2f14ad317df1f13b48db69e0927abebb63dafc3e) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): implement `arrange` module for token analysis and formatting

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`2c4b3de`](https://github.com/codefastlabs/codefast/commit/2c4b3def4b249a02646d0a4ca68670955ec033e9) Thanks [@thevuong](https://github.com/thevuong)! - feat(docs): update CLI README with expanded usage details

- [`f82e0fb`](https://github.com/codefastlabs/codefast/commit/f82e0fb9cd98f4d6d06b915ffe45ce2e642eb97d) Thanks [@thevuong](https://github.com/thevuong)! - feat: enhance theme management and SSR support

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`6b32eb5`](https://github.com/codefastlabs/codefast/commit/6b32eb56d81b411c1a3736208a6f3b93c0f9aeba) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): localize `arrange` module and enhance error handling

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`f964767`](https://github.com/codefastlabs/codefast/commit/f96476757b4cf40100e0ee92f777219fd69f406b) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): replace `ArrangeFs` and `ArrangeLogger` with `CliFs` and `CliLogger`

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`9c3a840`](https://github.com/codefastlabs/codefast/commit/9c3a840f024ecd401b9052e104933fd2189ff51a) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): refine `arrange` token handling and enhance compatibility

- [`82b37c0`](https://github.com/codefastlabs/codefast/commit/82b37c02ad0086114082cc02be54a60d0c4478a6) Thanks [@thevuong](https://github.com/thevuong)! - refactor: rename typecheck scripts to check-types for consistency

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`a721bb6`](https://github.com/codefastlabs/codefast/commit/a721bb6e938308194bf810c9e1143d389dc17c61) Thanks [@thevuong](https://github.com/thevuong)! - test(cli): improve test coverage and add repo root tests

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`e11a468`](https://github.com/codefastlabs/codefast/commit/e11a4689cc3821624c93cbd151fc86616fb59578) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): restructure `arrange` imports and improve dependency management

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`bb616f0`](https://github.com/codefastlabs/codefast/commit/bb616f0fddab38e1fc87c296dac5506a7e0386c3) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): reorganize `arrange` and `mirror` modules, extract utilities

- [`3f647bc`](https://github.com/codefastlabs/codefast/commit/3f647bce65e4c12d3349f06a5a3a80acf13b03de) Thanks [@thevuong](https://github.com/thevuong)! - refactor: align remaining alias references to subpath imports

- [`b84dd5b`](https://github.com/codefastlabs/codefast/commit/b84dd5b614180d6b59e04d17671003b02ef3aa67) Thanks [@thevuong](https://github.com/thevuong)! - refactor: migrate theme to Node subpath imports

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`56b6f43`](https://github.com/codefastlabs/codefast/commit/56b6f43ff42be0e80d81392f5104ce6fc3e2d022) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): enhance workspace package discovery in `mirror sync`

- [`59b0ce9`](https://github.com/codefastlabs/codefast/commit/59b0ce932cec3c07356acaf4c7cb52b3f538096b) Thanks [@thevuong](https://github.com/thevuong)! - chore: enhance theme handling and update scripts

## 0.3.12-canary.1

### Patch Changes

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`b393c9b`](https://github.com/codefastlabs/codefast/commit/b393c9b780c6776c04cc26d6058c574929bbc6b5) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): update imports to use scoped `@codefast/tailwind-variants`

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`e1b045f`](https://github.com/codefastlabs/codefast/commit/e1b045f16621807e61648cd77cc2486e10021ce5) Thanks [@thevuong](https://github.com/thevuong)! - feat(scripts): add bucket label summarization for grouping

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`165e92a`](https://github.com/codefastlabs/codefast/commit/165e92a92f6198493e17d29fc225216622c6c5ab) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): improve test coverage and simplify utilities

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`8670d9e`](https://github.com/codefastlabs/codefast/commit/8670d9e2dc593fc569471dd96e2df185fa0a68b5) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): enhance comments and logging in `arrange` module

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`5165100`](https://github.com/codefastlabs/codefast/commit/5165100bdf6af2b13c30cc3f257f05dd7b3c859b) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): remove outdated unit tests for `arrange`

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`881b85f`](https://github.com/codefastlabs/codefast/commit/881b85fc2759c49137e7dcb049fb1a88a9ad67f0) Thanks [@thevuong](https://github.com/thevuong)! - refactor(ui): reduce visual noise in Tailwind classes

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`b7feafb`](https://github.com/codefastlabs/codefast/commit/b7feafb02188ea6fcc34a75440d190dd5809b744) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): standardize variable names in `arrange` module for clarity

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`2f14ad3`](https://github.com/codefastlabs/codefast/commit/2f14ad317df1f13b48db69e0927abebb63dafc3e) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): implement `arrange` module for token analysis and formatting

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`2c4b3de`](https://github.com/codefastlabs/codefast/commit/2c4b3def4b249a02646d0a4ca68670955ec033e9) Thanks [@thevuong](https://github.com/thevuong)! - feat(docs): update CLI README with expanded usage details

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`6b32eb5`](https://github.com/codefastlabs/codefast/commit/6b32eb56d81b411c1a3736208a6f3b93c0f9aeba) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): localize `arrange` module and enhance error handling

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`f964767`](https://github.com/codefastlabs/codefast/commit/f96476757b4cf40100e0ee92f777219fd69f406b) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): replace `ArrangeFs` and `ArrangeLogger` with `CliFs` and `CliLogger`

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`9c3a840`](https://github.com/codefastlabs/codefast/commit/9c3a840f024ecd401b9052e104933fd2189ff51a) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): refine `arrange` token handling and enhance compatibility

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`a721bb6`](https://github.com/codefastlabs/codefast/commit/a721bb6e938308194bf810c9e1143d389dc17c61) Thanks [@thevuong](https://github.com/thevuong)! - test(cli): improve test coverage and add repo root tests

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`e11a468`](https://github.com/codefastlabs/codefast/commit/e11a4689cc3821624c93cbd151fc86616fb59578) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): restructure `arrange` imports and improve dependency management

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`bb616f0`](https://github.com/codefastlabs/codefast/commit/bb616f0fddab38e1fc87c296dac5506a7e0386c3) Thanks [@thevuong](https://github.com/thevuong)! - refactor(cli): reorganize `arrange` and `mirror` modules, extract utilities

- [#387](https://github.com/codefastlabs/codefast/pull/387) [`56b6f43`](https://github.com/codefastlabs/codefast/commit/56b6f43ff42be0e80d81392f5104ce6fc3e2d022) Thanks [@thevuong](https://github.com/thevuong)! - feat(cli): enhance workspace package discovery in `mirror sync`

## 0.3.12-canary.0

### Patch Changes

- [`b3dfccb`](https://github.com/codefastlabs/codefast/commit/b3dfccbccff8961ca75a4671ae39e7616a7fa59c) Thanks [@thevuong](https://github.com/thevuong)! - refactor: switch package build scripts from tsdown to TypeScript build configs, align UI CSS exports to source CSS paths, and remove obsolete migration tooling

- [`cb53569`](https://github.com/codefastlabs/codefast/commit/cb5356985d4f349dd12a32f9de85cc7d13e8cc74) Thanks [@thevuong](https://github.com/thevuong)! - refactor: migrate package dependencies to catalog references

- [`5f01705`](https://github.com/codefastlabs/codefast/commit/5f01705816cbac5ef012e46a0e11a642e76a36d0) Thanks [@thevuong](https://github.com/thevuong)! - refactor: migrate ui to Node subpath imports

- [`f82e0fb`](https://github.com/codefastlabs/codefast/commit/f82e0fb9cd98f4d6d06b915ffe45ce2e642eb97d) Thanks [@thevuong](https://github.com/thevuong)! - feat: enhance theme management and SSR support

- [`82b37c0`](https://github.com/codefastlabs/codefast/commit/82b37c02ad0086114082cc02be54a60d0c4478a6) Thanks [@thevuong](https://github.com/thevuong)! - refactor: rename typecheck scripts to check-types for consistency

- [`3f647bc`](https://github.com/codefastlabs/codefast/commit/3f647bce65e4c12d3349f06a5a3a80acf13b03de) Thanks [@thevuong](https://github.com/thevuong)! - refactor: align remaining alias references to subpath imports

- [`b84dd5b`](https://github.com/codefastlabs/codefast/commit/b84dd5b614180d6b59e04d17671003b02ef3aa67) Thanks [@thevuong](https://github.com/thevuong)! - refactor: migrate theme to Node subpath imports

- [`59b0ce9`](https://github.com/codefastlabs/codefast/commit/59b0ce932cec3c07356acaf4c7cb52b3f538096b) Thanks [@thevuong](https://github.com/thevuong)! - chore: enhance theme handling and update scripts

## 0.3.11

### Patch Changes

- [`dd5130a`](https://github.com/codefastlabs/codefast/commit/dd5130adb5649dca6773614ffda262cdde732d8f) Thanks [@thevuong](https://github.com/thevuong)! - chore(deps): downgrade @rslib/core to 0.19.1 in package.json and pnpm-lock.yaml

- [`135c6be`](https://github.com/codefastlabs/codefast/commit/135c6bed9d1bc1e96bad3173adab1bf32d74322f) Thanks [@thevuong](https://github.com/thevuong)! - chore: update linting and formatting scripts in package.json

- [`610cf7a`](https://github.com/codefastlabs/codefast/commit/610cf7a7f9b6e5b37be21e7675ea363ef1020639) Thanks [@thevuong](https://github.com/thevuong)! - fix(hooks): handle missing `navigator.clipboard.writeText` gracefully

- [`42758ab`](https://github.com/codefastlabs/codefast/commit/42758ab9d8f548ea9f4a806a7dbb7ed295fe2390) Thanks [@thevuong](https://github.com/thevuong)! - chore: update package configurations and TypeScript settings

- [`d2abc63`](https://github.com/codefastlabs/codefast/commit/d2abc636245526ec402811d8585d93684865dde6) Thanks [@thevuong](https://github.com/thevuong)! - chore(deps): update package versions and configurations

- [`3e90474`](https://github.com/codefastlabs/codefast/commit/3e90474fbbb9f8ac626c5949bfdbac2eaf1cb3e8) Thanks [@thevuong](https://github.com/thevuong)! - chore: update project configuration and dependencies

- [`92d1ed7`](https://github.com/codefastlabs/codefast/commit/92d1ed7650b19f91824cfb38ec238857a3d95876) Thanks [@thevuong](https://github.com/thevuong)! - build: replace rslib with tsdown in library packages

- [`5c09d4c`](https://github.com/codefastlabs/codefast/commit/5c09d4ce2df564dc7ac6727b00cfa668164a1af4) Thanks [@thevuong](https://github.com/thevuong)! - refactor(config): rename `check-types` to `typecheck` and update usage

## 0.3.11-canary.2

### Patch Changes

- [`92d1ed7`](https://github.com/codefastlabs/codefast/commit/92d1ed7650b19f91824cfb38ec238857a3d95876) Thanks [@thevuong](https://github.com/thevuong)! - build: replace rslib with tsdown in library packages

## 0.3.11-canary.1

### Patch Changes

- [`dd5130a`](https://github.com/codefastlabs/codefast/commit/dd5130adb5649dca6773614ffda262cdde732d8f) Thanks [@thevuong](https://github.com/thevuong)! - chore(deps): downgrade @rslib/core to 0.19.1 in package.json and pnpm-lock.yaml

- [`42758ab`](https://github.com/codefastlabs/codefast/commit/42758ab9d8f548ea9f4a806a7dbb7ed295fe2390) Thanks [@thevuong](https://github.com/thevuong)! - chore: update package configurations and TypeScript settings

- [`d2abc63`](https://github.com/codefastlabs/codefast/commit/d2abc636245526ec402811d8585d93684865dde6) Thanks [@thevuong](https://github.com/thevuong)! - chore(deps): update package versions and configurations

## 0.3.11-canary.0

### Patch Changes

- [`135c6be`](https://github.com/codefastlabs/codefast/commit/135c6bed9d1bc1e96bad3173adab1bf32d74322f) Thanks [@thevuong](https://github.com/thevuong)! - chore: update linting and formatting scripts in package.json

- [`610cf7a`](https://github.com/codefastlabs/codefast/commit/610cf7a7f9b6e5b37be21e7675ea363ef1020639) Thanks [@thevuong](https://github.com/thevuong)! - fix(hooks): handle missing `navigator.clipboard.writeText` gracefully

- [`3e90474`](https://github.com/codefastlabs/codefast/commit/3e90474fbbb9f8ac626c5949bfdbac2eaf1cb3e8) Thanks [@thevuong](https://github.com/thevuong)! - chore: update project configuration and dependencies

- [`5c09d4c`](https://github.com/codefastlabs/codefast/commit/5c09d4ce2df564dc7ac6727b00cfa668164a1af4) Thanks [@thevuong](https://github.com/thevuong)! - refactor(config): rename `check-types` to `typecheck` and update usage

## 0.3.10

### Patch Changes

- [`6737b93`](https://github.com/codefastlabs/codefast/commit/6737b932ed045e2ab1b6da54e3d4c857f77eb436) Thanks [@thevuong](https://github.com/thevuong)! - chore(release): bump package versions

- [`b8aef8a`](https://github.com/codefastlabs/codefast/commit/b8aef8a14a885f146de99be5496fc179c6fb49b3) Thanks [@thevuong](https://github.com/thevuong)! - chore: remove deployment workflows and related scripts
