From 6c6ed25c801c45b082c3ff7d9138f98b47061ba7 Mon Sep 17 00:00:00 2001
From: yyyyaaa
Date: Mon, 3 Aug 2026 15:56:55 +0700
Subject: [PATCH 1/4] Teach agents to compose apps with App Kit
---
.agents/skills/constructive-blocks/SKILL.md | 125 +-
.../references/app-actions-workflows.md | 37 +
.../references/app-composition.md | 42 +
.../references/app-recipes.md | 29 +
.../references/app-resource-contract.md | 39 +
.../references/app-verification.md | 38 +
.../references/app-view-patterns.md | 34 +
.../references/brief-to-roots.v1.json | 84 +
.../references/event-studio-blueprint.json | 428 +++++
.../references/event-studio.md | 40 +
.../install-plans.v1/console-kit-core.json | 2 +-
.../install-plans.v1/console-kit-nextjs.json | 2 +-
.../install-plans.v1/console-module-auth.json | 2 +-
.../console-module-billing.json | 2 +-
.../install-plans.v1/console-module-data.json | 2 +-
.../console-module-notifications.json | 2 +-
.../console-module-organizations.json | 2 +-
.../console-module-storage.json | 2 +-
.../console-module-users.json | 2 +-
.../install-plans.v1/feature-pack-data.json | 2 +-
.../preset-auth-hardened.json | 2 +-
.../install-plans.v1/preset-b2b-storage.json | 2 +-
.../install-plans.v1/preset-full.json | 2 +-
.../references/install-roots.v1.json | 753 +++++++--
.../references/package-resolutions.v1.json | 106 +-
.../references/registry-catalog.v1.json | 2 +-
.../references/registry-content.v1.json | 1462 ++++++++++++++++-
.../references/runtime-contract.md | 2 +-
.../scripts/check-blocks-contract.mjs | 665 +++++++-
.../scripts/check-blocks-contract.test.mjs | 475 +++++-
.../scripts/sync-blocks-contract.mjs | 480 ++++++
.../scripts/sync-package-resolutions.mjs | 34 +-
.agents/skills/constructive-features/SKILL.md | 39 +-
.agents/skills/constructive-frontend/SKILL.md | 78 +-
.../references/crud-stack.md | 25 +-
.../constructive-troubleshooting/SKILL.md | 29 +-
AGENTS.md | 4 +-
CLAUDE.md | 4 +-
README.md | 8 +-
features.md | 31 +-
40 files changed, 4757 insertions(+), 362 deletions(-)
create mode 100644 .agents/skills/constructive-blocks/references/app-actions-workflows.md
create mode 100644 .agents/skills/constructive-blocks/references/app-composition.md
create mode 100644 .agents/skills/constructive-blocks/references/app-recipes.md
create mode 100644 .agents/skills/constructive-blocks/references/app-resource-contract.md
create mode 100644 .agents/skills/constructive-blocks/references/app-verification.md
create mode 100644 .agents/skills/constructive-blocks/references/app-view-patterns.md
create mode 100644 .agents/skills/constructive-blocks/references/brief-to-roots.v1.json
create mode 100644 .agents/skills/constructive-blocks/references/event-studio-blueprint.json
create mode 100644 .agents/skills/constructive-blocks/references/event-studio.md
create mode 100644 .agents/skills/constructive-blocks/scripts/sync-blocks-contract.mjs
diff --git a/.agents/skills/constructive-blocks/SKILL.md b/.agents/skills/constructive-blocks/SKILL.md
index c3d8e32..9a882b9 100644
--- a/.agents/skills/constructive-blocks/SKILL.md
+++ b/.agents/skills/constructive-blocks/SKILL.md
@@ -1,6 +1,6 @@
---
name: constructive-blocks
-description: Select, install, compose, integrate, and verify the complete Constructive Blocks registry, its standalone feature packs, and Console Kit. Use when adding Constructive UI primitives, app shell or app bar, billing blocks, standalone feature-pack views, Console modules, backend-aligned presets, a custom tenant console, or the full Next.js Console Kit; when wiring explicit tenant endpoints, sessions, _meta capability evidence, or modular Zustand state; and when diagnosing registry, release, capability, or RLS boundaries.
+description: Select, install, compose, integrate, and verify the Constructive Blocks registry, App Kit, standalone platform feature packs, and Console Kit. Use when an agent builds an arbitrary Constructive-native internal app from typed resources, queries, actions, records, dashboards, boards, calendars, or workflows; when adding Constructive UI primitives, app shell, billing blocks, feature-pack views, Console modules, presets, or Console Kit; and when wiring tenant scope, final-schema evidence, release contracts, or RLS boundaries.
---
# Constructive Blocks
@@ -10,6 +10,13 @@ modules, registry roots install frontend source, Console capability discovery
proves a public GraphQL shape, and authenticated requests establish effective
PostgreSQL/RLS authority. Keep those as separate facts.
+Choose between two orthogonal lanes. Use App Kit to compose an application
+around domain resources and user tasks. Add feature packs or Console Kit only
+when the product also needs their specific platform-capability surfaces.
+Treat the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+as authority for exact APIs and exports; this skill owns selection and
+verification procedure.
+
## Read the pinned contract first
[`references/install-roots.v1.json`](references/install-roots.v1.json) is the
@@ -26,16 +33,14 @@ concerns an ordinary registry item:
```bash
node /absolute/path/to/check-blocks-contract.mjs --list-registry
node /absolute/path/to/check-blocks-contract.mjs --list-registry --type registry:block
+node /absolute/path/to/check-blocks-contract.mjs --list-registry --family app-kit
+node /absolute/path/to/check-blocks-contract.mjs --list-registry --capability temporal
node /absolute/path/to/check-blocks-contract.mjs --registry-item app-shell
```
-The 102 entries cover the complete registry: Constructive theme and UI
-primitives, app bar, app shell, billing blocks, standalone feature packs,
-Console modules, presets, and the Next.js Console Kit. The six non-Data
-standalone packs are provider-neutral; Data is adapter-driven and performs
-schema discovery through Sheets. Select by `name`, `type`,
-`categories`, and `docs`; inspect one item for its `dependencies`,
-`devDependencies`, `registryDependencies`, and `files`.
+Use the returned `name`, `type`, `categories`, `docs`, and versioned metadata to
+select candidates. Inspect one item before installation to verify its
+dependencies, file targets, release status, and limitations.
Always use the validated queries for Data. The byte-pinned source catalog and
plan retain incorrect generic Data documentation as drift evidence; query
@@ -89,17 +94,32 @@ blocked by the nested-store limitation.
[`references/package-resolutions.v1.json`](references/package-resolutions.v1.json),
and [`references/install-plans.v1/`](references/install-plans.v1/) remain the
portable source artifacts behind these deterministic validated queries. The
-content snapshot pins every file body reachable from the 19 install plans, so
-installed-source evidence cannot be satisfied by a fabricated generated item.
+content snapshot pins every file body reachable from the 19 Console plans and
+all seven App Kit roots, so installed-source evidence cannot be satisfied by a
+fabricated generated item.
The package snapshot pins the exact npm version, SRI, and canonical tarball URL
-for all ten external dependencies; first-party package bytes remain pinned to
-the local Blocks artifacts.
+for every external dependency in those closures; first-party package bytes
+remain pinned to the local Blocks artifacts.
Read
[`references/runtime-contract.md`](references/runtime-contract.md) when wiring
standalone Data, Console modules, tenant descriptors, sessions, routing,
capability evidence, or the host-owned Zustand store.
+Read only the App Kit references required by the brief:
+
+| Reference | Load when |
+| --- | --- |
+| [`references/app-composition.md`](references/app-composition.md) | Routing a domain application from intent and data shape |
+| [`references/app-resource-contract.md`](references/app-resource-contract.md) | Defining scope, resources, queries, relations, and final-schema validation |
+| [`references/app-view-patterns.md`](references/app-view-patterns.md) | Selecting controlled and connected data, board, dashboard, or calendar views |
+| [`references/app-actions-workflows.md`](references/app-actions-workflows.md) | Defining semantic actions, invalidation, optimistic behavior, and steps |
+| [`references/app-verification.md`](references/app-verification.md) | Verifying schema, cache isolation, authority, interaction, and installs |
+| [`references/event-studio.md`](references/event-studio.md) | Building the complete Event Studio starter |
+| [`references/event-studio-blueprint.json`](references/event-studio-blueprint.json) | Applying Event Studio's public org-scoped blueprint definition |
+| [`references/app-recipes.md`](references/app-recipes.md) | Adapting compact cross-domain composition recipes |
+| [`references/brief-to-roots.v1.json`](references/brief-to-roots.v1.json) | Auditing deterministic brief-to-root selection fixtures |
+
Validate the portable contract from any working directory:
```bash
@@ -128,61 +148,56 @@ The live check deliberately uses the inspector's `--no-build` mode only after
the aggregate registry, canonical inputs, catalog, and plan bytes match their
SHA-256 attestations. It never rebuilds or edits Blocks.
-When advancing the pinned Blocks commit, regenerate the planned content
-snapshot from a clean worktree, update its attestation in
-`install-roots.v1.json`, then run the full checker. The generator runs the
-pinned `build:registry` command before hashing any file bodies:
+When advancing the pinned Blocks commit, first update the source pin and any
+changed checker invariants as a reviewed source change. Then regenerate the
+catalog, all inspector plans, built-content snapshot, package snapshot, and
+their attestation hashes together from a clean exact checkout. The synchronizer
+builds the registry, writes every result into a same-filesystem scratch area,
+validates that staged contract against Blocks, and rolls back if replacement or
+post-write validation fails:
```bash
-node /absolute/path/to/constructive-skills/.agents/skills/constructive-blocks/scripts/sync-registry-content.mjs \
+node /absolute/path/to/constructive-skills/.agents/skills/constructive-blocks/scripts/sync-blocks-contract.mjs \
--blocks-repo /absolute/path/to/blocks
-node /absolute/path/to/constructive-skills/.agents/skills/constructive-blocks/scripts/sync-package-resolutions.mjs
```
-The package sync resolves npm's current `latest` releases. Review every
-version/SRI/URL diff, rerun the install and typecheck matrix, then update the
-snapshot hash in `install-roots.v1.json`; never refresh it as an unreviewed
-formatting step.
+By default it preserves existing exact package resolution records, which keeps
+pin advancement deterministic. Use `--refresh-package-resolutions` only for an
+intentional dependency-refresh review; that flag resolves npm's current
+`latest` releases, so review every version/SRI/URL diff and rerun the install
+and typecheck matrix. `--check` stages and validates the complete result
+without replacing checked-in files.
## Choose the smallest owning block
-For ordinary application UI, choose directly from the complete registry
-catalog. `app-shell` installs the provider-neutral shell and `app-bar`
-transitively; individual billing roots install only their reviewed dependency
-closure; primitives remain independently installable.
-
-For feature behavior, choose one ownership boundary:
-
-| Need | Install root |
-| --- | --- |
-| Host-controlled application view | `feature-pack-{id}` |
-| Shell/runtime without a leaf feature | `console-kit-core` |
-| Custom tenant console | Selected `console-module-{id}` roots |
-| Stable backend-aligned composition | `preset-auth-hardened`, `preset-b2b-storage`, or `preset-full` |
-| Complete seven-pack Next.js console | `console-kit-nextjs` |
-
-The seven pack IDs are `data`, `auth`, `users`, `organizations`, `storage`,
-`billing`, and `notifications`. A standalone pack never installs Console Kit
-and never imposes the Console Kit Zustand store. A matching Console module
-installs its standalone view and Console core transitively, then contributes
-Constructive discovery, routing, an adapter, and any module-owned state slice.
-
-Map official backend presets exactly:
-
-- `blank` -> no frontend preset root; start with `console-kit-core` and add
- only explicitly selected Console modules.
-- `auth:hardened` -> `preset-auth-hardened` -> Data, Auth, Users.
-- `b2b:storage` -> `preset-b2b-storage` -> Data, Auth, Users, Organizations,
- Storage.
-- `full` -> `preset-full` -> all seven packs.
-
-This mapping selects installed code. It does not prove that a tenant exposes
-the necessary endpoints, roots, metadata, privileges, or RLS-visible rows.
+1. **Choose a lane.** Route domain resources and user tasks through App Kit.
+ Route tenant-platform administration through feature packs or Console Kit.
+ Treat an app that needs both as two explicit selections.
+2. **Discover candidates.** Query `--list-registry --family app-kit` for the
+ application lane or use the catalog/root queries for the platform lane.
+ Match returned metadata and docs to the brief instead of inferring names.
+ Exclude `kind: starter` from ordinary composition; install a starter only
+ when the user explicitly requests that starter or its complete reference
+ application. A deterministic fixture may select one only when its
+ `starterRequested` marker records that explicit opt-in.
+3. **Inspect closure.** Query each candidate item or Console plan and review
+ transitive registry dependencies, files, runtime status, limitations, and
+ installability before writing an install command.
+4. **Check deterministic routing.** Compare arbitrary-app selection with
+ `brief-to-roots.v1.json`. Query the selected preset plan when a backend
+ preset must be mirrored; do not maintain the mapping in application code.
+5. **Keep authority separate.** An install choice does not prove endpoint
+ availability, executable roots, grants, or RLS-visible rows. Verify those
+ after integration.
+
+Select Sheets only for spreadsheet-style inline editing and generic table
+exploration. Do not substitute Console Kit for a domain application shell or
+turn every action flow into a review queue.
## Respect the branch-only release gate
The pinned source is
-`feat/feature-packs-console-kit@4f2a789fde9a90c0c6ed5977896493bb4818fa77`.
+`feat/app-kit@706ae32b8b03cd6effaa9d0d5f385d93529635df`.
The checkout may be that named branch or detached at the exact commit. Its
publication status is `branch-only`, and
`release.publicRegistryReady` is `false`. Do not run a public install for these
diff --git a/.agents/skills/constructive-blocks/references/app-actions-workflows.md b/.agents/skills/constructive-blocks/references/app-actions-workflows.md
new file mode 100644
index 0000000..33a5412
--- /dev/null
+++ b/.agents/skills/constructive-blocks/references/app-actions-workflows.md
@@ -0,0 +1,37 @@
+# Wire App Kit actions and workflows
+
+Read this when a brief includes mutations, confirmations, bulk execution, or a
+multi-step interaction. Use the
+[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+for current action definitions, runtime hooks, surfaces, and invalidation APIs.
+
+## Define actions from user intent
+
+1. Name the semantic intent and identify its typed input, output, validation,
+ confirmation, authority expectation, and affected views.
+2. Inject an abortable executor through the host transport. Keep transport
+ details and credentials outside reusable definitions.
+3. Declare targeted invalidation for affected detail, collection, relation,
+ board, dashboard, and calendar queries. Avoid whole-cache invalidation.
+4. Add optimistic behavior only when rollback is deterministic inside the
+ active cache partition.
+5. Choose a documented controlled surface when the host owns execution or a
+ connected surface when App Kit should own validation, progress,
+ cancellation, rollback, and invalidation.
+
+## Verify failure behavior
+
+- Suppress or replace duplicate submissions according to the documented
+ concurrency policy, and pass cancellation through to the transport.
+- Show field validation near its input and preserve safe partial GraphQL and
+ authorization errors at the action surface.
+- Restore focus after dialogs and confirmations. Confirm destructive or
+ externally visible effects.
+- Roll back optimistic state on denial, failure, or abort, then prove another
+ scope never observes the optimistic value.
+- Treat visibility and disabled rules as presentation hints; RLS denials remain
+ authoritative and visible.
+
+Use the controlled stepper only for guided UI. Persist durable workflow state
+as domain records and delegate background execution to the owning platform
+capability; App Kit is not a job or approval engine.
diff --git a/.agents/skills/constructive-blocks/references/app-composition.md b/.agents/skills/constructive-blocks/references/app-composition.md
new file mode 100644
index 0000000..7388ec4
--- /dev/null
+++ b/.agents/skills/constructive-blocks/references/app-composition.md
@@ -0,0 +1,42 @@
+# Compose an App Kit application
+
+Read this when a brief describes a domain application rather than a platform
+console. Use the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+for current APIs, exports, and component contracts.
+
+## Route the brief
+
+1. Extract the user's jobs, record shapes, relations, aggregate questions,
+ time ranges, semantic actions, and preferred navigation. Do not route from a
+ department label.
+2. Query the validated catalog with `--list-registry --family app-kit`. Match
+ the returned `dataShapes`, `intents`, and `capabilities` to the brief, then
+ inspect each candidate's dependency closure. Add only roots supported by
+ this evidence. Exclude `kind: starter` unless the user explicitly asks for
+ that starter or its complete reference application; starters are examples,
+ not default capability bundles. Set `starterRequested: true` only in a
+ deterministic fixture that records that explicit request.
+3. Compare the choice with `brief-to-roots.v1.json`. Treat the fixture as a
+ regression oracle for selection behavior, not a substitute for the current
+ catalog.
+4. Plan optional platform capabilities separately. Add Sheets only for genuine
+ spreadsheet interaction and Console surfaces only for tenant-platform
+ administration.
+5. Decide how the host owns routes, URL state, and record opening. A route,
+ page, dialog, or Stack card may be appropriate; do not impose Stack.
+
+## Establish ownership before coding
+
+- Keep remote state in App Kit's documented TanStack Query boundary and keep
+ cache scope secret-free.
+- Keep shareable view state controlled or URL-addressable, and keep transient
+ interaction state local.
+- Inject the Constructive transport from the host. Do not add runtime schema
+ discovery, a connector runtime, or another global store.
+- Treat grants and RLS as authority. Visibility and disabled-state rules only
+ improve presentation.
+- Use action invalidation, manual refresh, and documented focus/reconnect
+ behavior for freshness; do not add V1 subscriptions or interval polling.
+
+Next, read the resource, view, action, or verification reference only when that
+part of the brief is active.
diff --git a/.agents/skills/constructive-blocks/references/app-recipes.md b/.agents/skills/constructive-blocks/references/app-recipes.md
new file mode 100644
index 0000000..5016e58
--- /dev/null
+++ b/.agents/skills/constructive-blocks/references/app-recipes.md
@@ -0,0 +1,29 @@
+# Adapt compact App Kit recipes
+
+Read this when a brief resembles a common app shape but does not need Event
+Studio. Use the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+for current capabilities, then query the validated catalog instead of copying
+root names from these prompts.
+
+| Recipe | Extract from the brief | Challenge before selecting views |
+| --- | --- | --- |
+| Service desk | Customers, tickets, notes, search, assignment, lifecycle movement | Is the lifecycle an explicit move intent, or only a status field? |
+| Intake and approval | Requests, evidence, reviewers, decisions, guided input | Does the user need a queue/board, or only records plus semantic decisions? |
+| Directory and search | People, teams, locations, memberships, high-cardinality search | Are relation candidates searched on the server and linked rather than created inline? |
+| Planning | Programs, milestones, owners, dates, stage movement, publishing | Which board and temporal geometries are independently required? |
+| Reporting and configuration | Approved metrics, series, settings records, explicit execution | Are aggregates backed by dedicated loaders rather than one collection page? |
+
+For each recipe:
+
+1. Rewrite the department-flavored brief as data shapes, user intents, and
+ workflow needs.
+2. Query `--list-registry --family app-kit`, match returned metadata, and
+ inspect dependency closure.
+3. Compare the result with the corresponding deterministic fixture.
+4. Add optional platform-capability packs in a separate pass.
+5. Continue with resource validation, view-specific checks, and the full
+ verification loop.
+
+Do not infer Sheets, Console Kit, a board, dashboard, or review queue from a
+domain label. Compose ordinary React when the validated catalog has no suitable
+view family.
diff --git a/.agents/skills/constructive-blocks/references/app-resource-contract.md b/.agents/skills/constructive-blocks/references/app-resource-contract.md
new file mode 100644
index 0000000..14865db
--- /dev/null
+++ b/.agents/skills/constructive-blocks/references/app-resource-contract.md
@@ -0,0 +1,39 @@
+# Generate App Kit resource contracts
+
+Read this before generating resources, queries, forms, or relations. Use the
+[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+for exact types, signatures, entrypoints, and supported field kinds.
+
+## Build from executable evidence
+
+1. Fetch current `_meta` facts and final GraphQL introspection from the same
+ tenant/schema revision. Refresh a selected generated SDK or ORM first.
+2. Inventory each resource's stable identity, display fields, editable fields,
+ relations, executable reads, executable writes, and semantic actions.
+3. Map final inflected GraphQL names rather than deriving them from PostgreSQL
+ names. Record missing operations explicitly.
+4. Implement definitions with the documented server-safe entrypoint and inject
+ abortable loaders from the host transport.
+5. Run the documented resource validator during generation or build. Fail on
+ mismatched names, identities, relations, enum values, or operation roots.
+6. Typecheck definitions and exercise one allowed and one denied operation
+ against the intended identity before building views.
+
+## Degrade deliberately
+
+- Make ambiguous, missing, or mismatched identities read-only. Never guess an
+ ID, including for composite keys.
+- Keep absent mutations absent. A database field name does not prove a final
+ GraphQL operation exists.
+- Keep JSON, unknown custom scalars, and unsupported shapes read-only until the
+ host supplies a renderer or editor supported by the current Blocks contract.
+- Search relation candidates on the server and link existing records through
+ semantic actions. Avoid nested multi-record creation in V1.
+
+## Audit remote-state scope
+
+Follow the canonical scope and query-key contract exactly. Change endpoint,
+database, authenticated session partition, organization/tenant, and schema or
+security revision independently, then prove cached, cancelled, and optimistic
+data cannot cross any partition. Never place credentials in definitions,
+URLs, cache keys, or stores.
diff --git a/.agents/skills/constructive-blocks/references/app-verification.md b/.agents/skills/constructive-blocks/references/app-verification.md
new file mode 100644
index 0000000..1622f33
--- /dev/null
+++ b/.agents/skills/constructive-blocks/references/app-verification.md
@@ -0,0 +1,38 @@
+# Verify an App Kit application
+
+Read this before declaring an App Kit build complete. Use the
+[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+for the current runtime and accessibility contracts, and use the checker for
+the pinned install contract.
+
+## Run the evidence loop
+
+1. Reconcile `_meta` with final introspection. Cover inflected roots, enums,
+ arrays, JSON, custom scalars, composite and absent identities, relations,
+ absent operations, and custom roots.
+2. Vary every documented cache-scope dimension independently. Cancel slow work
+ during a scope switch and prove cached or optimistic data cannot cross it.
+3. Exercise validation, confirmation, cancellation, duplicate submission,
+ partial GraphQL errors, denials, rollback, and targeted cross-view
+ invalidation.
+4. Exercise intended member behavior plus anonymous, peer, revoked, cross-org,
+ and destructive member denials. Verify admin/owner destruction only where
+ the database policy permits it.
+5. Test keyboard board movement, focus restoration, reduced motion, chart
+ accessibility, calendar locale/timezone behavior, responsive fallbacks, and
+ distinct loading, empty, denied, and error presentation.
+6. Install each selected root independently under default and custom aliases.
+ Reject hidden dependencies on Constructive UI packages, Sheets, Console Kit,
+ or an unselected App Kit family.
+7. Build and hydrate a real Next.js App Router consumer for page-scale
+ starters.
+
+Discover and narrow candidates before installation:
+
+```bash
+node /absolute/path/to/check-blocks-contract.mjs --list-registry --family app-kit
+node /absolute/path/to/check-blocks-contract.mjs --list-registry --capability temporal
+```
+
+Do not equate registry generation, schema compatibility, or a visible row with
+runtime qualification; report each evidence layer separately.
diff --git a/.agents/skills/constructive-blocks/references/app-view-patterns.md b/.agents/skills/constructive-blocks/references/app-view-patterns.md
new file mode 100644
index 0000000..5c1fe52
--- /dev/null
+++ b/.agents/skills/constructive-blocks/references/app-view-patterns.md
@@ -0,0 +1,34 @@
+# Select and compose App Kit views
+
+Read this after resources are validated and the brief needs a collection,
+board, dashboard, or temporal surface. Use the
+[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+for current controlled and connected component APIs.
+
+## Select by geometry
+
+1. Query `--list-registry --family app-kit` and inspect the returned metadata.
+ Use `--capability` only after discovering the catalog vocabulary.
+2. Match collections to scan/compare tasks, boards to explicit semantic stage
+ movement, dashboards to approved analytical questions, and calendars to
+ visible-range temporal work. Compose ordinary React when no family fits.
+3. Choose the controlled layer when the host owns data and callbacks. Choose
+ the connected layer when App Kit definitions should own remote execution.
+4. Keep record opening host-controlled and preserve URL restoration when the
+ brief requires shareable filters, selection, view, or range state.
+
+## Apply view-specific checks
+
+- Keep collection paging and relation search server-driven. Distinguish
+ loading, empty, denied, and error states.
+- Enable board movement only when a semantic move action exists. Provide a
+ keyboard alternative and verify rollback plus focus restoration.
+- Back every KPI or series with an explicit analytical loader. Never calculate
+ authoritative metrics from one paginated page, and expose only catalogued
+ widgets to runtime layout editing.
+- Query calendars by visible range with explicit locale and timezone. Do not
+ imply recurrence, resource scheduling, or drag-rescheduling in V1.
+
+Use semantic theme tokens, select density and surface variants from context,
+and keep primary data/actions usable on mobile. A dense board or layout canvas
+may optimize for desktop only when its mobile fallback remains readable.
diff --git a/.agents/skills/constructive-blocks/references/brief-to-roots.v1.json b/.agents/skills/constructive-blocks/references/brief-to-roots.v1.json
new file mode 100644
index 0000000..a5709c2
--- /dev/null
+++ b/.agents/skills/constructive-blocks/references/brief-to-roots.v1.json
@@ -0,0 +1,84 @@
+{
+ "schemaVersion": 1,
+ "kind": "constructive.app-kit-brief-routes",
+ "cases": [
+ {
+ "id": "event-planning",
+ "brief": "Plan programs and sessions, publish them, assign speakers, review KPIs, move sessions between stages, and browse a month schedule.",
+ "dataShapes": ["record", "collection", "aggregate", "board", "temporal"],
+ "userIntents": ["search", "edit", "analyze", "plan", "schedule", "publish"],
+ "capabilities": ["records", "relations", "dashboard", "board", "calendar", "actions"],
+ "starterRequested": false,
+ "expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-board", "app-kit-dashboard", "app-kit-calendar", "app-kit-workflow"],
+ "forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-event-studio"],
+ "forbiddenAssumptions": ["spreadsheet-default", "console-default", "review-queue-default"]
+ },
+ {
+ "id": "event-studio-opt-in",
+ "brief": "Install the complete Event Studio starter and its paired org-scoped blueprint as the reference application.",
+ "dataShapes": ["record", "collection", "aggregate", "board", "temporal"],
+ "userIntents": ["manage-events", "analyze", "schedule", "publish", "relate-people", "configure-views"],
+ "capabilities": ["event-studio", "dashboard", "collections", "record-detail", "generated-form", "relations", "board", "calendar", "actions", "url-state"],
+ "starterRequested": true,
+ "backendPreset": "b2b",
+ "expectedRoots": ["app-kit-event-studio"],
+ "forbiddenRoots": ["feature-pack-data", "console-kit-nextjs"],
+ "forbiddenAssumptions": ["spreadsheet-default", "console-default", "review-queue-default"]
+ },
+ {
+ "id": "service-desk",
+ "brief": "Search customers and tickets, assign owners, add notes, and move tickets through an explicit support lifecycle.",
+ "dataShapes": ["record", "collection", "board"],
+ "userIntents": ["search", "edit", "triage"],
+ "capabilities": ["records", "relations", "board", "actions"],
+ "starterRequested": false,
+ "expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-board", "app-kit-workflow"],
+ "forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-event-studio"],
+ "forbiddenAssumptions": ["spreadsheet-default", "console-default"]
+ },
+ {
+ "id": "intake-approval",
+ "brief": "Collect typed requests, show their evidence, and let authorized reviewers approve, reject, or request changes.",
+ "dataShapes": ["record", "collection"],
+ "userIntents": ["submit", "review", "decide"],
+ "capabilities": ["records", "forms", "actions", "steps"],
+ "starterRequested": false,
+ "expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-workflow"],
+ "forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-board", "app-kit-event-studio"],
+ "forbiddenAssumptions": ["spreadsheet-default", "console-default", "review-queue-default"]
+ },
+ {
+ "id": "directory-search",
+ "brief": "Search a large people and teams directory, filter by attributes, inspect records, and link existing memberships.",
+ "dataShapes": ["record", "collection"],
+ "userIntents": ["search", "inspect", "link"],
+ "capabilities": ["records", "relations"],
+ "starterRequested": false,
+ "expectedRoots": ["app-kit-core", "app-kit-data"],
+ "forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-dashboard", "app-kit-event-studio"],
+ "forbiddenAssumptions": ["spreadsheet-default", "console-default"]
+ },
+ {
+ "id": "planning",
+ "brief": "Plan milestones and sessions by stage and date, assign owners, and publish the approved schedule.",
+ "dataShapes": ["record", "collection", "board", "temporal"],
+ "userIntents": ["plan", "schedule", "assign", "publish"],
+ "capabilities": ["records", "board", "calendar", "actions"],
+ "starterRequested": false,
+ "expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-board", "app-kit-calendar", "app-kit-workflow"],
+ "forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-dashboard", "app-kit-event-studio"],
+ "forbiddenAssumptions": ["spreadsheet-default", "console-default"]
+ },
+ {
+ "id": "reporting-configuration",
+ "brief": "Show approved KPIs and trend series, edit the settings records that control report behavior, and run an explicit refresh action.",
+ "dataShapes": ["record", "aggregate"],
+ "userIntents": ["analyze", "configure", "execute"],
+ "capabilities": ["records", "dashboard", "actions"],
+ "starterRequested": false,
+ "expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-dashboard", "app-kit-workflow"],
+ "forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-board", "app-kit-event-studio"],
+ "forbiddenAssumptions": ["spreadsheet-default", "console-default", "review-queue-default"]
+ }
+ ]
+}
diff --git a/.agents/skills/constructive-blocks/references/event-studio-blueprint.json b/.agents/skills/constructive-blocks/references/event-studio-blueprint.json
new file mode 100644
index 0000000..3e0ae5b
--- /dev/null
+++ b/.agents/skills/constructive-blocks/references/event-studio-blueprint.json
@@ -0,0 +1,428 @@
+{
+ "tables": [
+ {
+ "table_name": "programs",
+ "description": "Org-scoped event programs that group sessions.",
+ "nodes": [
+ "DataId",
+ "DataTimestamps",
+ {
+ "$type": "DataEntityMembership",
+ "data": {
+ "entity_field_name": "org_id"
+ }
+ }
+ ],
+ "fields": [
+ {
+ "name": "name",
+ "type": { "name": "text" },
+ "is_required": true
+ },
+ {
+ "name": "description",
+ "type": { "name": "text" }
+ },
+ {
+ "name": "status",
+ "type": { "name": "text" },
+ "is_required": true,
+ "default": { "value": "draft" },
+ "index": "btree"
+ },
+ {
+ "name": "starts_on",
+ "type": { "name": "date" }
+ },
+ {
+ "name": "ends_on",
+ "type": { "name": "date" }
+ }
+ ],
+ "grants": [
+ {
+ "roles": ["authenticated"],
+ "privileges": [
+ ["select", "*"],
+ ["insert", "*"],
+ ["update", "*"],
+ ["delete", "*"]
+ ]
+ }
+ ],
+ "use_rls": true,
+ "policies": [
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2
+ },
+ "privileges": ["select", "insert", "update"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_admin": true
+ },
+ "privileges": ["delete"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_owner": true
+ },
+ "privileges": ["delete"]
+ }
+ ]
+ },
+ {
+ "table_name": "sessions",
+ "description": "Scheduled sessions within an event program.",
+ "nodes": [
+ "DataId",
+ "DataTimestamps",
+ {
+ "$type": "DataEntityMembership",
+ "data": {
+ "entity_field_name": "org_id"
+ }
+ }
+ ],
+ "fields": [
+ {
+ "name": "title",
+ "type": { "name": "text" },
+ "is_required": true
+ },
+ {
+ "name": "description",
+ "type": { "name": "text" }
+ },
+ {
+ "name": "status",
+ "type": { "name": "text" },
+ "is_required": true,
+ "default": { "value": "draft" },
+ "index": "btree"
+ },
+ {
+ "name": "starts_at",
+ "type": { "name": "timestamptz" },
+ "index": "btree"
+ },
+ {
+ "name": "ends_at",
+ "type": { "name": "timestamptz" }
+ },
+ {
+ "name": "capacity",
+ "type": { "name": "integer" },
+ "min": 0
+ },
+ {
+ "name": "tags",
+ "type": { "name": "text", "array_dimensions": 1 },
+ "is_required": true,
+ "default": {
+ "value": [],
+ "cast": { "name": "text", "array_dimensions": 1 }
+ },
+ "index": "gin"
+ }
+ ],
+ "grants": [
+ {
+ "roles": ["authenticated"],
+ "privileges": [
+ ["select", "*"],
+ ["insert", "*"],
+ ["update", "*"],
+ ["delete", "*"]
+ ]
+ }
+ ],
+ "use_rls": true,
+ "policies": [
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2
+ },
+ "privileges": ["select", "insert", "update"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_admin": true
+ },
+ "privileges": ["delete"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_owner": true
+ },
+ "privileges": ["delete"]
+ }
+ ]
+ },
+ {
+ "table_name": "people",
+ "description": "Org-scoped speakers, facilitators, and event contacts.",
+ "nodes": [
+ "DataId",
+ "DataTimestamps",
+ {
+ "$type": "DataEntityMembership",
+ "data": {
+ "entity_field_name": "org_id"
+ }
+ }
+ ],
+ "fields": [
+ {
+ "name": "display_name",
+ "type": { "name": "text" },
+ "is_required": true
+ },
+ {
+ "name": "email",
+ "type": { "name": "citext" },
+ "index": "btree"
+ },
+ {
+ "name": "role",
+ "type": { "name": "text" }
+ }
+ ],
+ "grants": [
+ {
+ "roles": ["authenticated"],
+ "privileges": [
+ ["select", "*"],
+ ["insert", "*"],
+ ["update", "*"],
+ ["delete", "*"]
+ ]
+ }
+ ],
+ "use_rls": true,
+ "policies": [
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2
+ },
+ "privileges": ["select", "insert", "update"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_admin": true
+ },
+ "privileges": ["delete"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_owner": true
+ },
+ "privileges": ["delete"]
+ }
+ ]
+ },
+ {
+ "table_name": "venues",
+ "description": "Org-scoped physical or virtual session venues.",
+ "nodes": [
+ "DataId",
+ "DataTimestamps",
+ {
+ "$type": "DataEntityMembership",
+ "data": {
+ "entity_field_name": "org_id"
+ }
+ }
+ ],
+ "fields": [
+ {
+ "name": "name",
+ "type": { "name": "text" },
+ "is_required": true
+ },
+ {
+ "name": "address",
+ "type": { "name": "text" }
+ },
+ {
+ "name": "time_zone",
+ "type": { "name": "text" },
+ "is_required": true,
+ "default": { "value": "UTC" }
+ },
+ {
+ "name": "capacity",
+ "type": { "name": "integer" },
+ "min": 0
+ }
+ ],
+ "grants": [
+ {
+ "roles": ["authenticated"],
+ "privileges": [
+ ["select", "*"],
+ ["insert", "*"],
+ ["update", "*"],
+ ["delete", "*"]
+ ]
+ }
+ ],
+ "use_rls": true,
+ "policies": [
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2
+ },
+ "privileges": ["select", "insert", "update"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_admin": true
+ },
+ "privileges": ["delete"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_owner": true
+ },
+ "privileges": ["delete"]
+ }
+ ]
+ },
+ {
+ "table_name": "session_people",
+ "description": "Explicit relation records between sessions and people.",
+ "nodes": [
+ "DataId",
+ "DataTimestamps",
+ {
+ "$type": "DataEntityMembership",
+ "data": {
+ "entity_field_name": "org_id"
+ }
+ }
+ ],
+ "fields": [
+ {
+ "name": "role",
+ "type": { "name": "text" },
+ "is_required": true,
+ "default": { "value": "speaker" }
+ }
+ ],
+ "grants": [
+ {
+ "roles": ["authenticated"],
+ "privileges": [
+ ["select", "*"],
+ ["insert", "*"],
+ ["update", "*"],
+ ["delete", "*"]
+ ]
+ }
+ ],
+ "use_rls": true,
+ "policies": [
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2
+ },
+ "privileges": ["select", "insert", "update"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_admin": true
+ },
+ "privileges": ["delete"]
+ },
+ {
+ "$type": "AuthzEntityMembership",
+ "data": {
+ "entity_field": "org_id",
+ "membership_type": 2,
+ "is_owner": true
+ },
+ "privileges": ["delete"]
+ }
+ ]
+ }
+ ],
+ "unique_constraints": [
+ {
+ "table_name": "session_people",
+ "columns": ["session_id", "person_id"]
+ }
+ ],
+ "relations": [
+ {
+ "$type": "RelationBelongsTo",
+ "source_table": "sessions",
+ "target_table": "programs",
+ "field_name": "program_id",
+ "delete_action": "RESTRICT",
+ "is_required": false
+ },
+ {
+ "$type": "RelationBelongsTo",
+ "source_table": "sessions",
+ "target_table": "venues",
+ "field_name": "venue_id",
+ "delete_action": "SET NULL",
+ "is_required": false
+ },
+ {
+ "$type": "RelationBelongsTo",
+ "source_table": "session_people",
+ "target_table": "sessions",
+ "field_name": "session_id",
+ "delete_action": "CASCADE",
+ "is_required": true
+ },
+ {
+ "$type": "RelationBelongsTo",
+ "source_table": "session_people",
+ "target_table": "people",
+ "field_name": "person_id",
+ "delete_action": "CASCADE",
+ "is_required": true
+ }
+ ]
+}
diff --git a/.agents/skills/constructive-blocks/references/event-studio.md b/.agents/skills/constructive-blocks/references/event-studio.md
new file mode 100644
index 0000000..0a935d1
--- /dev/null
+++ b/.agents/skills/constructive-blocks/references/event-studio.md
@@ -0,0 +1,40 @@
+# Build the Event Studio starter
+
+Read this only for the complete Event Studio recipe. Use the
+[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+for its current UI exports and integration contract.
+
+## Provision the paired domain
+
+1. Select the supported `b2b` preset through the normal backend
+ provisioning flow. Keep preset selection separate from frontend install.
+2. Apply `event-studio-blueprint.json` through the public blueprint SDK/ORM
+ workflow. Do not translate it into raw SQL or edit backend repositories.
+3. Confirm that the resulting final schema exposes org-scoped `programs`,
+ `sessions`, `people`, `venues`, and explicit `session_people` records.
+4. Verify member read/create/update and denied member delete. Verify delete for
+ org admins and owners, then repeat the denial across organizations.
+
+The fixture uses `org_id` membership, text statuses, `text[]` session tags,
+generated record identities, and a unique session/person link pair. Grants let
+PostgreSQL evaluate delete while RLS reserves it for admins and owners. Keep
+these as database authority rather than client-side policy.
+
+## Compose and connect the starter
+
+1. Select the starter only from the explicit `event-studio-opt-in` brief fixture and
+ inspect its catalog dependency closure.
+2. Implement the host adapter against the generated final GraphQL surface; do
+ not copy illustrative root names.
+3. Back metrics with analytical loaders, collections and relation search with
+ server queries, the board with a semantic move action, and calendar views
+ with explicit range/timezone input.
+4. Wire publish, schedule, status, link, and unlink intents with permission
+ errors and targeted invalidation.
+5. Keep view, filters, selection, and range URL-addressable through the chosen
+ host navigation adapter.
+
+Run the App Kit verification loop, then add Event Studio's denied member
+delete, unique relation, direct URL restoration, production Next.js build, and
+hydration cases. The V1 recipe contains no realtime, recurrence, raw SQL, or
+durable workflow behavior.
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-core.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-core.json
index 6abcffd..2acd0b7 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-core.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-core.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-kit-core","surface":"core","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-core","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]}]},"featurePacks":[],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-kit-core","surface":"core","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-core","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]}]},"featurePacks":[],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-nextjs.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-nextjs.json
index 4453928..950df69 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-nextjs.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-nextjs.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-kit-nextjs","surface":"full-console","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-nextjs","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]},{"name":"preset-full","title":"Full Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","console-module-billing","console-module-notifications","constructive-theme"]},{"name":"console-kit-nextjs","title":"Constructive Console Kit for Next.js","type":"registry:block","directRegistryDependencies":["preset-full","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","tabs","scroll-area","dialog","select","switch","radio-group","progress"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core","feature-pack-data"]},{"name":"@constructive-io/sheets","requiredBy":["feature-pack-data"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","feature-pack-data","input-group","feature-pack-auth","dialog","select","feature-pack-users","feature-pack-organizations","feature-pack-storage","pagination","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet","billing-credits-card","billing-usage-overview"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-nextjs"],"sources":[{"registryItem":"console-kit-nextjs","path":"registry/constructive/blocks/console-kit/constructive/index.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/full-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/full.json","targetKind":"project-root","type":"registry:file","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full.json"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"full","presetSlug":"full","title":"Full","description":"Every first-release Constructive feature pack.","stability":"stable","featurePacks":["data","auth","users","organizations","storage","billing","notifications"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-kit-nextjs","surface":"full-console","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-nextjs","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]},{"name":"preset-full","title":"Full Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","console-module-billing","console-module-notifications","constructive-theme"]},{"name":"console-kit-nextjs","title":"Constructive Console Kit for Next.js","type":"registry:block","directRegistryDependencies":["preset-full","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog","switch","radio-group","progress"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users","feature-pack-organizations","feature-pack-storage","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets","billing-credits-card","billing-usage-overview"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-nextjs"],"sources":[{"registryItem":"console-kit-nextjs","path":"registry/constructive/blocks/console-kit/constructive/index.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/full-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/full.json","targetKind":"project-root","type":"registry:file","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full.json"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"full","presetSlug":"full","title":"Full","description":"Every first-release Constructive feature pack.","stability":"stable","featurePacks":["data","auth","users","organizations","storage","billing","notifications"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-auth.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-auth.json
index 10dba11..a2dda3c 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-auth.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-auth.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-auth","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-auth","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","tabs"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","feature-pack-auth"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-auth","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-auth","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","feature-pack-auth"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-billing.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-billing.json
index dbd36df..c9fa37a 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-billing.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-billing.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-billing","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-billing","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","select","progress","tabs"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","pagination","select","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page"]},{"name":"motion","requiredBy":["motion-config","sheet","billing-credits-card","billing-usage-overview"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-billing","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-billing","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","select","progress","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","pagination","select","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page"]},{"name":"motion","requiredBy":["motion-config","sheet","billing-credits-card","billing-usage-overview"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-data.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-data.json
index ae0ef52..d413956 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-data.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-data.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-data","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-data","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core","feature-pack-data"]},{"name":"@constructive-io/sheets","requiredBy":["feature-pack-data"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","feature-pack-data"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-data","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-data","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-notifications.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-notifications.json
index d107d29..9f7cd73 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-notifications.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-notifications.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-notifications","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-notifications","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-notifications","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-notifications","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-organizations.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-organizations.json
index f2d1509..6f41216 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-organizations.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-organizations.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-organizations","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-organizations","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","dialog","select","switch","tabs"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","select","feature-pack-organizations"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-organizations","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-organizations","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","dialog","select","switch","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","select","feature-pack-organizations"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-storage.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-storage.json
index 4941b2b..4feb5a3 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-storage.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-storage.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-storage","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","scroll-area","dialog","radio-group"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","feature-pack-storage"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-storage","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","scroll-area","dialog","radio-group"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","feature-pack-storage"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-users.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-users.json
index e36984a..ea9e30f 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-users.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-users.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-users","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-users","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","dialog","select","tabs"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","input-group","select","feature-pack-users"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-users","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-users","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","dialog","select","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","input-group","select","feature-pack-users"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-data.json b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-data.json
index 8956d50..88085f5 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-data.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-data.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-data","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-data","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","button","card","constructive-theme"]}],"npmDependencies":[{"name":"@constructive-io/data","requiredBy":["feature-pack-data"]},{"name":"@constructive-io/sheets","requiredBy":["feature-pack-data"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","feature-pack-data"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-data when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-data","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-data","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","checkbox","collapsible","dropdown-menu","input","popover","scroll-area","select","tabs","dialog","tooltip"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["pack-foundation","dropdown-menu","input-group","pagination","select","dialog","toast","sheets","feature-pack-data"]},{"name":"motion","requiredBy":["sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["sheets"]},{"name":"zustand","requiredBy":["sheets"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-data when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-auth-hardened.json b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-auth-hardened.json
index 07da488..5eb2d0e 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-auth-hardened.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-auth-hardened.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-auth-hardened","surface":"preset","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/preset-auth-hardened","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"preset-auth-hardened","title":"Hardened Authentication Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","tabs","scroll-area","dialog","select"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core","feature-pack-data"]},{"name":"@constructive-io/sheets","requiredBy":["feature-pack-data"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","feature-pack-data","input-group","feature-pack-auth","dialog","select","feature-pack-users"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/auth-hardened-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-auth-hardened"],"sources":[{"registryItem":"preset-auth-hardened","path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth-hardened.json","targetKind":"project-root","type":"registry:file","owners":["preset-auth-hardened"],"sources":[{"registryItem":"preset-auth-hardened","path":"registry/constructive/blocks/presets/auth-hardened.json"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"auth-hardened","presetSlug":"auth:hardened","title":"Hardened authentication","description":"Data, authentication, and user-management feature packs.","stability":"stable","featurePacks":["data","auth","users"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-auth-hardened","surface":"preset","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/preset-auth-hardened","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"preset-auth-hardened","title":"Hardened Authentication Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/auth-hardened-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-auth-hardened"],"sources":[{"registryItem":"preset-auth-hardened","path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth-hardened.json","targetKind":"project-root","type":"registry:file","owners":["preset-auth-hardened"],"sources":[{"registryItem":"preset-auth-hardened","path":"registry/constructive/blocks/presets/auth-hardened.json"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"auth-hardened","presetSlug":"auth:hardened","title":"Hardened authentication","description":"Data, authentication, and user-management feature packs.","stability":"stable","featurePacks":["data","auth","users"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-b2b-storage.json b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-b2b-storage.json
index 4e28f6f..fcfb317 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-b2b-storage.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-b2b-storage.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-b2b-storage","surface":"preset","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/preset-b2b-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"preset-b2b-storage","title":"B2B with Storage Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","tabs","scroll-area","dialog","select","switch","radio-group"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core","feature-pack-data"]},{"name":"@constructive-io/sheets","requiredBy":["feature-pack-data"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","feature-pack-data","input-group","feature-pack-auth","dialog","select","feature-pack-users","feature-pack-organizations","feature-pack-storage"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/b2b-storage-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-b2b-storage"],"sources":[{"registryItem":"preset-b2b-storage","path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/b2b-storage.json","targetKind":"project-root","type":"registry:file","owners":["preset-b2b-storage"],"sources":[{"registryItem":"preset-b2b-storage","path":"registry/constructive/blocks/presets/b2b-storage.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"b2b-storage","presetSlug":"b2b:storage","title":"B2B with storage","description":"Data, authentication, users, organizations, and storage feature packs.","stability":"stable","featurePacks":["data","auth","users","organizations","storage"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-b2b-storage","surface":"preset","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/preset-b2b-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"preset-b2b-storage","title":"B2B with Storage Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog","switch","radio-group"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users","feature-pack-organizations","feature-pack-storage"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/b2b-storage-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-b2b-storage"],"sources":[{"registryItem":"preset-b2b-storage","path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/b2b-storage.json","targetKind":"project-root","type":"registry:file","owners":["preset-b2b-storage"],"sources":[{"registryItem":"preset-b2b-storage","path":"registry/constructive/blocks/presets/b2b-storage.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"b2b-storage","presetSlug":"b2b:storage","title":"B2B with storage","description":"Data, authentication, users, organizations, and storage feature packs.","stability":"stable","featurePacks":["data","auth","users","organizations","storage"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-full.json b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-full.json
index dfa85d5..f847184 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-full.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-full.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-full","surface":"preset","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/preset-full","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]},{"name":"preset-full","title":"Full Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","console-module-billing","console-module-notifications","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","tabs","scroll-area","dialog","select","switch","radio-group","progress"]},{"name":"@constructive-io/data","requiredBy":["console-kit-core","feature-pack-data"]},{"name":"@constructive-io/sheets","requiredBy":["feature-pack-data"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","feature-pack-data","input-group","feature-pack-auth","dialog","select","feature-pack-users","feature-pack-organizations","feature-pack-storage","pagination","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet","billing-credits-card","billing-usage-overview"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/full-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/full.json","targetKind":"project-root","type":"registry:file","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full.json"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"full","presetSlug":"full","title":"Full","description":"Every first-release Constructive feature pack.","stability":"stable","featurePacks":["data","auth","users","organizations","storage","billing","notifications"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-full","surface":"preset","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/preset-full","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]},{"name":"preset-full","title":"Full Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","console-module-billing","console-module-notifications","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog","switch","radio-group","progress"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users","feature-pack-organizations","feature-pack-storage","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets","billing-credits-card","billing-usage-overview"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/full-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/full.json","targetKind":"project-root","type":"registry:file","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full.json"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"full","presetSlug":"full","title":"Full","description":"Every first-release Constructive feature pack.","stability":"stable","featurePacks":["data","auth","users","organizations","storage","billing","notifications"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-roots.v1.json b/.agents/skills/constructive-blocks/references/install-roots.v1.json
index 42cd1b3..2f20806 100644
--- a/.agents/skills/constructive-blocks/references/install-roots.v1.json
+++ b/.agents/skills/constructive-blocks/references/install-roots.v1.json
@@ -3,8 +3,8 @@
"kind": "constructive.blocks-install-roots",
"source": {
"repository": "https://github.com/constructive-io/blocks",
- "branch": "feat/feature-packs-console-kit",
- "commit": "4f2a789fde9a90c0c6ed5977896493bb4818fa77",
+ "branch": "feat/app-kit",
+ "commit": "706ae32b8b03cd6effaa9d0d5f385d93529635df",
"inspector": {
"schemaVersion": 1,
"kind": "constructive.console-kit-install-roots",
@@ -22,24 +22,24 @@
"algorithm": "sha256",
"aggregateRegistry": {
"path": "apps/registry/registry.json",
- "sha256": "c936b8230cef7ca78c6ad9557ac0975e839ad361be3a90e4358b846b105558d8"
+ "sha256": "55c93aaa98cfd8f1cdc0acb85e5abb422a0436d3137441105f24b2eb009049c4"
},
"registryCatalog": {
"path": "references/registry-catalog.v1.json",
- "sha256": "84ce9d2b9728b3d62cb6b9e48ec2cd12153ea657490c419e68f849f672be3d1f"
+ "sha256": "95358574a470315a4862ecbf2faea159e2de6a4f7136bfa3de75c5a1578be4b7"
},
"registryContent": {
"path": "references/registry-content.v1.json",
- "sha256": "df0376b1eeeca8d271a91c962b829365e989df35750058b348c4bd779e5e3517"
+ "sha256": "224c5f9da6b6d5f4920a2780f793431708b3257fee744f53dfa93586e2cb017a"
},
"packageResolutions": {
"path": "references/package-resolutions.v1.json",
- "sha256": "4cccce553d5c9dec6f11ca0b2b1ec7ea987e2f7308d46bd0e804f8a725147044"
+ "sha256": "9373792323e42124de66d9c9dab9ec7c9c56e50dc3e45000ee9e9484bc58c014"
},
"canonicalFiles": [
{
"path": "package.json",
- "sha256": "23b937b73c59eb348753fcbc4358253aeea5b11f9969864b7138ae281cdfe1a0"
+ "sha256": "c229ac9ac05af4a752ec22ed5dba912380f66d7bd65057a77f0a5a865a2b72a1"
},
{
"path": "apps/registry/package.json",
@@ -47,19 +47,19 @@
},
{
"path": "apps/registry/scripts/build.ts",
- "sha256": "b8ad62ecf1e0a71503d1bd1da80b067f1b1377c4bddf5085e0c96c6bb7222be3"
+ "sha256": "e56a8694093ae590884cfe78779f868b4032a2da57076ec147a69d8e49ee2494"
},
{
"path": "packages/ui/registry.json",
- "sha256": "095ab3caba8b5155dbce0585c09f36810d11801bcb8773954543946a6a2de104"
+ "sha256": "f15437373c77caa09a92fa5b077f757f0cdd64a27c77e1444412a3f82bef227f"
},
{
"path": "apps/blocks/registry.json",
- "sha256": "169b49db903fe9af3cff736138fca8d5da295438e760d6c4f4853ecc5372b040"
+ "sha256": "cbe89216a09780463262fe10284e3b5d6b7cb3d67e35853005d4bb105b62c79f"
},
{
"path": "scripts/inspect-console-kit.ts",
- "sha256": "227b742500fd81b8908d5c19e052c40898991d1bdf49223399c09c48610bd446"
+ "sha256": "22b32cdb69e3a2162a11930d72d718b1ecd8480c06340d62d0c303e72f8f0be7"
},
{
"path": "apps/blocks/src/feature-packs/catalog.ts",
@@ -95,7 +95,7 @@
},
{
"path": "packages/data/package.json",
- "sha256": "6f807b216dace7cc2fe5cd92fcdb6f9b4d005fb0edace67d51735286a841e796"
+ "sha256": "930a0f1139db5f990d04e3f920f3954a6e16b5ed20ff290512bf59c466368572"
},
{
"path": "packages/data/src/meta-query.ts",
@@ -107,7 +107,7 @@
},
{
"path": "packages/sheets/package.json",
- "sha256": "b2696df554c8339844a46cfed6f19df699c2b1ba12fab6f7962bbfc1b5f964f3"
+ "sha256": "a35cccdb3dab5b0ea6954affe26e6822c09f4b40ca10cee22429874a7840d05b"
},
{
"path": "packages/sheets/src/context/sheets-context.ts",
@@ -115,7 +115,7 @@
},
{
"path": "packages/sheets/src/context/sheets-execute.ts",
- "sha256": "7eccc6b1014c029b7e5f5dc2c41258b7d0aeaf51cb2d51560dfc5e4cf1bfbd5a"
+ "sha256": "3615f980ee18fd27ab3b1941bbec215d91fc8b8125fcd8b4d293ba764e8902ca"
},
{
"path": "packages/sheets/src/auth/auth-execute.ts",
@@ -135,11 +135,11 @@
},
{
"path": "packages/sheets/src/adapter/postgraphile-adapter.ts",
- "sha256": "d1788090e210eb86e28ab75a0c000430dc1b013b9e787fe6b118c553661fd3c6"
+ "sha256": "e0efb76f807240587ec98afa493762ad3ba5ae533212aeee92bd2e41e4acf89c"
},
{
"path": "packages/ui/package.json",
- "sha256": "25bb3f7c9faa713107d90dff57adacad6b3a0b877f92261ceb70cca7ffb09989"
+ "sha256": "708c76d09f324cdea3fd8a294e5bd687e78fb69a7589cd81f9af4668ea10fcf0"
},
{
"path": "packages/ui/src/components/sidebar.tsx",
@@ -155,11 +155,11 @@
},
{
"path": "packages/ui/src/index.ts",
- "sha256": "7fb432a69eee6f08229043cecf3bdf47b51c5dfaa2831de1ffcb28d8fee810c5"
+ "sha256": "d13b47b8f5dccb02099d6eb8c1a89b59d11650474524400491c76869aa1900ae"
},
{
"path": "packages/schema-builder/package.json",
- "sha256": "e02d5d8d7e4e6cf2ef5f6bc7f257919f8e3017c371909e46cba4b83cc410453d"
+ "sha256": "555af70a66c0ccf56f16606af8c71aaa0805a3d98d4c22f03a02d88f5c8504e3"
},
{
"path": "apps/blocks/src/blocks/feature-packs/data/data-feature-pack.tsx",
@@ -290,47 +290,47 @@
{
"item": "console-kit-core",
"path": "references/install-plans.v1/console-kit-core.json",
- "sha256": "5244d84e0e4888225bc7e0d4adf769e2ce1e26b8459e4d0d2ab5d1bf0d138968"
+ "sha256": "1414597f5ddee0c8e2d36fab8449c4d418d623926d96b8bfb14a3ced2c252563"
},
{
"item": "console-kit-nextjs",
"path": "references/install-plans.v1/console-kit-nextjs.json",
- "sha256": "8efe2a3e0614916906d08db100dee4dc562a68785453b2e692e749c149aba17d"
+ "sha256": "dae45c7a952e3d8d72a6bf00b0ba464352c41b3ac4a9dfce3daac21fc868eb2f"
},
{
"item": "console-module-auth",
"path": "references/install-plans.v1/console-module-auth.json",
- "sha256": "26ef98810fe46f7cc20bccb19ac75925aae13e89c3acdbe4e8446bae148d9abe"
+ "sha256": "40c25a2d59cfe9732c6f78253340bbc38261d9142e85e1972d07b6dea49c0c58"
},
{
"item": "console-module-billing",
"path": "references/install-plans.v1/console-module-billing.json",
- "sha256": "d15bf94159034cca954c329f8fd5bd9f5269f5ab5a7d8f6c76d1d78e6ebe92ec"
+ "sha256": "643159e2de3653344a65f5786dc4584c681f9ce236c414f26d2b6be8b395fcb3"
},
{
"item": "console-module-data",
"path": "references/install-plans.v1/console-module-data.json",
- "sha256": "05d4877fa294e24f3cb73ba1ae60067569b842c13fbb446f98f2a385ea18fff5"
+ "sha256": "f76209fb16e5792abb918f506873469a747e75ffc0f2c7c523efae0363bf3048"
},
{
"item": "console-module-notifications",
"path": "references/install-plans.v1/console-module-notifications.json",
- "sha256": "dfc2646ec940e762e8ad1d3e10a3f6d87419ea8e0f78a48c511510cd1ac6a36d"
+ "sha256": "30b4b7bb585e70f34609bd703768386f315c45e9242034557c6f5dccb9414276"
},
{
"item": "console-module-organizations",
"path": "references/install-plans.v1/console-module-organizations.json",
- "sha256": "c48c228cd57d69bc08c2f802a2909ad498f11c91ac567353d2ed8f60120e9ab6"
+ "sha256": "01d0a271b0fc9411572ece022491a250a65c34c35120e0adc4588f1b5f48d824"
},
{
"item": "console-module-storage",
"path": "references/install-plans.v1/console-module-storage.json",
- "sha256": "6eae680af0e48a0cff82c9048bb578e4e912fc508fd793426b18f474e5d0feb2"
+ "sha256": "112494d8b7d1d9b00d55a752408dcff335318e4cfdcfd474f5c3cdd681eb58e6"
},
{
"item": "console-module-users",
"path": "references/install-plans.v1/console-module-users.json",
- "sha256": "2dc40e24a79c1f7d8a1a632ad44606118b36f509ec07c464acd9d1e61583036e"
+ "sha256": "d53d09adca9e341f2c3b20e0b6d2d427359a499c39803939b83ad55e67e7eea2"
},
{
"item": "feature-pack-auth",
@@ -345,7 +345,7 @@
{
"item": "feature-pack-data",
"path": "references/install-plans.v1/feature-pack-data.json",
- "sha256": "60b8cb0d7a69487225a4dd244bb37fcaf73c27968bbe74144b6ea61a16059d5a"
+ "sha256": "b36ce78ff965ac2b63c65ea20043849efb621aa31d41e93dbcdabfd38166ea97"
},
{
"item": "feature-pack-notifications",
@@ -370,17 +370,17 @@
{
"item": "preset-auth-hardened",
"path": "references/install-plans.v1/preset-auth-hardened.json",
- "sha256": "042ac311ea165aac996dcab89e3cf309118f2b3e12601a34d8a04bef29881562"
+ "sha256": "d3e30c6230a45d1ad5b5e90f01f25c3e083a8dab0fc15e28332220c0098fbea2"
},
{
"item": "preset-b2b-storage",
"path": "references/install-plans.v1/preset-b2b-storage.json",
- "sha256": "b0036470ef8ea29bc04ec248c77c808c43409a1dae1063d40607de6b8dd0d7cb"
+ "sha256": "23800feb34604277b4212ce972e63015954383d5f71c6ffebcda450ab11d4a88"
},
{
"item": "preset-full",
"path": "references/install-plans.v1/preset-full.json",
- "sha256": "554904aae57c5444f2eaade918de8f8ee3f93bff1075170c96ee583954d9f921"
+ "sha256": "d289d95105fd4a41c76c3f65ca5b4371a48c3f67797d8131dfbc14d0039c8a74"
}
]
}
@@ -394,38 +394,38 @@
"packages": [
{
"name": "@constructive-io/ui",
- "version": "0.5.0",
+ "version": "0.8.0",
"snapshotStatus": "branch-only",
"manifestSource": {
"path": "packages/ui/package.json",
- "sha256": "25bb3f7c9faa713107d90dff57adacad6b3a0b877f92261ceb70cca7ffb09989"
+ "sha256": "708c76d09f324cdea3fd8a294e5bd687e78fb69a7589cd81f9af4668ea10fcf0"
}
},
{
"name": "@constructive-io/data",
- "version": "0.2.0",
+ "version": "0.5.0",
"snapshotStatus": "branch-only",
"manifestSource": {
"path": "packages/data/package.json",
- "sha256": "6f807b216dace7cc2fe5cd92fcdb6f9b4d005fb0edace67d51735286a841e796"
+ "sha256": "930a0f1139db5f990d04e3f920f3954a6e16b5ed20ff290512bf59c466368572"
}
},
{
"name": "@constructive-io/sheets",
- "version": "0.5.0",
+ "version": "0.8.1",
"snapshotStatus": "branch-only",
"manifestSource": {
"path": "packages/sheets/package.json",
- "sha256": "b2696df554c8339844a46cfed6f19df699c2b1ba12fab6f7962bbfc1b5f964f3"
+ "sha256": "a35cccdb3dab5b0ea6954affe26e6822c09f4b40ca10cee22429874a7840d05b"
}
},
{
"name": "@constructive-io/schema-builder",
- "version": "0.1.0",
+ "version": "0.4.1",
"snapshotStatus": "branch-only",
"manifestSource": {
"path": "packages/schema-builder/package.json",
- "sha256": "e02d5d8d7e4e6cf2ef5f6bc7f257919f8e3017c371909e46cba4b83cc410453d"
+ "sha256": "555af70a66c0ccf56f16606af8c71aaa0805a3d98d4c22f03a02d88f5c8504e3"
}
}
],
@@ -491,7 +491,7 @@
],
"catalog": {
"path": "references/registry-catalog.v1.json",
- "itemCount": 102,
+ "itemCount": 123,
"projection": [
"name",
"type",
@@ -503,7 +503,8 @@
"devDependencies",
"registryDependencies",
"files",
- "installCommand"
+ "installCommand",
+ "meta.constructive"
]
},
"componentsJson": {
@@ -541,42 +542,268 @@
},
"sheetsAdapterSource": {
"path": "packages/sheets/src/adapter/postgraphile-adapter.ts",
- "sha256": "d1788090e210eb86e28ab75a0c000430dc1b013b9e787fe6b118c553661fd3c6"
+ "sha256": "e0efb76f807240587ec98afa493762ad3ba5ae533212aeee92bd2e41e4acf89c"
},
"requirements": {
- "queryType": { "typeName": "Query", "fields": ["_meta"] },
- "metaSchema": { "typeName": "MetaSchema", "fields": ["tables"] },
+ "queryType": {
+ "typeName": "Query",
+ "fields": [
+ "_meta"
+ ]
+ },
+ "metaSchema": {
+ "typeName": "MetaSchema",
+ "fields": [
+ "tables"
+ ]
+ },
"metaTable": {
"typeName": "MetaTable",
- "fields": ["name", "schemaName", "query", "fields", "inflection", "indexes", "constraints", "foreignKeyConstraints", "primaryKeyConstraints", "uniqueConstraints", "relations", "storage", "search", "i18n", "realtime", "scope"]
+ "fields": [
+ "name",
+ "schemaName",
+ "query",
+ "fields",
+ "inflection",
+ "indexes",
+ "constraints",
+ "foreignKeyConstraints",
+ "primaryKeyConstraints",
+ "uniqueConstraints",
+ "relations",
+ "storage",
+ "search",
+ "i18n",
+ "realtime",
+ "scope"
+ ]
+ },
+ "metaTableQuery": {
+ "typeName": "MetaQuery",
+ "fields": [
+ "all",
+ "one",
+ "create",
+ "update",
+ "delete"
+ ]
},
- "metaTableQuery": { "typeName": "MetaQuery", "fields": ["all", "one", "create", "update", "delete"] },
"metaField": {
"typeName": "MetaField",
- "fields": ["name", "type", "isNotNull", "hasDefault", "isPrimaryKey", "isForeignKey", "description", "enumValues"]
+ "fields": [
+ "name",
+ "type",
+ "isNotNull",
+ "hasDefault",
+ "isPrimaryKey",
+ "isForeignKey",
+ "description",
+ "enumValues"
+ ]
+ },
+ "metaEnum": {
+ "typeName": "MetaEnum",
+ "fields": [
+ "name",
+ "values"
+ ]
+ },
+ "metaType": {
+ "typeName": "MetaType",
+ "fields": [
+ "pgType",
+ "gqlType",
+ "isArray",
+ "isNotNull",
+ "hasDefault",
+ "subtype",
+ "encoding"
+ ]
+ },
+ "metaEncoding": {
+ "typeName": "MetaScalarEncoding",
+ "fields": [
+ "kind",
+ "elementType",
+ "dimensions",
+ "geometrySubtype",
+ "srid",
+ "dotPath"
+ ]
+ },
+ "metaIndex": {
+ "typeName": "MetaIndex",
+ "fields": [
+ "name",
+ "isUnique",
+ "isPrimary",
+ "columns",
+ "fields"
+ ]
+ },
+ "metaPrimaryKey": {
+ "typeName": "MetaPrimaryKeyConstraint",
+ "fields": [
+ "name",
+ "fields"
+ ]
+ },
+ "metaUnique": {
+ "typeName": "MetaUniqueConstraint",
+ "fields": [
+ "name",
+ "fields"
+ ]
+ },
+ "metaForeignKey": {
+ "typeName": "MetaForeignKeyConstraint",
+ "fields": [
+ "name",
+ "fields",
+ "referencedTable",
+ "referencedFields",
+ "refFields",
+ "refTable"
+ ]
+ },
+ "metaRefTable": {
+ "typeName": "MetaRefTable",
+ "fields": [
+ "name"
+ ]
+ },
+ "metaConstraints": {
+ "typeName": "MetaConstraints",
+ "fields": [
+ "primaryKey",
+ "unique",
+ "foreignKey"
+ ]
+ },
+ "metaInflection": {
+ "typeName": "MetaInflection",
+ "fields": [
+ "tableType",
+ "allRows",
+ "connection",
+ "edge",
+ "filterType",
+ "orderByType",
+ "conditionType",
+ "patchType",
+ "createInputType",
+ "createPayloadType",
+ "updatePayloadType",
+ "deletePayloadType"
+ ]
+ },
+ "metaRelations": {
+ "typeName": "MetaRelations",
+ "fields": [
+ "belongsTo",
+ "has",
+ "hasOne",
+ "hasMany",
+ "manyToMany"
+ ]
+ },
+ "metaBelongsTo": {
+ "typeName": "MetaBelongsToRelation",
+ "fields": [
+ "fieldName",
+ "isUnique",
+ "type",
+ "keys",
+ "references"
+ ]
+ },
+ "metaHas": {
+ "typeName": "MetaHasRelation",
+ "fields": [
+ "fieldName",
+ "isUnique",
+ "type",
+ "keys",
+ "referencedBy"
+ ]
+ },
+ "metaManyToMany": {
+ "typeName": "MetaManyToManyRelation",
+ "fields": [
+ "fieldName",
+ "type",
+ "junctionTable",
+ "junctionLeftConstraint",
+ "junctionLeftKeyAttributes",
+ "junctionRightConstraint",
+ "junctionRightKeyAttributes",
+ "leftKeyAttributes",
+ "rightKeyAttributes",
+ "rightTable"
+ ]
+ },
+ "metaStorage": {
+ "typeName": "MetaStorage",
+ "fields": [
+ "isFilesTable",
+ "isBucketsTable"
+ ]
+ },
+ "metaSearch": {
+ "typeName": "MetaSearch",
+ "fields": [
+ "algorithms",
+ "columns",
+ "hasUnifiedSearch",
+ "config"
+ ]
+ },
+ "metaSearchColumn": {
+ "typeName": "MetaSearchColumn",
+ "fields": [
+ "name",
+ "algorithm"
+ ]
},
- "metaEnum": { "typeName": "MetaEnum", "fields": ["name", "values"] },
- "metaType": { "typeName": "MetaType", "fields": ["pgType", "gqlType", "isArray", "isNotNull", "hasDefault", "subtype", "encoding"] },
- "metaEncoding": { "typeName": "MetaScalarEncoding", "fields": ["kind", "elementType", "dimensions", "geometrySubtype", "srid", "dotPath"] },
- "metaIndex": { "typeName": "MetaIndex", "fields": ["name", "isUnique", "isPrimary", "columns", "fields"] },
- "metaPrimaryKey": { "typeName": "MetaPrimaryKeyConstraint", "fields": ["name", "fields"] },
- "metaUnique": { "typeName": "MetaUniqueConstraint", "fields": ["name", "fields"] },
- "metaForeignKey": { "typeName": "MetaForeignKeyConstraint", "fields": ["name", "fields", "referencedTable", "referencedFields", "refFields", "refTable"] },
- "metaRefTable": { "typeName": "MetaRefTable", "fields": ["name"] },
- "metaConstraints": { "typeName": "MetaConstraints", "fields": ["primaryKey", "unique", "foreignKey"] },
- "metaInflection": { "typeName": "MetaInflection", "fields": ["tableType", "allRows", "connection", "edge", "filterType", "orderByType", "conditionType", "patchType", "createInputType", "createPayloadType", "updatePayloadType", "deletePayloadType"] },
- "metaRelations": { "typeName": "MetaRelations", "fields": ["belongsTo", "has", "hasOne", "hasMany", "manyToMany"] },
- "metaBelongsTo": { "typeName": "MetaBelongsToRelation", "fields": ["fieldName", "isUnique", "type", "keys", "references"] },
- "metaHas": { "typeName": "MetaHasRelation", "fields": ["fieldName", "isUnique", "type", "keys", "referencedBy"] },
- "metaManyToMany": { "typeName": "MetaManyToManyRelation", "fields": ["fieldName", "type", "junctionTable", "junctionLeftConstraint", "junctionLeftKeyAttributes", "junctionRightConstraint", "junctionRightKeyAttributes", "leftKeyAttributes", "rightKeyAttributes", "rightTable"] },
- "metaStorage": { "typeName": "MetaStorage", "fields": ["isFilesTable", "isBucketsTable"] },
- "metaSearch": { "typeName": "MetaSearch", "fields": ["algorithms", "columns", "hasUnifiedSearch", "config"] },
- "metaSearchColumn": { "typeName": "MetaSearchColumn", "fields": ["name", "algorithm"] },
- "metaSearchConfig": { "typeName": "MetaSearchConfig", "fields": ["weights", "boostRecent", "boostRecencyField", "boostRecencyDecay"] },
- "metaI18n": { "typeName": "MetaI18n", "fields": ["translationTable", "translatableFields"] },
- "metaI18nField": { "typeName": "MetaI18nField", "fields": ["name", "type"] },
- "metaRealtime": { "typeName": "MetaRealtime", "fields": ["subscriptionFieldName"] },
- "metaScope": { "typeName": "MetaScope", "fields": ["scope", "tier", "keyColumn", "entityTable", "source"] }
+ "metaSearchConfig": {
+ "typeName": "MetaSearchConfig",
+ "fields": [
+ "weights",
+ "boostRecent",
+ "boostRecencyField",
+ "boostRecencyDecay"
+ ]
+ },
+ "metaI18n": {
+ "typeName": "MetaI18n",
+ "fields": [
+ "translationTable",
+ "translatableFields"
+ ]
+ },
+ "metaI18nField": {
+ "typeName": "MetaI18nField",
+ "fields": [
+ "name",
+ "type"
+ ]
+ },
+ "metaRealtime": {
+ "typeName": "MetaRealtime",
+ "fields": [
+ "subscriptionFieldName"
+ ]
+ },
+ "metaScope": {
+ "typeName": "MetaScope",
+ "fields": [
+ "scope",
+ "tier",
+ "keyColumn",
+ "entityTable",
+ "source"
+ ]
+ }
},
"documents": {
"metaQuery": {
@@ -650,19 +877,123 @@
"requiredPayloadFields"
],
"documents": [
- ["admin", "Mutation.updateAppMembership", "UpdateAppMembershipInput", "appMembership", ["id"]],
- ["admin", "Mutation.createAppOwnerGrant", "CreateAppOwnerGrantInput", "appOwnerGrant", ["id"]],
- ["admin", "Mutation.createAppAdminGrant", "CreateAppAdminGrantInput", "appAdminGrant", ["id"]],
- ["admin", "Mutation.createAppGrant", "CreateAppGrantInput", "appGrant", ["id"]],
- ["admin", "Mutation.createAppProfileGrant", "CreateAppProfileGrantInput", "appProfileGrant", ["id"]],
- ["admin", "Mutation.createAppProfileDefinitionGrant", "CreateAppProfileDefinitionGrantInput", "appProfileDefinitionGrant", ["id"]],
- ["admin", "Mutation.createAppPermissionDefaultGrant", "CreateAppPermissionDefaultGrantInput", "appPermissionDefaultGrant", ["id"]],
- ["admin", "Mutation.createAppProfile", "CreateAppProfileInput", "appProfile", ["id"]],
- ["admin", "Mutation.updateAppProfile", "UpdateAppProfileInput", "appProfile", ["id"]],
- ["admin", "Mutation.deleteAppProfile", "DeleteAppProfileInput", "appProfile", ["id"]],
- ["admin", "Mutation.createAppInvite", "CreateAppInviteInput", "appInvite", ["id"]],
- ["admin", "Mutation.updateAppInvite", "UpdateAppInviteInput", "appInvite", ["id"]],
- ["admin", "Mutation.deleteAppInvite", "DeleteAppInviteInput", "appInvite", ["id"]]
+ [
+ "admin",
+ "Mutation.updateAppMembership",
+ "UpdateAppMembershipInput",
+ "appMembership",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createAppOwnerGrant",
+ "CreateAppOwnerGrantInput",
+ "appOwnerGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createAppAdminGrant",
+ "CreateAppAdminGrantInput",
+ "appAdminGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createAppGrant",
+ "CreateAppGrantInput",
+ "appGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createAppProfileGrant",
+ "CreateAppProfileGrantInput",
+ "appProfileGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createAppProfileDefinitionGrant",
+ "CreateAppProfileDefinitionGrantInput",
+ "appProfileDefinitionGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createAppPermissionDefaultGrant",
+ "CreateAppPermissionDefaultGrantInput",
+ "appPermissionDefaultGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createAppProfile",
+ "CreateAppProfileInput",
+ "appProfile",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.updateAppProfile",
+ "UpdateAppProfileInput",
+ "appProfile",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.deleteAppProfile",
+ "DeleteAppProfileInput",
+ "appProfile",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createAppInvite",
+ "CreateAppInviteInput",
+ "appInvite",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.updateAppInvite",
+ "UpdateAppInviteInput",
+ "appInvite",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.deleteAppInvite",
+ "DeleteAppInviteInput",
+ "appInvite",
+ [
+ "id"
+ ]
+ ]
]
},
"organizations-enabled-actions": {
@@ -683,29 +1014,215 @@
"requiredPayloadFields"
],
"documents": [
- ["admin", "Mutation.updateOrgMembership", "UpdateOrgMembershipInput", "orgMembership", ["id"]],
- ["admin", "Mutation.deleteOrgMembership", "DeleteOrgMembershipInput", "orgMembership", ["id"]],
- ["admin", "Mutation.createOrgAdminGrant", "CreateOrgAdminGrantInput", "orgAdminGrant", ["id"]],
- ["admin", "Mutation.createOrgOwnerGrant", "CreateOrgOwnerGrantInput", "orgOwnerGrant", ["id"]],
- ["admin", "Mutation.createOrgGrant", "CreateOrgGrantInput", "orgGrant", ["id"]],
- ["admin", "Mutation.createOrgProfileGrant", "CreateOrgProfileGrantInput", "orgProfileGrant", ["id"]],
- ["admin", "Mutation.createOrgProfileDefinitionGrant", "CreateOrgProfileDefinitionGrantInput", "orgProfileDefinitionGrant", ["id"]],
- ["admin", "Mutation.createOrgProfile", "CreateOrgProfileInput", "orgProfile", ["id"]],
- ["admin", "Mutation.updateOrgProfile", "UpdateOrgProfileInput", "orgProfile", ["id"]],
- ["admin", "Mutation.deleteOrgProfile", "DeleteOrgProfileInput", "orgProfile", ["id"]],
- ["admin", "Mutation.createOrgMemberProfile", "CreateOrgMemberProfileInput", "orgMemberProfile", ["id"]],
- ["admin", "Mutation.updateOrgMemberProfile", "UpdateOrgMemberProfileInput", "orgMemberProfile", ["id"]],
- ["admin", "Mutation.updateOrgMembershipSetting", "UpdateOrgMembershipSettingInput", "orgMembershipSetting", ["id"]],
- ["admin", "Mutation.updateOrgMembershipDefault", "UpdateOrgMembershipDefaultInput", "orgMembershipDefault", ["id"]],
- ["admin", "Mutation.createOrgChartEdgeGrant", "CreateOrgChartEdgeGrantInput", "orgChartEdgeGrant", ["id"]],
- ["admin", "Mutation.createOrgInvite", "CreateOrgInviteInput", "orgInvite", ["id"]],
- ["admin", "Mutation.deleteOrgInvite", "DeleteOrgInviteInput", "orgInvite", ["id"]],
- ["auth", "Mutation.deleteUser", "DeleteUserInput", "user", ["id"]],
- ["auth", "Mutation.updateUser", "UpdateUserInput", "user", ["id"]],
- ["auth", "Mutation.revokeOrgApiKey", "RevokeOrgApiKeyInput", null, ["result"]],
- ["auth", "Mutation.deleteOrgPrincipal", "DeleteOrgPrincipalInput", null, ["result"]],
- ["auth", "Mutation.createOrgPrincipal", "CreateOrgPrincipalInput", null, ["result"]],
- ["auth", "Mutation.createUser", "CreateUserInput", "user", ["id", "type", "username"]]
+ [
+ "admin",
+ "Mutation.updateOrgMembership",
+ "UpdateOrgMembershipInput",
+ "orgMembership",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.deleteOrgMembership",
+ "DeleteOrgMembershipInput",
+ "orgMembership",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createOrgAdminGrant",
+ "CreateOrgAdminGrantInput",
+ "orgAdminGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createOrgOwnerGrant",
+ "CreateOrgOwnerGrantInput",
+ "orgOwnerGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createOrgGrant",
+ "CreateOrgGrantInput",
+ "orgGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createOrgProfileGrant",
+ "CreateOrgProfileGrantInput",
+ "orgProfileGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createOrgProfileDefinitionGrant",
+ "CreateOrgProfileDefinitionGrantInput",
+ "orgProfileDefinitionGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createOrgProfile",
+ "CreateOrgProfileInput",
+ "orgProfile",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.updateOrgProfile",
+ "UpdateOrgProfileInput",
+ "orgProfile",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.deleteOrgProfile",
+ "DeleteOrgProfileInput",
+ "orgProfile",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createOrgMemberProfile",
+ "CreateOrgMemberProfileInput",
+ "orgMemberProfile",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.updateOrgMemberProfile",
+ "UpdateOrgMemberProfileInput",
+ "orgMemberProfile",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.updateOrgMembershipSetting",
+ "UpdateOrgMembershipSettingInput",
+ "orgMembershipSetting",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.updateOrgMembershipDefault",
+ "UpdateOrgMembershipDefaultInput",
+ "orgMembershipDefault",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createOrgChartEdgeGrant",
+ "CreateOrgChartEdgeGrantInput",
+ "orgChartEdgeGrant",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.createOrgInvite",
+ "CreateOrgInviteInput",
+ "orgInvite",
+ [
+ "id"
+ ]
+ ],
+ [
+ "admin",
+ "Mutation.deleteOrgInvite",
+ "DeleteOrgInviteInput",
+ "orgInvite",
+ [
+ "id"
+ ]
+ ],
+ [
+ "auth",
+ "Mutation.deleteUser",
+ "DeleteUserInput",
+ "user",
+ [
+ "id"
+ ]
+ ],
+ [
+ "auth",
+ "Mutation.updateUser",
+ "UpdateUserInput",
+ "user",
+ [
+ "id"
+ ]
+ ],
+ [
+ "auth",
+ "Mutation.revokeOrgApiKey",
+ "RevokeOrgApiKeyInput",
+ null,
+ [
+ "result"
+ ]
+ ],
+ [
+ "auth",
+ "Mutation.deleteOrgPrincipal",
+ "DeleteOrgPrincipalInput",
+ null,
+ [
+ "result"
+ ]
+ ],
+ [
+ "auth",
+ "Mutation.createOrgPrincipal",
+ "CreateOrgPrincipalInput",
+ null,
+ [
+ "result"
+ ]
+ ],
+ [
+ "auth",
+ "Mutation.createUser",
+ "CreateUserInput",
+ "user",
+ [
+ "id",
+ "type",
+ "username"
+ ]
+ ]
]
}
},
@@ -1710,7 +2227,7 @@
"executeType": "SheetsExecuteFn",
"executeSource": {
"path": "packages/sheets/src/context/sheets-execute.ts",
- "sha256": "7eccc6b1014c029b7e5f5dc2c41258b7d0aeaf51cb2d51560dfc5e4cf1bfbd5a"
+ "sha256": "3615f980ee18fd27ab3b1941bbec215d91fc8b8125fcd8b4d293ba764e8902ca"
},
"requiredConfigFields": [
"endpoint",
@@ -1830,7 +2347,7 @@
},
{
"path": "packages/sheets/src/context/sheets-execute.ts",
- "sha256": "7eccc6b1014c029b7e5f5dc2c41258b7d0aeaf51cb2d51560dfc5e4cf1bfbd5a"
+ "sha256": "3615f980ee18fd27ab3b1941bbec215d91fc8b8125fcd8b4d293ba764e8902ca"
},
{
"path": "packages/sheets/src/hooks/use-sheets-meta.ts",
@@ -1838,7 +2355,7 @@
},
{
"path": "packages/sheets/src/adapter/postgraphile-adapter.ts",
- "sha256": "d1788090e210eb86e28ab75a0c000430dc1b013b9e787fe6b118c553661fd3c6"
+ "sha256": "e0efb76f807240587ec98afa493762ad3ba5ae533212aeee92bd2e41e4acf89c"
}
],
"sourceLimitationIds": [
@@ -2650,11 +3167,11 @@
},
{
"id": "storage.buckets.path-2",
- "verificationProfile": "tenant-runtime",
- "endpointKinds": [
- "storage",
- "admin",
- "data"
+ "verificationProfile": "tenant-runtime",
+ "endpointKinds": [
+ "storage",
+ "admin",
+ "data"
],
"evidence": {
"type": "compatible-meta-contract",
@@ -2694,11 +3211,11 @@
},
{
"id": "storage.files.path-2",
- "verificationProfile": "tenant-runtime",
- "endpointKinds": [
- "storage",
- "admin",
- "data"
+ "verificationProfile": "tenant-runtime",
+ "endpointKinds": [
+ "storage",
+ "admin",
+ "data"
],
"evidence": {
"type": "compatible-meta-contract",
diff --git a/.agents/skills/constructive-blocks/references/package-resolutions.v1.json b/.agents/skills/constructive-blocks/references/package-resolutions.v1.json
index 4cd4787..501de7f 100644
--- a/.agents/skills/constructive-blocks/references/package-resolutions.v1.json
+++ b/.agents/skills/constructive-blocks/references/package-resolutions.v1.json
@@ -1,9 +1,9 @@
{
"schemaVersion": 1,
"kind": "constructive.blocks-package-resolutions",
- "sourceCommit": "4f2a789fde9a90c0c6ed5977896493bb4818fa77",
+ "sourceCommit": "706ae32b8b03cd6effaa9d0d5f385d93529635df",
"registry": "https://registry.npmjs.org",
- "recordCount": 10,
+ "recordCount": 25,
"records": [
{
"name": "@base-ui/react",
@@ -11,12 +11,66 @@
"integrity": "sha512-/jzjTWJYXhRFO45Bev9lc3cHbmjzCMpUqbMZ2AgKy/z25mY9B6shGSNcXcjQar9n5doM0KYW1W8fcFv2jZBuMw==",
"resolved": "https://registry.npmjs.org/@base-ui/react/-/react-1.6.0.tgz"
},
+ {
+ "name": "@internationalized/date",
+ "version": "3.12.3",
+ "integrity": "sha512-fuLX+3ZKLsxI73y8b01EG/WjHb6gE6weCqlfawPO27kBWGMh9G1yH6Csv1uU7/cac9H2GHmOMt6CjmuQ1aia4Q==",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.3.tgz"
+ },
+ {
+ "name": "@remixicon/react",
+ "version": "4.9.0",
+ "integrity": "sha512-5/jLDD4DtKxH2B4QVXTobvV1C2uL8ab9D5yAYNtFt+w80O0Ys1xFOrspqROL3fjrZi+7ElFUWE37hBfaAl6U+Q==",
+ "resolved": "https://registry.npmjs.org/@remixicon/react/-/react-4.9.0.tgz"
+ },
+ {
+ "name": "@tanstack/charts",
+ "version": "0.6.4",
+ "integrity": "sha512-x3kZPcRmZh3GNWvYGf+vb+kK2GFeWv/UBCNdptnq5sc9Au2skjnqLf8rs3Idh1q8VPWjnZI7jgaw0lLLRYt0gw==",
+ "resolved": "https://registry.npmjs.org/@tanstack/charts/-/charts-0.6.4.tgz"
+ },
+ {
+ "name": "@tanstack/charts-scales",
+ "version": "0.6.4",
+ "integrity": "sha512-n98RyrMMf+xMeOnEV4H4cs6X2IbNzyWDEHOJYFaw8+BYt6QNL77CRXzlgTxCvvgnkrbtq5fjKXxRSx5Z+Pmelg==",
+ "resolved": "https://registry.npmjs.org/@tanstack/charts-scales/-/charts-scales-0.6.4.tgz"
+ },
+ {
+ "name": "@tanstack/react-charts",
+ "version": "0.6.4",
+ "integrity": "sha512-seP5Dd+JQAxosikGmUfDWtFxYPZk/0ED8biDLYZUYmUCe00Wtz1oWd3d+xiB1Al7gS0RARd6krcCcai+CKHyMA==",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-charts/-/react-charts-0.6.4.tgz"
+ },
+ {
+ "name": "@tanstack/react-form",
+ "version": "1.33.3",
+ "integrity": "sha512-lkzI/y15fHC8lKvzsLXFLLqGWroa+okvV2cKRCGAL+d0Kdf040fdMZbKh6uCXDMc08Ngpl8G3VZFnZ5KVUkUIw==",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-form/-/react-form-1.33.3.tgz"
+ },
{
"name": "@tanstack/react-query",
"version": "5.101.4",
"integrity": "sha512-yRg2pfOCxIs4ZJW3XYYHU/WgtD04FHSnfHlpRT7h7pR77hwkdRG4wxbKe4aq6P0RvXUTBSQpQeadS1SUYUe+KA==",
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.101.4.tgz"
},
+ {
+ "name": "@tanstack/react-table",
+ "version": "9.0.0-beta.58",
+ "integrity": "sha512-pvacQiA9pymAivt2dOOsOcnNEp5FMPvX2hjbnkWsh0lvlBtf6mh9bnZ7q14iAakGMiGs+o+/tbSr5jT19XfTgg==",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-9.0.0-beta.58.tgz"
+ },
+ {
+ "name": "@tanstack/react-virtual",
+ "version": "3.14.9",
+ "integrity": "sha512-qZyr0FZDP8rDC4WBhsryIZmAd9bveJvFGUJJtskWaew6/0dTRS6wZxnR6VQ5bY2KwL3LjerrHqQLk3a0GKcPXQ==",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.14.9.tgz"
+ },
+ {
+ "name": "@types/leaflet",
+ "version": "1.9.22",
+ "integrity": "sha512-h3lhECYEKDasG7LFHu+GiHqAvsgLuQvlJvVZzJDGONo3sEL+wUOqSFLnwkZlK0qVxnxbuGFW8iBlJNYs5wgndA==",
+ "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.22.tgz"
+ },
{
"name": "class-variance-authority",
"version": "0.7.1",
@@ -29,23 +83,59 @@
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz"
},
+ {
+ "name": "d3-scale",
+ "version": "4.0.2",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz"
+ },
{
"name": "graphql",
"version": "17.0.2",
"integrity": "sha512-FRWbddMxfkjiB7z+aQDWIR+E34xo9I8c9mtK2RPv8PmMzKRvrdsreHL/Ui/TmwHJfhHChEtsFPyMHKI+xuarQQ==",
"resolved": "https://registry.npmjs.org/graphql/-/graphql-17.0.2.tgz"
},
+ {
+ "name": "inflekt",
+ "version": "0.7.2",
+ "integrity": "sha512-csXH1tW9nvYmj3WMYCqPenF74l1PNzQG9SyQkpbRw60gC9f6GRSAxtUjepkBMb7m8NpVN+nOHtxHSqf4eh0uLA==",
+ "resolved": "https://registry.npmjs.org/inflekt/-/inflekt-0.7.2.tgz"
+ },
+ {
+ "name": "leaflet",
+ "version": "1.9.4",
+ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz"
+ },
{
"name": "lucide-react",
- "version": "1.27.0",
- "integrity": "sha512-rJicGl/3Fly/E0rOH1YmPZ6e49JCnKknh1ox1vpHnkfjujAkKA6sqUZvH3MTAaXXjgexyUwgNwTJzTtYuAFYJw==",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.27.0.tgz"
+ "version": "1.28.0",
+ "integrity": "sha512-fARAFJULsGuDDydjp6+6blekG/sBIM29TerzLjc9bQUKAcEfrSc4ZQKb25KRz4OMKd87cZTb5dgq0w/T6KufVg==",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.28.0.tgz"
},
{
"name": "motion",
- "version": "12.42.2",
- "integrity": "sha512-Atvv11yUKIid41cVrRBDVX5m8tF8kNpExRSlbpt6APClhDjtwQssgFHhQzejxw7/7YYbjHSPKBVbHo05BuJT5Q==",
- "resolved": "https://registry.npmjs.org/motion/-/motion-12.42.2.tgz"
+ "version": "12.43.0",
+ "integrity": "sha512-BQgQbSa9Hn3/mtbib0MK53y6JSANa+YKUKlaYnWzAVDH424RYQ5LVpV3pNiWH00BA2z4ojsSdMzqT7g2FQwjuQ==",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-12.43.0.tgz"
+ },
+ {
+ "name": "react-aria-components",
+ "version": "1.20.0",
+ "integrity": "sha512-BMbpIgoV9aELeBrB0Y120NgoigHb5OdcJwc+4e7uSnbTbamea6lo+gqcc4LAxzMaK3Jf+7LI1oCDE6yANsmxIQ==",
+ "resolved": "https://registry.npmjs.org/react-aria-components/-/react-aria-components-1.20.0.tgz"
+ },
+ {
+ "name": "react-leaflet",
+ "version": "5.0.0",
+ "integrity": "sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw==",
+ "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-5.0.0.tgz"
+ },
+ {
+ "name": "sonner",
+ "version": "2.0.7",
+ "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==",
+ "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz"
},
{
"name": "tailwind-merge",
diff --git a/.agents/skills/constructive-blocks/references/registry-catalog.v1.json b/.agents/skills/constructive-blocks/references/registry-catalog.v1.json
index 428e264..181e3a4 100644
--- a/.agents/skills/constructive-blocks/references/registry-catalog.v1.json
+++ b/.agents/skills/constructive-blocks/references/registry-catalog.v1.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.blocks-registry-catalog","sourceCommit":"4f2a789fde9a90c0c6ed5977896493bb4818fa77","aggregatePath":"apps/registry/registry.json","registryNamespace":"@constructive","itemCount":102,"items":[{"name":"constructive-theme","type":"registry:theme","title":"Constructive Theme","description":"Constructive design system theme — OKLCH colors, z-index layers, shadow utilities, and animations.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/constructive-theme"},{"name":"cn","type":"registry:lib","title":"cn utility","description":"Tailwind CSS class name merge utility using clsx and tailwind-merge.","categories":["utility"],"docs":"Import: `import { cn } from '@/lib/utils'`","dependencies":["clsx","tailwind-merge"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/cn"},{"name":"slot","type":"registry:lib","title":"Slot utility","description":"Polymorphic component utilities for asChild pattern.","categories":["utility"],"docs":"Import: `import { Slot } from '@/lib/slot'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/slot.tsx","type":"registry:lib","target":"@lib/slot.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/slot"},{"name":"use-controllable-state","type":"registry:hook","title":"useControllableState","description":"Hook for components with controlled/uncontrolled state.","categories":["hook"],"docs":"Import: `import { useControllableState } from '@/hooks/use-controllable-state'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-controllable-state.ts","type":"registry:hook","target":"@hooks/use-controllable-state.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-controllable-state"},{"name":"use-debounce","type":"registry:hook","title":"useDebounce","description":"Hook for debouncing values.","categories":["hook"],"docs":"Import: `import { useDebounce } from '@/hooks/use-debounce'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-debounce.ts","type":"registry:hook","target":"@hooks/use-debounce.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-debounce"},{"name":"use-mobile","type":"registry:hook","title":"useIsMobile","description":"Hook for detecting mobile viewport.","categories":["hook"],"docs":"Import: `import { useIsMobile } from '@/hooks/use-mobile'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-mobile.ts","type":"registry:hook","target":"@hooks/use-mobile.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-mobile"},{"name":"motion-config","type":"registry:lib","title":"Motion Config","description":"Animation presets and spring configurations for motion library.","categories":["animation"],"docs":"Import: `import { motionConfig } from '@/lib/motion/motion-config'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/motion/motion-config.ts","type":"registry:lib","target":"@lib/motion/motion-config.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-config"},{"name":"button","type":"registry:ui","title":"Button","description":"A button component with multiple variants and sizes.","categories":["primitive"],"docs":"Import: `import { Button } from '@/components/ui/button'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/button.tsx","type":"registry:ui","target":"@ui/button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/button"},{"name":"badge","type":"registry:ui","title":"Badge","description":"A badge component for status indicators and labels.","categories":["primitive"],"docs":"Import: `import { Badge } from '@/components/ui/badge'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/badge.tsx","type":"registry:ui","target":"@ui/badge.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/badge"},{"name":"label","type":"registry:ui","title":"Label","description":"A label component for form fields.","categories":["primitive"],"docs":"Import: `import { Label } from '@/components/ui/label'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/label.tsx","type":"registry:ui","target":"@ui/label.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/label"},{"name":"skeleton","type":"registry:ui","title":"Skeleton","description":"A skeleton loading placeholder component.","categories":["primitive"],"docs":"Import: `import { Skeleton } from '@/components/ui/skeleton'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/skeleton.tsx","type":"registry:ui","target":"@ui/skeleton.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/skeleton"},{"name":"card","type":"registry:ui","title":"Card","description":"A card component with header, content, and footer sections.","categories":["primitive"],"docs":"Import: `import { Card, CardHeader, CardContent, CardFooter } from '@/components/ui/card'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/card.tsx","type":"registry:ui","target":"@ui/card.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/card"},{"name":"separator","type":"registry:ui","title":"Separator","description":"A visual separator for dividing content.","categories":["primitive"],"docs":"Import: `import { Separator } from '@/components/ui/separator'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/separator.tsx","type":"registry:ui","target":"@ui/separator.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/separator"},{"name":"alert","type":"registry:ui","title":"Alert","description":"An alert component for displaying messages.","categories":["primitive"],"docs":"Import: `import { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert.tsx","type":"registry:ui","target":"@ui/alert.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert"},{"name":"input","type":"registry:ui","title":"Input","description":"A text input component built on Base UI.","categories":["form"],"docs":"Import: `import { Input } from '@/components/ui/input'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input.tsx","type":"registry:ui","target":"@ui/input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input"},{"name":"textarea","type":"registry:ui","title":"Textarea","description":"A multiline text input component.","categories":["form"],"docs":"Import: `import { Textarea } from '@/components/ui/textarea'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/textarea.tsx","type":"registry:ui","target":"@ui/textarea.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/textarea"},{"name":"checkbox","type":"registry:ui","title":"Checkbox","description":"A checkbox component built on Base UI.","categories":["form"],"docs":"Import: `import { Checkbox } from '@/components/ui/checkbox'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox.tsx","type":"registry:ui","target":"@ui/checkbox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox"},{"name":"checkbox-group","type":"registry:ui","title":"Checkbox Group","description":"A group wrapper for multiple checkboxes.","categories":["form"],"docs":"Import: `import { CheckboxGroup } from '@/components/ui/checkbox-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/checkbox","@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox-group.tsx","type":"registry:ui","target":"@ui/checkbox-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox-group"},{"name":"radio-group","type":"registry:ui","title":"Radio Group","description":"A radio group component built on Base UI.","categories":["form"],"docs":"Import: `import { RadioGroup } from '@/components/ui/radio-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/radio-group.tsx","type":"registry:ui","target":"@ui/radio-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/radio-group"},{"name":"switch","type":"registry:ui","title":"Switch","description":"A toggle switch component built on Base UI.","categories":["form"],"docs":"Import: `import { Switch } from '@/components/ui/switch'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/switch.tsx","type":"registry:ui","target":"@ui/switch.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/switch"},{"name":"progress","type":"registry:ui","title":"Progress","description":"A progress bar component built on Base UI.","categories":["form"],"docs":"Import: `import { Progress } from '@/components/ui/progress'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progress.tsx","type":"registry:ui","target":"@ui/progress.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progress"},{"name":"avatar","type":"registry:ui","title":"Avatar","description":"An avatar component with image and fallback support.","categories":["data-display"],"docs":"Import: `import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/avatar.tsx","type":"registry:ui","target":"@ui/avatar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/avatar"},{"name":"portal","type":"registry:ui","title":"Portal","description":"Portal management for overlay components with z-index layering.","categories":["layout"],"docs":"Import: `import { Portal } from '@/components/ui/portal'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/portal.tsx","type":"registry:ui","target":"@ui/portal.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/portal"},{"name":"scroll-area","type":"registry:ui","title":"Scroll Area","description":"A custom scrollable area component built on Base UI.","categories":["layout"],"docs":"Import: `import { ScrollArea } from '@/components/ui/scroll-area'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/scroll-area.tsx","type":"registry:ui","target":"@ui/scroll-area.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/scroll-area"},{"name":"select","type":"registry:ui","title":"Select","description":"A select/dropdown component built on Base UI.","categories":["form"],"docs":"Import: `import { Select } from '@/components/ui/select'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/select.tsx","type":"registry:ui","target":"@ui/select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/select"},{"name":"tooltip","type":"registry:ui","title":"Tooltip","description":"A tooltip component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Tooltip } from '@/components/ui/tooltip'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tooltip.tsx","type":"registry:ui","target":"@ui/tooltip.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tooltip"},{"name":"popover","type":"registry:ui","title":"Popover","description":"A popover component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Popover } from '@/components/ui/popover'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/popover.tsx","type":"registry:ui","target":"@ui/popover.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/popover"},{"name":"dialog","type":"registry:ui","title":"Dialog","description":"A modal dialog component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Dialog } from '@/components/ui/dialog'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dialog.tsx","type":"registry:ui","target":"@ui/dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dialog"},{"name":"alert-dialog","type":"registry:ui","title":"Alert Dialog","description":"An alert dialog for confirmations built on Base UI.","categories":["overlay"],"docs":"Import: `import { AlertDialog } from '@/components/ui/alert-dialog'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert-dialog.tsx","type":"registry:ui","target":"@ui/alert-dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert-dialog"},{"name":"dropdown-menu","type":"registry:ui","title":"Dropdown Menu","description":"A dropdown menu component built on Base UI.","categories":["overlay"],"docs":"Import: `import { DropdownMenu } from '@/components/ui/dropdown-menu'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dropdown-menu.tsx","type":"registry:ui","target":"@ui/dropdown-menu.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dropdown-menu"},{"name":"sheet","type":"registry:ui","title":"Sheet","description":"A slide-out panel component with animations.","categories":["overlay"],"docs":"Import: `import { Sheet } from '@/components/ui/sheet'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/motion-config","@constructive/use-controllable-state","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sheet.tsx","type":"registry:ui","target":"@ui/sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sheet"},{"name":"drawer","type":"registry:ui","title":"Drawer","description":"A bottom drawer component using Vaul.","categories":["overlay"],"docs":"Import: `import { Drawer } from '@/components/ui/drawer'`","dependencies":["vaul"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/drawer.tsx","type":"registry:ui","target":"@ui/drawer.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/drawer"},{"name":"tabs","type":"registry:ui","title":"Tabs","description":"A tabs component built on Base UI.","categories":["layout"],"docs":"Import: `import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tabs.tsx","type":"registry:ui","target":"@ui/tabs.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tabs"},{"name":"collapsible","type":"registry:ui","title":"Collapsible","description":"A collapsible/accordion component built on Base UI.","categories":["layout"],"docs":"Import: `import { Collapsible } from '@/components/ui/collapsible'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/collapsible.tsx","type":"registry:ui","target":"@ui/collapsible.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/collapsible"},{"name":"resizable","type":"registry:ui","title":"Resizable","description":"Resizable panel layouts using react-resizable-panels.","categories":["layout"],"docs":"Import: `import { ResizablePanel, ResizablePanelGroup, ResizableHandle } from '@/components/ui/resizable'`","dependencies":["lucide-react","react-resizable-panels@^3.0.0"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/resizable.tsx","type":"registry:ui","target":"@ui/resizable.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/resizable"},{"name":"table","type":"registry:ui","title":"Table","description":"A table component with header, body, and cell primitives.","categories":["data-display"],"docs":"Import: `import { Table, TableHeader, TableBody, TableRow, TableCell } from '@/components/ui/table'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/table.tsx","type":"registry:ui","target":"@ui/table.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/table"},{"name":"pagination","type":"registry:ui","title":"Pagination","description":"A pagination component with navigation controls.","categories":["navigation"],"docs":"Import: `import { Pagination } from '@/components/ui/pagination'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/pagination.tsx","type":"registry:ui","target":"@ui/pagination.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pagination"},{"name":"breadcrumb","type":"registry:ui","title":"Breadcrumb","description":"A breadcrumb navigation component.","categories":["navigation"],"docs":"Import: `import { Breadcrumb } from '@/components/ui/breadcrumb'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/breadcrumb.tsx","type":"registry:ui","target":"@ui/breadcrumb.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/breadcrumb"},{"name":"form","type":"registry:ui","title":"Form","description":"Form utilities with react-hook-form integration.","categories":["form"],"docs":"Import: `import { Form, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'`","dependencies":["react-hook-form"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form.tsx","type":"registry:ui","target":"@ui/form.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form"},{"name":"form-control","type":"registry:ui","title":"Form Control","description":"A form control wrapper with label and error display.","categories":["form"],"docs":"Import: `import { FormControl } from '@/components/ui/form-control'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/label","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form-control.tsx","type":"registry:ui","target":"@ui/form-control.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-control"},{"name":"input-group","type":"registry:ui","title":"Input Group","description":"Input with addons and icons.","categories":["form"],"docs":"Import: `import { InputGroup } from '@/components/ui/input-group'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/input","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input-group.tsx","type":"registry:ui","target":"@ui/input-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input-group"},{"name":"autocomplete","type":"registry:ui","title":"Autocomplete","description":"An autocomplete component built on Base UI.","categories":["input"],"docs":"Import: `import { Autocomplete } from '@/components/ui/autocomplete'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/autocomplete.tsx","type":"registry:ui","target":"@ui/autocomplete.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/autocomplete"},{"name":"command","type":"registry:ui","title":"Command","description":"A command palette component.","categories":["overlay"],"docs":"Import: `import { Command } from '@/components/ui/command'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/command.tsx","type":"registry:ui","target":"@ui/command.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/command"},{"name":"combobox","type":"registry:ui","title":"Combobox","description":"A combobox component with search built on Base UI.","categories":["input"],"docs":"Import: `import { Combobox } from '@/components/ui/combobox'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/combobox.tsx","type":"registry:ui","target":"@ui/combobox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/combobox"},{"name":"multi-select","type":"registry:ui","title":"Multi Select","description":"A multi-select component with tags.","categories":["input"],"docs":"Import: `import { MultiSelect } from '@/components/ui/multi-select'`","dependencies":["class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/popover","@constructive/separator","@constructive/input","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/multi-select.tsx","type":"registry:ui","target":"@ui/multi-select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/multi-select"},{"name":"tags","type":"registry:ui","title":"Tags","description":"A tags input component with autocomplete.","categories":["input"],"docs":"Import: `import { Tags } from '@/components/ui/tags'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/button","@constructive/command","@constructive/popover","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tags.tsx","type":"registry:ui","target":"@ui/tags.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tags"},{"name":"record-picker","type":"registry:ui","title":"Record Picker","description":"A record selection component with search and filtering.","categories":["input"],"docs":"Import: `import { RecordPicker } from '@/components/ui/record-picker'`","dependencies":["@remixicon/react","match-sorter"],"devDependencies":[],"registryDependencies":["@constructive/use-debounce","@constructive/checkbox","@constructive/input-group","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/record-picker.tsx","type":"registry:ui","target":"@ui/record-picker.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/record-picker"},{"name":"stepper","type":"registry:ui","title":"Stepper","description":"A stepper component for multi-step workflows.","categories":["navigation"],"docs":"Import: `import { Stepper } from '@/components/ui/stepper'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/stepper.tsx","type":"registry:ui","target":"@ui/stepper.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stepper"},{"name":"sidebar","type":"registry:ui","title":"Sidebar","description":"A responsive Base UI sidebar with off-canvas, icon-only, and fixed collapse modes.","categories":["navigation"],"docs":"Import: `import { Sidebar, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/use-mobile","@constructive/button","@constructive/input","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sidebar.tsx","type":"registry:ui","target":"@ui/sidebar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sidebar"},{"name":"calendar-rac","type":"registry:ui","title":"Calendar","description":"A calendar component using React Aria Components.","categories":["input"],"docs":"Import: `import { Calendar } from '@/components/ui/calendar-rac'`","dependencies":["@internationalized/date","react-aria-components"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/calendar-rac.tsx","type":"registry:ui","target":"@ui/calendar-rac.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/calendar-rac"},{"name":"json-input","type":"registry:ui","title":"JSON Input","description":"A JSON editor component using React Ace.","categories":["input"],"docs":"Import: `import { JsonInput } from '@/components/ui/json-input'`","dependencies":["lucide-react","react-ace","ace-builds"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/json-input.tsx","type":"registry:ui","target":"@ui/json-input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/json-input"},{"name":"sonner","type":"registry:ui","title":"Toaster","description":"Toast notifications using Sonner.","categories":["block"],"docs":"Import: `import { Toaster } from '@/components/ui/sonner'`","dependencies":["sonner"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sonner.tsx","type":"registry:ui","target":"@ui/sonner.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sonner"},{"name":"dock","type":"registry:ui","title":"Dock","description":"A macOS-style dock component.","categories":["navigation"],"docs":"Import: `import { Dock, DockIcon } from '@/components/ui/dock'`","dependencies":["class-variance-authority","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dock.tsx","type":"registry:ui","target":"@ui/dock.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dock"},{"name":"page-header","type":"registry:ui","title":"Page Header","description":"A simple page header component.","categories":["navigation"],"docs":"Import: `import { PageHeader } from '@/components/ui/page-header'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/page-header.tsx","type":"registry:ui","target":"@ui/page-header.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/page-header"},{"name":"flickering-grid","type":"registry:ui","title":"Flickering Grid","description":"An animated grid background effect.","categories":["effect"],"docs":"Import: `import { FlickeringGrid } from '@/components/ui/flickering-grid'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flickering-grid.tsx","type":"registry:ui","target":"@ui/flickering-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flickering-grid"},{"name":"flow-zoom-panel","type":"registry:ui","title":"Flow Zoom Panel","description":"Zoom in/out and fit-view controls for React Flow canvases.","categories":["layout"],"docs":"Import: `import { FlowZoomPanel } from '@/components/ui/flow-zoom-panel'`","dependencies":["@xyflow/react","@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flow-zoom-panel.tsx","type":"registry:ui","target":"@ui/flow-zoom-panel.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flow-zoom-panel"},{"name":"motion-grid","type":"registry:ui","title":"Motion Grid","description":"An animated grid with frame-based transitions.","categories":["effect"],"docs":"Import: `import { MotionGrid } from '@/components/ui/motion-grid'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/motion-grid.tsx","type":"registry:ui","target":"@ui/motion-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-grid"},{"name":"progressive-blur","type":"registry:ui","title":"Progressive Blur","description":"A gradient blur overlay effect.","categories":["effect"],"docs":"Import: `import { ProgressiveBlur } from '@/components/ui/progressive-blur'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur.tsx","type":"registry:ui","target":"@ui/progressive-blur.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur"},{"name":"progressive-blur-scroll-container","type":"registry:ui","title":"Progressive Blur Scroll Container","description":"A scroll container with blur effects at edges.","categories":["effect"],"docs":"Import: `import { ProgressiveBlurScrollContainer } from '@/components/ui/progressive-blur-scroll-container'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/progressive-blur","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur-scroll-container.tsx","type":"registry:ui","target":"@ui/progressive-blur-scroll-container.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur-scroll-container"},{"name":"responsive-diagram","type":"registry:ui","title":"Responsive Diagram","description":"A responsive diagram container with auto-scaling.","categories":["effect"],"docs":"Import: `import { ResponsiveDiagram } from '@/components/ui/responsive-diagram'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/responsive-diagram.tsx","type":"registry:ui","target":"@ui/responsive-diagram.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/responsive-diagram"},{"name":"unlink-button","type":"registry:ui","title":"Unlink Button","description":"A button for unlinking/removing records.","categories":["action"],"docs":"Import: `import { UnlinkButton } from '@/components/ui/unlink-button'`","dependencies":["@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/unlink-button.tsx","type":"registry:ui","target":"@ui/unlink-button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/unlink-button"},{"name":"stack","type":"registry:block","title":"Stack Navigation","description":"iOS-style navigation stack with gestures and animations.","categories":["block"],"docs":"Import: `import { Stack, StackCard } from '@/components/ui/stack'`","dependencies":["motion","@use-gesture/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/stack/index.ts","type":"registry:component","target":"@ui/stack/index.ts"},{"path":"registry/constructive/blocks/stack/stack-context.tsx","type":"registry:component","target":"@ui/stack/stack-context.tsx"},{"path":"registry/constructive/blocks/stack/stack-card.tsx","type":"registry:component","target":"@ui/stack/stack-card.tsx"},{"path":"registry/constructive/blocks/stack/stack-header.tsx","type":"registry:component","target":"@ui/stack/stack-header.tsx"},{"path":"registry/constructive/blocks/stack/stack-backdrop.tsx","type":"registry:component","target":"@ui/stack/stack-backdrop.tsx"},{"path":"registry/constructive/blocks/stack/stack-viewport.tsx","type":"registry:component","target":"@ui/stack/stack-viewport.tsx"},{"path":"registry/constructive/blocks/stack/deferred-card-content.tsx","type":"registry:component","target":"@ui/stack/deferred-card-content.tsx"},{"path":"registry/constructive/blocks/stack/stack-animations.ts","type":"registry:lib","target":"@ui/stack/stack-animations.ts"},{"path":"registry/constructive/blocks/stack/stack-utils.ts","type":"registry:lib","target":"@ui/stack/stack-utils.ts"},{"path":"registry/constructive/blocks/stack/stack.types.ts","type":"registry:lib","target":"@ui/stack/stack.types.ts"},{"path":"registry/constructive/blocks/stack/use-stack-gestures.ts","type":"registry:hook","target":"@ui/stack/use-stack-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-peek-gestures.ts","type":"registry:hook","target":"@ui/stack/use-peek-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-stack-responsive.ts","type":"registry:hook","target":"@ui/stack/use-stack-responsive.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stack"},{"name":"toast","type":"registry:block","title":"Toast Notifications","description":"Styled toast notification functions using Sonner.","categories":["block"],"docs":"Import: `import { toastSuccess, toastError, toastWarning, toastInfo } from '@/components/ui/toast'`","dependencies":["sonner","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/button","@constructive/dialog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/toast/index.ts","type":"registry:component","target":"@ui/toast/index.ts"},{"path":"registry/constructive/blocks/toast/toast-error.tsx","type":"registry:component","target":"@ui/toast/toast-error.tsx"},{"path":"registry/constructive/blocks/toast/toast-success.tsx","type":"registry:component","target":"@ui/toast/toast-success.tsx"},{"path":"registry/constructive/blocks/toast/toast-warning.tsx","type":"registry:component","target":"@ui/toast/toast-warning.tsx"},{"path":"registry/constructive/blocks/toast/toast-info.tsx","type":"registry:component","target":"@ui/toast/toast-info.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/toast"},{"name":"app-bar","type":"registry:block","title":"App Bar","description":"A sticky application header with a sidebar trigger, responsive breadcrumbs, and framework-neutral search and action slots.","categories":["block","navigation"],"docs":"Import: `import { AppBar } from '@/components/ui/app-bar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/breadcrumb","@constructive/separator","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-bar.tsx","type":"registry:component","target":"@ui/app-bar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-bar"},{"name":"app-shell","type":"registry:block","title":"App Shell","description":"A provider-neutral application shell with typed navigation, brand, account, breadcrumb, and link-render contracts.","categories":["block","navigation"],"docs":"Import: `import { AppShell } from '@/components/ui/app-shell'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/app-bar","@constructive/avatar","@constructive/collapsible","@constructive/dropdown-menu","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-shell.tsx","type":"registry:component","target":"@ui/app-shell.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-shell"},{"name":"field","type":"registry:ui","title":"Field","description":"Composable form layout with groups, fieldsets, legends, labels, descriptions, separators, and accessible errors.","categories":["form"],"docs":"Import: `import { Field, FieldGroup, FieldLabel, FieldDescription, FieldError } from '@/components/ui/field'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/field.tsx","type":"registry:ui","target":"@ui/field.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/field"},{"name":"empty","type":"registry:ui","title":"Empty","description":"A composable empty-state layout with media, title, description, and action content.","categories":["layout"],"docs":"Import: `import { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent } from '@/components/ui/empty'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/empty.tsx","type":"registry:ui","target":"@ui/empty.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/empty"},{"name":"form-kit","type":"registry:ui","title":"Form Kit","description":"All form-related components: input, textarea, checkbox, radio, select, switch, progress, form controls.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/input","@constructive/textarea","@constructive/checkbox","@constructive/checkbox-group","@constructive/radio-group","@constructive/switch","@constructive/select","@constructive/progress","@constructive/form","@constructive/form-control","@constructive/input-group","@constructive/field","@constructive/label","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-kit"},{"name":"overlay-kit","type":"registry:ui","title":"Overlay Kit","description":"All overlay components: dialog, sheet, drawer, popover, tooltip, dropdown menu, alert dialog.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/dialog","@constructive/sheet","@constructive/drawer","@constructive/popover","@constructive/tooltip","@constructive/dropdown-menu","@constructive/alert-dialog","@constructive/command","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/overlay-kit"},{"name":"layout-kit","type":"registry:ui","title":"Layout Kit","description":"Layout and navigation components: tabs, sidebar, collapsible, resizable panels, scroll area, breadcrumb, pagination.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/tabs","@constructive/sidebar","@constructive/collapsible","@constructive/resizable","@constructive/scroll-area","@constructive/breadcrumb","@constructive/pagination","@constructive/separator","@constructive/empty","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/layout-kit"},{"name":"billing-contracts","type":"registry:lib","title":"Billing Contracts","description":"Provider-neutral billing DTOs, arbitrary-precision formatters, open-status presentation maps, and explicit resource states shared by every customer billing block.","categories":["blocks","billing"],"docs":"## Usage\n\nInstall this item when building a custom billing composition. It defines the shared resource states, account references, money values, allowances, plans, subscriptions, usage, credits, activity, messages, and formatting options used by the billing blocks.\n\n```ts\nimport type { BillingPlan, BillingResource } from '@/blocks/billing/billing-contracts/billing-contracts';\n\nconst plans: BillingResource = {\n status: 'ready',\n quality: 'authoritative',\n asOf: '2026-07-20T12:00:00.000Z',\n data: [{\n id: 'growth',\n name: 'Growth',\n prices: [{\n kind: 'fixed',\n id: 'growth-monthly',\n interval: 'month',\n money: { amountMinor: '4900', currency: 'USD' }\n }]\n }]\n};\n```\n\nKeep quantities, limits, deltas, and minor-unit money as decimal strings so large values retain their precision. Supply an explicit locale and time zone to the formatters, keep each record's currency, and use the explicit contact-sales, unlimited, uninitialized, and unknown variants when they apply.","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts","type":"registry:lib","target":"src/blocks/billing/billing-contracts/billing-contracts.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-contracts"},{"name":"billing-ui","type":"registry:lib","title":"Billing UI Helpers","description":"Shared formatting and presentation helpers used by the customer billing blocks.","categories":["blocks","billing"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/billing-contracts","@constructive/cn"],"files":[{"path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx","type":"registry:lib","target":"src/blocks/billing/billing-ui/billing-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-ui"},{"name":"billing-pricing-table","type":"registry:block","title":"Billing Pricing Table","description":"Responsive plan comparison with controlled interval selection, fixed and contact-sales pricing, current and featured states, and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a plan resource, account context, formatting options, a controlled billing interval, and the actions you want to show.\n\n```tsx\nimport { BillingPricingTable } from '@/blocks/billing/billing-pricing-table/billing-pricing-table';\n\n openPlanSelection({ planId, priceId, account })}\n onContactSales={({ planId, account }) => openSalesRequest({ planId, account })}\n/>\n```\n\nFixed prices use minor-unit decimal strings and the currency on each record. Use `BillingPrice.kind = 'contact_sales'` for custom pricing. Missing callbacks remove their actions, rejected promises appear next to the action, and resolved promises leave the selected plan state under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-pricing-table"},{"name":"billing-subscription-card","type":"registry:block","title":"Billing Subscription Card","description":"Current-plan summary with independent subscription, provider, and payment status plus exact lifecycle dates and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass the current plan together with any payment and provider states you want to show. Add only the actions that make sense in your billing flow.\n\n```tsx\nimport { BillingSubscriptionCard } from '@/blocks/billing/billing-subscription-card/billing-subscription-card';\n\n openSubscriptionSettings(subscriptionId, account)}\n/>\n```\n\nOnly `renewsAt` is labelled “Renews”; `endsAt` is always labelled “Ends.” Status strings are open, unknown values render neutrally, and missing callbacks hide their controls.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-subscription-card"},{"name":"billing-entitlements-list","type":"registry:block","title":"Billing Entitlements List","description":"Structured display of plan feature flags, caps, discrete quotas, meter allowances, and neutral unknown values.","categories":["blocks","billing"],"docs":"## Usage\n\nPass each entitlement with a semantic kind so features, caps, quotas, and metered allowances keep their distinct meaning.\n\n```tsx\nimport { BillingEntitlementsList } from '@/blocks/billing/billing-entitlements-list/billing-entitlements-list';\n\n\n```\n\nUse explicit `unlimited`, `uninitialized`, and `unknown` variants. Unknown values stay visible with a neutral presentation, and message overrides let you adapt the labels without changing the data model.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"},{"path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-entitlements-list"},{"name":"billing-usage-overview","type":"registry:block","title":"Billing Usage Overview","description":"Current-period usage with quota, boolean, unlimited, uninitialized, exhausted, overage, category-pool, and universal-pool states.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a current-period usage snapshot and nest child meters beneath category or universal pools when credits are shared.\n\n```tsx\nimport { BillingUsageOverview } from '@/blocks/billing/billing-usage-overview/billing-usage-overview';\n\n openUsageHistory(meterSlug)}\n onBuyCredits={(meterSlug) => openCreditPurchase(meterSlug)}\n/>\n```\n\nCategory and universal pools stay nested so their application order remains clear. Progress caps visually at 100 percent while text and accessible values preserve the actual used, allowance, and overage values. Actions disappear when their callbacks are absent.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-overview"},{"name":"billing-credits-card","type":"registry:block","title":"Billing Credits Card","description":"Available credits grouped by compatible meter and unit with permanent, period, rollover, expiring, and unknown lot semantics.","categories":["blocks","billing"],"docs":"## Usage\n\nPass available balances and their credit lots while keeping each meter and unit independent.\n\n```tsx\nimport { BillingCreditsCard } from '@/blocks/billing/billing-credits-card/billing-credits-card';\n\n\n```\n\nKeep incompatible meters and units in separate balance groups. Credit lots show the current grant makeup, while `billing-activity-table` provides a chronological view of grants, usage, adjustments, rollover, and expiration.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-credits-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-credits-card"},{"name":"billing-usage-history","type":"registry:block","title":"Billing Usage History","description":"Accessible, table-first period history with controlled meter, period, and pagination filters plus explicit quality labels.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a page of usage periods and control the meter, period, and pagination values when you provide their callbacks.\n\n```tsx\nimport { BillingUsageHistory } from '@/blocks/billing/billing-usage-history/billing-usage-history';\n\n\n```\n\nCredits and overage columns appear only when their values are marked as confirmed. Quality labels remain visible on each period, and the table keeps pagination and filter changes under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-history/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-history"},{"name":"billing-activity-table","type":"registry:block","title":"Billing Activity Table","description":"Paginated ledger activity with controlled filters, semantic class/type presentation, and a titled metadata detail sheet.","categories":["blocks","billing"],"docs":"## Usage\n\nPass ledger class and entry type with each activity entry so labels and badge tones describe the event itself.\n\n```tsx\nimport { BillingActivityTable } from '@/blocks/billing/billing-activity-table/billing-activity-table';\n\n\n```\n\nA positive delta can represent consumption and a negative delta can represent release or reset, so presentation derives from `ledgerClass` and `entryType` rather than the sign. Unknown values remain neutral, and JSON-safe metadata opens in a titled detail sheet.","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-activity-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-activity-table"},{"name":"billing-settings-page","type":"registry:block","title":"Billing Settings Page","description":"Router-neutral Overview, Usage, and Plans composition that keeps subscription, usage, credits, entitlements, history, activity, and pricing failures isolated.","categories":["blocks","billing"],"docs":"## Usage\n\nPass one account together with independent resources and actions. Use `section` and `onSectionChange` to synchronize navigation, or `defaultSection` for local state. The page renders its own heading by default; set `showHeader={false}` when the surrounding document already provides it.\n\n```tsx\nimport { BillingSettingsPage } from '@/blocks/billing/billing-settings-page/billing-settings-page';\n\n\n```\n\nEach resource renders its own loading, empty, error, ready, and quality state, so one unavailable section never replaces the whole page. Controlled filters and actions are forwarded to their matching leaf blocks.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-activity-table","@constructive/billing-contracts","@constructive/billing-credits-card","@constructive/billing-entitlements-list","@constructive/billing-pricing-table","@constructive/billing-subscription-card","@constructive/billing-usage-history","@constructive/billing-usage-overview","@constructive/cn","@constructive/separator","@constructive/tabs","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx","type":"registry:component","target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx"},{"path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-settings-page/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-settings-page"},{"name":"pack-foundation","type":"registry:lib","title":"Feature Pack Foundation","description":"Provider-neutral resource, action-policy, error, loading, empty, and status contracts shared by Constructive feature packs.","categories":[],"docs":null,"dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/empty","@constructive/skeleton"],"files":[{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx","type":"registry:component","target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pack-foundation"},{"name":"console-runtime","type":"registry:lib","title":"Console Runtime","description":"Endpoint, session, transport, cache partitioning, and adapter contracts for identity-scoped Constructive consoles.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/console-runtime/capabilities.ts","type":"registry:lib","target":"src/blocks/console-runtime/capabilities.ts"},{"path":"registry/constructive/blocks/console-runtime/endpoints.ts","type":"registry:lib","target":"src/blocks/console-runtime/endpoints.ts"},{"path":"registry/constructive/blocks/console-runtime/feature-adapter.ts","type":"registry:lib","target":"src/blocks/console-runtime/feature-adapter.ts"},{"path":"registry/constructive/blocks/console-runtime/index.ts","type":"registry:lib","target":"src/blocks/console-runtime/index.ts"},{"path":"registry/constructive/blocks/console-runtime/session.ts","type":"registry:lib","target":"src/blocks/console-runtime/session.ts"},{"path":"registry/constructive/blocks/console-runtime/standalone-session.ts","type":"registry:lib","target":"src/blocks/console-runtime/standalone-session.ts"},{"path":"registry/constructive/blocks/console-runtime/transport.ts","type":"registry:lib","target":"src/blocks/console-runtime/transport.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-runtime"},{"name":"console-feature-catalog","type":"registry:lib","title":"Console Feature Catalog","description":"Validated feature-pack capability manifests and stable backend preset profiles.","categories":[],"docs":null,"dependencies":["zod"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime"],"files":[{"path":"registry/constructive/feature-packs/capabilities.ts","type":"registry:lib","target":"src/feature-packs/capabilities.ts"},{"path":"registry/constructive/feature-packs/catalog.ts","type":"registry:lib","target":"src/feature-packs/catalog.ts"},{"path":"registry/constructive/feature-packs/catalog-validation.ts","type":"registry:lib","target":"src/feature-packs/catalog-validation.ts"},{"path":"registry/constructive/feature-packs/index.ts","type":"registry:lib","target":"src/feature-packs/index.ts"},{"path":"registry/constructive/feature-packs/manifest.ts","type":"registry:lib","target":"src/feature-packs/manifest.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-feature-catalog"},{"name":"console-kit-core","type":"registry:block","title":"Constructive Console Kit Core","description":"The leaf-independent Console Kit shell, runtime, discovery, and single modular Zustand store.","categories":[],"docs":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":["@constructive-io/data","@tanstack/react-query","graphql","lucide-react","zustand"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime","@constructive/console-feature-catalog","@constructive/alert","@constructive/app-bar","@constructive/app-shell","@constructive/badge","@constructive/button","@constructive/cn","@constructive/pack-foundation","@constructive/popover","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/feature-module.ts","type":"registry:lib","target":"src/blocks/console-kit/feature-module.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-routes.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-routes.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-contracts.ts"},{"path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx","type":"registry:component","target":"src/blocks/console-kit/console-connection-menu.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-runtime.tsx"},{"path":"registry/constructive/blocks/console-kit/use-latest-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/use-latest-callback.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-core.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-core.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-capabilities.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-callback.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-graphql.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts"},{"path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/adapter-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/context-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/context-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/endpoint-capability-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/navigation-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/runtime-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/session-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/session-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx","type":"registry:component","target":"src/blocks/console-kit/store/console-kit-store.tsx"},{"path":"registry/constructive/blocks/console-kit/store/index.ts","type":"registry:lib","target":"src/blocks/console-kit/store/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-core"},{"name":"feature-pack-data","type":"registry:block","title":"Data Feature Pack","description":"A current-_meta-only application data explorer with application-table filtering and spreadsheet CRUD.","categories":[],"docs":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":["@constructive-io/data","@constructive-io/sheets","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/button","@constructive/card","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/data/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/data.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-data"},{"name":"console-module-data","type":"registry:block","title":"Data Console Module","description":"Console Kit navigation, capability discovery, and tenant runtime binding for the Data feature pack.","categories":[],"docs":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-data","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-console-module.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-data"},{"name":"feature-pack-auth","type":"registry:block","title":"Authentication Feature Pack","description":"Provider-neutral public authentication flows and personal account/session management.","categories":[],"docs":"`feature-pack-auth` installed a provider-neutral view and `.constructive/feature-packs/auth.json`. Import from `@/blocks/feature-packs/auth/auth-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-auth` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Unsupported policy grants or callbacks stay absent, provider failures remain explicit, and callback credentials never enter the view.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/field","@constructive/input","@constructive/input-group","@constructive/separator","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-account-view.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-password-policy.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/auth.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-auth"},{"name":"console-module-auth","type":"registry:block","title":"Authentication Console Module","description":"Console Kit session flow, capability discovery, and Constructive adapter for the Authentication feature pack.","categories":[],"docs":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-auth","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/auth-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-auth"},{"name":"feature-pack-users","type":"registry:block","title":"App access Feature Pack","description":"App access governance with member lifecycle controls, invitations, access profiles, direct and effective permissions, and new-member defaults.","categories":[],"docs":"`feature-pack-users` installed a provider-neutral view and `.constructive/feature-packs/users.json`. Import from `@/blocks/feature-packs/users/users-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-users` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources or callbacks stay unavailable, while row policy, PostgreSQL privileges, RLS, and final-owner constraints decide mutations.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/input-group","@constructive/select","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/users/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/users.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-users"},{"name":"console-module-users","type":"registry:block","title":"App access Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the App access feature pack.","categories":[],"docs":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-users","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/users-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-users"},{"name":"feature-pack-organizations","type":"registry:block","title":"Organizations Feature Pack","description":"Complete tenant administration for selection, member governance, invitations, profiles, permissions, defaults, hierarchy, settings, principals, and API keys.","categories":[],"docs":"`feature-pack-organizations` installed a provider-neutral view and `.constructive/feature-packs/organizations.json`. Import from `@/blocks/feature-packs/organizations/organizations-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-organizations` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: When the active organization is missing or does not match the host-provided list, the view selects the first available organization. It never infers a principal, policy grant, or mutation authority; missing resources and callbacks stay unavailable, while PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/select","@constructive/switch","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/organizations.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-organizations"},{"name":"console-module-organizations","type":"registry:block","title":"Organizations Console Module","description":"Console Kit discovery, metadata resolution, and Constructive adapter for the Organizations feature pack.","categories":[],"docs":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-organizations","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/pack-foundation","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/organizations-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-organizations"},{"name":"feature-pack-storage","type":"registry:block","title":"Storage Feature Pack","description":"Bucket, folder, object, upload, download, and deletion surfaces backed by injected storage actions.","categories":[],"docs":"`feature-pack-storage` installed a provider-neutral view and `.constructive/feature-packs/storage.json`. Import from `@/blocks/feature-packs/storage/storage-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-storage` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: An object endpoint alone does not prove bucket or file operations; incomplete and read-only contracts keep write controls hidden.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/radio-group","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-storage"},{"name":"console-module-storage","type":"registry:block","title":"Storage Console Module","description":"Console Kit discovery, metadata resolution, adapter, and modular state slice for the Storage feature pack.","categories":[],"docs":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-storage","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/storage-adapter.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-console-slice.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-meta-contract.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-storage"},{"name":"feature-pack-billing","type":"registry:block","title":"Billing Feature Pack","description":"The feature-pack root for Constructive billing plans, subscriptions, usage, entitlements, credits, and activity.","categories":[],"docs":"`feature-pack-billing` installed a provider-neutral view and `.constructive/feature-packs/billing.json`. Import from `@/blocks/feature-packs/billing/billing-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-billing` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources remain independent degraded states, and unavailable provider callbacks stay absent.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/billing-settings-page","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/billing.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-billing"},{"name":"console-module-billing","type":"registry:block","title":"Billing Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Billing feature pack.","categories":[],"docs":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-billing","@constructive/billing-contracts","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/billing-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-billing"},{"name":"feature-pack-notifications","type":"registry:block","title":"Notifications Feature Pack","description":"An application notification inbox with read, open, and deletion actions.","categories":[],"docs":"`feature-pack-notifications` installed a provider-neutral view and `.constructive/feature-packs/notifications.json`. Import from `@/blocks/feature-packs/notifications/notifications-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-notifications` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host must provide an authoritative inbox, policy, and callbacks; absent operations stay unavailable and mutations require a refreshed resource.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/notifications.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-notifications"},{"name":"console-module-notifications","type":"registry:block","title":"Notifications Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Notifications feature pack.","categories":[],"docs":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-notifications","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/notifications-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-notifications"},{"name":"preset-auth-hardened","type":"registry:block","title":"Hardened Authentication Preset","description":"Stable Constructive auth-hardened backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/auth-hardened-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/auth-hardened.json","type":"registry:file","target":"~/.constructive/feature-packs/auth-hardened.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-auth-hardened"},{"name":"preset-b2b-storage","type":"registry:block","title":"B2B with Storage Preset","description":"Stable Constructive b2b-storage backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/b2b-storage-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/b2b-storage.json","type":"registry:file","target":"~/.constructive/feature-packs/b2b-storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-b2b-storage"},{"name":"preset-full","type":"registry:block","title":"Full Preset","description":"Stable Constructive full backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/console-module-billing","@constructive/console-module-notifications","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/full-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/full-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/full.json","type":"registry:file","target":"~/.constructive/feature-packs/full.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-full"},{"name":"console-kit-nextjs","type":"registry:block","title":"Constructive Console Kit for Next.js","description":"A full-page Next.js tenant console with semantic routing, auth, dynamic endpoint discovery, first-party adapters, and every feature pack.","categories":[],"docs":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/preset-full","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/constructive/index.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-nextjs"}]}
+{"schemaVersion":1,"kind":"constructive.blocks-registry-catalog","sourceCommit":"706ae32b8b03cd6effaa9d0d5f385d93529635df","aggregatePath":"apps/registry/registry.json","registryNamespace":"@constructive","itemCount":123,"items":[{"name":"constructive-theme","type":"registry:theme","title":"Constructive Theme","description":"Constructive design system theme — OKLCH colors, z-index layers, shadow utilities, and animations.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/constructive-theme"},{"name":"cn","type":"registry:lib","title":"cn utility","description":"Tailwind CSS class name merge utility using clsx and tailwind-merge.","categories":["utility"],"docs":"Import: `import { cn } from '@/lib/utils'`","dependencies":["clsx","tailwind-merge"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/cn"},{"name":"slot","type":"registry:lib","title":"Slot utility","description":"Polymorphic component utilities for asChild pattern.","categories":["utility"],"docs":"Import: `import { Slot } from '@/lib/slot'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/slot.tsx","type":"registry:lib","target":"@lib/slot.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/slot"},{"name":"use-controllable-state","type":"registry:hook","title":"useControllableState","description":"Hook for components with controlled/uncontrolled state.","categories":["hook"],"docs":"Import: `import { useControllableState } from '@/hooks/use-controllable-state'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-controllable-state.ts","type":"registry:hook","target":"@hooks/use-controllable-state.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-controllable-state"},{"name":"use-debounce","type":"registry:hook","title":"useDebounce","description":"Hook for debouncing values.","categories":["hook"],"docs":"Import: `import { useDebounce } from '@/hooks/use-debounce'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-debounce.ts","type":"registry:hook","target":"@hooks/use-debounce.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-debounce"},{"name":"use-mobile","type":"registry:hook","title":"useIsMobile","description":"Hook for detecting mobile viewport.","categories":["hook"],"docs":"Import: `import { useIsMobile } from '@/hooks/use-mobile'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-mobile.ts","type":"registry:hook","target":"@hooks/use-mobile.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-mobile"},{"name":"motion-config","type":"registry:lib","title":"Motion Config","description":"Animation presets and spring configurations for motion library.","categories":["animation"],"docs":"Import: `import { motionConfig } from '@/lib/motion/motion-config'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/motion/motion-config.ts","type":"registry:lib","target":"@lib/motion/motion-config.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-config"},{"name":"button","type":"registry:ui","title":"Button","description":"A button component with multiple variants and sizes.","categories":["primitive"],"docs":"Import: `import { Button } from '@/components/ui/button'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/button.tsx","type":"registry:ui","target":"@ui/button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/button"},{"name":"badge","type":"registry:ui","title":"Badge","description":"A badge component for status indicators and labels.","categories":["primitive"],"docs":"Import: `import { Badge } from '@/components/ui/badge'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/badge.tsx","type":"registry:ui","target":"@ui/badge.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/badge"},{"name":"label","type":"registry:ui","title":"Label","description":"A label component for form fields.","categories":["primitive"],"docs":"Import: `import { Label } from '@/components/ui/label'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/label.tsx","type":"registry:ui","target":"@ui/label.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/label"},{"name":"skeleton","type":"registry:ui","title":"Skeleton","description":"A skeleton loading placeholder component.","categories":["primitive"],"docs":"Import: `import { Skeleton } from '@/components/ui/skeleton'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/skeleton.tsx","type":"registry:ui","target":"@ui/skeleton.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/skeleton"},{"name":"card","type":"registry:ui","title":"Card","description":"A card component with header, content, and footer sections.","categories":["primitive"],"docs":"Import: `import { Card, CardHeader, CardContent, CardFooter } from '@/components/ui/card'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/card.tsx","type":"registry:ui","target":"@ui/card.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/card"},{"name":"chart","type":"registry:ui","title":"Chart","description":"Accessible TanStack Charts React adapter with a theme-adaptive semantic token configuration.","categories":["data-display"],"docs":"Import: `import { Chart, CONSTRUCTIVE_CHART_THEME } from '@/components/ui/chart'`","dependencies":["@tanstack/charts@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/chart.tsx","type":"registry:ui","target":"@ui/chart.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/chart"},{"name":"separator","type":"registry:ui","title":"Separator","description":"A visual separator for dividing content.","categories":["primitive"],"docs":"Import: `import { Separator } from '@/components/ui/separator'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/separator.tsx","type":"registry:ui","target":"@ui/separator.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/separator"},{"name":"alert","type":"registry:ui","title":"Alert","description":"An alert component for displaying messages.","categories":["primitive"],"docs":"Import: `import { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert.tsx","type":"registry:ui","target":"@ui/alert.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert"},{"name":"input","type":"registry:ui","title":"Input","description":"A text input component built on Base UI.","categories":["form"],"docs":"Import: `import { Input } from '@/components/ui/input'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input.tsx","type":"registry:ui","target":"@ui/input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input"},{"name":"textarea","type":"registry:ui","title":"Textarea","description":"A multiline text input component.","categories":["form"],"docs":"Import: `import { Textarea } from '@/components/ui/textarea'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/textarea.tsx","type":"registry:ui","target":"@ui/textarea.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/textarea"},{"name":"checkbox","type":"registry:ui","title":"Checkbox","description":"A checkbox component built on Base UI.","categories":["form"],"docs":"Import: `import { Checkbox } from '@/components/ui/checkbox'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox.tsx","type":"registry:ui","target":"@ui/checkbox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox"},{"name":"checkbox-group","type":"registry:ui","title":"Checkbox Group","description":"A group wrapper for multiple checkboxes.","categories":["form"],"docs":"Import: `import { CheckboxGroup } from '@/components/ui/checkbox-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/checkbox","@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox-group.tsx","type":"registry:ui","target":"@ui/checkbox-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox-group"},{"name":"radio-group","type":"registry:ui","title":"Radio Group","description":"A radio group component built on Base UI.","categories":["form"],"docs":"Import: `import { RadioGroup } from '@/components/ui/radio-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/radio-group.tsx","type":"registry:ui","target":"@ui/radio-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/radio-group"},{"name":"switch","type":"registry:ui","title":"Switch","description":"A toggle switch component built on Base UI.","categories":["form"],"docs":"Import: `import { Switch } from '@/components/ui/switch'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/switch.tsx","type":"registry:ui","target":"@ui/switch.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/switch"},{"name":"progress","type":"registry:ui","title":"Progress","description":"A progress bar component built on Base UI.","categories":["form"],"docs":"Import: `import { Progress } from '@/components/ui/progress'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progress.tsx","type":"registry:ui","target":"@ui/progress.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progress"},{"name":"avatar","type":"registry:ui","title":"Avatar","description":"An avatar component with image and fallback support.","categories":["data-display"],"docs":"Import: `import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/avatar.tsx","type":"registry:ui","target":"@ui/avatar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/avatar"},{"name":"portal","type":"registry:ui","title":"Portal","description":"Portal management for overlay components with z-index layering.","categories":["layout"],"docs":"Import: `import { Portal } from '@/components/ui/portal'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/portal.tsx","type":"registry:ui","target":"@ui/portal.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/portal"},{"name":"scroll-area","type":"registry:ui","title":"Scroll Area","description":"A custom scrollable area component built on Base UI.","categories":["layout"],"docs":"Import: `import { ScrollArea } from '@/components/ui/scroll-area'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/scroll-area.tsx","type":"registry:ui","target":"@ui/scroll-area.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/scroll-area"},{"name":"select","type":"registry:ui","title":"Select","description":"A select/dropdown component built on Base UI.","categories":["form"],"docs":"Import: `import { Select } from '@/components/ui/select'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/select.tsx","type":"registry:ui","target":"@ui/select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/select"},{"name":"tooltip","type":"registry:ui","title":"Tooltip","description":"A tooltip component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Tooltip } from '@/components/ui/tooltip'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tooltip.tsx","type":"registry:ui","target":"@ui/tooltip.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tooltip"},{"name":"popover","type":"registry:ui","title":"Popover","description":"A popover component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Popover } from '@/components/ui/popover'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/popover.tsx","type":"registry:ui","target":"@ui/popover.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/popover"},{"name":"dialog","type":"registry:ui","title":"Dialog","description":"A modal dialog component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Dialog } from '@/components/ui/dialog'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dialog.tsx","type":"registry:ui","target":"@ui/dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dialog"},{"name":"alert-dialog","type":"registry:ui","title":"Alert Dialog","description":"An alert dialog for confirmations built on Base UI.","categories":["overlay"],"docs":"Import: `import { AlertDialog } from '@/components/ui/alert-dialog'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert-dialog.tsx","type":"registry:ui","target":"@ui/alert-dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert-dialog"},{"name":"dropdown-menu","type":"registry:ui","title":"Dropdown Menu","description":"A dropdown menu component built on Base UI.","categories":["overlay"],"docs":"Import: `import { DropdownMenu } from '@/components/ui/dropdown-menu'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dropdown-menu.tsx","type":"registry:ui","target":"@ui/dropdown-menu.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dropdown-menu"},{"name":"sheet","type":"registry:ui","title":"Sheet","description":"A slide-out panel component with animations.","categories":["overlay"],"docs":"Import: `import { Sheet } from '@/components/ui/sheet'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/motion-config","@constructive/use-controllable-state","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sheet.tsx","type":"registry:ui","target":"@ui/sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sheet"},{"name":"drawer","type":"registry:ui","title":"Drawer","description":"A bottom drawer component using Vaul.","categories":["overlay"],"docs":"Import: `import { Drawer } from '@/components/ui/drawer'`","dependencies":["vaul"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/drawer.tsx","type":"registry:ui","target":"@ui/drawer.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/drawer"},{"name":"tabs","type":"registry:ui","title":"Tabs","description":"A tabs component built on Base UI.","categories":["layout"],"docs":"Import: `import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tabs.tsx","type":"registry:ui","target":"@ui/tabs.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tabs"},{"name":"collapsible","type":"registry:ui","title":"Collapsible","description":"A collapsible/accordion component built on Base UI.","categories":["layout"],"docs":"Import: `import { Collapsible } from '@/components/ui/collapsible'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/collapsible.tsx","type":"registry:ui","target":"@ui/collapsible.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/collapsible"},{"name":"resizable","type":"registry:ui","title":"Resizable","description":"Resizable panel layouts using react-resizable-panels.","categories":["layout"],"docs":"Import: `import { ResizablePanel, ResizablePanelGroup, ResizableHandle } from '@/components/ui/resizable'`","dependencies":["lucide-react","react-resizable-panels@^3.0.0"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/resizable.tsx","type":"registry:ui","target":"@ui/resizable.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/resizable"},{"name":"table","type":"registry:ui","title":"Table","description":"A table component with header, body, and cell primitives.","categories":["data-display"],"docs":"Import: `import { Table, TableHeader, TableBody, TableRow, TableCell } from '@/components/ui/table'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/table.tsx","type":"registry:ui","target":"@ui/table.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/table"},{"name":"pagination","type":"registry:ui","title":"Pagination","description":"A pagination component with navigation controls.","categories":["navigation"],"docs":"Import: `import { Pagination } from '@/components/ui/pagination'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/pagination.tsx","type":"registry:ui","target":"@ui/pagination.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pagination"},{"name":"breadcrumb","type":"registry:ui","title":"Breadcrumb","description":"A breadcrumb navigation component.","categories":["navigation"],"docs":"Import: `import { Breadcrumb } from '@/components/ui/breadcrumb'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/breadcrumb.tsx","type":"registry:ui","target":"@ui/breadcrumb.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/breadcrumb"},{"name":"form","type":"registry:ui","title":"Form","description":"Form utilities with react-hook-form integration.","categories":["form"],"docs":"Import: `import { Form, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'`","dependencies":["react-hook-form"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form.tsx","type":"registry:ui","target":"@ui/form.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form"},{"name":"form-control","type":"registry:ui","title":"Form Control","description":"A form control wrapper with label and error display.","categories":["form"],"docs":"Import: `import { FormControl } from '@/components/ui/form-control'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/label","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form-control.tsx","type":"registry:ui","target":"@ui/form-control.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-control"},{"name":"input-group","type":"registry:ui","title":"Input Group","description":"Input with addons and icons.","categories":["form"],"docs":"Import: `import { InputGroup } from '@/components/ui/input-group'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/input","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input-group.tsx","type":"registry:ui","target":"@ui/input-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input-group"},{"name":"autocomplete","type":"registry:ui","title":"Autocomplete","description":"An autocomplete component built on Base UI.","categories":["input"],"docs":"Import: `import { Autocomplete } from '@/components/ui/autocomplete'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/autocomplete.tsx","type":"registry:ui","target":"@ui/autocomplete.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/autocomplete"},{"name":"command","type":"registry:ui","title":"Command","description":"A command palette component.","categories":["overlay"],"docs":"Import: `import { Command } from '@/components/ui/command'`","dependencies":["cmdk","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/command.tsx","type":"registry:ui","target":"@ui/command.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/command"},{"name":"combobox","type":"registry:ui","title":"Combobox","description":"A combobox component with search built on Base UI.","categories":["input"],"docs":"Import: `import { Combobox } from '@/components/ui/combobox'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/combobox.tsx","type":"registry:ui","target":"@ui/combobox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/combobox"},{"name":"multi-select","type":"registry:ui","title":"Multi Select","description":"A multi-select component with tags.","categories":["input"],"docs":"Import: `import { MultiSelect } from '@/components/ui/multi-select'`","dependencies":["class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/popover","@constructive/separator","@constructive/input","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/multi-select.tsx","type":"registry:ui","target":"@ui/multi-select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/multi-select"},{"name":"tags","type":"registry:ui","title":"Tags","description":"A tags input component with autocomplete.","categories":["input"],"docs":"Import: `import { Tags } from '@/components/ui/tags'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/button","@constructive/command","@constructive/popover","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tags.tsx","type":"registry:ui","target":"@ui/tags.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tags"},{"name":"record-picker","type":"registry:ui","title":"Record Picker","description":"A record selection component with search and filtering.","categories":["input"],"docs":"Import: `import { RecordPicker } from '@/components/ui/record-picker'`","dependencies":["@remixicon/react","match-sorter"],"devDependencies":[],"registryDependencies":["@constructive/use-debounce","@constructive/checkbox","@constructive/input-group","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/record-picker.tsx","type":"registry:ui","target":"@ui/record-picker.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/record-picker"},{"name":"stepper","type":"registry:ui","title":"Stepper","description":"A stepper component for multi-step workflows.","categories":["navigation"],"docs":"Import: `import { Stepper } from '@/components/ui/stepper'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/stepper.tsx","type":"registry:ui","target":"@ui/stepper.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stepper"},{"name":"sidebar","type":"registry:ui","title":"Sidebar","description":"A responsive Base UI sidebar with off-canvas, icon-only, and fixed collapse modes.","categories":["navigation"],"docs":"Import: `import { Sidebar, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/use-mobile","@constructive/button","@constructive/input","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sidebar.tsx","type":"registry:ui","target":"@ui/sidebar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sidebar"},{"name":"calendar-rac","type":"registry:ui","title":"Calendar","description":"A calendar component using React Aria Components.","categories":["input"],"docs":"Import: `import { Calendar } from '@/components/ui/calendar-rac'`","dependencies":["@internationalized/date","react-aria-components"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/calendar-rac.tsx","type":"registry:ui","target":"@ui/calendar-rac.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/calendar-rac"},{"name":"json-input","type":"registry:ui","title":"JSON Input","description":"A JSON editor component using React Ace.","categories":["input"],"docs":"Import: `import { JsonInput } from '@/components/ui/json-input'`","dependencies":["lucide-react","react-ace","ace-builds"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/json-input.tsx","type":"registry:ui","target":"@ui/json-input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/json-input"},{"name":"sonner","type":"registry:ui","title":"Toaster","description":"Toast notifications using Sonner.","categories":["block"],"docs":"Import: `import { Toaster } from '@/components/ui/sonner'`","dependencies":["sonner"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sonner.tsx","type":"registry:ui","target":"@ui/sonner.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sonner"},{"name":"dock","type":"registry:ui","title":"Dock","description":"A macOS-style dock component.","categories":["navigation"],"docs":"Import: `import { Dock, DockIcon } from '@/components/ui/dock'`","dependencies":["class-variance-authority","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dock.tsx","type":"registry:ui","target":"@ui/dock.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dock"},{"name":"page-header","type":"registry:ui","title":"Page Header","description":"A simple page header component.","categories":["navigation"],"docs":"Import: `import { PageHeader } from '@/components/ui/page-header'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/page-header.tsx","type":"registry:ui","target":"@ui/page-header.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/page-header"},{"name":"flickering-grid","type":"registry:ui","title":"Flickering Grid","description":"An animated grid background effect.","categories":["effect"],"docs":"Import: `import { FlickeringGrid } from '@/components/ui/flickering-grid'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flickering-grid.tsx","type":"registry:ui","target":"@ui/flickering-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flickering-grid"},{"name":"flow-zoom-panel","type":"registry:ui","title":"Flow Zoom Panel","description":"Zoom in/out and fit-view controls for React Flow canvases.","categories":["layout"],"docs":"Import: `import { FlowZoomPanel } from '@/components/ui/flow-zoom-panel'`","dependencies":["@xyflow/react","@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flow-zoom-panel.tsx","type":"registry:ui","target":"@ui/flow-zoom-panel.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flow-zoom-panel"},{"name":"motion-grid","type":"registry:ui","title":"Motion Grid","description":"An animated grid with frame-based transitions.","categories":["effect"],"docs":"Import: `import { MotionGrid } from '@/components/ui/motion-grid'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/motion-grid.tsx","type":"registry:ui","target":"@ui/motion-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-grid"},{"name":"progressive-blur","type":"registry:ui","title":"Progressive Blur","description":"A gradient blur overlay effect.","categories":["effect"],"docs":"Import: `import { ProgressiveBlur } from '@/components/ui/progressive-blur'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur.tsx","type":"registry:ui","target":"@ui/progressive-blur.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur"},{"name":"progressive-blur-scroll-container","type":"registry:ui","title":"Progressive Blur Scroll Container","description":"A scroll container with blur effects at edges.","categories":["effect"],"docs":"Import: `import { ProgressiveBlurScrollContainer } from '@/components/ui/progressive-blur-scroll-container'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/progressive-blur","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur-scroll-container.tsx","type":"registry:ui","target":"@ui/progressive-blur-scroll-container.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur-scroll-container"},{"name":"responsive-diagram","type":"registry:ui","title":"Responsive Diagram","description":"A responsive diagram container with auto-scaling.","categories":["effect"],"docs":"Import: `import { ResponsiveDiagram } from '@/components/ui/responsive-diagram'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/responsive-diagram.tsx","type":"registry:ui","target":"@ui/responsive-diagram.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/responsive-diagram"},{"name":"unlink-button","type":"registry:ui","title":"Unlink Button","description":"A button for unlinking/removing records.","categories":["action"],"docs":"Import: `import { UnlinkButton } from '@/components/ui/unlink-button'`","dependencies":["@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/unlink-button.tsx","type":"registry:ui","target":"@ui/unlink-button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/unlink-button"},{"name":"org-chart","type":"registry:block","title":"Org Chart","description":"An interactive organizational chart with automatic hierarchy layout, zoom controls, node actions, and drag-to-reparent behavior.","categories":["block","application"],"docs":"Import: `import { OrgChart } from '@/components/ui/org-chart'`","dependencies":["@xyflow/react","@remixicon/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/avatar","@constructive/badge","@constructive/dropdown-menu","@constructive/flow-zoom-panel","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/org-chart/index.ts","type":"registry:component","target":"@ui/org-chart/index.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.tsx","type":"registry:component","target":"@ui/org-chart/org-chart.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-context.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-context.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-node.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-node.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-edge.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-edge.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-empty.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-empty.tsx"},{"path":"registry/constructive/blocks/org-chart/layout.ts","type":"registry:lib","target":"@ui/org-chart/layout.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart-utils.ts","type":"registry:lib","target":"@ui/org-chart/org-chart-utils.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.types.ts","type":"registry:lib","target":"@ui/org-chart/org-chart.types.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/org-chart"},{"name":"storage","type":"registry:block","title":"Storage Foundation","description":"Shared storage types, formatters, file icons, status badges, breadcrumbs, and object-toolbar primitives.","categories":["block","application"],"docs":"Install this transitively through `storage-browser`, or import its files directly from `@/components/ui/storage/*`.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/breadcrumb","@constructive/button","@constructive/dropdown-menu","@constructive/input-group","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/types.ts","type":"registry:lib","target":"@ui/storage/types.ts"},{"path":"registry/constructive/blocks/storage/utils.ts","type":"registry:lib","target":"@ui/storage/utils.ts"},{"path":"registry/constructive/blocks/storage/file-type-icon.tsx","type":"registry:component","target":"@ui/storage/file-type-icon.tsx"},{"path":"registry/constructive/blocks/storage/visibility-badge.tsx","type":"registry:component","target":"@ui/storage/visibility-badge.tsx"},{"path":"registry/constructive/blocks/storage/storage-breadcrumb.tsx","type":"registry:component","target":"@ui/storage/storage-breadcrumb.tsx"},{"path":"registry/constructive/blocks/storage/object-toolbar.tsx","type":"registry:component","target":"@ui/storage/object-toolbar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage"},{"name":"storage-bucket-rail","type":"registry:block","title":"Storage Bucket Rail","description":"A controlled, scrollable bucket list with visibility, object-count, selection, and create-bucket affordances.","categories":["block","application"],"docs":"Import: `import { BucketRail } from '@/components/ui/storage/bucket-rail'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/scroll-area","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-rail.tsx","type":"registry:component","target":"@ui/storage/bucket-rail.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-bucket-rail"},{"name":"storage-object-table","type":"registry:block","title":"Storage Object Table","description":"A controlled object table with sorting, selection, row actions, skeleton loading, and empty results.","categories":["block","application"],"docs":"Import: `import { ObjectTable } from '@/components/ui/storage/object-table'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/button","@constructive/checkbox","@constructive/dropdown-menu","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-table.tsx","type":"registry:component","target":"@ui/storage/object-table.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-object-table"},{"name":"storage-upload-dropzone","type":"registry:block","title":"Storage Upload Dropzone","description":"A drag-and-drop upload target with a browse action and an in-flight upload progress list.","categories":["block","application"],"docs":"Import: `import { UploadDropzone } from '@/components/ui/storage/upload-dropzone'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/button","@constructive/progress","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/upload-dropzone.tsx","type":"registry:component","target":"@ui/storage/upload-dropzone.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-upload-dropzone"},{"name":"storage-object-detail-sheet","type":"registry:block","title":"Storage Object Detail Sheet","description":"A controlled object-detail sheet with preview, metadata, rename, download, link, and confirmed delete actions.","categories":["block","application"],"docs":"Import: `import { ObjectDetailSheet } from '@/components/ui/storage/object-detail-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/alert-dialog","@constructive/button","@constructive/input","@constructive/separator","@constructive/skeleton","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-detail-sheet.tsx","type":"registry:component","target":"@ui/storage/object-detail-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-object-detail-sheet"},{"name":"storage-bucket-config-sheet","type":"registry:block","title":"Storage Bucket Config Sheet","description":"A create-or-edit bucket form with visibility and optional controls gated by the host schema.","categories":["block","application"],"docs":"Import: `import { BucketConfigSheet } from '@/components/ui/storage/bucket-config-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/input","@constructive/label","@constructive/radio-group","@constructive/switch","@constructive/textarea","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-config-sheet.tsx","type":"registry:component","target":"@ui/storage/bucket-config-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-bucket-config-sheet"},{"name":"storage-empty-state","type":"registry:block","title":"Storage Empty State","description":"Accessible empty and unavailable states for missing buckets, unprovisioned storage, empty buckets, and denied access.","categories":["block","application"],"docs":"Import: `import { StorageEmptyState } from '@/components/ui/storage/storage-empty-state'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/storage-empty-state.tsx","type":"registry:component","target":"@ui/storage/storage-empty-state.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-empty-state"},{"name":"storage-browser","type":"registry:block","title":"Storage Browser","description":"A complete controlled storage workspace with bucket navigation, object discovery, upload, configuration, detail, and empty states.","categories":["block","application"],"docs":"Import: `import { StorageBrowser } from '@/components/ui/storage'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/storage-bucket-rail","@constructive/storage-object-table","@constructive/storage-upload-dropzone","@constructive/storage-object-detail-sheet","@constructive/storage-bucket-config-sheet","@constructive/storage-empty-state","@constructive/cn","@constructive/separator","@constructive/button","@constructive/select","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/index.ts","type":"registry:component","target":"@ui/storage/index.ts"},{"path":"registry/constructive/blocks/storage/storage-browser.tsx","type":"registry:component","target":"@ui/storage/storage-browser.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-browser"},{"name":"stack","type":"registry:block","title":"Stack Navigation","description":"iOS-style navigation stack with gestures and animations.","categories":["block"],"docs":"Import: `import { Stack, StackCard } from '@/components/ui/stack'`","dependencies":["motion","@use-gesture/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/stack/index.ts","type":"registry:component","target":"@ui/stack/index.ts"},{"path":"registry/constructive/blocks/stack/stack-context.tsx","type":"registry:component","target":"@ui/stack/stack-context.tsx"},{"path":"registry/constructive/blocks/stack/stack-card.tsx","type":"registry:component","target":"@ui/stack/stack-card.tsx"},{"path":"registry/constructive/blocks/stack/stack-header.tsx","type":"registry:component","target":"@ui/stack/stack-header.tsx"},{"path":"registry/constructive/blocks/stack/stack-backdrop.tsx","type":"registry:component","target":"@ui/stack/stack-backdrop.tsx"},{"path":"registry/constructive/blocks/stack/stack-viewport.tsx","type":"registry:component","target":"@ui/stack/stack-viewport.tsx"},{"path":"registry/constructive/blocks/stack/deferred-card-content.tsx","type":"registry:component","target":"@ui/stack/deferred-card-content.tsx"},{"path":"registry/constructive/blocks/stack/stack-animations.ts","type":"registry:lib","target":"@ui/stack/stack-animations.ts"},{"path":"registry/constructive/blocks/stack/stack-utils.ts","type":"registry:lib","target":"@ui/stack/stack-utils.ts"},{"path":"registry/constructive/blocks/stack/stack.types.ts","type":"registry:lib","target":"@ui/stack/stack.types.ts"},{"path":"registry/constructive/blocks/stack/use-stack-gestures.ts","type":"registry:hook","target":"@ui/stack/use-stack-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-peek-gestures.ts","type":"registry:hook","target":"@ui/stack/use-peek-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-stack-responsive.ts","type":"registry:hook","target":"@ui/stack/use-stack-responsive.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stack"},{"name":"toast","type":"registry:block","title":"Toast Notifications","description":"Styled toast notification functions using Sonner.","categories":["block"],"docs":"Import: `import { toastSuccess, toastError, toastWarning, toastInfo } from '@/components/ui/toast'`","dependencies":["sonner","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/button","@constructive/dialog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/toast/index.ts","type":"registry:component","target":"@ui/toast/index.ts"},{"path":"registry/constructive/blocks/toast/toast-error.tsx","type":"registry:component","target":"@ui/toast/toast-error.tsx"},{"path":"registry/constructive/blocks/toast/toast-success.tsx","type":"registry:component","target":"@ui/toast/toast-success.tsx"},{"path":"registry/constructive/blocks/toast/toast-warning.tsx","type":"registry:component","target":"@ui/toast/toast-warning.tsx"},{"path":"registry/constructive/blocks/toast/toast-info.tsx","type":"registry:component","target":"@ui/toast/toast-info.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/toast"},{"name":"app-bar","type":"registry:block","title":"App Bar","description":"A sticky application header with a sidebar trigger, responsive breadcrumbs, and framework-neutral search and action slots.","categories":["block","navigation"],"docs":"Import: `import { AppBar } from '@/components/ui/app-bar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/breadcrumb","@constructive/separator","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-bar.tsx","type":"registry:component","target":"@ui/app-bar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-bar"},{"name":"app-shell","type":"registry:block","title":"App Shell","description":"A provider-neutral application shell with typed navigation, brand, account, breadcrumb, and link-render contracts.","categories":["block","navigation"],"docs":"Import: `import { AppShell } from '@/components/ui/app-shell'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/app-bar","@constructive/avatar","@constructive/collapsible","@constructive/dropdown-menu","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-shell.tsx","type":"registry:component","target":"@ui/app-shell.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-shell"},{"name":"field","type":"registry:ui","title":"Field","description":"Composable form layout with groups, fieldsets, legends, labels, descriptions, separators, and accessible errors.","categories":["form"],"docs":"Import: `import { Field, FieldGroup, FieldLabel, FieldDescription, FieldError } from '@/components/ui/field'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/field.tsx","type":"registry:ui","target":"@ui/field.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/field"},{"name":"empty","type":"registry:ui","title":"Empty","description":"A composable empty-state layout with media, title, description, and action content.","categories":["layout"],"docs":"Import: `import { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent } from '@/components/ui/empty'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/empty.tsx","type":"registry:ui","target":"@ui/empty.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/empty"},{"name":"ai","type":"registry:block","title":"AI Kit","description":"Presentational primitives for AI and agentic chat UIs: composer, messages, reasoning, tools, HITL approval, plan tracking, and streaming surfaces.","categories":["block","ai"],"docs":"Import PromptInput, Message, Tool, Reasoning, and PlanTracker from the installed ai directory under your configured shadcn ui alias.","dependencies":["lucide-react","sugar-high"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/avatar","@constructive/tooltip","@constructive/alert","@constructive/collapsible","@constructive/badge","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/ai/agent-loader.tsx","type":"registry:component","target":"@ui/ai/agent-loader.tsx"},{"path":"registry/constructive/blocks/ai/approval-card.tsx","type":"registry:component","target":"@ui/ai/approval-card.tsx"},{"path":"registry/constructive/blocks/ai/chat-container.tsx","type":"registry:component","target":"@ui/ai/chat-container.tsx"},{"path":"registry/constructive/blocks/ai/code-block.tsx","type":"registry:component","target":"@ui/ai/code-block.tsx"},{"path":"registry/constructive/blocks/ai/context-card.tsx","type":"registry:component","target":"@ui/ai/context-card.tsx"},{"path":"registry/constructive/blocks/ai/context-ring.tsx","type":"registry:component","target":"@ui/ai/context-ring.tsx"},{"path":"registry/constructive/blocks/ai/diff-table.tsx","type":"registry:component","target":"@ui/ai/diff-table.tsx"},{"path":"registry/constructive/blocks/ai/feedback-bar.tsx","type":"registry:component","target":"@ui/ai/feedback-bar.tsx"},{"path":"registry/constructive/blocks/ai/file-upload.tsx","type":"registry:component","target":"@ui/ai/file-upload.tsx"},{"path":"registry/constructive/blocks/ai/format-duration.ts","type":"registry:component","target":"@ui/ai/format-duration.ts"},{"path":"registry/constructive/blocks/ai/image.tsx","type":"registry:component","target":"@ui/ai/image.tsx"},{"path":"registry/constructive/blocks/ai/index.ts","type":"registry:component","target":"@ui/ai/index.ts"},{"path":"registry/constructive/blocks/ai/inline-diff.tsx","type":"registry:component","target":"@ui/ai/inline-diff.tsx"},{"path":"registry/constructive/blocks/ai/markdown.tsx","type":"registry:component","target":"@ui/ai/markdown.tsx"},{"path":"registry/constructive/blocks/ai/message.tsx","type":"registry:component","target":"@ui/ai/message.tsx"},{"path":"registry/constructive/blocks/ai/plan-tracker.tsx","type":"registry:component","target":"@ui/ai/plan-tracker.tsx"},{"path":"registry/constructive/blocks/ai/prompt-input.tsx","type":"registry:component","target":"@ui/ai/prompt-input.tsx"},{"path":"registry/constructive/blocks/ai/prompt-suggestion.tsx","type":"registry:component","target":"@ui/ai/prompt-suggestion.tsx"},{"path":"registry/constructive/blocks/ai/reasoning.tsx","type":"registry:component","target":"@ui/ai/reasoning.tsx"},{"path":"registry/constructive/blocks/ai/recommendation-card.tsx","type":"registry:component","target":"@ui/ai/recommendation-card.tsx"},{"path":"registry/constructive/blocks/ai/response-stream.tsx","type":"registry:component","target":"@ui/ai/response-stream.tsx"},{"path":"registry/constructive/blocks/ai/scroll-button.tsx","type":"registry:component","target":"@ui/ai/scroll-button.tsx"},{"path":"registry/constructive/blocks/ai/source.tsx","type":"registry:component","target":"@ui/ai/source.tsx"},{"path":"registry/constructive/blocks/ai/steps.tsx","type":"registry:component","target":"@ui/ai/steps.tsx"},{"path":"registry/constructive/blocks/ai/streaming-text.tsx","type":"registry:component","target":"@ui/ai/streaming-text.tsx"},{"path":"registry/constructive/blocks/ai/system-message.tsx","type":"registry:component","target":"@ui/ai/system-message.tsx"},{"path":"registry/constructive/blocks/ai/task-row.tsx","type":"registry:component","target":"@ui/ai/task-row.tsx"},{"path":"registry/constructive/blocks/ai/text-shimmer.tsx","type":"registry:component","target":"@ui/ai/text-shimmer.tsx"},{"path":"registry/constructive/blocks/ai/thinking-trace.tsx","type":"registry:component","target":"@ui/ai/thinking-trace.tsx"},{"path":"registry/constructive/blocks/ai/tool.tsx","type":"registry:component","target":"@ui/ai/tool.tsx"},{"path":"registry/constructive/blocks/ai/types.ts","type":"registry:component","target":"@ui/ai/types.ts"},{"path":"registry/constructive/blocks/ai/use-throttled-text.ts","type":"registry:component","target":"@ui/ai/use-throttled-text.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/ai"},{"name":"form-kit","type":"registry:ui","title":"Form Kit","description":"All form-related components: input, textarea, checkbox, radio, select, switch, progress, form controls.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/input","@constructive/textarea","@constructive/checkbox","@constructive/checkbox-group","@constructive/radio-group","@constructive/switch","@constructive/select","@constructive/progress","@constructive/form","@constructive/form-control","@constructive/input-group","@constructive/field","@constructive/label","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-kit"},{"name":"overlay-kit","type":"registry:ui","title":"Overlay Kit","description":"All overlay components: dialog, sheet, drawer, popover, tooltip, dropdown menu, alert dialog.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/dialog","@constructive/sheet","@constructive/drawer","@constructive/popover","@constructive/tooltip","@constructive/dropdown-menu","@constructive/alert-dialog","@constructive/command","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/overlay-kit"},{"name":"layout-kit","type":"registry:ui","title":"Layout Kit","description":"Layout and navigation components: tabs, sidebar, collapsible, resizable panels, scroll area, breadcrumb, pagination.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/tabs","@constructive/sidebar","@constructive/collapsible","@constructive/resizable","@constructive/scroll-area","@constructive/breadcrumb","@constructive/pagination","@constructive/separator","@constructive/empty","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/layout-kit"},{"name":"sheets","type":"registry:block","title":"Sheets","description":"A metadata-driven, spreadsheet-grade CRUD grid with accessible DOM cells and adapter-owned data access.","categories":["blocks","data"],"docs":"Install the complete source-owned grid with `pnpm dlx shadcn@latest add @constructive/sheets`, then import `Sheets`, `SheetsProvider`, and the adapter contracts from `@/components/ui/sheets`. The copied source depends on `@constructive-io/data` for the current `_meta` contract and runtime GraphQL operations; your host remains responsible for its endpoint, session, and RLS-aware execution boundary.","dependencies":["@constructive-io/data@^0.5.0","@internationalized/date","@remixicon/react","@tanstack/react-form","@tanstack/react-query","@tanstack/react-table@9.0.0-beta.58","@tanstack/react-virtual","@types/leaflet","clsx","graphql","inflekt","leaflet","lucide-react","motion","react-aria-components","react-leaflet","tailwind-merge","zod","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/calendar-rac","@constructive/card","@constructive/checkbox","@constructive/collapsible","@constructive/dropdown-menu","@constructive/form-control","@constructive/input","@constructive/input-group","@constructive/label","@constructive/pagination","@constructive/popover","@constructive/progressive-blur","@constructive/scroll-area","@constructive/select","@constructive/skeleton","@constructive/tabs","@constructive/textarea","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/postgraphile-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/use-sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/advanced.ts","type":"registry:lib","target":"@ui/sheets/advanced.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-execute.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-execute.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx","type":"registry:component","target":"@ui/sheets/auth/auth-gate.tsx"},{"path":"registry/constructive/blocks/sheets/auth/auth-types.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-types.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/index.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-forgot-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-login.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-register.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-reset-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/index.ts","type":"registry:lib","target":"@ui/sheets/auth/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-error-alert.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-loading-button.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-header.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-layout.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/forgot-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/form-field.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/login-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/password-strength.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/register-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/reset-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/auth-errors.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/schemas.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/token-store.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/validators.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/validators.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts","type":"registry:lib","target":"@ui/sheets/cell-model/badge-tones.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-props.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-slots.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/create-sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/badges.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/boolean.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/datetime.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/geometry.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/image.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/interval.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/number.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/relation.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/text.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/types.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/uri.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts","type":"registry:lib","target":"@ui/sheets/cell-model/image-cache.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/badges-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/boolean-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/datetime-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/draft-action-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/geometry-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/image-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/interval-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/loading-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/number-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/relation-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/text-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/uri-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry-defaults.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-groups.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-resolver.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts","type":"registry:lib","target":"@ui/sheets/cell-types/define-cell-type.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts","type":"registry:lib","target":"@ui/sheets/cell-types/type-mapping.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/types.ts","type":"registry:lib","target":"@ui/sheets/cell-types/types.ts"},{"path":"registry/constructive/blocks/sheets/commands/context.ts","type":"registry:lib","target":"@ui/sheets/commands/context.ts"},{"path":"registry/constructive/blocks/sheets/commands/dispatch.ts","type":"registry:lib","target":"@ui/sheets/commands/dispatch.ts"},{"path":"registry/constructive/blocks/sheets/commands/index.ts","type":"registry:lib","target":"@ui/sheets/commands/index.ts"},{"path":"registry/constructive/blocks/sheets/commands/keybinding.ts","type":"registry:lib","target":"@ui/sheets/commands/keybinding.ts"},{"path":"registry/constructive/blocks/sheets/commands/keymap.ts","type":"registry:lib","target":"@ui/sheets/commands/keymap.ts"},{"path":"registry/constructive/blocks/sheets/commands/registry.ts","type":"registry:lib","target":"@ui/sheets/commands/registry.ts"},{"path":"registry/constructive/blocks/sheets/commands/types.ts","type":"registry:lib","target":"@ui/sheets/commands/types.ts"},{"path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts","type":"registry:lib","target":"@ui/sheets/config/sheets-concurrency.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-context.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-context.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-execute.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-execute.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx","type":"registry:component","target":"@ui/sheets/context/sheets-provider.tsx"},{"path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-upload-presigned.ts"},{"path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts","type":"registry:lib","target":"@ui/sheets/forms/form-spec-builder.ts"},{"path":"registry/constructive/blocks/sheets/forms/index.ts","type":"registry:lib","target":"@ui/sheets/forms/index.ts"},{"path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts","type":"registry:lib","target":"@ui/sheets/forms/metadata-hash.ts"},{"path":"registry/constructive/blocks/sheets/forms/mutations.ts","type":"registry:lib","target":"@ui/sheets/forms/mutations.ts"},{"path":"registry/constructive/blocks/sheets/forms/types.ts","type":"registry:lib","target":"@ui/sheets/forms/types.ts"},{"path":"registry/constructive/blocks/sheets/forms/zod-schema.ts","type":"registry:lib","target":"@ui/sheets/forms/zod-schema.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/edit-intent.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-props.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/number-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/text-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/inline-cell-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/sheets-cell-host.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/use-sheets-content.ts"},{"path":"registry/constructive/blocks/sheets/grid/cell-routing.ts","type":"registry:lib","target":"@ui/sheets/grid/cell-routing.ts"},{"path":"registry/constructive/blocks/sheets/grid/draft-types.ts","type":"registry:lib","target":"@ui/sheets/grid/draft-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/editor-focus-trap.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts","type":"registry:lib","target":"@ui/sheets/grid/editors/overlay-presets.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/dock-status-bar.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/feedback-context.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/feedback-reducer.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/floating-status.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/index.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/index.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-state.tsx"},{"path":"registry/constructive/blocks/sheets/grid/filter-operators.ts","type":"registry:lib","target":"@ui/sheets/grid/filter-operators.ts"},{"path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts","type":"registry:lib","target":"@ui/sheets/grid/grid-cell-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-batch-commit.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-cell-editing.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-rows.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-submission.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-filter-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-operations.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-selection.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-state.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-load-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-paginate-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-undo-redo.ts"},{"path":"registry/constructive/blocks/sheets/grid/row-model.ts","type":"registry:lib","target":"@ui/sheets/grid/row-model.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.constants.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.context-menu.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.controls.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.formatters.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.pagination.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.table-selector.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.theme.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.types.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.types.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.utils.ts"},{"path":"registry/constructive/blocks/sheets/grid/use-sheets.ts","type":"registry:lib","target":"@ui/sheets/grid/use-sheets.ts"},{"path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/orderby-enum-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/query-keys.ts","type":"registry:lib","target":"@ui/sheets/hooks/query-keys.ts"},{"path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/relation-field-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-columns.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-metadata-cache.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-infinite-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-meta.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table-cursor.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-upload.ts"},{"path":"registry/constructive/blocks/sheets/index.ts","type":"registry:lib","target":"@ui/sheets/index.ts"},{"path":"registry/constructive/blocks/sheets/row-identity.ts","type":"registry:lib","target":"@ui/sheets/row-identity.ts"},{"path":"registry/constructive/blocks/sheets/selection/cell-extract.ts","type":"registry:lib","target":"@ui/sheets/selection/cell-extract.ts"},{"path":"registry/constructive/blocks/sheets/selection/fill.ts","type":"registry:lib","target":"@ui/sheets/selection/fill.ts"},{"path":"registry/constructive/blocks/sheets/selection/range-set.ts","type":"registry:lib","target":"@ui/sheets/selection/range-set.ts"},{"path":"registry/constructive/blocks/sheets/selection/selection-model.ts","type":"registry:lib","target":"@ui/sheets/selection/selection-model.ts"},{"path":"registry/constructive/blocks/sheets/selection/tsv.ts","type":"registry:lib","target":"@ui/sheets/selection/tsv.ts"},{"path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts","type":"registry:lib","target":"@ui/sheets/store/draft-rows-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts","type":"registry:lib","target":"@ui/sheets/store/relation-info-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/sheets-store.ts","type":"registry:lib","target":"@ui/sheets/store/sheets-store.ts"},{"path":"registry/constructive/blocks/sheets/table/features.ts","type":"registry:lib","target":"@ui/sheets/table/features.ts"},{"path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx","type":"registry:component","target":"@ui/sheets/table/grid-viewport.tsx"},{"path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts","type":"registry:lib","target":"@ui/sheets/table/use-sheets-table-instance.ts"},{"path":"registry/constructive/blocks/sheets/utils/cn.ts","type":"registry:lib","target":"@ui/sheets/utils/cn.ts"},{"path":"registry/constructive/blocks/sheets/utils/file.utils.ts","type":"registry:lib","target":"@ui/sheets/utils/file.utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx","type":"registry:component","target":"@ui/sheets/utils/image-with-fallback.tsx"},{"path":"registry/constructive/blocks/sheets/utils/map-picker.tsx","type":"registry:component","target":"@ui/sheets/utils/map-picker.tsx"},{"path":"registry/constructive/blocks/sheets/utils/motion-config.ts","type":"registry:lib","target":"@ui/sheets/utils/motion-config.ts"},{"path":"registry/constructive/blocks/sheets/utils/relation-utils.ts","type":"registry:lib","target":"@ui/sheets/utils/relation-utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-i18n.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-logger.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts","type":"registry:lib","target":"@ui/sheets/utils/use-color-scheme.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-image-status.ts","type":"registry:lib","target":"@ui/sheets/utils/use-image-status.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts","type":"registry:lib","target":"@ui/sheets/utils/use-resize-observer.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sheets"},{"name":"schema-builder","type":"registry:block","title":"Schema Builder","description":"An adapter-driven PostgreSQL schema editor for tables, fields, relationships, indexes, and RLS policies.","categories":["blocks","schema"],"docs":"Install the complete source-owned editor with `pnpm dlx shadcn@latest add @constructive/schema-builder`, then import `SchemaBuilder` and `defineSchemaBuilderAdapter` from `@/components/schema-builder`. The host supplies its generated-SDK adapter, control-plane scope, navigation, preferences, and invalidation behavior; the block never owns backend endpoints or credentials.","dependencies":["@constructive-io/data@^0.5.0","@dnd-kit/core","@dnd-kit/utilities","@fluentui/react-context-selector","@pgsql/types@17.6.2","@remixicon/react","@tanstack/react-query","clsx","lucide-react","motion","node-type-registry@^1.11.0","pg-ast@2.11.3","tailwind-merge","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/button","@constructive/checkbox","@constructive/collapsible","@constructive/combobox","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/input-group","@constructive/label","@constructive/multi-select","@constructive/progressive-blur","@constructive/responsive-diagram","@constructive/scroll-area","@constructive/select","@constructive/stack","@constructive/stepper","@constructive/switch","@constructive/tabs","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/schema-builder/compat/admin-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/admin-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/auth-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/auth-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/block-config.tsx","type":"registry:component","target":"@components/schema-builder/compat/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/compat/generated-types.ts","type":"registry:lib","target":"@components/schema-builder/compat/generated-types.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/modules-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/modules-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/relation-provisions.ts","type":"registry:lib","target":"@components/schema-builder/compat/relation-provisions.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/schema-builder-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/schema-builder-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/components/schema-builder.tsx","type":"registry:component","target":"@components/schema-builder/components/schema-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/context.tsx","type":"registry:component","target":"@components/schema-builder/core/context.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/index.ts","type":"registry:lib","target":"@components/schema-builder/core/index.ts"},{"path":"registry/constructive/blocks/schema-builder/core/mutation.ts","type":"registry:lib","target":"@components/schema-builder/core/mutation.ts"},{"path":"registry/constructive/blocks/schema-builder/core/query.ts","type":"registry:lib","target":"@components/schema-builder/core/query.ts"},{"path":"registry/constructive/blocks/schema-builder/core/store.ts","type":"registry:lib","target":"@components/schema-builder/core/store.ts"},{"path":"registry/constructive/blocks/schema-builder/fields/index.ts","type":"registry:lib","target":"@components/schema-builder/fields/index.ts"},{"path":"registry/constructive/blocks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/lib/utils.ts","type":"registry:lib","target":"@components/schema-builder/lib/utils.ts"},{"path":"registry/constructive/blocks/schema-builder/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/app-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/app-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/databases/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/databases/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/context/block-config.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/context/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/app-store.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/app-store.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/preferences-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/preferences-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/schema-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/schema-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/client-only.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/client-only.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schema-builder-header.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schema-builder-header.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx"},{"path":"registry/constructive/blocks/schema-builder/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/types.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/schema-builder"},{"name":"billing-contracts","type":"registry:lib","title":"Billing Contracts","description":"Provider-neutral billing DTOs, arbitrary-precision formatters, open-status presentation maps, and explicit resource states shared by every customer billing block.","categories":["blocks","billing"],"docs":"## Usage\n\nInstall this item when building a custom billing composition. It defines the shared resource states, account references, money values, allowances, plans, subscriptions, usage, credits, activity, messages, and formatting options used by the billing blocks.\n\n```ts\nimport type { BillingPlan, BillingResource } from '@/blocks/billing/billing-contracts/billing-contracts';\n\nconst plans: BillingResource = {\n status: 'ready',\n quality: 'authoritative',\n asOf: '2026-07-20T12:00:00.000Z',\n data: [{\n id: 'growth',\n name: 'Growth',\n prices: [{\n kind: 'fixed',\n id: 'growth-monthly',\n interval: 'month',\n money: { amountMinor: '4900', currency: 'USD' }\n }]\n }]\n};\n```\n\nKeep quantities, limits, deltas, and minor-unit money as decimal strings so large values retain their precision. Supply an explicit locale and time zone to the formatters, keep each record's currency, and use the explicit contact-sales, unlimited, uninitialized, and unknown variants when they apply.","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts","type":"registry:lib","target":"src/blocks/billing/billing-contracts/billing-contracts.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-contracts"},{"name":"billing-ui","type":"registry:lib","title":"Billing UI Helpers","description":"Shared formatting and presentation helpers used by the customer billing blocks.","categories":["blocks","billing"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/billing-contracts","@constructive/cn"],"files":[{"path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx","type":"registry:lib","target":"src/blocks/billing/billing-ui/billing-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-ui"},{"name":"billing-pricing-table","type":"registry:block","title":"Billing Pricing Table","description":"Responsive plan comparison with controlled interval selection, fixed and contact-sales pricing, current and featured states, and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a plan resource, account context, formatting options, a controlled billing interval, and the actions you want to show.\n\n```tsx\nimport { BillingPricingTable } from '@/blocks/billing/billing-pricing-table/billing-pricing-table';\n\n openPlanSelection({ planId, priceId, account })}\n onContactSales={({ planId, account }) => openSalesRequest({ planId, account })}\n/>\n```\n\nFixed prices use minor-unit decimal strings and the currency on each record. Use `BillingPrice.kind = 'contact_sales'` for custom pricing. Missing callbacks remove their actions, rejected promises appear next to the action, and resolved promises leave the selected plan state under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-pricing-table"},{"name":"billing-subscription-card","type":"registry:block","title":"Billing Subscription Card","description":"Current-plan summary with independent subscription, provider, and payment status plus exact lifecycle dates and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass the current plan together with any payment and provider states you want to show. Add only the actions that make sense in your billing flow.\n\n```tsx\nimport { BillingSubscriptionCard } from '@/blocks/billing/billing-subscription-card/billing-subscription-card';\n\n openSubscriptionSettings(subscriptionId, account)}\n/>\n```\n\nOnly `renewsAt` is labelled “Renews”; `endsAt` is always labelled “Ends.” Status strings are open, unknown values render neutrally, and missing callbacks hide their controls.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-subscription-card"},{"name":"billing-entitlements-list","type":"registry:block","title":"Billing Entitlements List","description":"Structured display of plan feature flags, caps, discrete quotas, meter allowances, and neutral unknown values.","categories":["blocks","billing"],"docs":"## Usage\n\nPass each entitlement with a semantic kind so features, caps, quotas, and metered allowances keep their distinct meaning.\n\n```tsx\nimport { BillingEntitlementsList } from '@/blocks/billing/billing-entitlements-list/billing-entitlements-list';\n\n\n```\n\nUse explicit `unlimited`, `uninitialized`, and `unknown` variants. Unknown values stay visible with a neutral presentation, and message overrides let you adapt the labels without changing the data model.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"},{"path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-entitlements-list"},{"name":"billing-usage-overview","type":"registry:block","title":"Billing Usage Overview","description":"Current-period usage with quota, boolean, unlimited, uninitialized, exhausted, overage, category-pool, and universal-pool states.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a current-period usage snapshot and nest child meters beneath category or universal pools when credits are shared.\n\n```tsx\nimport { BillingUsageOverview } from '@/blocks/billing/billing-usage-overview/billing-usage-overview';\n\n openUsageHistory(meterSlug)}\n onBuyCredits={(meterSlug) => openCreditPurchase(meterSlug)}\n/>\n```\n\nCategory and universal pools stay nested so their application order remains clear. Progress caps visually at 100 percent while text and accessible values preserve the actual used, allowance, and overage values. Actions disappear when their callbacks are absent.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-overview"},{"name":"billing-credits-card","type":"registry:block","title":"Billing Credits Card","description":"Available credits grouped by compatible meter and unit with permanent, period, rollover, expiring, and unknown lot semantics.","categories":["blocks","billing"],"docs":"## Usage\n\nPass available balances and their credit lots while keeping each meter and unit independent.\n\n```tsx\nimport { BillingCreditsCard } from '@/blocks/billing/billing-credits-card/billing-credits-card';\n\n\n```\n\nKeep incompatible meters and units in separate balance groups. Credit lots show the current grant makeup, while `billing-activity-table` provides a chronological view of grants, usage, adjustments, rollover, and expiration.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-credits-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-credits-card"},{"name":"billing-usage-history","type":"registry:block","title":"Billing Usage History","description":"Accessible, table-first period history with controlled meter, period, and pagination filters plus explicit quality labels.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a page of usage periods and control the meter, period, and pagination values when you provide their callbacks.\n\n```tsx\nimport { BillingUsageHistory } from '@/blocks/billing/billing-usage-history/billing-usage-history';\n\n\n```\n\nCredits and overage columns appear only when their values are marked as confirmed. Quality labels remain visible on each period, and the table keeps pagination and filter changes under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-history/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-history"},{"name":"billing-activity-table","type":"registry:block","title":"Billing Activity Table","description":"Paginated ledger activity with controlled filters, semantic class/type presentation, and a titled metadata detail sheet.","categories":["blocks","billing"],"docs":"## Usage\n\nPass ledger class and entry type with each activity entry so labels and badge tones describe the event itself.\n\n```tsx\nimport { BillingActivityTable } from '@/blocks/billing/billing-activity-table/billing-activity-table';\n\n\n```\n\nA positive delta can represent consumption and a negative delta can represent release or reset, so presentation derives from `ledgerClass` and `entryType` rather than the sign. Unknown values remain neutral, and JSON-safe metadata opens in a titled detail sheet.","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-activity-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-activity-table"},{"name":"billing-settings-page","type":"registry:block","title":"Billing Settings Page","description":"Router-neutral Overview, Usage, and Plans composition that keeps subscription, usage, credits, entitlements, history, activity, and pricing failures isolated.","categories":["blocks","billing"],"docs":"## Usage\n\nPass one account together with independent resources and actions. Use `section` and `onSectionChange` to synchronize navigation, or `defaultSection` for local state. The page renders its own heading by default; set `showHeader={false}` when the surrounding document already provides it.\n\n```tsx\nimport { BillingSettingsPage } from '@/blocks/billing/billing-settings-page/billing-settings-page';\n\n\n```\n\nEach resource renders its own loading, empty, error, ready, and quality state, so one unavailable section never replaces the whole page. Controlled filters and actions are forwarded to their matching leaf blocks.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-activity-table","@constructive/billing-contracts","@constructive/billing-credits-card","@constructive/billing-entitlements-list","@constructive/billing-pricing-table","@constructive/billing-subscription-card","@constructive/billing-usage-history","@constructive/billing-usage-overview","@constructive/cn","@constructive/separator","@constructive/tabs","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx","type":"registry:component","target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx"},{"path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-settings-page/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-settings-page"},{"name":"command-palette","type":"registry:block","title":"Command Palette","description":"Framework-neutral command discovery with page-scoped registration, structured shortcuts, multi-step flows, and cancellable background tasks.","categories":["blocks","application-shell"],"docs":"## Usage\n\nCreate one registry for the application, adapt navigation at the host boundary, and render the palette near the root layout. Pages can register commands while mounted with `usePageCommands`.\n\n```tsx\nimport { createCommandRegistry, kbd } from '@constructive-io/command-palette';\nimport { CommandPalette } from '@/blocks/command-palette/command-palette';\n\nconst registry = createCommandRegistry({\n groups: [{ id: 'navigation', label: 'Navigation', priority: 1 }],\n commands: [{\n id: 'settings',\n label: 'Open settings',\n type: 'navigation',\n group: 'navigation',\n href: '/settings',\n shortcut: kbd(',', 'mod')\n }]\n});\n\n router.push(href)} />;\n```\n\nThe installed block owns presentation and keyboard interaction. The headless package owns command registration, execution, multi-step state, and background-task lifecycle. Route authorization, action permissions, errors, and business workflows remain the host application's responsibility.","dependencies":["@constructive-io/command-palette@^0.4.0","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/button","@constructive/cn","@constructive/command","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/command-palette/command-palette.tsx","type":"registry:component","target":"src/blocks/command-palette/command-palette.tsx"},{"path":"registry/constructive/blocks/command-palette/kbd-shortcut.tsx","type":"registry:component","target":"src/blocks/command-palette/kbd-shortcut.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/multi-step-view.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/multi-step-view.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/step-indicator.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/step-indicator.tsx"},{"path":"registry/constructive/blocks/command-palette/background/background-task-stack.tsx","type":"registry:component","target":"src/blocks/command-palette/background/background-task-stack.tsx"},{"path":"registry/constructive/blocks/command-palette/background/inline-task-bar.tsx","type":"registry:component","target":"src/blocks/command-palette/background/inline-task-bar.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-card.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-card.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-icons.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-icons.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/command-palette"},{"name":"pack-foundation","type":"registry:lib","title":"Feature Pack Foundation","description":"Provider-neutral resource, action-policy, error, loading, empty, and status contracts shared by Constructive feature packs.","categories":[],"docs":null,"dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/empty","@constructive/skeleton"],"files":[{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx","type":"registry:component","target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pack-foundation"},{"name":"console-runtime","type":"registry:lib","title":"Console Runtime","description":"Endpoint, session, transport, cache partitioning, and adapter contracts for identity-scoped Constructive consoles.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/console-runtime/capabilities.ts","type":"registry:lib","target":"src/blocks/console-runtime/capabilities.ts"},{"path":"registry/constructive/blocks/console-runtime/endpoints.ts","type":"registry:lib","target":"src/blocks/console-runtime/endpoints.ts"},{"path":"registry/constructive/blocks/console-runtime/feature-adapter.ts","type":"registry:lib","target":"src/blocks/console-runtime/feature-adapter.ts"},{"path":"registry/constructive/blocks/console-runtime/index.ts","type":"registry:lib","target":"src/blocks/console-runtime/index.ts"},{"path":"registry/constructive/blocks/console-runtime/session.ts","type":"registry:lib","target":"src/blocks/console-runtime/session.ts"},{"path":"registry/constructive/blocks/console-runtime/standalone-session.ts","type":"registry:lib","target":"src/blocks/console-runtime/standalone-session.ts"},{"path":"registry/constructive/blocks/console-runtime/transport.ts","type":"registry:lib","target":"src/blocks/console-runtime/transport.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-runtime"},{"name":"console-feature-catalog","type":"registry:lib","title":"Console Feature Catalog","description":"Validated feature-pack capability manifests and stable backend preset profiles.","categories":[],"docs":null,"dependencies":["zod"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime"],"files":[{"path":"registry/constructive/feature-packs/capabilities.ts","type":"registry:lib","target":"src/feature-packs/capabilities.ts"},{"path":"registry/constructive/feature-packs/catalog.ts","type":"registry:lib","target":"src/feature-packs/catalog.ts"},{"path":"registry/constructive/feature-packs/catalog-validation.ts","type":"registry:lib","target":"src/feature-packs/catalog-validation.ts"},{"path":"registry/constructive/feature-packs/index.ts","type":"registry:lib","target":"src/feature-packs/index.ts"},{"path":"registry/constructive/feature-packs/manifest.ts","type":"registry:lib","target":"src/feature-packs/manifest.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-feature-catalog"},{"name":"console-kit-core","type":"registry:block","title":"Constructive Console Kit Core","description":"The leaf-independent Console Kit shell, runtime, discovery, and single modular Zustand store.","categories":[],"docs":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":["@constructive-io/data@^0.5.0","@tanstack/react-query","graphql","lucide-react","zustand"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime","@constructive/console-feature-catalog","@constructive/alert","@constructive/app-bar","@constructive/app-shell","@constructive/badge","@constructive/button","@constructive/cn","@constructive/pack-foundation","@constructive/popover","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/feature-module.ts","type":"registry:lib","target":"src/blocks/console-kit/feature-module.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-routes.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-routes.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-contracts.ts"},{"path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx","type":"registry:component","target":"src/blocks/console-kit/console-connection-menu.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-runtime.tsx"},{"path":"registry/constructive/blocks/console-kit/use-latest-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/use-latest-callback.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-core.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-core.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-capabilities.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-callback.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-graphql.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts"},{"path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/adapter-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/context-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/context-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/endpoint-capability-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/navigation-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/runtime-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/session-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/session-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx","type":"registry:component","target":"src/blocks/console-kit/store/console-kit-store.tsx"},{"path":"registry/constructive/blocks/console-kit/store/index.ts","type":"registry:lib","target":"src/blocks/console-kit/store/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-core"},{"name":"feature-pack-data","type":"registry:block","title":"Data Feature Pack","description":"A current-_meta-only application data explorer with application-table filtering and spreadsheet CRUD.","categories":[],"docs":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":["@constructive-io/data@^0.5.0","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/sheets","@constructive/alert","@constructive/button","@constructive/card","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/data/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/data.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-data"},{"name":"console-module-data","type":"registry:block","title":"Data Console Module","description":"Console Kit navigation, capability discovery, and tenant runtime binding for the Data feature pack.","categories":[],"docs":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-data","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/sheets","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-console-module.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-data"},{"name":"feature-pack-auth","type":"registry:block","title":"Authentication Feature Pack","description":"Provider-neutral public authentication flows and personal account/session management.","categories":[],"docs":"`feature-pack-auth` installed a provider-neutral view and `.constructive/feature-packs/auth.json`. Import from `@/blocks/feature-packs/auth/auth-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-auth` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Unsupported policy grants or callbacks stay absent, provider failures remain explicit, and callback credentials never enter the view.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/field","@constructive/input","@constructive/input-group","@constructive/separator","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-account-view.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-password-policy.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/auth.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-auth"},{"name":"console-module-auth","type":"registry:block","title":"Authentication Console Module","description":"Console Kit session flow, capability discovery, and Constructive adapter for the Authentication feature pack.","categories":[],"docs":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-auth","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/auth-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-auth"},{"name":"feature-pack-users","type":"registry:block","title":"App access Feature Pack","description":"App access governance with member lifecycle controls, invitations, access profiles, direct and effective permissions, and new-member defaults.","categories":[],"docs":"`feature-pack-users` installed a provider-neutral view and `.constructive/feature-packs/users.json`. Import from `@/blocks/feature-packs/users/users-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-users` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources or callbacks stay unavailable, while row policy, PostgreSQL privileges, RLS, and final-owner constraints decide mutations.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/input-group","@constructive/select","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/users/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/users.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-users"},{"name":"console-module-users","type":"registry:block","title":"App access Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the App access feature pack.","categories":[],"docs":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-users","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/users-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-users"},{"name":"feature-pack-organizations","type":"registry:block","title":"Organizations Feature Pack","description":"Complete tenant administration for selection, member governance, invitations, profiles, permissions, defaults, hierarchy, settings, principals, and API keys.","categories":[],"docs":"`feature-pack-organizations` installed a provider-neutral view and `.constructive/feature-packs/organizations.json`. Import from `@/blocks/feature-packs/organizations/organizations-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-organizations` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: When the active organization is missing or does not match the host-provided list, the view selects the first available organization. It never infers a principal, policy grant, or mutation authority; missing resources and callbacks stay unavailable, while PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/select","@constructive/switch","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/organizations.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-organizations"},{"name":"console-module-organizations","type":"registry:block","title":"Organizations Console Module","description":"Console Kit discovery, metadata resolution, and Constructive adapter for the Organizations feature pack.","categories":[],"docs":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-organizations","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/pack-foundation","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/organizations-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-organizations"},{"name":"feature-pack-storage","type":"registry:block","title":"Storage Feature Pack","description":"Bucket, folder, object, upload, download, and deletion surfaces backed by injected storage actions.","categories":[],"docs":"`feature-pack-storage` installed a provider-neutral view and `.constructive/feature-packs/storage.json`. Import from `@/blocks/feature-packs/storage/storage-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-storage` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: An object endpoint alone does not prove bucket or file operations; incomplete and read-only contracts keep write controls hidden.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/radio-group","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-storage"},{"name":"console-module-storage","type":"registry:block","title":"Storage Console Module","description":"Console Kit discovery, metadata resolution, adapter, and modular state slice for the Storage feature pack.","categories":[],"docs":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-storage","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/storage-adapter.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-console-slice.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-meta-contract.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-storage"},{"name":"feature-pack-billing","type":"registry:block","title":"Billing Feature Pack","description":"The feature-pack root for Constructive billing plans, subscriptions, usage, entitlements, credits, and activity.","categories":[],"docs":"`feature-pack-billing` installed a provider-neutral view and `.constructive/feature-packs/billing.json`. Import from `@/blocks/feature-packs/billing/billing-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-billing` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources remain independent degraded states, and unavailable provider callbacks stay absent.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/billing-settings-page","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/billing.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-billing"},{"name":"console-module-billing","type":"registry:block","title":"Billing Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Billing feature pack.","categories":[],"docs":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-billing","@constructive/billing-contracts","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/billing-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-billing"},{"name":"feature-pack-notifications","type":"registry:block","title":"Notifications Feature Pack","description":"An application notification inbox with read, open, and deletion actions.","categories":[],"docs":"`feature-pack-notifications` installed a provider-neutral view and `.constructive/feature-packs/notifications.json`. Import from `@/blocks/feature-packs/notifications/notifications-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-notifications` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host must provide an authoritative inbox, policy, and callbacks; absent operations stay unavailable and mutations require a refreshed resource.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/notifications.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-notifications"},{"name":"console-module-notifications","type":"registry:block","title":"Notifications Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Notifications feature pack.","categories":[],"docs":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-notifications","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/notifications-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-notifications"},{"name":"preset-auth-hardened","type":"registry:block","title":"Hardened Authentication Preset","description":"Stable Constructive auth-hardened backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/auth-hardened-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/auth-hardened.json","type":"registry:file","target":"~/.constructive/feature-packs/auth-hardened.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-auth-hardened"},{"name":"preset-b2b-storage","type":"registry:block","title":"B2B with Storage Preset","description":"Stable Constructive b2b-storage backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/b2b-storage-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/b2b-storage.json","type":"registry:file","target":"~/.constructive/feature-packs/b2b-storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-b2b-storage"},{"name":"preset-full","type":"registry:block","title":"Full Preset","description":"Stable Constructive full backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/console-module-billing","@constructive/console-module-notifications","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/full-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/full-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/full.json","type":"registry:file","target":"~/.constructive/feature-packs/full.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-full"},{"name":"console-kit-nextjs","type":"registry:block","title":"Constructive Console Kit for Next.js","description":"A full-page Next.js tenant console with semantic routing, auth, dynamic endpoint discovery, first-party adapters, and every feature pack.","categories":[],"docs":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/preset-full","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/constructive/index.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-nextjs"},{"name":"app-kit-core","type":"registry:block","title":"Constructive App Kit Core","description":"Typed, server-safe application resources, queries, actions, scope partitioning, schema validation, and opt-in client runtime.","categories":[],"docs":"Install this root to define Constructive-native application contracts without choosing a view family. Import the client runtime explicitly when a connected view needs TanStack Query. Credentials never belong in definitions or AppScope.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/core/contracts.ts","type":"registry:lib","target":"src/blocks/app-kit/core/contracts.ts"},{"path":"registry/constructive/blocks/app-kit/core/navigation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/navigation.ts"},{"path":"registry/constructive/blocks/app-kit/core/schema-validation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/schema-validation.ts"},{"path":"registry/constructive/blocks/app-kit/core/scope.ts","type":"registry:lib","target":"src/blocks/app-kit/core/scope.ts"},{"path":"registry/constructive/blocks/app-kit/core/runtime.tsx","type":"registry:component","target":"src/blocks/app-kit/core/runtime.tsx"},{"path":"registry/constructive/blocks/app-kit/core/index.ts","type":"registry:lib","target":"src/blocks/app-kit/core/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"runtime","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal"],"intents":["define-resources","load-data","execute-actions","validate-schema"],"capabilities":["resource-contracts","query-contracts","action-contracts","scoped-cache","schema-validation","navigation-adapters"],"slots":["record-opener","url-state-adapter"],"events":["query-settled","action-settled","scope-changed"],"compatibleWith":["app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-core"},{"name":"app-kit-data","type":"registry:block","title":"Constructive App Kit Data Views","description":"Controlled and connected tables, lists, cards, record details, forms, relations, collection controls, and action bars.","categories":[],"docs":"Use this root for record and collection applications. Loaders stay server-driven, relation pickers search remotely, ambiguous identities fail read-only, and every view distinguishes loading, empty, denied, and error states.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/combobox","@constructive/empty","@constructive/field","@constructive/input","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/switch","@constructive/table","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/data/types.ts","type":"registry:lib","target":"src/blocks/app-kit/data/types.ts"},{"path":"registry/constructive/blocks/app-kit/data/states.tsx","type":"registry:component","target":"src/blocks/app-kit/data/states.tsx"},{"path":"registry/constructive/blocks/app-kit/data/controls.tsx","type":"registry:component","target":"src/blocks/app-kit/data/controls.tsx"},{"path":"registry/constructive/blocks/app-kit/data/collections.tsx","type":"registry:component","target":"src/blocks/app-kit/data/collections.tsx"},{"path":"registry/constructive/blocks/app-kit/data/detail-form.tsx","type":"registry:component","target":"src/blocks/app-kit/data/detail-form.tsx"},{"path":"registry/constructive/blocks/app-kit/data/relations.tsx","type":"registry:component","target":"src/blocks/app-kit/data/relations.tsx"},{"path":"registry/constructive/blocks/app-kit/data/action-bars.tsx","type":"registry:component","target":"src/blocks/app-kit/data/action-bars.tsx"},{"path":"registry/constructive/blocks/app-kit/data/index.ts","type":"registry:lib","target":"src/blocks/app-kit/data/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["record","collection"],"intents":["browse","search","filter","sort","edit","relate","bulk-act"],"capabilities":["table","list","cards","record-detail","generated-form","relation-picker","relation-panel","pagination","bulk-actions"],"slots":["cell-renderer","record-renderer","form-field","toolbar","footer"],"events":["state-change","open-record","submit","link-record","unlink-record","bulk-action"],"compatibleWith":["app-kit-core","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-data"},{"name":"app-kit-board","type":"registry:block","title":"Constructive App Kit Board","description":"A typed controlled board and connected resource wrapper with semantic moves, keyboard alternatives, and mutation rollback.","categories":[],"docs":"Board movement is disabled until the host supplies an explicit semantic action. Pointer and keyboard moves use the same action contract, restore focus, and roll back optimistic state on denial or failure.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/card","@constructive/dropdown-menu","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/board/board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/connected-board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/connected-board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/index.ts","type":"registry:lib","target":"src/blocks/app-kit/board/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["collection","board"],"intents":["plan","prioritize","move-records","inspect"],"capabilities":["board","typed-columns","semantic-move","keyboard-move","optimistic-rollback"],"slots":["card"],"events":["open-record","move-record","move-denied"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-board"},{"name":"app-kit-dashboard","type":"registry:block","title":"Constructive App Kit Dashboard","description":"Explicit analytical widgets and a versioned, replaceable layout store on the accessible SVG and SSR foundation from TanStack Charts.","categories":[],"docs":"Dashboard widgets always use explicit analytical loaders; they never derive totals from a paginated collection page. Runtime customization is limited to an approved typed catalog, while layout persistence is replaceable.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/charts@0.6.4","@tanstack/charts-scales@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/chart","@constructive/cn","@constructive/dropdown-menu","@constructive/empty","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/dashboard/widgets.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/widgets.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/layout-store.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/layout-store.ts"},{"path":"registry/constructive/blocks/app-kit/dashboard/dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/connected-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/connected-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/persisted-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/persisted-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/index.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["aggregate","series","breakdown"],"intents":["monitor","analyze","compare","configure-layout"],"capabilities":["kpi","bar-chart","line-chart","breakdown-table","widget-catalog","layout-store","layout-persistence"],"slots":["widget"],"events":["layout-change"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-dashboard"},{"name":"app-kit-calendar","type":"registry:block","title":"Constructive App Kit Calendar","description":"Localized controlled month and agenda views with explicit timezones and connected range-query loading.","categories":[],"docs":"The host owns record opening and editing, while the connected wrapper loads only the visible range. Recurrence, resource scheduling, and drag rescheduling are intentionally outside V1.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/cn","@constructive/empty","@constructive/skeleton","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/calendar/calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/connected-calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/connected-calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/index.ts","type":"registry:lib","target":"src/blocks/app-kit/calendar/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["temporal","collection"],"intents":["schedule","browse-by-date","inspect"],"capabilities":["temporal","month","agenda","range-query","localization","timezone"],"events":["range-change","view-change","open-record"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-calendar"},{"name":"app-kit-workflow","type":"registry:block","title":"Constructive App Kit Workflow UI","description":"Controlled and connected action surfaces, confirmation and input dialogs, bulk execution, and a multi-step stepper.","categories":[],"docs":"This root composes application and server actions into accessible interaction surfaces; it is not a durable workflow engine. Validation, permission failures, cancellation, and partial errors remain explicit.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/alert-dialog","@constructive/app-kit-core","@constructive/button","@constructive/dialog","@constructive/dropdown-menu","@constructive/separator","@constructive/stepper","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/workflow/actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/connected-actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/connected-actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/stepper.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/stepper.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/index.ts","type":"registry:lib","target":"src/blocks/app-kit/workflow/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"composition","boundary":"client","provider":"app-kit","dataShapes":["record","collection","action-input"],"intents":["execute-action","confirm","collect-input","bulk-execute","guide-steps"],"capabilities":["action-button","action-menu","input-dialog","confirmation-dialog","bulk-execution","stepper"],"slots":["action-input","confirmation-body","step-content"],"events":["action-start","action-settled","step-change","cancel"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-workflow"},{"name":"app-kit-event-studio","type":"registry:block","title":"Constructive App Kit Event Studio","description":"An opt-in page-scale proof starter combining analytical, collection, board, calendar, relation, form, and action views.","categories":[],"docs":"Event Studio pairs with the supported b2b:storage blueprint recipe and demonstrates explicit analytical loaders, semantic board movement, localized range queries, searchable relations, permission-aware actions, and host-controlled URL state. Supply adapters generated from the final executable GraphQL schema.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react","zod"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-board","@constructive/app-kit-calendar","@constructive/app-kit-core","@constructive/app-kit-dashboard","@constructive/app-kit-data","@constructive/app-kit-workflow","@constructive/badge","@constructive/button","@constructive/dialog","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/event-studio/definitions.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/definitions.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/state.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/state.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/event-studio.tsx","type":"registry:component","target":"src/blocks/app-kit/event-studio/event-studio.tsx"},{"path":"registry/constructive/blocks/app-kit/event-studio/index.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"starter","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal","board"],"intents":["manage-events","analyze","schedule","publish","relate-people","configure-views"],"capabilities":["event-studio","dashboard","collections","record-detail","generated-form","relations","board","calendar","actions","url-state"],"slots":["record-opener","dashboard-layout-store","url-state-adapter"],"events":["view-change","open-record","move-session","publish-session","schedule-session","link-person"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-event-studio"}]}
diff --git a/.agents/skills/constructive-blocks/references/registry-content.v1.json b/.agents/skills/constructive-blocks/references/registry-content.v1.json
index c9a0d45..38c2033 100644
--- a/.agents/skills/constructive-blocks/references/registry-content.v1.json
+++ b/.agents/skills/constructive-blocks/references/registry-content.v1.json
@@ -1,8 +1,8 @@
{
"schemaVersion": 1,
"kind": "constructive.blocks-registry-content",
- "sourceCommit": "4f2a789fde9a90c0c6ed5977896493bb4818fa77",
- "recordCount": 138,
+ "sourceCommit": "706ae32b8b03cd6effaa9d0d5f385d93529635df",
+ "recordCount": 371,
"records": [
{
"registryItem": "alert-dialog",
@@ -22,6 +22,210 @@
"type": "registry:component",
"contentSha256": "240c7dea1ada3acbf0be77e30abbbce247a2a274645db9aab34b980a66f3a26a"
},
+ {
+ "registryItem": "app-kit-board",
+ "path": "registry/constructive/blocks/app-kit/board/board.tsx",
+ "type": "registry:component",
+ "contentSha256": "d502bd6aa66cd94d52f3605f17721c982579314bdb82de3374f4ebc33ff4e4ee"
+ },
+ {
+ "registryItem": "app-kit-board",
+ "path": "registry/constructive/blocks/app-kit/board/connected-board.tsx",
+ "type": "registry:component",
+ "contentSha256": "0f87d69bbb4d04bbf0c958afa11ff2ad6245dd91854bb312f5229a51642a356b"
+ },
+ {
+ "registryItem": "app-kit-board",
+ "path": "registry/constructive/blocks/app-kit/board/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "d8796770950bed9664900477a266a7b18241337f4df5416dafdc482349a11db0"
+ },
+ {
+ "registryItem": "app-kit-calendar",
+ "path": "registry/constructive/blocks/app-kit/calendar/calendar.tsx",
+ "type": "registry:component",
+ "contentSha256": "557d9280edd338ebb21a8715e601a53ed09ae9cef819acecfccf9e8bc7e67127"
+ },
+ {
+ "registryItem": "app-kit-calendar",
+ "path": "registry/constructive/blocks/app-kit/calendar/connected-calendar.tsx",
+ "type": "registry:component",
+ "contentSha256": "8b4e36ec14c46f895b9ab4f44a0daca31503befb6e4d0457a93fae41427593ac"
+ },
+ {
+ "registryItem": "app-kit-calendar",
+ "path": "registry/constructive/blocks/app-kit/calendar/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "2238d1ea141aee647f36cae55a33d05ceee7a9e38a2be09c47d39390eb70681d"
+ },
+ {
+ "registryItem": "app-kit-core",
+ "path": "registry/constructive/blocks/app-kit/core/contracts.ts",
+ "type": "registry:lib",
+ "contentSha256": "477d3d183d0511d32a9f20ee4812a2820f4c71ac51b88fba051cf21d4ed82c29"
+ },
+ {
+ "registryItem": "app-kit-core",
+ "path": "registry/constructive/blocks/app-kit/core/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "5685006a83969b5d5222f5674744c124c9396ff919d058e33b9190b6d421ac03"
+ },
+ {
+ "registryItem": "app-kit-core",
+ "path": "registry/constructive/blocks/app-kit/core/navigation.ts",
+ "type": "registry:lib",
+ "contentSha256": "9f5b9cd09fdcdd82a68f6d3fd81c8b03c5d21fcae1e11b50c1b665027fd1c08c"
+ },
+ {
+ "registryItem": "app-kit-core",
+ "path": "registry/constructive/blocks/app-kit/core/runtime.tsx",
+ "type": "registry:component",
+ "contentSha256": "fafadf39a5dc31bc34c96d53221aab79798a544f24892f14fbaf5a95c2b57d14"
+ },
+ {
+ "registryItem": "app-kit-core",
+ "path": "registry/constructive/blocks/app-kit/core/schema-validation.ts",
+ "type": "registry:lib",
+ "contentSha256": "15fc21e9dc189c1ab8045d43fbf95f90214dc91b6c214b130760bf1c14d6e1af"
+ },
+ {
+ "registryItem": "app-kit-core",
+ "path": "registry/constructive/blocks/app-kit/core/scope.ts",
+ "type": "registry:lib",
+ "contentSha256": "14da0433216deabd51dd1917b163fb21922e9c4a314f6ad184d638f054bdb866"
+ },
+ {
+ "registryItem": "app-kit-dashboard",
+ "path": "registry/constructive/blocks/app-kit/dashboard/connected-dashboard.tsx",
+ "type": "registry:component",
+ "contentSha256": "a9152bb6004c37ea39de9817e89a73ac7da0d756e5e1b7c01468e65a8b523a7d"
+ },
+ {
+ "registryItem": "app-kit-dashboard",
+ "path": "registry/constructive/blocks/app-kit/dashboard/dashboard.tsx",
+ "type": "registry:component",
+ "contentSha256": "bdf70beba80b76c525b30d879d0ea0843c292d222ba8e0bf76f60e1b76aa1b77"
+ },
+ {
+ "registryItem": "app-kit-dashboard",
+ "path": "registry/constructive/blocks/app-kit/dashboard/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "5176f665c9dcc57c43cba0b1b722652835f3cf06b1f9a3524249eb3da64ffa8a"
+ },
+ {
+ "registryItem": "app-kit-dashboard",
+ "path": "registry/constructive/blocks/app-kit/dashboard/layout-store.ts",
+ "type": "registry:lib",
+ "contentSha256": "bfaa35ac44db3edb1b51a65d6af57d8bfa6023c2bde285da0f8d5c693565ba4b"
+ },
+ {
+ "registryItem": "app-kit-dashboard",
+ "path": "registry/constructive/blocks/app-kit/dashboard/persisted-dashboard.tsx",
+ "type": "registry:component",
+ "contentSha256": "e52d87bcba4b0020eb8416368807952b00f59ba175f38452c4f7306dff3167e4"
+ },
+ {
+ "registryItem": "app-kit-dashboard",
+ "path": "registry/constructive/blocks/app-kit/dashboard/widgets.tsx",
+ "type": "registry:component",
+ "contentSha256": "f27a69338ae3e9d60831fa7bf262928e00496ec6c59d1bfcb77cab3bacc6de77"
+ },
+ {
+ "registryItem": "app-kit-data",
+ "path": "registry/constructive/blocks/app-kit/data/action-bars.tsx",
+ "type": "registry:component",
+ "contentSha256": "58af224233b6aa113a22aaa4c7c74ac74c6aa112f9533162ae529d9b50f3f347"
+ },
+ {
+ "registryItem": "app-kit-data",
+ "path": "registry/constructive/blocks/app-kit/data/collections.tsx",
+ "type": "registry:component",
+ "contentSha256": "b706dcc5ef879df1a3d3da058aae79d32193f59eb6028ccbfc4d1c2a60bb02a2"
+ },
+ {
+ "registryItem": "app-kit-data",
+ "path": "registry/constructive/blocks/app-kit/data/controls.tsx",
+ "type": "registry:component",
+ "contentSha256": "df9bb67a813e20f36cbfd4df9af6f303927e0a1bd3095467187da1f7beeadb49"
+ },
+ {
+ "registryItem": "app-kit-data",
+ "path": "registry/constructive/blocks/app-kit/data/detail-form.tsx",
+ "type": "registry:component",
+ "contentSha256": "0bf42fdf00f390e66de256e4d4e9307b6058fc015b79c2ed9483ac43190986ba"
+ },
+ {
+ "registryItem": "app-kit-data",
+ "path": "registry/constructive/blocks/app-kit/data/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "79009589f6cbe5de30431631c7e09de73de5fdf7f59420224416b6a549f3ba1d"
+ },
+ {
+ "registryItem": "app-kit-data",
+ "path": "registry/constructive/blocks/app-kit/data/relations.tsx",
+ "type": "registry:component",
+ "contentSha256": "abd903d5ab3a28c97c16642cce54ba77c7dc67d6cd7a8c7b6f3fb4e639eef057"
+ },
+ {
+ "registryItem": "app-kit-data",
+ "path": "registry/constructive/blocks/app-kit/data/states.tsx",
+ "type": "registry:component",
+ "contentSha256": "c6c358757b851e74856a3d5c1880cb138a1121d9d4567aa0d6480936b4f88a56"
+ },
+ {
+ "registryItem": "app-kit-data",
+ "path": "registry/constructive/blocks/app-kit/data/types.ts",
+ "type": "registry:lib",
+ "contentSha256": "499c9e014047b66f79f2a785c9a62e78c9f70467d7125cc3b3e8c0bb6e191e50"
+ },
+ {
+ "registryItem": "app-kit-event-studio",
+ "path": "registry/constructive/blocks/app-kit/event-studio/definitions.ts",
+ "type": "registry:lib",
+ "contentSha256": "5d600406f9f124e9be4320cb00f6fc3dd53b7d0abde50dc22d1c89113912fe51"
+ },
+ {
+ "registryItem": "app-kit-event-studio",
+ "path": "registry/constructive/blocks/app-kit/event-studio/event-studio.tsx",
+ "type": "registry:component",
+ "contentSha256": "bb802e73153c4fee8c589f24474b08ca5cafc5d1935aed2381da562dab39716e"
+ },
+ {
+ "registryItem": "app-kit-event-studio",
+ "path": "registry/constructive/blocks/app-kit/event-studio/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "2cdf74d53d811d5ec03d222cc293bfda0279aaf8528a4f1bc86fe7e96e49a6ac"
+ },
+ {
+ "registryItem": "app-kit-event-studio",
+ "path": "registry/constructive/blocks/app-kit/event-studio/state.ts",
+ "type": "registry:lib",
+ "contentSha256": "d4dbec81f7466ad2d9dfb986085763cb5013c4f52416005c1faf448a6f05ecfe"
+ },
+ {
+ "registryItem": "app-kit-workflow",
+ "path": "registry/constructive/blocks/app-kit/workflow/actions.tsx",
+ "type": "registry:component",
+ "contentSha256": "fcaa2f4da063454dc424b601469eddd5a091d2ed6d58b2176d6505df12a3346a"
+ },
+ {
+ "registryItem": "app-kit-workflow",
+ "path": "registry/constructive/blocks/app-kit/workflow/connected-actions.tsx",
+ "type": "registry:component",
+ "contentSha256": "d4434ba35f70f19f414392bcc8354c7850b7b5191d8bc364f2ac13260037c1eb"
+ },
+ {
+ "registryItem": "app-kit-workflow",
+ "path": "registry/constructive/blocks/app-kit/workflow/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "8e3aa7fad79a53463e9e30f353a216c43d632266a7bd82ed2598cc42cd248b23"
+ },
+ {
+ "registryItem": "app-kit-workflow",
+ "path": "registry/constructive/blocks/app-kit/workflow/stepper.tsx",
+ "type": "registry:component",
+ "contentSha256": "b88c6a2cc38576a3201bf0fa888f19414cfff48597f0c2b30cb83b97d14931d6"
+ },
{
"registryItem": "app-shell",
"path": "registry/constructive/blocks/app-shell.tsx",
@@ -160,12 +364,24 @@
"type": "registry:ui",
"contentSha256": "241e125f39431085a6002b2302a191aeee6916c137f01b063b2f9c5af33c1b32"
},
+ {
+ "registryItem": "calendar-rac",
+ "path": "registry/constructive/ui/calendar-rac.tsx",
+ "type": "registry:ui",
+ "contentSha256": "d098f561d2135f39bbd5b66a48ee9ed3ccafff78217eb7773fb28d1ae7288d0a"
+ },
{
"registryItem": "card",
"path": "registry/constructive/ui/card.tsx",
"type": "registry:ui",
"contentSha256": "2b199060e9791fe6cf506d06ed7d539a1ea57148e14761e21a09df1351ae4434"
},
+ {
+ "registryItem": "chart",
+ "path": "registry/constructive/ui/chart.tsx",
+ "type": "registry:ui",
+ "contentSha256": "9a08f404dd1baf3a131e8e5f662d218c2f24a4a1a4382d97d6ad509a235d3e77"
+ },
{
"registryItem": "checkbox",
"path": "registry/constructive/ui/checkbox.tsx",
@@ -184,6 +400,12 @@
"type": "registry:ui",
"contentSha256": "9082d74ff03a219502b39cada2e1bdc1af0ec34187fe94d638f2d0e16afdef89"
},
+ {
+ "registryItem": "combobox",
+ "path": "registry/constructive/ui/combobox.tsx",
+ "type": "registry:ui",
+ "contentSha256": "daa2ed5a30f5f347396d00fd6d216a60d162ff2d7ed2fa31684961b1a42cb97f"
+ },
{
"registryItem": "console-feature-catalog",
"path": "registry/constructive/feature-packs/capabilities.ts",
@@ -380,7 +602,7 @@
"registryItem": "console-module-data",
"path": "registry/constructive/blocks/feature-packs/data/data-console-module.tsx",
"type": "registry:component",
- "contentSha256": "a61200b5f618e0e686bc580557101c463f16dcc52822a83074e6a4c4153dbd7a"
+ "contentSha256": "906d9a47bf814d9ad17c8881747b58c5f2dedd74a65c712f0e3e4dda04161360"
},
{
"registryItem": "console-module-notifications",
@@ -566,7 +788,7 @@
"registryItem": "feature-pack-data",
"path": "registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx",
"type": "registry:component",
- "contentSha256": "2cb30b47d4bef39370fd7745a785dd1b2145c0bfd2bd019fd6bbdfe075074cba"
+ "contentSha256": "11fe0720ebafa3a47957c3ae25bb30a7c36cbd097408595cbb91492857e324c5"
},
{
"registryItem": "feature-pack-data",
@@ -646,6 +868,12 @@
"type": "registry:ui",
"contentSha256": "de6f605a8964d71e1c9027a46aa71f9a5359e23522408d669740331f235bde68"
},
+ {
+ "registryItem": "form-control",
+ "path": "registry/constructive/ui/form-control.tsx",
+ "type": "registry:ui",
+ "contentSha256": "d72c3a7e207433058b9e7b0eac176a80add45e596311eda1a97e328d7621a949"
+ },
{
"registryItem": "input-group",
"path": "registry/constructive/ui/input-group.tsx",
@@ -742,6 +970,12 @@
"type": "registry:ui",
"contentSha256": "88d757e3364ba88a4753d82a9466d2aee4d72aa411879a6a6bc99b45ca91732b"
},
+ {
+ "registryItem": "progressive-blur",
+ "path": "registry/constructive/ui/progressive-blur.tsx",
+ "type": "registry:ui",
+ "contentSha256": "4b3e0b1020a4e589a68c33969104646490fb9107c10cf7aabb5403968d598699"
+ },
{
"registryItem": "radio-group",
"path": "registry/constructive/ui/radio-group.tsx",
@@ -773,46 +1007,1210 @@
"contentSha256": "8ebfe3498b4351c899dfb4a2b0551e9243e95946fb0e1fa8202e2c5f621cb415"
},
{
- "registryItem": "sidebar",
- "path": "registry/constructive/ui/sidebar.tsx",
- "type": "registry:ui",
- "contentSha256": "f1bef65f21c07ee0cd44d5bb12cd333cc62db4eccc3792244df594f45e1ad5c4"
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts",
+ "type": "registry:lib",
+ "contentSha256": "e0efb76f807240587ec98afa493762ad3ba5ae533212aeee92bd2e41e4acf89c"
},
{
- "registryItem": "skeleton",
- "path": "registry/constructive/ui/skeleton.tsx",
- "type": "registry:ui",
- "contentSha256": "ac8c4f31303c317eb876880e631b1184aab15fa1b1c1f4ee4ea49ca8e9663afd"
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/adapter/sheets-adapter.ts",
+ "type": "registry:lib",
+ "contentSha256": "b31dc48e997c7fc53ea51c3b50b77d442b668be7f9f45a4cdb88baca8a388463"
},
{
- "registryItem": "slot",
- "path": "registry/constructive/lib/slot.tsx",
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts",
"type": "registry:lib",
- "contentSha256": "2f546ed1e9aeba31d1b584ff5d6f9f60745a5fb15af098076505c86026ff4b67"
+ "contentSha256": "cabad4885584a2b6351afd8ecc5058877f380dd9c6157a61409aab139d425428"
},
{
- "registryItem": "switch",
- "path": "registry/constructive/ui/switch.tsx",
- "type": "registry:ui",
- "contentSha256": "32cab805768c742c7bea2482c27737d955afc184a7e3f93090c5faefc9e4e15a"
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/advanced.ts",
+ "type": "registry:lib",
+ "contentSha256": "c49d43b363550e53494a15c9419cc5c9be07c7d22b465067356029f02e535c08"
},
{
- "registryItem": "table",
- "path": "registry/constructive/ui/table.tsx",
- "type": "registry:ui",
- "contentSha256": "ab830e32d3e10f8ac3e12c6daad57f4686398fdc4a6dbfe1c67ef98bb46ad188"
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/auth-execute.ts",
+ "type": "registry:lib",
+ "contentSha256": "202e43e34ccb7677a092ee26ccaab3ee56f27e85d8e6a94b410cefb554fc683b"
},
{
- "registryItem": "tabs",
- "path": "registry/constructive/ui/tabs.tsx",
- "type": "registry:ui",
- "contentSha256": "7c068c966d4b5de075fa8c4fb8ba493593b7e9381fc13ad5468107dcdc6fc549"
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/auth-gate.tsx",
+ "type": "registry:component",
+ "contentSha256": "6c3fef04b29730e687c580f279ade01bfed3fb50ff5214a2214ad364075a2170"
},
{
- "registryItem": "textarea",
- "path": "registry/constructive/ui/textarea.tsx",
- "type": "registry:ui",
- "contentSha256": "815b0e5c75769a9dc35767200ba3fd4edc5e262267650878f2a229ce2ced91aa"
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/auth-types.ts",
+ "type": "registry:lib",
+ "contentSha256": "dbdae43d76cd189cc994a9a8f94501ea8bb140840d6dfefaa3a75effbdfa104a"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/hooks/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "1a27f6f11d444584b8aa106e2a3fac47cbdf740d9fc85971e408e18cca36f0ae"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts",
+ "type": "registry:lib",
+ "contentSha256": "f987a849df420b7332a9ed9aff7553d31795400c15313cd244f89b8423242e01"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/hooks/use-login.ts",
+ "type": "registry:lib",
+ "contentSha256": "0128599a8c2a6ba14f7717757f6c0fb8dc407f2f2c2a4d61fb80326ec31b39b3"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/hooks/use-register.ts",
+ "type": "registry:lib",
+ "contentSha256": "c967f644cd6a65eb2880cffaecb7de15a4a91ef253085707a23aa94a74afb3a4"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts",
+ "type": "registry:lib",
+ "contentSha256": "b77f53022a7bd8d3e343f85be321d797fd98e614f71320e79b16faa20094f174"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "bc31ed2db67f9f28bd7771ea52254649fbbeee5bc9da0474ce8ab55f33f42b90"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx",
+ "type": "registry:component",
+ "contentSha256": "f609ee1a996be18e4f581be218b5865475abe3a77f759106207a3cbbd49a9fee"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx",
+ "type": "registry:component",
+ "contentSha256": "8e4a523db8c51e1f474d7dbbf16cc74406cf76b76bf6b4756e8414b3e0c7fa94"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx",
+ "type": "registry:component",
+ "contentSha256": "5ceeaaed45e50171072517a28eb8cb29f31f3399d15a576043ad8d2ce1386ccf"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx",
+ "type": "registry:component",
+ "contentSha256": "b7db7710894d7bc87f1ee0bd48e1c07665149f0cfb1448aca3793aa221eb3657"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx",
+ "type": "registry:component",
+ "contentSha256": "f05bba14c6b1ce933b4d901d5fec6392abf053ac14f88a4f6cddc10342cd984c"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/form-field.tsx",
+ "type": "registry:component",
+ "contentSha256": "9324a81a74a1f4cf18093e1e3858c21e885a64e0a0627d7d9d66739e10921026"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/login-form.tsx",
+ "type": "registry:component",
+ "contentSha256": "46842f5149e93b914772b8d830e3bf0cce267dc2f9bd18a3358a3e927049d875"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/password-strength.tsx",
+ "type": "registry:component",
+ "contentSha256": "f611dbef860c72521ac21a114f4d9ca91f7bd2fe96efc83ed733112d9d673275"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/register-form.tsx",
+ "type": "registry:component",
+ "contentSha256": "b047aa579c697960062e6cc30fc46b378cfc3b26c28aff8edde765d663ffd87f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx",
+ "type": "registry:component",
+ "contentSha256": "fa8c61a441b336ec33b12c33340279a0a4b11b92036ddf903e461c03dc0c8478"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/utils/auth-errors.ts",
+ "type": "registry:lib",
+ "contentSha256": "d1888027ec3bc7969f3ed243f476993c5f8b9f93e79aec369ce409218c03c76d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/utils/schemas.ts",
+ "type": "registry:lib",
+ "contentSha256": "c4edc6a174b49cc734b4499b5b3ffb3d7983074af31c140f25cc970973bef1df"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/utils/token-store.ts",
+ "type": "registry:lib",
+ "contentSha256": "8f1840ad5b49528cf0c2ad72db725c4f2de5475799c2690e1a6a629ad8956592"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/auth/utils/validators.ts",
+ "type": "registry:lib",
+ "contentSha256": "97300dd17b31199e34bcff9e05f17ffb4266262c86dc6c5a2678faf2d24f99bf"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/badge-tones.ts",
+ "type": "registry:lib",
+ "contentSha256": "e37012c7e6ba01d24d6f14005c66c4ca2e2b4c6dfec0d6449222e9f2e1960d4e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/cell-props.ts",
+ "type": "registry:lib",
+ "contentSha256": "eaa26476d66594f7218e0218e2f9330276df48d4391d3592f867a5cd51dc42d1"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/cell-slots.ts",
+ "type": "registry:lib",
+ "contentSha256": "35e56540282a92b867c719f3b737773f066448eb444fdb126b301f7a13e85f07"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts",
+ "type": "registry:lib",
+ "contentSha256": "05d78920e66cc0001618bfdb42dcc71cb7f6808ccff4990582606f854c234644"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/badges.ts",
+ "type": "registry:lib",
+ "contentSha256": "d6d7a563ecdea437bef882005fb71559d22475cce8f0d2b1f7c50db03a4d353a"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/boolean.ts",
+ "type": "registry:lib",
+ "contentSha256": "f79450d184e9949b6ec20988c46ae32831970659a2c95acb9774609555085eda"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/datetime.ts",
+ "type": "registry:lib",
+ "contentSha256": "bf3c598226328e64ef3cdbe8f2d6a076bd8b9a7ae69b0e6ec1f21c7a555b588e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/geometry.ts",
+ "type": "registry:lib",
+ "contentSha256": "878e0359e5b02bca68384b566c8cd2a15f0f5654294fcc2fedb35beea88b9460"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/image.ts",
+ "type": "registry:lib",
+ "contentSha256": "4a94fec07b36561472a6d887e5429ac4024dcacd753c50b54c5eb5e533ac878e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/interval.ts",
+ "type": "registry:lib",
+ "contentSha256": "ed45fe52a1707c813b828154f327145fe35eeaa3c8ebca03359fad3c06917551"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/number.ts",
+ "type": "registry:lib",
+ "contentSha256": "587c21f6daecf426136c6dc37bd9a0823ab14d640e83802c0af0dda00d473b5b"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/relation.ts",
+ "type": "registry:lib",
+ "contentSha256": "30e6065340e0d7b954f8c22119a5c2d11c0f292930903e66ca769f73149d395a"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/text.ts",
+ "type": "registry:lib",
+ "contentSha256": "cf27b24904c0b0e19c97a4fc3eeb57694faa7f1c5af380934f4b32fcdfec64b7"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/types.ts",
+ "type": "registry:lib",
+ "contentSha256": "3f77ddc7f280992d849230fc58c6083beb215daf76802c83c6d1dfaf34222105"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/factories/uri.ts",
+ "type": "registry:lib",
+ "contentSha256": "db4e452ed08ff4bf63da93ddd22ad65f41454d665f449deaf748554df992959e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/image-cache.ts",
+ "type": "registry:lib",
+ "contentSha256": "2441787ef4cef8c3c9381db7a8f4b746aabec68509c407a0ee1fb5354c5e821e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/sheets-cell.ts",
+ "type": "registry:lib",
+ "contentSha256": "cefbdcfd7740196312e8ddf08e6ef3264098e4404b1f3fccf3e18501fa1a8300"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "f51eb630340b82820f5db1bd519c9b9b359c9ffb358c1efa3380a7e5bba4a2af"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "e98d9e8244ea4fa320653355d674d713014dfff2d6462524983007d2a713e51f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "f51384126f8d8d479e40986a458470531bfad56a64d3ae6ba7ed8042e308206f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "0eea45c438caf6c5ebeddb843f21ca3061a39f6afdbca26bb53045e4ad4b3d8b"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "59969b1636a2690a57938b9d099561bc497da4c8d9382d317739039d6d56588b"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/image-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "185df3ab5e270309a141a3c6f1ad20ce11faf5d8c0670da3da8e5b111067de2b"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "7b8f8ad9eb789a70aa97e893ebe88be0c2b4cfca28ac82023c7a21c309ff4828"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "62c48ae1a77ff94f2eb8e0a03fb8c30388033ba24c52bd06070f340fc2be68df"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/number-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "89b6e79d97a508d2449bdcb382158a4b9efc736d303550bc4ce80e557f47d5bf"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "9524c8f5438d0148e111656150c34d3e5b5b267462b4984862ecc75ac87db405"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/text-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "0a54f07b0a5d5e766c01458c7ea4f24216a4a2c532037f45668f81473c66c588"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx",
+ "type": "registry:component",
+ "contentSha256": "2daff411a9a17eed159b016191c53c169d88c508e54f8459859b95977df056c0"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts",
+ "type": "registry:lib",
+ "contentSha256": "cd5fceac77b4a1fd35567c8801918a690b53cc991e83608ea56d7df19ee4bf12"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-types/cell-registry.ts",
+ "type": "registry:lib",
+ "contentSha256": "bfb525dce2ebd4e012bfb07ca4b6405bc31224aa133456785b97c53db6aba78e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts",
+ "type": "registry:lib",
+ "contentSha256": "8340907ac521a3771d3c4c52086ea66a2e51e4bdc288113189735709c746cddb"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts",
+ "type": "registry:lib",
+ "contentSha256": "ee98d286bfc10b7d82de2279d9f44e065094374849e4f6d84bcbff54f9d2c194"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts",
+ "type": "registry:lib",
+ "contentSha256": "924d90d01e9664d6fa35949e0765f4e91ad613376223340cad860cd26bff93e6"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-types/define-cell-type.ts",
+ "type": "registry:lib",
+ "contentSha256": "0812923a9e896cd9efbbf74b53bbeb23eae560128f90314ae23a48b00e54db3f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-types/type-mapping.ts",
+ "type": "registry:lib",
+ "contentSha256": "a4a142290a15de31a50fc1bcafa038d9d202db0fd4e0062e7ffbfaa2a5611c7c"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/cell-types/types.ts",
+ "type": "registry:lib",
+ "contentSha256": "97f5b5c5acb34939b70f2f0222227cd2646b0d9ec6928758448906481824c33c"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/commands/context.ts",
+ "type": "registry:lib",
+ "contentSha256": "dd9c2df23d39c09f6cd8ae3b090e7d77afba48c3a4845ac174f7caa9d7923e81"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/commands/dispatch.ts",
+ "type": "registry:lib",
+ "contentSha256": "89884c802a5b550daf2f7a52969a43e0902cf3cded3536943ddfe07f5711813f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/commands/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "c511ed6d1ca026b4b8ffded755095377cf7ef7aa103d50da3435ceac6c39364d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/commands/keybinding.ts",
+ "type": "registry:lib",
+ "contentSha256": "e85651b6008c2a0efb420e66e4e8ef2c1203747ea61485013abc98fe9d89738f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/commands/keymap.ts",
+ "type": "registry:lib",
+ "contentSha256": "0848f4800723066e1707ccbe50803426b68c2187eb02f897f6eb2238c6bc8578"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/commands/registry.ts",
+ "type": "registry:lib",
+ "contentSha256": "51723578f70f7a0ec572a956f9e23099435ccc8ba534ebf5a6588c3cc03c7dee"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/commands/types.ts",
+ "type": "registry:lib",
+ "contentSha256": "195e536e0bf21c9f55e3568ac55fb43b5c4a1150e8457f1648056fc2b434743f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/config/sheets-concurrency.ts",
+ "type": "registry:lib",
+ "contentSha256": "b8fe494cedc9514554572ae8211785b0c4f25402b83ede805da7273c41e3129b"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/context/sheets-context.ts",
+ "type": "registry:lib",
+ "contentSha256": "fbca1a2b4e4e717d1cf706683b1d97e580117331717999d2a2a1b37a056a581a"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/context/sheets-execute.ts",
+ "type": "registry:lib",
+ "contentSha256": "3615f980ee18fd27ab3b1941bbec215d91fc8b8125fcd8b4d293ba764e8902ca"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/context/sheets-provider.tsx",
+ "type": "registry:component",
+ "contentSha256": "1e8c52731c6557311562167209f75e88c389b636b2c9355d3dc964957d487cf1"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts",
+ "type": "registry:lib",
+ "contentSha256": "99ae5ff396e4c961076aa0ce9ad8ece33b102ca5889f71bfc0d5ccf80fd0b49d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/forms/form-spec-builder.ts",
+ "type": "registry:lib",
+ "contentSha256": "c30f7c65a021c42916057a44a7a88b6f97b269406ad377e09b0f14a3bd9036d9"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/forms/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "225a3c571fd1cb3ef419ecc3afe69bbb1524afb0fe369476e516cac1c7d4d515"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/forms/metadata-hash.ts",
+ "type": "registry:lib",
+ "contentSha256": "b72009e30e8a8a6beb08c23280dcc4ce878ea8a8ee4efb736375fa2fc373d91d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/forms/mutations.ts",
+ "type": "registry:lib",
+ "contentSha256": "725008892a189d7bdd82bfee086df8ec1b90ee63212f251fc182548c15696d42"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/forms/types.ts",
+ "type": "registry:lib",
+ "contentSha256": "0477a05dffc08abc8f3193910ec7a64841e9b403212d28f7416812173f54712d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/forms/zod-schema.ts",
+ "type": "registry:lib",
+ "contentSha256": "1b4bbb5dbd5997d9656367cdc7f02277618614ac6c16c63f0a07fc2efea656d5"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "91d463a34037420ac40424c5ae2ad344b68904f0f906f9ca1fa39b451693f795"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "28de25c097b1566ef2c4264672b9094b851b51663f847e5dc97f85afb4c5ac53"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts",
+ "type": "registry:lib",
+ "contentSha256": "8ebe127dc6726b1fa91f33bbb830ee5bc9996fa7cea13111f1c06ccf40086661"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts",
+ "type": "registry:lib",
+ "contentSha256": "75025db8baaaa5db0df8c700438e6af68a6c142c72562ea5c2de418111c675c1"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts",
+ "type": "registry:lib",
+ "contentSha256": "da568e84d7926e6f855dc040328cf29e1039d61f2cbef15544a7f131c294d4e2"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "b36768e6552cc6aaa0b9e0f96a26f110c54a3d0daf2a1dc28a8407aa484127ff"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "51a8d90c36c465d6ff9ef29164fac08d409d648edccd03ebe99254ed45c17b63"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "4fafa6377815945af930f7b738c230fe8287f20360843d6a10dc6937288e6089"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "3f3fc2bcf44d299d104a25e0641c88e49eaee5614139fb96f9548b0c9e1e8632"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "03f55497c96a9fac454e79135cb6530050b25ccfcfb22601c60b63b3fa9c32f5"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "4d4974dcef039cdafafe1eb2a66e8e33dd78b0a1cca002ffabc737d74601bf7b"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "c37f976f89b84df7770146d8ca0b3793e6e2fbb5b3df8b548d50ba1590a8953d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "925b7cbbcaac6144fdd943bc1ca14dcad398c190ef2fa9e8932babd7dee97e2b"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "41d24a6ae1df079dd04c30ab8f359e1e4943b8d220e28822486d11ad12b21dc3"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "f4996936d9eb3e6fe5b2ca2556431ff09690fb698bceb795265507a26ff8905d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "8c2fe225f804905b771e25dfc698ed1d0c01514746921c0442910c5ff416c19b"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "37705d76064bb2270bd8a74e31907c122889ff28627319f7609d2ad58c6d9ed4"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx",
+ "type": "registry:component",
+ "contentSha256": "b9c38875db56f697034790d6b4d2240273ca3a1aaa940408ca18b4d01761f8d2"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts",
+ "type": "registry:lib",
+ "contentSha256": "4bbfa55e12ab67d081823fde604e63c653ea87366915ffa9a16ffd678a501a34"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx",
+ "type": "registry:component",
+ "contentSha256": "a77be73eaac320a009fadd7131b56c9740d88ab680329d858472234b9a4a3a53"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts",
+ "type": "registry:lib",
+ "contentSha256": "3b80f353f93361ee45162b0337fce876904095732d36573c0a2283f95e988745"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/cell-routing.ts",
+ "type": "registry:lib",
+ "contentSha256": "de1f70e94622ee11c9a9539654f188569715136dc6bf4a188dc6ccac632f3dae"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/draft-types.ts",
+ "type": "registry:lib",
+ "contentSha256": "b2386bf11ca47abfdb47a895e45a46e1266b7af7f59e946a92e8e122c9e39e0e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/array-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "d38f56dde338d3f3f9c93d8086280de4c43152b368df981444d89e4ff58fb801"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/date-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "0dacd343899e78084c3314e23854dfc27bd4af84189b466fb1f3dffa726293ee"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx",
+ "type": "registry:component",
+ "contentSha256": "5d60f21db983a996ac130051e067e7afd53b1aef7177b1696c3ce9c12e61161b"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "77744ce63a00b31c7d4ac8f89da078263560480e1b3640f4c37dd61d3d8dadee"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/image-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "4530b05edba2183beee420851444c853233b26340b2927eafe3e87f946ec25a1"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "4c68c21b6cef88a3f496f8bda5d57cf313122a6ca64df9c605c8e7bc839a5122"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "4b24df03fbb111a2bbbb0bb3f04d8969f4e0caf5bc812bcc36af2f41f3125840"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/json-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "a8e21c9c3c68fd13d12d357527b561793222aac935abb82b1c8c50e80461f617"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts",
+ "type": "registry:lib",
+ "contentSha256": "ed9fe391779446dc648d9127dc9ccf69078dd5e0c7173f041a0e95a0f891101c"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx",
+ "type": "registry:component",
+ "contentSha256": "33bdfc36c5dfe8859d47adc2718420f137672bcc9aa97dfcd59e3a9e0f5930a6"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "678147e863dca88b234e01bf9b7b7c8c7f9d745cef4cabad6a7d58fabcf757e7"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx",
+ "type": "registry:component",
+ "contentSha256": "25f26807fcc1eea384828b856546cc31778e2a224b256e589d9e5d249f479b0c"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "a38759e739991924ea24e8104c9b936ba27a949277b2e33b751b62ee7b2c61f5"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "a23b70bcf8a6ab4d087621a20a397509c319e377143e22ca28d851a0786e5bcf"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/editors/url-editor.tsx",
+ "type": "registry:component",
+ "contentSha256": "0e69b69ce9aa914e822e3f4bd5f863563a4ff503a95eeb8723bb2b3caa635a50"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx",
+ "type": "registry:component",
+ "contentSha256": "8dde3e3c25f3d2c8bf1121cf0348d8f82e68469fa23ca73190cea6b034d0be44"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx",
+ "type": "registry:component",
+ "contentSha256": "af8f6af5e32387dc6fd2ad0817f649c0af865b34f746fad9da4d60d1bbf35ae5"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx",
+ "type": "registry:component",
+ "contentSha256": "4976fe090e586d453f4b0e4ea5b6a825b78b9d3061bac4ffa88e3cac2fcb71c1"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts",
+ "type": "registry:lib",
+ "contentSha256": "af34a5231039fbf5d0704e2365737ecada6757ed94ba835a0cd0ea73e999d231"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx",
+ "type": "registry:component",
+ "contentSha256": "3144aae4fa106c701cb50e62f05686fd04b7e648aec201b1a3c28f8acd13511f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/feedback/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "bc6cb6481d6bd102ef55da6b756b6cf14fd317a5398e90da779ef1e694da9e66"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx",
+ "type": "registry:component",
+ "contentSha256": "e0048588597dcaa11524b4d3296b1e07e9f9189d875cb9e3ff97397a7ec2c150"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx",
+ "type": "registry:component",
+ "contentSha256": "f8f32ebc97653a961dd73184e6598b5a0e33e4fa2c01156b377b7ff243b09d6d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/filter-operators.ts",
+ "type": "registry:lib",
+ "contentSha256": "de2d1cb26f8d2596e04b241e15977e1a3f82deafe0bd182e0cc2be864692b9af"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/grid-cell-types.ts",
+ "type": "registry:lib",
+ "contentSha256": "c423e47bc58911d26027ee51a59f1c7af44a5fcd09a74a2ca6276cc99cefe013"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts",
+ "type": "registry:lib",
+ "contentSha256": "78df8c8af3521ec6db9e0086b3993eb75d3c56d660642b5b8508ff3d9c95775c"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts",
+ "type": "registry:lib",
+ "contentSha256": "8017b515e49e432fe0fd7d38d49b338f145d076a9b0dac536c4a9b36be3788cf"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts",
+ "type": "registry:lib",
+ "contentSha256": "6758761a5be09e07b4e16daa2bf940e4ea998715e6f9574dd810184fd33e45c2"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts",
+ "type": "registry:lib",
+ "contentSha256": "5c15d527f5a1b029f75a7beced55c9c004e4677025b42075ac6a501a038ae484"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts",
+ "type": "registry:lib",
+ "contentSha256": "eaf51636a34117794506af34b2811690caf72c683fd397febf9f01cbf9dae64e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts",
+ "type": "registry:lib",
+ "contentSha256": "d15aeba230b36e257b03fdae47d1769b3379492631126ef29d33c39eee4879a2"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts",
+ "type": "registry:lib",
+ "contentSha256": "086c7c5393fd97b3af344f1e6028ce4e65073e69442a2ba82b9d29b266260ddd"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts",
+ "type": "registry:lib",
+ "contentSha256": "853fb4f3eb672521ba75e5d447181e02d875037c82c64e4a555e8dcd6a61dfa1"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts",
+ "type": "registry:lib",
+ "contentSha256": "2ab8bee073dc107a057ac0ce3bb399fc0d4b4532cf98b1fa574cb4e5915763f0"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts",
+ "type": "registry:lib",
+ "contentSha256": "501cb0f53ff34fae4726bf65676623af5224f1968de751d2cdd2e91369433469"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts",
+ "type": "registry:lib",
+ "contentSha256": "d278198870a53499eeba970b116f1a5470df91909820d922a98ef7cf47379256"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts",
+ "type": "registry:lib",
+ "contentSha256": "9c431cff237803d538cba63a81f787b067267828dc50c1f0b2e09c9a4d192054"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/row-model.ts",
+ "type": "registry:lib",
+ "contentSha256": "0a923f72b6e13ea471e31c2daee78d6b6f80aa91f868c870f956a2f5be111c84"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.constants.ts",
+ "type": "registry:lib",
+ "contentSha256": "1e6f346a526a9429a1ab1b56272091605ba0b283e8eff3c2e175717f5b679c3e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx",
+ "type": "registry:component",
+ "contentSha256": "bd7543b2a082628c0b7a52cda5ad1d81f13444ddf430ef8654bd0ba028c43444"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.controls.tsx",
+ "type": "registry:component",
+ "contentSha256": "03c0977d751e68247ce579ccab128f62d87cffb0265ae227a7eff1c04797146f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.formatters.ts",
+ "type": "registry:lib",
+ "contentSha256": "9f47a301c962d66e412389c895da37cbf0da3fc33f19b1291ce2b32e1b4242ce"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.pagination.tsx",
+ "type": "registry:component",
+ "contentSha256": "e291b5352e7769b61fb5ed5bc5fc902b64fe27bb694b0ec76385cae130060891"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx",
+ "type": "registry:component",
+ "contentSha256": "35a6f1aee183c55c6adf5aea35cbbc6916094ea450f2d9e786b125a12f07375f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.theme.ts",
+ "type": "registry:lib",
+ "contentSha256": "4077007803d5a3741be19d6279bd1dd9fce553287657616873ffe63ba5c3c7a1"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.tsx",
+ "type": "registry:component",
+ "contentSha256": "622b51c70ca9b34b4f5703c6a13b104fca567137518e599a25b2857985d79ea2"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.types.ts",
+ "type": "registry:lib",
+ "contentSha256": "ec63ae93b53fb070845787b3a7a22de1f2a84db78ff3ebab0b81b6b41bac8d8c"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/sheets.utils.ts",
+ "type": "registry:lib",
+ "contentSha256": "862bccc4b32cc3e00b367cc50d5398f79a8f7b333b833711c21e2b91426b921f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/grid/use-sheets.ts",
+ "type": "registry:lib",
+ "contentSha256": "e939cd53fe480c7cdcfa8dabd919c78118dd0a6f3db9af5e5f9e36f86ae3e29c"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts",
+ "type": "registry:lib",
+ "contentSha256": "3989466c43820cad301973f7495d83826d516eea915efaa83ea2e4c4a42dc5cd"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/query-keys.ts",
+ "type": "registry:lib",
+ "contentSha256": "5e17badc755f4d780f375d4941b7ae080fc3fc7a2829467e6c45e1d74ebf2330"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts",
+ "type": "registry:lib",
+ "contentSha256": "2628b2bb339b1d9cb09f1b094d28d89cd1eeb3b7720fad2b6e92b4180177dc8e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/use-relation-columns.ts",
+ "type": "registry:lib",
+ "contentSha256": "11e09bb11b88eb04bd3e5dad358182e95121d26237f42d600c551ac493156de8"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts",
+ "type": "registry:lib",
+ "contentSha256": "e4af7b63d67d1115b16746f040c297b0b568d99225d089be6aeb2504cadd98d7"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts",
+ "type": "registry:lib",
+ "contentSha256": "660077ad92b75c0c9aa84ee6955f1c97654bc1ca29a5344af43a6b86658f2046"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts",
+ "type": "registry:lib",
+ "contentSha256": "134fb8e3d7b5da30e62b85eabdf120b288045dceeb33681e173727c48e172478"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts",
+ "type": "registry:lib",
+ "contentSha256": "5ca42f9a9ee25b7764e46b16d207994c01dfab6a743ea8b688b0995b35a1fcaa"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/use-sheets-table.ts",
+ "type": "registry:lib",
+ "contentSha256": "2f1292072796547e71a50070dae169f288e0066ffc65e698e97caecbb5b3ecf4"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts",
+ "type": "registry:lib",
+ "contentSha256": "01eb4abe44f8922b23052310f9982e4c84dc0b3f937977e521fb9397c25279c3"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/index.ts",
+ "type": "registry:lib",
+ "contentSha256": "de57e9b5f58e92c6bdc46194751f5aed1f5d0390495204fd7d3ee93f40506bfe"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/row-identity.ts",
+ "type": "registry:lib",
+ "contentSha256": "921fb2fa79eb8b80673a15c8eb35adbde085b567d40e1cb2ea111365f8f7d00f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/selection/cell-extract.ts",
+ "type": "registry:lib",
+ "contentSha256": "ae56765bac37cddc52e32f048c980e02c87eb8ddf0016441b94d59e8c0646ba9"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/selection/fill.ts",
+ "type": "registry:lib",
+ "contentSha256": "511c45d271025b50d04e86c6f6e419389ec11d0a7e945e6c9ab070fa5ea857c9"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/selection/range-set.ts",
+ "type": "registry:lib",
+ "contentSha256": "d227c5188588838b477bc1eb7e15b6f0cf014eb61e58a565fa7374c135a03266"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/selection/selection-model.ts",
+ "type": "registry:lib",
+ "contentSha256": "c6d09f772e36379ad6eca4d33022a3c5ba83f10b90165576a103ffc83593b31e"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/selection/tsv.ts",
+ "type": "registry:lib",
+ "contentSha256": "2db1956ade3f2c489460c048a83f32cfa891795db40fae881028eb6161169fe6"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/store/draft-rows-slice.ts",
+ "type": "registry:lib",
+ "contentSha256": "6455f0f3f31d997c5a41b208f3233fdbe329d70880faa14909e51238ccb3cf62"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/store/relation-info-slice.ts",
+ "type": "registry:lib",
+ "contentSha256": "5b16b43baa28a2c6e701092b56978b74e16695fca1f7ee80fde04bcf6090e7f1"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/store/sheets-store.ts",
+ "type": "registry:lib",
+ "contentSha256": "63c9b7a65d9dc0eb890f552dfdc73be8d6e353ee950aae55abfcfc34f525f6a6"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/table/features.ts",
+ "type": "registry:lib",
+ "contentSha256": "1d61e2f530ae6d4871636def69d61a457d2aba40f163588b58497d44e72aeac2"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/table/grid-viewport.tsx",
+ "type": "registry:component",
+ "contentSha256": "3980f97518b63af685c966525a89fb86771c6ce6d1710db84caa72a6be68d665"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts",
+ "type": "registry:lib",
+ "contentSha256": "6897a793161bc5e72061c085e2de64d7fe59f44a49f13b5264eef51a4646a5c1"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/cn.ts",
+ "type": "registry:lib",
+ "contentSha256": "572b607d90e5d5658695ce2aac435f9e6ca7ef8e21593bf63bb33a35cdaa5e2d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/file.utils.ts",
+ "type": "registry:lib",
+ "contentSha256": "68651221f735a90febf08c57b1c16c74abfbc1a29bea0fb2f193798e8aff909f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/image-with-fallback.tsx",
+ "type": "registry:component",
+ "contentSha256": "8257f9a8bbe54e908592f9a7372f3ffbbacaa6f92efd9fd6b427e9f1c447f456"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/map-picker.tsx",
+ "type": "registry:component",
+ "contentSha256": "f8f76ca20d5d542161e7f15b017acacbfd6cf14b4ad719a8debb9044902ab8a0"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/motion-config.ts",
+ "type": "registry:lib",
+ "contentSha256": "a9ebb6fb9d36cb271152cf0c28e575097b272080dbc3765add6c59dc65e3e814"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/relation-utils.ts",
+ "type": "registry:lib",
+ "contentSha256": "e487a01043b3ec57133b533ff2df3cbe5b99c0e98c957cd9d59b1854888599b3"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/sheets-i18n.ts",
+ "type": "registry:lib",
+ "contentSha256": "bbfd8c9db0ebb7a3b01506203dd04162886218109cee2ad6135e685c1e7fcb6d"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/sheets-logger.ts",
+ "type": "registry:lib",
+ "contentSha256": "415d96d0e5b1294c2326567a0025f217eeac58239005ad9c2b0641de0551a83f"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/use-color-scheme.ts",
+ "type": "registry:lib",
+ "contentSha256": "dca63023ed840c781c42b9c08269cd1643154e4a4b27ae3a3c2f1b82c6b58015"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/use-image-status.ts",
+ "type": "registry:lib",
+ "contentSha256": "040c9fdf537f1fd4657ed2bc9cf6b33d93c5fc6ca55c629848b6b3a84158a727"
+ },
+ {
+ "registryItem": "sheets",
+ "path": "registry/constructive/blocks/sheets/utils/use-resize-observer.ts",
+ "type": "registry:lib",
+ "contentSha256": "3f8dbfcfac0bf1412f2169d65330e3e1e6e3f33bc1b846d59bf7ee4f664bbf6d"
+ },
+ {
+ "registryItem": "sidebar",
+ "path": "registry/constructive/ui/sidebar.tsx",
+ "type": "registry:ui",
+ "contentSha256": "f1bef65f21c07ee0cd44d5bb12cd333cc62db4eccc3792244df594f45e1ad5c4"
+ },
+ {
+ "registryItem": "skeleton",
+ "path": "registry/constructive/ui/skeleton.tsx",
+ "type": "registry:ui",
+ "contentSha256": "ac8c4f31303c317eb876880e631b1184aab15fa1b1c1f4ee4ea49ca8e9663afd"
+ },
+ {
+ "registryItem": "slot",
+ "path": "registry/constructive/lib/slot.tsx",
+ "type": "registry:lib",
+ "contentSha256": "2f546ed1e9aeba31d1b584ff5d6f9f60745a5fb15af098076505c86026ff4b67"
+ },
+ {
+ "registryItem": "stepper",
+ "path": "registry/constructive/ui/stepper.tsx",
+ "type": "registry:ui",
+ "contentSha256": "79ae150ba039c03e374dd27765cacfaeec337021d80ae4522d218e7e7815fe3a"
+ },
+ {
+ "registryItem": "switch",
+ "path": "registry/constructive/ui/switch.tsx",
+ "type": "registry:ui",
+ "contentSha256": "32cab805768c742c7bea2482c27737d955afc184a7e3f93090c5faefc9e4e15a"
+ },
+ {
+ "registryItem": "table",
+ "path": "registry/constructive/ui/table.tsx",
+ "type": "registry:ui",
+ "contentSha256": "ab830e32d3e10f8ac3e12c6daad57f4686398fdc4a6dbfe1c67ef98bb46ad188"
+ },
+ {
+ "registryItem": "tabs",
+ "path": "registry/constructive/ui/tabs.tsx",
+ "type": "registry:ui",
+ "contentSha256": "7c068c966d4b5de075fa8c4fb8ba493593b7e9381fc13ad5468107dcdc6fc549"
+ },
+ {
+ "registryItem": "textarea",
+ "path": "registry/constructive/ui/textarea.tsx",
+ "type": "registry:ui",
+ "contentSha256": "815b0e5c75769a9dc35767200ba3fd4edc5e262267650878f2a229ce2ced91aa"
+ },
+ {
+ "registryItem": "toast",
+ "path": "registry/constructive/blocks/toast/index.ts",
+ "type": "registry:component",
+ "contentSha256": "feb28b7946096ab3b5fdf5e632153b2ee5c63f9cdc4eb7e479e6b7e4ea594729"
+ },
+ {
+ "registryItem": "toast",
+ "path": "registry/constructive/blocks/toast/toast-error.tsx",
+ "type": "registry:component",
+ "contentSha256": "73de6e5173da019a6a8069c0531fa804baf6eb192842205a6705f2c56047f2fa"
+ },
+ {
+ "registryItem": "toast",
+ "path": "registry/constructive/blocks/toast/toast-info.tsx",
+ "type": "registry:component",
+ "contentSha256": "0efb0ee1ac9de310b1b0a97370bf1236fa3d536084d3b434ee69029ae3ddd0e0"
+ },
+ {
+ "registryItem": "toast",
+ "path": "registry/constructive/blocks/toast/toast-success.tsx",
+ "type": "registry:component",
+ "contentSha256": "d7ca19e398779c5d1978f58070905712fe58b00332bb05842f72b72cebd11e85"
+ },
+ {
+ "registryItem": "toast",
+ "path": "registry/constructive/blocks/toast/toast-warning.tsx",
+ "type": "registry:component",
+ "contentSha256": "d0c3823cfcb024a3110765fa79eb8dbd8c014195910b6a569e5842b620c1c6b1"
},
{
"registryItem": "tooltip",
@@ -830,7 +2228,7 @@
"registryItem": "use-mobile",
"path": "registry/constructive/hooks/use-mobile.ts",
"type": "registry:hook",
- "contentSha256": "3469afadf0d9f2e5de6faf482312151d1abaccb511929b6962b890295a1ba061"
+ "contentSha256": "1ba304ed659572c5eba72027298829e65769eae72847d60502d9f197cf8a22f6"
}
]
}
diff --git a/.agents/skills/constructive-blocks/references/runtime-contract.md b/.agents/skills/constructive-blocks/references/runtime-contract.md
index 68ac23a..63f2058 100644
--- a/.agents/skills/constructive-blocks/references/runtime-contract.md
+++ b/.agents/skills/constructive-blocks/references/runtime-contract.md
@@ -4,7 +4,7 @@ Use this reference after selecting a registry item. The machine snapshot in
`install-roots.v1.json` remains authoritative for the pinned source, release
state, endpoints, first-party module bindings, pack manifests, preset profiles,
Console runtime, and source limitations. The complete catalog in
-`registry-catalog.v1.json` pins all 102 source items, but its Data documentation
+`registry-catalog.v1.json` pins the complete source registry, but its Data documentation
is retained only as drift evidence; validated queries apply
`registry.queryOverrides` before returning it.
diff --git a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
index 9ea7f29..673cd8f 100644
--- a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
+++ b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
@@ -14,11 +14,21 @@ const snapshotPath = path.join(
'references',
'install-roots.v1.json'
);
+const briefRoutesPath = path.join(
+ skillDirectory,
+ 'references',
+ 'brief-to-roots.v1.json'
+);
+const eventStudioBlueprintPath = path.join(
+ skillDirectory,
+ 'references',
+ 'event-studio-blueprint.json'
+);
const PINNED = Object.freeze({
repository: 'https://github.com/constructive-io/blocks',
- branch: 'feat/feature-packs-console-kit',
- commit: '4f2a789fde9a90c0c6ed5977896493bb4818fa77',
+ branch: 'feat/app-kit',
+ commit: '706ae32b8b03cd6effaa9d0d5f385d93529635df',
publicationStatus: 'branch-only',
registryNamespace: '@constructive',
registryUrl: 'https://constructive-io.github.io/blocks/r/{name}.json',
@@ -29,7 +39,7 @@ const PINNED = Object.freeze({
nodeEngine: '>=24.0.0',
metaContractVersion: '2026-07',
metaCoordinate: 'Query._meta',
- registryItemCount: 102
+ registryItemCount: 123
});
const ENDPOINT_KINDS = [
@@ -60,6 +70,42 @@ const PACK_IDS = [
'notifications'
];
+const APP_KIT_ROOT_NAMES = [
+ 'app-kit-core',
+ 'app-kit-data',
+ 'app-kit-board',
+ 'app-kit-dashboard',
+ 'app-kit-calendar',
+ 'app-kit-workflow',
+ 'app-kit-event-studio'
+];
+
+export function parseNpmPackageRequirement(specifier) {
+ assertString(specifier, 'npm package requirement');
+ const separator = specifier.startsWith('@')
+ ? specifier.indexOf('@', specifier.indexOf('/') + 1)
+ : specifier.indexOf('@');
+ if (separator === -1) {
+ return { name: specifier, requested: null, exactVersion: null };
+ }
+ const name = specifier.slice(0, separator);
+ const requested = specifier.slice(separator + 1);
+ assert(name.length > 0 && requested.length > 0, `Invalid npm package requirement ${specifier}.`);
+ const exactVersion = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(requested)
+ ? requested
+ : null;
+ return { name, requested, exactVersion };
+}
+
+export function pinInspectorInstallCommand(command, itemName) {
+ const liveCommand = `pnpm dlx shadcn@latest add ${PINNED.registryNamespace}/${itemName}`;
+ assert(
+ command === liveCommand,
+ `${itemName} inspector install command changed from the reviewed latest-version template.`
+ );
+ return `pnpm dlx shadcn@${PINNED.shadcnVersion} add ${PINNED.registryNamespace}/${itemName}`;
+}
+
const META_CONTRACT_REQUIREMENTS = {
queryType: { typeName: 'Query', fields: ['_meta'] },
metaSchema: { typeName: 'MetaSchema', fields: ['tables'] },
@@ -390,22 +436,22 @@ const ADAPTER_SOURCE_PATHS = {
const PACKAGE_RELEASES = [
{
name: '@constructive-io/ui',
- version: '0.5.0',
+ version: '0.8.0',
manifestPath: 'packages/ui/package.json'
},
{
name: '@constructive-io/data',
- version: '0.2.0',
+ version: '0.5.0',
manifestPath: 'packages/data/package.json'
},
{
name: '@constructive-io/sheets',
- version: '0.5.0',
+ version: '0.8.1',
manifestPath: 'packages/sheets/package.json'
},
{
name: '@constructive-io/schema-builder',
- version: '0.1.0',
+ version: '0.4.1',
manifestPath: 'packages/schema-builder/package.json'
}
];
@@ -1897,6 +1943,292 @@ function assertStringArray(value, label) {
}
}
+function constructiveMetadataForItem(item) {
+ return item?.meta?.constructive ?? null;
+}
+
+function assertConstructiveRegistryMetadata(metadata, label, itemName) {
+ assertObject(metadata, label);
+ assert(
+ APP_KIT_ROOT_NAMES.includes(itemName),
+ `${itemName} declares App Kit metadata without being an App Kit install root.`
+ );
+ assert(metadata.version === 1, `${label}.version must be 1.`);
+ assert(metadata.family === 'app-kit', `${label}.family must be app-kit.`);
+ assertString(metadata.kind, `${label}.kind`);
+ assert(
+ ['runtime', 'resource', 'view', 'composition', 'starter'].includes(
+ metadata.kind
+ ),
+ `${label}.kind is not a supported Constructive registry kind.`
+ );
+ assertString(metadata.boundary, `${label}.boundary`);
+ assert(
+ ['server-safe', 'client', 'mixed'].includes(metadata.boundary),
+ `${label}.boundary is not server-safe, client, or mixed.`
+ );
+ assert(metadata.provider === 'app-kit', `${label}.provider must be app-kit.`);
+ const allowedKeys = new Set([
+ 'version',
+ 'family',
+ 'kind',
+ 'boundary',
+ 'provider',
+ 'dataShapes',
+ 'intents',
+ 'capabilities',
+ 'slots',
+ 'events',
+ 'compatibleWith'
+ ]);
+ for (const key of Object.keys(metadata)) {
+ assert(allowedKeys.has(key), `${label} contains unknown field ${key}.`);
+ }
+ for (const field of ['dataShapes', 'intents', 'capabilities']) {
+ assertStringArray(metadata[field], `${label}.${field}`);
+ assert(metadata[field].length > 0, `${label}.${field} must not be empty.`);
+ assert(
+ metadata[field].every((entry) => entry.trim().length > 0),
+ `${label}.${field} must contain non-blank strings.`
+ );
+ }
+ for (const field of ['slots', 'events', 'compatibleWith']) {
+ if (metadata[field] === undefined) continue;
+ assertStringArray(metadata[field], `${label}.${field}`);
+ assert(metadata[field].length > 0, `${label}.${field} must not be empty.`);
+ assert(
+ metadata[field].every((entry) => entry.trim().length > 0),
+ `${label}.${field} must contain non-blank strings.`
+ );
+ }
+}
+
+export function assertBriefRoutes(fixture, catalogItems) {
+ assertObject(fixture, 'App Kit brief routes');
+ assert(
+ fixture.schemaVersion === 1,
+ 'App Kit brief routes schemaVersion must be 1.'
+ );
+ assert(
+ fixture.kind === 'constructive.app-kit-brief-routes',
+ 'App Kit brief routes kind drifted.'
+ );
+ assert(Array.isArray(fixture.cases), 'App Kit brief routes cases must be an array.');
+ assert(Array.isArray(catalogItems), 'App Kit brief routes require registry catalog items.');
+ const catalogByName = byName(catalogItems, 'Registry catalog item');
+ const cases = byId(fixture.cases, 'App Kit brief route');
+ assert(cases.size >= 7, 'App Kit brief routes must cover at least seven application briefs.');
+ for (const route of fixture.cases) {
+ assertString(route.brief, `${route.id}.brief`);
+ for (const field of [
+ 'dataShapes',
+ 'userIntents',
+ 'capabilities',
+ 'expectedRoots',
+ 'forbiddenRoots',
+ 'forbiddenAssumptions'
+ ]) {
+ assertStringArray(route[field], `${route.id}.${field}`);
+ }
+ assert(
+ typeof route.starterRequested === 'boolean',
+ `${route.id}.starterRequested must be a boolean.`
+ );
+ const selectsStarter = route.expectedRoots.includes('app-kit-event-studio');
+ assert(
+ route.starterRequested === selectsStarter,
+ `${route.id} may select the Event Studio starter only with explicit starterRequested opt-in.`
+ );
+ assert(
+ selectsStarter
+ ? isDeepStrictEqual(route.expectedRoots, ['app-kit-event-studio'])
+ : route.expectedRoots[0] === 'app-kit-core',
+ `${route.id} must select either its explicitly requested starter or app-kit-core first.`
+ );
+ assert(
+ route.expectedRoots.every((root) => root.startsWith('app-kit-')),
+ `${route.id} must route application composition only to App Kit roots.`
+ );
+ assert(
+ route.expectedRoots.every((root) => APP_KIT_ROOT_NAMES.includes(root)),
+ `${route.id} references an unknown App Kit root.`
+ );
+ for (const root of route.expectedRoots) {
+ const catalogItem = catalogByName.get(root);
+ assert(catalogItem, `${route.id} references App Kit root ${root} absent from the registry catalog.`);
+ const metadata = constructiveMetadataForItem(catalogItem);
+ assert(
+ metadata?.family === 'app-kit',
+ `${route.id} root ${root} is not catalogued in the app-kit family.`
+ );
+ assert(
+ selectsStarter ? metadata.kind === 'starter' : metadata.kind !== 'starter',
+ `${route.id} root ${root} has incompatible starter metadata.`
+ );
+ }
+ assert(
+ route.forbiddenRoots.includes('feature-pack-data') &&
+ route.forbiddenRoots.includes('console-kit-nextjs'),
+ `${route.id} must reject the Sheets and Console defaults.`
+ );
+ assert(
+ route.expectedRoots.every((root) => !route.forbiddenRoots.includes(root)),
+ `${route.id} contains a root in both expectedRoots and forbiddenRoots.`
+ );
+ if (!route.starterRequested) {
+ assert(
+ route.forbiddenRoots.includes('app-kit-event-studio'),
+ `${route.id} must explicitly forbid the Event Studio starter by default.`
+ );
+ }
+ }
+ assert(
+ cases.get('event-studio-opt-in')?.backendPreset === 'b2b',
+ 'Event Studio must pair with the supported b2b preset.'
+ );
+ return cases;
+}
+
+function nodeTypeName(node) {
+ return typeof node === 'string' ? node : node?.$type;
+}
+
+export function assertEventStudioBlueprint(definition) {
+ assertObject(definition, 'Event Studio blueprint');
+ assert(Array.isArray(definition.tables), 'Event Studio blueprint tables must be an array.');
+ assert(Array.isArray(definition.relations), 'Event Studio blueprint relations must be an array.');
+ const tableByName = byName(
+ definition.tables.map((table) => ({ ...table, name: table.table_name })),
+ 'Event Studio table'
+ );
+ assertExact(
+ Array.from(tableByName.keys()),
+ ['programs', 'sessions', 'people', 'venues', 'session_people'],
+ 'Event Studio table order'
+ );
+ const expectedFields = {
+ programs: ['name', 'description', 'status', 'starts_on', 'ends_on'],
+ sessions: [
+ 'title',
+ 'description',
+ 'status',
+ 'starts_at',
+ 'ends_at',
+ 'capacity',
+ 'tags'
+ ],
+ people: ['display_name', 'email', 'role'],
+ venues: ['name', 'address', 'time_zone', 'capacity'],
+ session_people: ['role']
+ };
+
+ const source = JSON.stringify(definition);
+ assert(!source.includes('DataRealtime'), 'Event Studio V1 must not enable realtime.');
+ assert(!/"realtime"\s*:/iu.test(source), 'Event Studio V1 must not declare realtime configuration.');
+ assert(!/"(?:raw_?sql|sql|migrations?)"\s*:/iu.test(source), 'Event Studio must use blueprint nodes rather than raw SQL.');
+
+ for (const table of definition.tables) {
+ assertExact(
+ table.fields?.map((field) => field.name),
+ expectedFields[table.table_name],
+ `${table.table_name} fields`
+ );
+ assert(table.use_rls === true, `${table.table_name} must enable RLS.`);
+ assert(Array.isArray(table.nodes), `${table.table_name}.nodes must be an array.`);
+ assert(nodeTypeName(table.nodes[0]) === 'DataId', `${table.table_name} must start with DataId.`);
+ const membershipNode = table.nodes.find(
+ (node) => nodeTypeName(node) === 'DataEntityMembership'
+ );
+ assert(
+ membershipNode?.data?.entity_field_name === 'org_id',
+ `${table.table_name} must be org-scoped through DataEntityMembership.`
+ );
+ const authenticatedGrant = table.grants?.find(
+ (grant) => grant.roles?.includes('authenticated')
+ );
+ assert(authenticatedGrant, `${table.table_name} must grant the authenticated role.`);
+ const grantedPrivileges = new Set(
+ authenticatedGrant.privileges?.map((entry) => entry[0])
+ );
+ assertExact(
+ Array.from(grantedPrivileges),
+ ['select', 'insert', 'update', 'delete'],
+ `${table.table_name} authenticated grants`
+ );
+ const memberPolicy = table.policies?.find(
+ (policy) =>
+ policy.$type === 'AuthzEntityMembership' &&
+ policy.data?.entity_field === 'org_id' &&
+ policy.data?.membership_type === 2 &&
+ policy.data?.is_admin === undefined &&
+ policy.data?.is_owner === undefined
+ );
+ assertExact(
+ memberPolicy?.privileges,
+ ['select', 'insert', 'update'],
+ `${table.table_name} member privileges`
+ );
+ for (const roleFlag of ['is_admin', 'is_owner']) {
+ const destructivePolicy = table.policies?.find(
+ (policy) =>
+ policy.$type === 'AuthzEntityMembership' &&
+ policy.data?.entity_field === 'org_id' &&
+ policy.data?.membership_type === 2 &&
+ policy.data?.[roleFlag] === true
+ );
+ assertExact(
+ destructivePolicy?.privileges,
+ ['delete'],
+ `${table.table_name} ${roleFlag} delete policy`
+ );
+ }
+ }
+
+ for (const tableName of ['programs', 'sessions']) {
+ const status = tableByName
+ .get(tableName)
+ ?.fields?.find((field) => field.name === 'status');
+ assertExact(
+ status?.type,
+ { name: 'text' },
+ `${tableName} status type`
+ );
+ }
+ const tags = tableByName
+ .get('sessions')
+ ?.fields?.find((field) => field.name === 'tags');
+ assertExact(
+ tags?.type,
+ { name: 'text', array_dimensions: 1 },
+ 'sessions tags type'
+ );
+
+ const relationCoordinates = definition.relations.map(
+ (relation) =>
+ `${relation.source_table}.${relation.field_name}->${relation.target_table}`
+ );
+ assertExact(
+ relationCoordinates,
+ [
+ 'sessions.program_id->programs',
+ 'sessions.venue_id->venues',
+ 'session_people.session_id->sessions',
+ 'session_people.person_id->people'
+ ],
+ 'Event Studio relations'
+ );
+ assertExact(
+ definition.unique_constraints,
+ [
+ {
+ table_name: 'session_people',
+ columns: ['session_id', 'person_id']
+ }
+ ],
+ 'Event Studio relation uniqueness'
+ );
+}
+
function assertExact(actual, expected, label) {
assert(
isDeepStrictEqual(actual, expected),
@@ -2066,6 +2398,89 @@ function registryContentKey(registryItem, sourcePath) {
return registryItem + '\0' + sourcePath;
}
+function appKitRegistryItems(catalogItems) {
+ const catalogByName = byName(catalogItems, 'Registry catalog item');
+ const collected = new Map();
+ const visit = (name, ancestry = []) => {
+ assert(
+ !ancestry.includes(name),
+ `App Kit registry dependency cycle: ${ancestry.concat(name).join(' -> ')}.`
+ );
+ if (collected.has(name)) return;
+ const item = catalogByName.get(name);
+ assert(item, `App Kit registry closure references missing item ${name}.`);
+ collected.set(name, item);
+ for (const dependency of item.registryDependencies) {
+ const prefix = `${PINNED.registryNamespace}/`;
+ assert(
+ dependency.startsWith(prefix) && dependency.length > prefix.length,
+ `${name} has unsupported registry dependency ${dependency}.`
+ );
+ visit(dependency.slice(prefix.length), ancestry.concat(name));
+ }
+ };
+ for (const name of APP_KIT_ROOT_NAMES) visit(name);
+ return Array.from(collected.values()).sort((left, right) =>
+ left.name.localeCompare(right.name)
+ );
+}
+
+export function collectAttestedRegistrySources(plans, catalogItems) {
+ const sources = new Map();
+ const add = (registryItem, sourcePath, type) => {
+ const key = registryContentKey(registryItem, sourcePath);
+ const existing = sources.get(key);
+ assert(
+ !existing || existing.type === type,
+ `Registry content source type conflict for ${registryItem}/${sourcePath}.`
+ );
+ if (!existing) sources.set(key, { registryItem, path: sourcePath, type });
+ };
+ for (const plan of plans.values()) {
+ for (const file of plan.composition.files) {
+ for (const source of file.sources) {
+ add(source.registryItem, source.path, file.type);
+ }
+ }
+ }
+ for (const item of appKitRegistryItems(catalogItems)) {
+ for (const file of item.files) add(item.name, file.path, file.type);
+ }
+ return Array.from(sources.values()).sort((left, right) =>
+ `${left.registryItem}/${left.path}`.localeCompare(`${right.registryItem}/${right.path}`)
+ );
+}
+
+export function collectAttestedExternalPackages(snapshot, plans, catalogItems) {
+ const firstParty = new Set(snapshot.release.packages.map((entry) => entry.name));
+ const requirements = new Map();
+ const add = (specifier) => {
+ const requirement = parseNpmPackageRequirement(specifier);
+ if (firstParty.has(requirement.name)) return;
+ assert(
+ requirement.requested === null || requirement.exactVersion !== null,
+ `External package ${requirement.name} uses unsupported non-exact requirement ${requirement.requested}.`
+ );
+ const versions = requirements.get(requirement.name) ?? new Set();
+ versions.add(requirement.exactVersion);
+ requirements.set(requirement.name, versions);
+ };
+ for (const plan of plans.values()) {
+ for (const dependency of plan.composition.npmDependencies) add(dependency.name);
+ }
+ for (const item of appKitRegistryItems(catalogItems)) {
+ for (const dependency of item.dependencies) add(dependency);
+ }
+ return Array.from(requirements, ([name, versions]) => {
+ const exactVersions = Array.from(versions).filter((version) => version !== null);
+ assert(
+ new Set(exactVersions).size <= 1,
+ `Package ${name} has conflicting exact requirements.`
+ );
+ return { name, exactVersion: exactVersions[0] ?? null };
+ }).sort((left, right) => left.name.localeCompare(right.name));
+}
+
function sourceMap(snapshot) {
return new Map(
snapshot.source.attestations.canonicalFiles.map((record) => [
@@ -3281,6 +3696,14 @@ export function projectRegistryCatalog(registry) {
type: file.type,
target: file.target ?? null
}));
+ const constructive = item.meta?.constructive;
+ if (constructive !== undefined) {
+ assertConstructiveRegistryMetadata(
+ constructive,
+ `${item.name}.meta.constructive`,
+ item.name
+ );
+ }
return {
name: item.name,
type: item.type,
@@ -3292,6 +3715,9 @@ export function projectRegistryCatalog(registry) {
devDependencies: item.devDependencies ?? [],
registryDependencies: item.registryDependencies ?? [],
files,
+ ...(constructive === undefined
+ ? {}
+ : { meta: { constructive } }),
installCommand:
`pnpm dlx shadcn@${PINNED.shadcnVersion} add ${PINNED.registryNamespace}/${item.name}`
};
@@ -3330,6 +3756,25 @@ export function assertRegistryCatalog(catalog, snapshot) {
assertStringArray(item.dependencies, `${item.name}.dependencies`);
assertStringArray(item.devDependencies, `${item.name}.devDependencies`);
assertStringArray(item.registryDependencies, `${item.name}.registryDependencies`);
+ if (item.meta !== undefined) {
+ assertObject(item.meta, `${item.name}.meta`);
+ assert(
+ Object.keys(item.meta).length === 1 && item.meta.constructive,
+ `${item.name}.meta may contain only the portable constructive contract.`
+ );
+ assertConstructiveRegistryMetadata(
+ item.meta.constructive,
+ `${item.name}.meta.constructive`,
+ item.name
+ );
+ for (const compatibleItem of item.meta.constructive.compatibleWith ?? []) {
+ assert(
+ APP_KIT_ROOT_NAMES.includes(compatibleItem) &&
+ itemByName.has(compatibleItem),
+ `${item.name}.meta.constructive.compatibleWith references unknown App Kit root ${compatibleItem}.`
+ );
+ }
+ }
assert(Array.isArray(item.files), `${item.name}.files must be an array.`);
for (const file of item.files) {
assertObject(file, `${item.name} file`);
@@ -3346,6 +3791,21 @@ export function assertRegistryCatalog(catalog, snapshot) {
assert(itemByName.has(dependencyName), `${item.name} references unknown registry item ${dependency}.`);
}
}
+ const namedAppKitRoots = catalog.items
+ .filter((item) => APP_KIT_ROOT_NAMES.includes(item.name))
+ .map((item) => item.name);
+ assertExact(
+ namedAppKitRoots.slice().sort(),
+ APP_KIT_ROOT_NAMES.slice().sort(),
+ 'App Kit registry root set'
+ );
+ for (const rootName of APP_KIT_ROOT_NAMES) {
+ assert(
+ constructiveMetadataForItem(itemByName.get(rootName))?.family ===
+ 'app-kit',
+ `${rootName} is missing versioned meta.constructive.`
+ );
+ }
for (const name of [
'constructive-theme',
'button',
@@ -3491,24 +3951,12 @@ export function validateSkillArtifacts(snapshot, root = skillDirectory) {
registryContent.recordCount === registryContent.records.length,
'Registry content recordCount is inconsistent.'
);
- const expectedSources = new Map();
- for (const plan of planByItem.values()) {
- for (const file of plan.composition.files) {
- for (const source of file.sources) {
- const key = registryContentKey(source.registryItem, source.path);
- const expected = expectedSources.get(key);
- if (expected) {
- assert(expected.type === file.type, 'Registry content source type conflicts across install plans.');
- } else {
- expectedSources.set(key, {
- registryItem: source.registryItem,
- path: source.path,
- type: file.type
- });
- }
- }
- }
- }
+ const expectedSources = new Map(
+ collectAttestedRegistrySources(planByItem, catalog.items).map((source) => [
+ registryContentKey(source.registryItem, source.path),
+ source
+ ])
+ );
const contentBySource = new Map();
for (const record of registryContent.records) {
assertObject(record, 'Registry content record');
@@ -3525,7 +3973,7 @@ export function validateSkillArtifacts(snapshot, root = skillDirectory) {
}
assert(
contentBySource.size === expectedSources.size,
- 'Registry content must exactly cover every install-plan source.'
+ 'Registry content must exactly cover every Console-plan and App Kit source.'
);
const packageResolutionsPath = assertAttestedFile(
root,
@@ -3555,15 +4003,11 @@ export function validateSkillArtifacts(snapshot, root = skillDirectory) {
packageResolutions.recordCount === packageResolutions.records.length,
'Package resolutions recordCount is inconsistent.'
);
- const firstPartyPackages = new Set(snapshot.release.packages.map((entry) => entry.name));
- const expectedExternalPackages = new Set();
- for (const plan of planByItem.values()) {
- for (const dependency of plan.composition.npmDependencies) {
- if (!firstPartyPackages.has(dependency.name)) {
- expectedExternalPackages.add(dependency.name);
- }
- }
- }
+ const expectedExternalPackages = new Map(
+ collectAttestedExternalPackages(snapshot, planByItem, catalog.items).map(
+ ({ name, exactVersion }) => [name, new Set([exactVersion])]
+ )
+ );
const packageByName = new Map();
for (const record of packageResolutions.records) {
assertObject(record, 'Package resolution record');
@@ -3575,6 +4019,18 @@ export function validateSkillArtifacts(snapshot, root = skillDirectory) {
expectedExternalPackages.has(record.name),
'Package resolutions contain unexpected package ' + record.name + '.'
);
+ const exactVersions = Array.from(expectedExternalPackages.get(record.name))
+ .filter((version) => version !== null);
+ assert(
+ new Set(exactVersions).size <= 1,
+ `Package ${record.name} has conflicting exact requirements.`
+ );
+ if (exactVersions.length === 1) {
+ assert(
+ record.version === exactVersions[0],
+ `Package ${record.name} must resolve exact requested version ${exactVersions[0]}.`
+ );
+ }
assert(!packageByName.has(record.name), 'Duplicate package resolution ' + record.name + '.');
let resolvedUrl;
try {
@@ -3612,6 +4068,8 @@ export function parseArguments(arguments_) {
let blocksRepo = null;
let help = false;
let query = null;
+ let registryCapability = null;
+ let registryFamily = null;
let registryType = null;
let sourcePreflight = false;
for (let index = 0; index < arguments_.length; index += 1) {
@@ -3660,11 +4118,35 @@ export function parseArguments(arguments_) {
index += 1;
continue;
}
+ if (argument === '--family') {
+ assert(registryFamily === null, '--family may be provided only once.');
+ const value = arguments_[index + 1];
+ assert(value && !value.startsWith('-'), '--family requires a registry family.');
+ registryFamily = value;
+ index += 1;
+ continue;
+ }
+ if (argument === '--capability') {
+ assert(
+ registryCapability === null,
+ '--capability may be provided only once.'
+ );
+ const value = arguments_[index + 1];
+ assert(
+ value && !value.startsWith('-'),
+ '--capability requires a capability.'
+ );
+ registryCapability = value;
+ index += 1;
+ continue;
+ }
fail(`Unknown argument ${argument}.`);
}
assert(
- registryType === null || query?.kind === 'list-registry',
- '--type is valid only with --list-registry.'
+ [registryType, registryFamily, registryCapability].every(
+ (value) => value === null
+ ) || query?.kind === 'list-registry',
+ '--type, --family, and --capability are valid only with --list-registry.'
);
assert(
!sourcePreflight || blocksRepo !== null,
@@ -3674,7 +4156,15 @@ export function parseArguments(arguments_) {
!sourcePreflight || query === null,
'--source-preflight cannot be combined with a query mode.'
);
- return { blocksRepo, help, query, registryType, sourcePreflight };
+ return {
+ blocksRepo,
+ help,
+ query,
+ registryCapability,
+ registryFamily,
+ registryType,
+ sourcePreflight
+ };
}
function usage() {
@@ -3687,7 +4177,7 @@ function usage() {
' node /absolute/path/to/check-blocks-contract.mjs --blocks-repo /absolute/path/to/blocks',
' node /absolute/path/to/check-blocks-contract.mjs --list-roots',
' node /absolute/path/to/check-blocks-contract.mjs --root preset-b2b-storage',
- ' node /absolute/path/to/check-blocks-contract.mjs --list-registry [--type registry:block]',
+ ' node /absolute/path/to/check-blocks-contract.mjs --list-registry [--type registry:block] [--family app-kit] [--capability temporal]',
' node /absolute/path/to/check-blocks-contract.mjs --registry-item app-shell',
'',
'Without --blocks-repo, validates the portable catalog, all 19 complete plans,',
@@ -3907,6 +4397,7 @@ function registryItemForQuery(item, snapshot) {
devDependencies: item.devDependencies,
registryDependencies: item.registryDependencies,
files: item.files,
+ meta: item.meta ?? null,
publicInstall: publicInstallForCommand(snapshot, item.installCommand),
portableOverrides,
sourceLimitations: sourceLimitationsForRoot(snapshot, item.name),
@@ -3967,6 +4458,59 @@ function adapterProfilesForBindings(snapshot, bindings) {
};
}
+export function filterRegistryItems(items, filters = {}) {
+ const {
+ type = null,
+ family = null,
+ capability = null
+ } = filters;
+ return items.filter((item) => {
+ const constructive = constructiveMetadataForItem(item);
+ return (
+ (!type || item.type === type) &&
+ (!family || constructive?.family === family) &&
+ (!capability || constructive?.capabilities?.includes(capability))
+ );
+ });
+}
+
+function sortedUnique(values) {
+ return Array.from(new Set(values)).sort();
+}
+
+export function validateRegistryFilters(items, filters = {}) {
+ const { family = null, capability = null } = filters;
+ const catalogued = items.filter(
+ (item) => constructiveMetadataForItem(item) !== null
+ );
+ const families = sortedUnique(
+ catalogued.map((item) => constructiveMetadataForItem(item).family)
+ );
+ if (family) {
+ assert(
+ families.includes(family),
+ `Unknown registry family ${family}. Available families: ${families.join(', ') || '(none)'}.`
+ );
+ }
+ const familyItems = family
+ ? catalogued.filter(
+ (item) => constructiveMetadataForItem(item).family === family
+ )
+ : catalogued;
+ const capabilities = sortedUnique(
+ familyItems.flatMap(
+ (item) => constructiveMetadataForItem(item).capabilities ?? []
+ )
+ );
+ if (capability) {
+ assert(
+ capabilities.includes(capability),
+ `Unknown registry capability ${capability}${family ? ` for family ${family}` : ''}. Available capabilities: ${capabilities.join(', ') || '(none)'}.`
+ );
+ }
+ return { families, capabilities };
+}
+
function queryOutput(options, loaded) {
if (!options.query) return null;
switch (options.query.kind) {
@@ -4061,8 +4605,17 @@ function queryOutput(options, loaded) {
`Unknown registry type ${options.registryType}.`
);
}
- const selected = loaded.artifacts.catalog.items.filter(
- (item) => !options.registryType || item.type === options.registryType
+ validateRegistryFilters(loaded.artifacts.catalog.items, {
+ family: options.registryFamily,
+ capability: options.registryCapability
+ });
+ const selected = filterRegistryItems(
+ loaded.artifacts.catalog.items,
+ {
+ type: options.registryType,
+ family: options.registryFamily,
+ capability: options.registryCapability
+ }
).map((item) => registryItemForQuery(item, loaded.snapshot));
return {
schemaVersion: 1,
@@ -4071,7 +4624,9 @@ function queryOutput(options, loaded) {
installability: installabilityEnvelope(loaded.snapshot),
metaContract: loaded.snapshot.metaContract,
filter: {
- type: options.registryType
+ type: options.registryType,
+ family: options.registryFamily,
+ capability: options.registryCapability
},
itemCount: selected.length,
items: selected.map((item) => ({
@@ -4081,6 +4636,7 @@ function queryOutput(options, loaded) {
description: item.description,
categories: item.categories,
docs: item.docs,
+ meta: item.meta,
publicInstall: item.publicInstall,
runtimeStatus: item.runtimeStatus,
sourceLimitationIds: item.sourceLimitations.map(
@@ -4667,15 +5223,23 @@ export function assertBlocksSource(snapshot, artifacts, blocksRepo) {
);
const liveList = runBlocksInspector(blocksRepo, ['--list']);
+ const normalizedLiveItems = liveList.items.map((item) => ({
+ ...item,
+ installCommand: pinInspectorInstallCommand(item.installCommand, item.name)
+ }));
assert(liveList.schemaVersion === snapshot.source.inspector.schemaVersion, 'Live inspector schemaVersion drifted.');
assert(liveList.kind === snapshot.source.inspector.kind, 'Live inspector kind drifted.');
- assertExact(liveList.items, snapshot.items, 'Live inspector install roots');
+ assertExact(normalizedLiveItems, snapshot.items, 'Live inspector install roots');
for (const item of snapshot.items) {
const livePlan = runBlocksInspector(
blocksRepo,
['--item', item.name, '--compact']
);
+ livePlan.install.command = pinInspectorInstallCommand(
+ livePlan.install.command,
+ item.name
+ );
assertExact(
livePlan,
artifacts.planByItem.get(item.name),
@@ -4722,9 +5286,22 @@ export function loadPortableContract() {
const snapshot = readJson(snapshotPath, snapshotPath);
assertSnapshot(snapshot);
const artifacts = validateSkillArtifacts(snapshot);
+ const briefRoutes = readJson(briefRoutesPath, briefRoutesPath);
+ const briefRouteById = assertBriefRoutes(
+ briefRoutes,
+ artifacts.catalog.items
+ );
+ const eventStudioBlueprint = readJson(
+ eventStudioBlueprintPath,
+ eventStudioBlueprintPath
+ );
+ assertEventStudioBlueprint(eventStudioBlueprint);
return {
snapshot,
- artifacts
+ artifacts,
+ briefRoutes,
+ briefRouteById,
+ eventStudioBlueprint
};
}
diff --git a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
index ce65a78..5c51b8d 100644
--- a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
+++ b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
@@ -1,15 +1,33 @@
import assert from 'node:assert/strict';
-import { execFileSync } from 'node:child_process';
-import { readFileSync } from 'node:fs';
+import { execFileSync, spawnSync } from 'node:child_process';
+import {
+ mkdirSync,
+ mkdtempSync,
+ readFileSync,
+ rmSync,
+ writeFileSync
+} from 'node:fs';
+import { tmpdir } from 'node:os';
import path from 'node:path';
import test from 'node:test';
import { fileURLToPath } from 'node:url';
import {
+ assertBriefRoutes,
+ assertEventStudioBlueprint,
assertSnapshot,
+ filterRegistryItems,
loadPortableContract,
- parseArguments
+ parseNpmPackageRequirement,
+ parseArguments,
+ pinInspectorInstallCommand,
+ projectRegistryCatalog,
+ validateRegistryFilters
} from './check-blocks-contract.mjs';
+import {
+ changedReplacementPaths,
+ parseArguments as parseSyncArguments
+} from './sync-blocks-contract.mjs';
const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
const checker = path.join(scriptDirectory, 'check-blocks-contract.mjs');
@@ -17,6 +35,126 @@ const runtimeReference = path.join(
scriptDirectory,
'../references/runtime-contract.md'
);
+const briefRoutesReference = path.join(
+ scriptDirectory,
+ '../references/brief-to-roots.v1.json'
+);
+
+test('transactional Blocks contract synchronizer requires an explicit checkout', () => {
+ assert.deepEqual(
+ parseSyncArguments(['--blocks-repo', '/tmp/blocks', '--check']),
+ {
+ blocksRepo: '/tmp/blocks',
+ check: true,
+ refreshPackageResolutions: false,
+ help: false
+ }
+ );
+ assert.equal(
+ parseSyncArguments([
+ '--blocks-repo',
+ '/tmp/blocks',
+ '--refresh-package-resolutions'
+ ]).refreshPackageResolutions,
+ true
+ );
+ assert.throws(
+ () => parseSyncArguments([]),
+ /--blocks-repo is required/
+ );
+ assert.throws(
+ () => parseSyncArguments(['--blocks-repo', '/tmp/blocks', '--check', '--check']),
+ /--check may be provided only once/
+ );
+ assert.throws(
+ () => parseSyncArguments(['--blocks-repo', '/tmp/blocks', '--unknown']),
+ /Unknown argument --unknown/
+ );
+});
+
+test('synchronizer check mode detects generated artifact drift', () => {
+ const stageRoot = mkdtempSync(path.join(tmpdir(), 'blocks-contract-stage-'));
+ const currentRoot = mkdtempSync(path.join(tmpdir(), 'blocks-contract-current-'));
+ const contract = { source: { attestations: { installPlans: [] } } };
+ const generatedPaths = [
+ 'references/registry-catalog.v1.json',
+ 'references/registry-content.v1.json',
+ 'references/package-resolutions.v1.json',
+ 'references/install-roots.v1.json'
+ ];
+ try {
+ for (const relativePath of generatedPaths) {
+ for (const root of [stageRoot, currentRoot]) {
+ const filePath = path.join(root, relativePath);
+ mkdirSync(path.dirname(filePath), { recursive: true });
+ writeFileSync(filePath, 'same\n');
+ }
+ }
+ assert.deepEqual(changedReplacementPaths(stageRoot, contract, currentRoot), []);
+ writeFileSync(
+ path.join(stageRoot, 'references/registry-catalog.v1.json'),
+ 'changed\n'
+ );
+ assert.deepEqual(changedReplacementPaths(stageRoot, contract, currentRoot), [
+ 'references/registry-catalog.v1.json'
+ ]);
+ } finally {
+ rmSync(stageRoot, { recursive: true, force: true });
+ rmSync(currentRoot, { recursive: true, force: true });
+ }
+});
+
+test('npm dependency requirements preserve exact versions while canonicalizing names', () => {
+ assert.deepEqual(parseNpmPackageRequirement('@constructive-io/data@^0.5.0'), {
+ name: '@constructive-io/data',
+ requested: '^0.5.0',
+ exactVersion: null
+ });
+ assert.deepEqual(parseNpmPackageRequirement('@tanstack/react-table@9.0.0-beta.58'), {
+ name: '@tanstack/react-table',
+ requested: '9.0.0-beta.58',
+ exactVersion: '9.0.0-beta.58'
+ });
+ assert.deepEqual(parseNpmPackageRequirement('lucide-react'), {
+ name: 'lucide-react',
+ requested: null,
+ exactVersion: null
+ });
+ assert.equal(
+ pinInspectorInstallCommand(
+ 'pnpm dlx shadcn@latest add @constructive/app-kit-data',
+ 'app-kit-data'
+ ),
+ 'pnpm dlx shadcn@4.13.1 add @constructive/app-kit-data'
+ );
+ assert.throws(
+ () => pinInspectorInstallCommand(
+ 'pnpm dlx shadcn@next add @constructive/app-kit-data',
+ 'app-kit-data'
+ ),
+ /inspector install command changed/
+ );
+});
+
+function appKitCatalogFixture() {
+ return [
+ 'app-kit-core',
+ 'app-kit-data',
+ 'app-kit-board',
+ 'app-kit-dashboard',
+ 'app-kit-calendar',
+ 'app-kit-workflow',
+ 'app-kit-event-studio'
+ ].map((name) => ({
+ name,
+ meta: {
+ constructive: {
+ family: 'app-kit',
+ kind: name === 'app-kit-event-studio' ? 'starter' : 'view'
+ }
+ }
+ }));
+}
function runQuery(arguments_) {
const output = execFileSync(process.execPath, [checker].concat(arguments_), {
@@ -27,17 +165,334 @@ function runQuery(arguments_) {
return JSON.parse(output);
}
+function runQueryFailure(arguments_) {
+ const result = spawnSync(process.execPath, [checker].concat(arguments_), {
+ cwd: '/',
+ encoding: 'utf8',
+ stdio: ['ignore', 'pipe', 'pipe']
+ });
+ assert.notEqual(result.status, 0, `Expected query to fail: ${arguments_.join(' ')}`);
+ return result.stderr;
+}
+
test('portable artifacts validate as one complete contract', () => {
const loaded = loadPortableContract();
- assert.equal(loaded.snapshot.registry.catalog.itemCount, 102);
+ assert.equal(loaded.snapshot.registry.catalog.itemCount, 123);
assert.equal(loaded.snapshot.items.length, 19);
assert.equal(loaded.artifacts.planByItem.size, 19);
- assert.equal(loaded.artifacts.catalog.items.length, 102);
- assert.equal(loaded.artifacts.registryContent.records.length, 138);
- assert.equal(loaded.artifacts.contentBySource.size, 138);
- assert.equal(loaded.artifacts.packageResolutions.records.length, 10);
- assert.equal(loaded.artifacts.packageByName.size, 10);
+ assert.equal(
+ loaded.artifacts.catalog.items.length,
+ loaded.snapshot.registry.catalog.itemCount
+ );
+ assert.equal(
+ loaded.artifacts.registryContent.records.length,
+ loaded.artifacts.registryContent.recordCount
+ );
+ assert.equal(
+ loaded.artifacts.contentBySource.size,
+ loaded.artifacts.registryContent.recordCount
+ );
+ assert.equal(
+ loaded.artifacts.packageResolutions.records.length,
+ loaded.artifacts.packageResolutions.recordCount
+ );
+ assert.equal(
+ loaded.artifacts.packageByName.size,
+ loaded.artifacts.packageResolutions.recordCount
+ );
assert.equal(loaded.snapshot.sourceLimitations.length, 15);
+ assert.equal(loaded.briefRouteById.size, 7);
+ assert.equal(loaded.eventStudioBlueprint.tables.length, 5);
+ for (const rootName of [
+ 'app-kit-core',
+ 'app-kit-data',
+ 'app-kit-board',
+ 'app-kit-dashboard',
+ 'app-kit-calendar',
+ 'app-kit-workflow',
+ 'app-kit-event-studio'
+ ]) {
+ const item = loaded.artifacts.catalog.items.find(
+ (candidate) => candidate.name === rootName
+ );
+ assert.ok(item, `Missing ${rootName} from the registry catalog.`);
+ for (const file of item.files) {
+ assert.ok(
+ loaded.artifacts.contentBySource.has(`${rootName}\0${file.path}`),
+ `Missing content attestation for ${rootName}/${file.path}.`
+ );
+ }
+ }
+ for (const packageName of [
+ '@tanstack/charts',
+ '@tanstack/charts-scales',
+ '@tanstack/react-charts',
+ 'd3-scale'
+ ]) {
+ assert.ok(
+ loaded.artifacts.packageByName.has(packageName),
+ `Missing package attestation for ${packageName}.`
+ );
+ }
+});
+
+test('App Kit catalog filters use meta.constructive without a parallel root list', () => {
+ const metadata = (overrides) => ({
+ version: 1,
+ family: 'app-kit',
+ kind: 'view',
+ boundary: 'client',
+ provider: 'app-kit',
+ dataShapes: ['collection'],
+ intents: ['inspect'],
+ capabilities: ['records'],
+ ...overrides
+ });
+ const items = [
+ {
+ name: 'app-kit-data',
+ type: 'registry:block',
+ meta: { constructive: metadata({ capabilities: ['records', 'relations'] }) }
+ },
+ {
+ name: 'app-kit-calendar',
+ type: 'registry:block',
+ meta: { constructive: metadata({ dataShapes: ['temporal'], capabilities: ['temporal'] }) }
+ },
+ {
+ name: 'feature-pack-data',
+ type: 'registry:block'
+ }
+ ];
+ assert.deepEqual(
+ filterRegistryItems(items, { family: 'app-kit' }).map((item) => item.name),
+ ['app-kit-data', 'app-kit-calendar']
+ );
+ assert.deepEqual(
+ filterRegistryItems(items, { capability: 'temporal' }).map((item) => item.name),
+ ['app-kit-calendar']
+ );
+ assert.deepEqual(
+ filterRegistryItems(items, {
+ type: 'registry:block',
+ family: 'app-kit',
+ capability: 'relations'
+ }).map((item) => item.name),
+ ['app-kit-data']
+ );
+ assert.deepEqual(validateRegistryFilters(items), {
+ families: ['app-kit'],
+ capabilities: ['records', 'relations', 'temporal']
+ });
+ assert.deepEqual(validateRegistryFilters(items, { family: 'app-kit' }), {
+ families: ['app-kit'],
+ capabilities: ['records', 'relations', 'temporal']
+ });
+ assert.throws(
+ () => validateRegistryFilters(items, { family: 'application-kit' }),
+ /Unknown registry family application-kit.*Available families: app-kit/
+ );
+ assert.throws(
+ () => validateRegistryFilters(items, {
+ family: 'app-kit',
+ capability: 'time-range'
+ }),
+ /Unknown registry capability time-range for family app-kit/
+ );
+
+ const options = parseArguments([
+ '--list-registry',
+ '--family',
+ 'app-kit',
+ '--capability',
+ 'temporal'
+ ]);
+ assert.equal(options.registryFamily, 'app-kit');
+ assert.equal(options.registryCapability, 'temporal');
+ assert.throws(
+ () => parseArguments(['--registry-item', 'app-kit-data', '--family', 'app-kit']),
+ /valid only with --list-registry/
+ );
+
+ const registryItem = {
+ name: 'app-kit-data',
+ type: 'registry:block',
+ title: 'App Kit Data',
+ description: 'Typed application data views.',
+ meta: {
+ constructive: metadata({
+ kind: 'resource',
+ boundary: 'mixed',
+ capabilities: ['records', 'relations']
+ })
+ }
+ };
+ const projection = projectRegistryCatalog({ items: [registryItem] });
+ assert.deepEqual(
+ projection.items[0].meta.constructive,
+ registryItem.meta.constructive
+ );
+ const invalid = structuredClone(registryItem);
+ delete invalid.meta.constructive.provider;
+ assert.throws(
+ () => projectRegistryCatalog({ items: [invalid] }),
+ /provider must be app-kit/
+ );
+ const invalidFamily = structuredClone(registryItem);
+ invalidFamily.meta.constructive.family = 'platform';
+ assert.throws(
+ () => projectRegistryCatalog({ items: [invalidFamily] }),
+ /family must be app-kit/
+ );
+ const invalidRoot = structuredClone(registryItem);
+ invalidRoot.name = 'app-kit-map';
+ assert.throws(
+ () => projectRegistryCatalog({ items: [invalidRoot] }),
+ /without being an App Kit install root/
+ );
+});
+
+test('loaded catalog backs validated App Kit family and capability queries', () => {
+ const family = runQuery(['--list-registry', '--family', 'app-kit']);
+ assert.deepEqual(
+ family.items.map((item) => item.name),
+ [
+ 'app-kit-core',
+ 'app-kit-data',
+ 'app-kit-board',
+ 'app-kit-dashboard',
+ 'app-kit-calendar',
+ 'app-kit-workflow',
+ 'app-kit-event-studio'
+ ]
+ );
+ const temporal = runQuery([
+ '--list-registry',
+ '--family',
+ 'app-kit',
+ '--capability',
+ 'temporal'
+ ]);
+ assert.deepEqual(
+ temporal.items.map((item) => item.name),
+ ['app-kit-calendar']
+ );
+ assert.match(
+ runQueryFailure(['--list-registry', '--family', 'application-kit']),
+ /Unknown registry family application-kit.*Available families: app-kit/
+ );
+ assert.match(
+ runQueryFailure([
+ '--list-registry',
+ '--family',
+ 'app-kit',
+ '--capability',
+ 'time-range'
+ ]),
+ /Unknown registry capability time-range for family app-kit/
+ );
+});
+
+test('brief routes select App Kit by shape instead of Sheets, Console, or review queues', () => {
+ const briefRoutes = JSON.parse(readFileSync(briefRoutesReference, 'utf8'));
+ const catalogItems = appKitCatalogFixture();
+ const briefRouteById = assertBriefRoutes(briefRoutes, catalogItems);
+ for (const route of briefRoutes.cases) {
+ assert.equal(
+ route.expectedRoots[0],
+ route.starterRequested ? 'app-kit-event-studio' : 'app-kit-core'
+ );
+ assert.ok(route.expectedRoots.every((root) => root.startsWith('app-kit-')));
+ assert.ok(route.forbiddenRoots.includes('feature-pack-data'));
+ assert.ok(route.forbiddenRoots.includes('console-kit-nextjs'));
+ if (!route.starterRequested) {
+ assert.ok(route.forbiddenRoots.includes('app-kit-event-studio'));
+ }
+ }
+ assert.ok(
+ briefRouteById.get('intake-approval').forbiddenAssumptions.includes(
+ 'review-queue-default'
+ )
+ );
+ assert.deepEqual(
+ briefRouteById.get('event-planning').expectedRoots,
+ [
+ 'app-kit-core',
+ 'app-kit-data',
+ 'app-kit-board',
+ 'app-kit-dashboard',
+ 'app-kit-calendar',
+ 'app-kit-workflow'
+ ]
+ );
+ assert.equal(
+ briefRouteById.get('event-planning').starterRequested,
+ false
+ );
+ assert.deepEqual(
+ briefRouteById.get('event-studio-opt-in').expectedRoots,
+ ['app-kit-event-studio']
+ );
+ assert.equal(
+ briefRouteById.get('event-studio-opt-in').starterRequested,
+ true
+ );
+ assert.equal(
+ briefRouteById.get('event-studio-opt-in').backendPreset,
+ 'b2b'
+ );
+
+ const missingOptIn = structuredClone(briefRoutes);
+ missingOptIn.cases.find((route) => route.id === 'event-studio-opt-in')
+ .starterRequested = false;
+ assert.throws(
+ () => assertBriefRoutes(missingOptIn, catalogItems),
+ /only with explicit starterRequested opt-in/
+ );
+});
+
+test('Event Studio remains a public org-scoped blueprint without realtime or raw SQL', () => {
+ const loaded = loadPortableContract();
+ assertEventStudioBlueprint(loaded.eventStudioBlueprint);
+
+ const realtimeMutation = structuredClone(loaded.eventStudioBlueprint);
+ realtimeMutation.tables[0].nodes.push('DataRealtime');
+ assert.throws(
+ () => assertEventStudioBlueprint(realtimeMutation),
+ /must not enable realtime/
+ );
+
+ const deleteMutation = structuredClone(loaded.eventStudioBlueprint);
+ deleteMutation.tables[0].policies = deleteMutation.tables[0].policies.filter(
+ (policy) => policy.data?.is_owner !== true
+ );
+ assert.throws(
+ () => assertEventStudioBlueprint(deleteMutation),
+ /is_owner delete policy/
+ );
+
+ const fieldMutation = structuredClone(loaded.eventStudioBlueprint);
+ fieldMutation.tables.find((table) => table.table_name === 'sessions')
+ .fields.find((field) => field.name === 'description').name = 'summary';
+ assert.throws(
+ () => assertEventStudioBlueprint(fieldMutation),
+ /sessions fields drifted/
+ );
+
+ const uniquenessMutation = structuredClone(loaded.eventStudioBlueprint);
+ uniquenessMutation.unique_constraints = [];
+ assert.throws(
+ () => assertEventStudioBlueprint(uniquenessMutation),
+ /Event Studio relation uniqueness drifted/
+ );
+
+ const statusMutation = structuredClone(loaded.eventStudioBlueprint);
+ statusMutation.tables.find((table) => table.table_name === 'sessions')
+ .fields.find((field) => field.name === 'status').type.name = 'session_status';
+ assert.throws(
+ () => assertEventStudioBlueprint(statusMutation),
+ /sessions status type drifted/
+ );
});
test('module endpoint and adapter drift fail closed', () => {
@@ -339,7 +794,7 @@ test('every query mode exposes the same branch-only installability gate', () =>
);
assert.equal(
gate.pinnedLocalConsumption.sourceCommit,
- '4f2a789fde9a90c0c6ed5977896493bb4818fa77'
+ '706ae32b8b03cd6effaa9d0d5f385d93529635df'
);
assert.equal(
gate.pinnedLocalConsumption.consumerIsolation.required,
diff --git a/.agents/skills/constructive-blocks/scripts/sync-blocks-contract.mjs b/.agents/skills/constructive-blocks/scripts/sync-blocks-contract.mjs
new file mode 100644
index 0000000..fcc1a99
--- /dev/null
+++ b/.agents/skills/constructive-blocks/scripts/sync-blocks-contract.mjs
@@ -0,0 +1,480 @@
+#!/usr/bin/env node
+
+import crypto from 'node:crypto';
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+import path from 'node:path';
+import process from 'node:process';
+import { fileURLToPath, pathToFileURL } from 'node:url';
+
+import {
+ assertBlocksSource,
+ assertSnapshot,
+ collectAttestedExternalPackages,
+ collectAttestedRegistrySources,
+ pinInspectorInstallCommand,
+ projectRegistryCatalog,
+ validateSkillArtifacts
+} from './check-blocks-contract.mjs';
+
+const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
+const skillDirectory = path.resolve(scriptDirectory, '..');
+const referencesDirectory = path.join(skillDirectory, 'references');
+const contractPath = path.join(referencesDirectory, 'install-roots.v1.json');
+const registryOrigin = 'https://registry.npmjs.org';
+
+function fail(message) {
+ throw new Error(message);
+}
+
+function readJson(filePath, label) {
+ try {
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
+ } catch (cause) {
+ fail(`Unable to read ${label}: ${cause instanceof Error ? cause.message : String(cause)}`);
+ }
+}
+
+function writeJson(filePath, value, spacing = 2) {
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
+ fs.writeFileSync(filePath, `${JSON.stringify(value, null, spacing)}\n`, 'utf8');
+}
+
+function sha256File(filePath) {
+ return crypto.createHash('sha256').update(fs.readFileSync(filePath)).digest('hex');
+}
+
+function sha256Text(value) {
+ return crypto.createHash('sha256').update(value).digest('hex');
+}
+
+function refreshCanonicalSourceLinks(value, canonicalByPath, seen = new Set()) {
+ if (value === null || typeof value !== 'object' || seen.has(value)) return;
+ seen.add(value);
+ if (
+ typeof value.path === 'string' &&
+ typeof value.sha256 === 'string' &&
+ canonicalByPath.has(value.path)
+ ) {
+ value.sha256 = canonicalByPath.get(value.path);
+ }
+ for (const child of Object.values(value)) {
+ refreshCanonicalSourceLinks(child, canonicalByPath, seen);
+ }
+}
+
+function run(command, arguments_, label, options = {}) {
+ try {
+ return execFileSync(command, arguments_, {
+ encoding: 'utf8',
+ maxBuffer: 32 * 1024 * 1024,
+ stdio: options.inherit ? 'inherit' : ['ignore', 'pipe', 'pipe']
+ });
+ } catch (cause) {
+ const stderr = cause && typeof cause === 'object' && typeof cause.stderr === 'string'
+ ? cause.stderr.trim()
+ : '';
+ fail(`${label} failed: ${stderr || (cause instanceof Error ? cause.message : String(cause))}`);
+ }
+}
+
+function parseJsonCommand(command, arguments_, label) {
+ const stdout = run(command, arguments_, label);
+ try {
+ return JSON.parse(stdout);
+ } catch (cause) {
+ fail(`${label} did not emit JSON: ${cause instanceof Error ? cause.message : String(cause)}`);
+ }
+}
+
+function assertCleanPinnedCheckout(contract, blocksRepo) {
+ if (!fs.existsSync(blocksRepo)) {
+ fail(`Blocks repository does not exist: ${blocksRepo}`);
+ }
+ const commit = run(
+ 'git',
+ ['-C', blocksRepo, 'rev-parse', 'HEAD'],
+ 'Resolving Blocks HEAD'
+ ).trim();
+ if (commit !== contract.source.commit) {
+ fail(`Blocks HEAD ${commit} does not match pinned commit ${contract.source.commit}.`);
+ }
+ const status = run(
+ 'git',
+ ['-C', blocksRepo, 'status', '--porcelain=v1', '--untracked-files=all'],
+ 'Checking Blocks worktree'
+ ).trim();
+ if (status.length > 0) {
+ fail(`Blocks worktree must be clean before regeneration:\n${status}`);
+ }
+}
+
+export function parseArguments(arguments_) {
+ let blocksRepo = null;
+ let check = false;
+ let refreshPackageResolutions = false;
+ let help = false;
+
+ for (let index = 0; index < arguments_.length; index += 1) {
+ const argument = arguments_[index];
+ if (argument === '--blocks-repo') {
+ if (blocksRepo !== null) fail('--blocks-repo may be provided only once.');
+ const value = arguments_[index + 1];
+ if (!value || value.startsWith('-')) fail('--blocks-repo requires a path.');
+ blocksRepo = path.resolve(value);
+ index += 1;
+ } else if (argument === '--check') {
+ if (check) fail('--check may be provided only once.');
+ check = true;
+ } else if (argument === '--refresh-package-resolutions') {
+ if (refreshPackageResolutions) {
+ fail('--refresh-package-resolutions may be provided only once.');
+ }
+ refreshPackageResolutions = true;
+ } else if (argument === '--help' || argument === '-h') {
+ help = true;
+ } else {
+ fail(`Unknown argument ${argument}.`);
+ }
+ }
+ if (!help && blocksRepo === null) fail('--blocks-repo is required.');
+ return { blocksRepo, check, refreshPackageResolutions, help };
+}
+
+function usage() {
+ return [
+ 'Regenerate the derived Constructive Blocks skill contract transactionally.',
+ '',
+ 'Usage:',
+ ' node sync-blocks-contract.mjs --blocks-repo /absolute/path/to/blocks',
+ ' node sync-blocks-contract.mjs --blocks-repo /absolute/path/to/blocks --check',
+ ' node sync-blocks-contract.mjs --blocks-repo /absolute/path/to/blocks --refresh-package-resolutions',
+ '',
+ 'The Blocks checkout must be clean and exactly match the already-pinned commit.',
+ 'Without --check, generated catalog, plans, content, package snapshot, and',
+ 'attestations replace their checked-in counterparts only after staged validation.',
+ '--refresh-package-resolutions explicitly queries npm latest releases; without it,',
+ 'the existing exact package records are preserved and only their sourceCommit changes.'
+ ].join('\n');
+}
+
+function inspectorArguments(blocksRepo, arguments_) {
+ return ['--dir', blocksRepo, '--silent', 'console-kit:inspect', '--no-build'].concat(arguments_);
+}
+
+function expectedRootNames(contract) {
+ return contract.source.attestations.installPlans.map((record) => record.item);
+}
+
+function exactArray(actual, expected, label) {
+ if (JSON.stringify(actual) !== JSON.stringify(expected)) {
+ fail(`${label} changed. Update the checker invariants before regenerating this contract.`);
+ }
+}
+
+function registryContent(blocksRepo, contract, plans, catalogItems) {
+ const cache = new Map();
+ const records = collectAttestedRegistrySources(plans, catalogItems).map((source) => {
+ let item = cache.get(source.registryItem);
+ if (!item) {
+ item = readJson(
+ path.join(blocksRepo, 'apps', 'registry', 'public', 'r', `${source.registryItem}.json`),
+ `built registry item ${source.registryItem}`
+ );
+ cache.set(source.registryItem, item);
+ }
+ const matches = Array.isArray(item.files)
+ ? item.files.filter((candidate) => candidate.path === source.path)
+ : [];
+ if (matches.length !== 1 || matches[0].type !== source.type || typeof matches[0].content !== 'string') {
+ fail(`Built registry item is missing exact source ${source.registryItem}/${source.path}.`);
+ }
+ return {
+ registryItem: source.registryItem,
+ path: source.path,
+ type: source.type,
+ contentSha256: sha256Text(matches[0].content)
+ };
+ });
+ return {
+ schemaVersion: 1,
+ kind: 'constructive.blocks-registry-content',
+ sourceCommit: contract.source.commit,
+ recordCount: records.length,
+ records
+ };
+}
+
+function preservedPackageResolutions(contract, packageRequirements) {
+ const current = readJson(
+ path.join(referencesDirectory, 'package-resolutions.v1.json'),
+ 'current package resolutions'
+ );
+ const byName = new Map(current.records?.map((record) => [record.name, record]));
+ const records = packageRequirements.map(({ name, exactVersion }) => {
+ const record = byName.get(name);
+ if (!record) {
+ fail(`Package ${name} is newly required. Re-run with --refresh-package-resolutions to resolve it.`);
+ }
+ if (exactVersion !== null && record.version !== exactVersion) {
+ fail(
+ `Package ${name} must resolve ${exactVersion}. Re-run with --refresh-package-resolutions.`
+ );
+ }
+ return record;
+ });
+ return {
+ schemaVersion: 1,
+ kind: 'constructive.blocks-package-resolutions',
+ sourceCommit: contract.source.commit,
+ registry: registryOrigin,
+ recordCount: records.length,
+ records
+ };
+}
+
+async function refreshedPackageResolutions(contract, packageRequirements) {
+ const records = [];
+ for (const { name, exactVersion } of packageRequirements) {
+ const response = await fetch(`${registryOrigin}/${encodeURIComponent(name)}`, {
+ headers: { accept: 'application/vnd.npm.install-v1+json' }
+ });
+ if (!response.ok) fail(`npm registry request failed for ${name} with HTTP ${response.status}.`);
+ const packument = await response.json();
+ const version = exactVersion ?? packument?.['dist-tags']?.latest;
+ const release = typeof version === 'string' ? packument?.versions?.[version] : null;
+ const integrity = release?.dist?.integrity;
+ const resolved = release?.dist?.tarball;
+ if (
+ typeof version !== 'string' ||
+ !/^sha512-[A-Za-z0-9+/]+={0,2}$/.test(integrity) ||
+ typeof resolved !== 'string'
+ ) {
+ fail(`npm registry metadata is incomplete for ${name}.`);
+ }
+ const url = new URL(resolved);
+ if (url.protocol !== 'https:' || url.hostname !== 'registry.npmjs.org') {
+ fail(`npm registry returned a non-canonical tarball URL for ${name}.`);
+ }
+ records.push({ name, version, integrity, resolved });
+ }
+ return {
+ schemaVersion: 1,
+ kind: 'constructive.blocks-package-resolutions',
+ sourceCommit: contract.source.commit,
+ registry: registryOrigin,
+ recordCount: records.length,
+ records
+ };
+}
+
+function stagedContract(blocksRepo, stageReferences, contract, liveItems, plans, catalog, content, packages) {
+ const result = structuredClone(contract);
+ result.items = liveItems;
+ result.registry.catalog.itemCount = catalog.itemCount;
+ if (!result.registry.catalog.projection.includes('meta.constructive')) {
+ result.registry.catalog.projection.push('meta.constructive');
+ }
+ for (const packageRecord of result.release.packages) {
+ const manifestPath = path.join(blocksRepo, packageRecord.manifestSource.path);
+ const manifest = readJson(manifestPath, `package manifest ${packageRecord.name}`);
+ if (manifest.name !== packageRecord.name || typeof manifest.version !== 'string') {
+ fail(`Package manifest identity drifted for ${packageRecord.name}.`);
+ }
+ packageRecord.version = manifest.version;
+ packageRecord.manifestSource.sha256 = sha256File(manifestPath);
+ }
+ const attestations = result.source.attestations;
+ attestations.aggregateRegistry.sha256 = sha256File(
+ path.join(blocksRepo, attestations.aggregateRegistry.path)
+ );
+ for (const record of attestations.canonicalFiles) {
+ record.sha256 = sha256File(path.join(blocksRepo, record.path));
+ }
+ refreshCanonicalSourceLinks(
+ result,
+ new Map(attestations.canonicalFiles.map((record) => [record.path, record.sha256]))
+ );
+
+ writeJson(path.join(stageReferences, 'registry-catalog.v1.json'), catalog, 0);
+ writeJson(path.join(stageReferences, 'registry-content.v1.json'), content);
+ writeJson(path.join(stageReferences, 'package-resolutions.v1.json'), packages);
+ for (const record of attestations.installPlans) {
+ writeJson(
+ path.join(stageReferences, record.path.slice('references/'.length)),
+ plans.get(record.item),
+ 0
+ );
+ }
+
+ attestations.registryCatalog.sha256 = sha256File(
+ path.join(stageReferences, attestations.registryCatalog.path.slice('references/'.length))
+ );
+ attestations.registryContent.sha256 = sha256File(
+ path.join(stageReferences, attestations.registryContent.path.slice('references/'.length))
+ );
+ attestations.packageResolutions.sha256 = sha256File(
+ path.join(stageReferences, attestations.packageResolutions.path.slice('references/'.length))
+ );
+ for (const record of attestations.installPlans) {
+ record.sha256 = sha256File(path.join(stageReferences, record.path.slice('references/'.length)));
+ }
+ writeJson(path.join(stageReferences, 'install-roots.v1.json'), result);
+ return result;
+}
+
+function replacementPaths(contract) {
+ return [
+ 'references/registry-catalog.v1.json',
+ 'references/registry-content.v1.json',
+ 'references/package-resolutions.v1.json'
+ ].concat(contract.source.attestations.installPlans.map((record) => record.path))
+ .concat(['references/install-roots.v1.json']);
+}
+
+export function changedReplacementPaths(stageRoot, contract, currentRoot = skillDirectory) {
+ return replacementPaths(contract).filter((relativePath) => {
+ const staged = path.join(stageRoot, relativePath);
+ const current = path.join(currentRoot, relativePath);
+ return (
+ !fs.existsSync(staged) ||
+ !fs.existsSync(current) ||
+ !fs.readFileSync(staged).equals(fs.readFileSync(current))
+ );
+ });
+}
+
+function replaceTransaction(stageRoot, contract, validate) {
+ const transactionRoot = fs.mkdtempSync(path.join(skillDirectory, '.sync-blocks-contract-'));
+ const backupRoot = path.join(transactionRoot, 'backup');
+ const replaced = [];
+ try {
+ for (const relativePath of replacementPaths(contract)) {
+ const target = path.join(skillDirectory, relativePath);
+ const staged = path.join(stageRoot, relativePath);
+ const backup = path.join(backupRoot, relativePath);
+ fs.mkdirSync(path.dirname(backup), { recursive: true });
+ fs.renameSync(target, backup);
+ try {
+ fs.renameSync(staged, target);
+ } catch (cause) {
+ fs.renameSync(backup, target);
+ throw cause;
+ }
+ replaced.push({ target, backup });
+ }
+ validate();
+ } catch (cause) {
+ for (const replacement of replaced.reverse()) {
+ if (fs.existsSync(replacement.target)) fs.rmSync(replacement.target);
+ if (fs.existsSync(replacement.backup)) fs.renameSync(replacement.backup, replacement.target);
+ }
+ throw cause;
+ } finally {
+ fs.rmSync(transactionRoot, { recursive: true, force: true });
+ }
+}
+
+async function main() {
+ const options = parseArguments(process.argv.slice(2));
+ if (options.help) {
+ process.stdout.write(`${usage()}\n`);
+ return;
+ }
+
+ const contract = readJson(contractPath, 'install-roots contract');
+ assertSnapshot(contract);
+ assertCleanPinnedCheckout(contract, options.blocksRepo);
+ run('pnpm', ['--dir', options.blocksRepo, 'build:registry'], 'Building Blocks registry', {
+ inherit: true
+ });
+
+ const liveList = parseJsonCommand(
+ 'pnpm',
+ inspectorArguments(options.blocksRepo, ['--list']),
+ 'Reading Blocks install roots'
+ );
+ const normalizedLiveItems = liveList.items.map((item) => ({
+ ...item,
+ installCommand: pinInspectorInstallCommand(item.installCommand, item.name)
+ }));
+ const rootNames = expectedRootNames(contract);
+ exactArray(
+ normalizedLiveItems.map((item) => item.name).sort(),
+ rootNames.slice().sort(),
+ 'Inspectable Blocks install-root set'
+ );
+
+ const plans = new Map();
+ for (const name of rootNames) {
+ const plan = parseJsonCommand(
+ 'pnpm',
+ inspectorArguments(options.blocksRepo, ['--item', name, '--compact']),
+ `Reading Blocks install plan ${name}`
+ );
+ plan.install.command = pinInspectorInstallCommand(plan.install.command, name);
+ plans.set(name, plan);
+ }
+ const aggregateRegistry = readJson(
+ path.join(options.blocksRepo, 'apps', 'registry', 'registry.json'),
+ 'built aggregate registry'
+ );
+ const catalog = projectRegistryCatalog(aggregateRegistry);
+ const content = registryContent(options.blocksRepo, contract, plans, catalog.items);
+ const packageNames = collectAttestedExternalPackages(contract, plans, catalog.items);
+ const packages = options.refreshPackageResolutions
+ ? await refreshedPackageResolutions(contract, packageNames)
+ : preservedPackageResolutions(contract, packageNames);
+
+ const stageRoot = fs.mkdtempSync(path.join(skillDirectory, '.sync-blocks-contract-stage-'));
+ try {
+ const stageReferences = path.join(stageRoot, 'references');
+ fs.cpSync(referencesDirectory, stageReferences, { recursive: true });
+ const nextContract = stagedContract(
+ options.blocksRepo,
+ stageReferences,
+ contract,
+ normalizedLiveItems,
+ plans,
+ catalog,
+ content,
+ packages
+ );
+ assertSnapshot(nextContract);
+ const stagedArtifacts = validateSkillArtifacts(nextContract, stageRoot);
+ assertBlocksSource(nextContract, stagedArtifacts, options.blocksRepo);
+
+ if (options.check) {
+ const drifted = changedReplacementPaths(stageRoot, contract);
+ if (drifted.length > 0) {
+ fail(`Blocks contract regeneration drifted:\n${drifted.join('\n')}`);
+ }
+ process.stdout.write(
+ `Blocks contract regeneration is current: ${catalog.itemCount} registry items, ${plans.size} install plans, ${content.recordCount} content attestations.\n`
+ );
+ return;
+ }
+ replaceTransaction(stageRoot, contract, () => {
+ const written = readJson(contractPath, 'written install-roots contract');
+ assertSnapshot(written);
+ const writtenArtifacts = validateSkillArtifacts(written);
+ assertBlocksSource(written, writtenArtifacts, options.blocksRepo);
+ });
+ process.stdout.write(
+ `Regenerated Blocks contract: ${catalog.itemCount} registry items, ${plans.size} install plans, ${content.recordCount} content attestations.\n`
+ );
+ } finally {
+ fs.rmSync(stageRoot, { recursive: true, force: true });
+ }
+}
+
+const isMain =
+ process.argv[1] &&
+ pathToFileURL(path.resolve(process.argv[1])).href === import.meta.url;
+
+if (isMain) {
+ main().catch((cause) => {
+ process.stderr.write(`${cause instanceof Error ? cause.message : String(cause)}\n`);
+ process.exitCode = 1;
+ });
+}
diff --git a/.agents/skills/constructive-blocks/scripts/sync-package-resolutions.mjs b/.agents/skills/constructive-blocks/scripts/sync-package-resolutions.mjs
index 6aa0e90..56392c0 100644
--- a/.agents/skills/constructive-blocks/scripts/sync-package-resolutions.mjs
+++ b/.agents/skills/constructive-blocks/scripts/sync-package-resolutions.mjs
@@ -6,6 +6,8 @@ import path from 'node:path';
import process from 'node:process';
import { fileURLToPath } from 'node:url';
+import { parseNpmPackageRequirement } from './check-blocks-contract.mjs';
+
const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
const skillDirectory = path.resolve(scriptDirectory, '..');
const referencesDirectory = path.join(skillDirectory, 'references');
@@ -27,22 +29,36 @@ function readJson(filePath, label) {
function expectedExternalPackages(contract) {
const firstParty = new Set(contract.release.packages.map((entry) => entry.name));
- const names = new Set();
+ const requirements = new Map();
for (const attestation of contract.source.attestations.installPlans) {
const plan = readJson(
path.join(skillDirectory, attestation.path),
'install plan ' + attestation.item
);
for (const dependency of plan.composition.npmDependencies) {
- if (!firstParty.has(dependency.name)) {
- names.add(dependency.name);
+ const requirement = parseNpmPackageRequirement(dependency.name);
+ if (firstParty.has(requirement.name)) continue;
+ if (requirement.requested !== null && requirement.exactVersion === null) {
+ fail(
+ 'External package ' + requirement.name +
+ ' uses unsupported non-exact requirement ' + requirement.requested + '.'
+ );
}
+ const versions = requirements.get(requirement.name) ?? new Set();
+ versions.add(requirement.exactVersion);
+ requirements.set(requirement.name, versions);
}
}
- return Array.from(names).sort((left, right) => left.localeCompare(right));
+ return Array.from(requirements, ([name, versions]) => {
+ const exactVersions = Array.from(versions).filter((version) => version !== null);
+ if (new Set(exactVersions).size > 1) {
+ fail('Package ' + name + ' has conflicting exact requirements.');
+ }
+ return { name, exactVersion: exactVersions[0] ?? null };
+ }).sort((left, right) => left.name.localeCompare(right.name));
}
-async function resolutionForPackage(name) {
+async function resolutionForPackage(name, exactVersion) {
const response = await fetch(registryOrigin + '/' + encodeURIComponent(name), {
headers: { accept: 'application/vnd.npm.install-v1+json' }
});
@@ -50,7 +66,7 @@ async function resolutionForPackage(name) {
fail('npm registry request failed for ' + name + ' with HTTP ' + response.status + '.');
}
const packument = await response.json();
- const version = packument?.['dist-tags']?.latest;
+ const version = exactVersion ?? packument?.['dist-tags']?.latest;
const release = typeof version === 'string' ? packument?.versions?.[version] : null;
const integrity = release?.dist?.integrity;
const resolved = release?.dist?.tarball;
@@ -74,10 +90,10 @@ async function resolutionForPackage(name) {
}
const contract = readJson(contractPath, 'install-roots contract');
-const names = expectedExternalPackages(contract);
+const requirements = expectedExternalPackages(contract);
const records = [];
-for (const name of names) {
- records.push(await resolutionForPackage(name));
+for (const { name, exactVersion } of requirements) {
+ records.push(await resolutionForPackage(name, exactVersion));
}
const snapshot = {
schemaVersion: 1,
diff --git a/.agents/skills/constructive-features/SKILL.md b/.agents/skills/constructive-features/SKILL.md
index 70ac7e3..f78bf48 100644
--- a/.agents/skills/constructive-features/SKILL.md
+++ b/.agents/skills/constructive-features/SKILL.md
@@ -1,6 +1,6 @@
---
name: constructive-features
-description: "Route Constructive application capabilities to the correct Blocks feature pack and authoritative domain skill. Use when asked what Constructive supports, which feature pack provides data, auth, users, organizations, storage, billing, or notifications, whether to use Console Kit or a standalone pack, or which skill owns an application capability."
+description: "Route Constructive application briefs to App Kit composition, optional Blocks platform-capability packs, and authoritative domain skills. Use when asked how to build an internal app from records, forms, dashboards, boards, calendars, or workflows; what Constructive supports; which feature pack provides auth, users, organizations, storage, billing, or notifications; or which skill owns a capability."
metadata:
author: constructive-io
version: "2.0.0"
@@ -8,18 +8,30 @@ metadata:
# Constructive Features
-Use this skill to translate product intent into a frontend feature-pack choice and the domain skill that owns the underlying behavior. Do not use it as an installation catalog: [`constructive-blocks`](../constructive-blocks/SKILL.md) owns exact registry roots, dependency closure, runtime contracts, and verification.
+Translate product intent into an application-composition lane, optional
+platform-capability surfaces, and the domain skill that owns backend behavior.
+Do not use this as an installation catalog: [`constructive-blocks`](../constructive-blocks/SKILL.md)
+owns exact roots, dependency closure, runtime contracts, and verification.
-## When to Apply
+## Route application composition first
-Use this skill when:
+1. Rewrite the brief as user intents, record/relationship shapes,
+ presentation geometry, and workflow behavior. Do not start from a
+ department name.
+2. Activate `constructive-blocks` and query its validated App Kit catalog.
+ Match the returned metadata and inspect dependency closure instead of
+ maintaining a root map here.
+3. Compare the selection with the deterministic fixtures in
+ [`constructive-blocks/references/brief-to-roots.v1.json`](../constructive-blocks/references/brief-to-roots.v1.json)
+ when auditing selection.
+4. Activate [`constructive-frontend`](../constructive-frontend/SKILL.md) after
+ selection when the application needs custom visual composition.
-- A user asks what Constructive can do or which skill covers a capability.
-- An application brief needs feature-pack intent before installation is planned.
-- You need to distinguish a standalone view, a selected Console Kit composition, and a complete Console Kit.
-- A capability spans frontend presentation and backend behavior, and ownership needs to be made explicit.
+Use the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+for exact contracts. Do not default to Sheets, Console Kit, a dashboard,
+board, or review queue merely because the domain contains records or statuses.
-## Feature-Pack Router
+## Route optional platform capabilities
| Product intent | Blocks pack | Domain skills |
|---|---|---|
@@ -31,7 +43,9 @@ Use this skill when:
| Manage plans, subscriptions, usage, entitlements, and credits | Billing (`billing`) | [`constructive-billing`](../constructive-billing/SKILL.md) |
| Read and manage an application notification inbox | Notifications (`notifications`) | [`constructive-notifications`](../constructive-notifications/SKILL.md), [`constructive-realtime`](../constructive-realtime/SKILL.md) |
-After selecting the product capability, activate `constructive-blocks` to choose and install its supported surface. Do not infer a registry root from the display name or maintain a copied list of registry dependencies here.
+After selecting a platform capability, activate `constructive-blocks` to choose
+and install its supported surface. Keep it orthogonal to the App Kit application
+composition and do not infer a registry root from a display name.
## Surface Router
@@ -41,7 +55,8 @@ After selecting the product capability, activate `constructive-blocks` to choose
| “Match the console to an official backend preset” | `constructive-blocks` → official preset surface |
| “Put these selected capabilities in Console Kit” | `constructive-blocks` → core plus selected Console modules |
| “Embed this capability in my own screen” | `constructive-blocks` → standalone feature pack |
-| “Build a bespoke domain page” | [`constructive-frontend`](../constructive-frontend/SKILL.md); follow its [current `_meta` guidance](../constructive-frontend/references/meta-forms.md), and use `constructive-codegen` only if a stable generated client is an explicit choice |
+| “Build an application around my domain schema” | `constructive-blocks` → App Kit composition, then [`constructive-frontend`](../constructive-frontend/SKILL.md) for visual customization |
+| “Build one bespoke domain page with no App Kit view fit” | [`constructive-frontend`](../constructive-frontend/SKILL.md); follow its [current `_meta` guidance](../constructive-frontend/references/meta-forms.md) |
| “Assemble and acceptance-check this tenant frontend” | [`constructive-builder`](../constructive-builder/SKILL.md) with an existing app workspace and already-provisioned tenant |
## Rules
@@ -50,7 +65,7 @@ After selecting the product capability, activate `constructive-blocks` to choose
2. **Keep installation and acceptance separate.** Sign-up, sign-in, CRUD, membership, and RLS checks are acceptance scenarios inside a capability, not feature-pack identifiers.
3. **Treat runtime evidence as authoritative for Console availability.** An installed Console module may be `ready`, `partial`, or `unavailable` for the active tenant and identity. A non-Data standalone pack instead renders the resources, policy, actions, and state supplied by its host; standalone Data validates its configured endpoint internally.
4. **Do not derive routes.** Pass explicit semantic endpoints through the tenant descriptor; never construct sibling hosts or use private routing headers for application UI.
-5. **Do not require generated clients for Blocks.** Console Kit performs capability discovery, standalone Data uses `_meta` plus introspection through Sheets, and the other standalone packs use host-injected resources and actions. Code generation remains opt-in for stable custom-domain UI.
+5. **Ground App Kit at build time.** Reconcile `_meta` with final executable GraphQL introspection, then emit explicit typed definitions through the selected SDK/ORM or GraphQL transport. Keep Console discovery and feature-pack host contracts separate from this application lane.
## Domain Skills Beyond Feature Packs
diff --git a/.agents/skills/constructive-frontend/SKILL.md b/.agents/skills/constructive-frontend/SKILL.md
index b95fabc..bb0868a 100644
--- a/.agents/skills/constructive-frontend/SKILL.md
+++ b/.agents/skills/constructive-frontend/SKILL.md
@@ -1,6 +1,6 @@
---
name: constructive-frontend
-description: "Build polished Constructive application UI with Constructive primitives, Tailwind CSS v4, app shell and app bar composition, CRUD Stack cards, and custom domain views. Use for visual composition, forms, overlays, layout, theming, accessibility, or bespoke domain UI. Use constructive-blocks for feature-pack and Console Kit installation/runtime work."
+description: "Build and polish Constructive application UI with App Kit, Constructive primitives, Tailwind CSS v4, app shell composition, and optional Stack navigation. Use for visual composition, forms, record and collection views, overlays, layout, theming, accessibility, responsive behavior, or bespoke domain UI. Use constructive-blocks to select and install App Kit, platform feature packs, or Console Kit."
metadata:
author: constructive-io
version: "2.0.0"
@@ -8,7 +8,10 @@ metadata:
# Constructive Frontend
-Build and polish custom Constructive application UI. This skill owns visual composition and bespoke domain views; [`constructive-blocks`](../constructive-blocks/SKILL.md) owns the registry, feature packs, Console Kit, tenant descriptors, and runtime integration.
+Build and polish custom Constructive application UI. This skill owns visual
+composition and domain-specific presentation; [`constructive-blocks`](../constructive-blocks/SKILL.md)
+owns App Kit contracts and installation, the registry, platform feature packs,
+Console Kit, tenant descriptors, and runtime integration.
## When to Apply
@@ -16,11 +19,14 @@ Use this skill when:
- Composing pages with Constructive primitives, forms, overlays, tables, or navigation.
- Customizing the app shell, app bar, typography, color, motion, responsive behavior, or accessibility.
-- Building a bespoke domain screen that does not already exist as a feature pack.
-- Creating CRUD actions with Stack cards.
+- Composing or extending App Kit controlled views around a domain design.
+- Building a bespoke domain screen that does not fit an App Kit view family.
+- Choosing a route, page, dialog, or Stack card for record opening and CRUD.
- Extending an installed block without changing its endpoint, session, discovery, or store contract.
-Use `constructive-blocks` instead when choosing or installing a registry root, mounting Console Kit, supplying tenant endpoints, integrating a feature pack, or diagnosing `ready`, `partial`, or `unavailable` capability state.
+Use `constructive-blocks` first when choosing or installing App Kit roots,
+defining its resource/query/action boundary, mounting Console Kit, integrating a
+feature pack, or diagnosing registry and runtime capability state.
## Pinned Distribution Boundary
@@ -75,29 +81,51 @@ state close to the component that owns it.
## Custom Domain Data
-Start with the Data feature pack when the goal is generic application-table exploration or spreadsheet CRUD. It already uses the current `_meta` contract, standard introspection, explicit endpoints, and authenticated runtime evidence.
-
-For a bespoke domain screen:
-
-1. Receive the data endpoint and session through the host's tenant runtime; never derive a related hostname.
-2. After the Blocks local package workflow has installed the pinned package,
- import the current metadata query and compatibility helpers from
- `@constructive-io/data` instead of copying a `_meta` query into the app.
-3. Reconcile `_meta` schema facts with standard GraphQL introspection before constructing operations.
-4. Treat runtime reads and mutations as the authority for grants and RLS; do not substitute an operator endpoint when rows are hidden.
-5. Generate a client only when the domain schema is stable and compile-time types are worth the regeneration workflow.
-
-See [meta-forms.md](./references/meta-forms.md) for the custom-domain boundary. For optional generated clients, use [`constructive-codegen`](../constructive-codegen/SKILL.md), [`constructive-orm`](../constructive-orm/SKILL.md), or [`constructive-hooks`](../constructive-hooks/SKILL.md).
-
-## CRUD Stack Cards
-
-Use Stack cards for focused create, edit, and delete workflows that benefit from maintaining page context. Keep destructive confirmation explicit and preserve mobile sheet behavior.
-
-See [crud-stack.md](./references/crud-stack.md) for the card API and composition pattern. Use the Data feature pack rather than recreating a generic metadata-driven CRUD stack.
+Start with App Kit when the goal is an application around domain records,
+relations, actions, aggregates, boards, or time ranges. Read its
+[composition](../constructive-blocks/references/app-composition.md),
+[resource contract](../constructive-blocks/references/app-resource-contract.md),
+and [view patterns](../constructive-blocks/references/app-view-patterns.md), then
+use the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
+for exact APIs before styling the result.
+
+Use the Data feature pack when the goal is generic application-table
+exploration or spreadsheet-style inline CRUD. It owns its separate Sheets
+metadata and state boundary; do not use it as the default for a domain app.
+
+For an App Kit screen:
+
+1. Receive endpoint and authenticated scope through the host; never derive a
+ related hostname.
+2. Reconcile `_meta` with final GraphQL introspection during generation/build
+ and follow the canonical resource-validation procedure.
+3. Inject abortable SDK, ORM, or GraphQL transport at the documented boundary;
+ do not make views discover schema at runtime.
+4. Preserve the selected controlled/connected ownership when changing visual
+ composition, and treat runtime reads and mutations as authority for grants
+ and RLS.
+
+Use [meta-forms.md](./references/meta-forms.md) only for a bespoke dynamic
+metadata surface outside App Kit. For generated clients, use
+[`constructive-codegen`](../constructive-codegen/SKILL.md),
+[`constructive-orm`](../constructive-orm/SKILL.md), or
+[`constructive-hooks`](../constructive-hooks/SKILL.md).
+
+## Optional CRUD Stack Cards
+
+Use Stack cards only when a focused create, edit, detail, or delete flow benefits
+from maintaining page context. Keep record opening host-controlled so the same
+resource can use a route, dedicated page, dialog, or Stack adapter. Preserve
+explicit destructive confirmation and mobile sheet behavior when Stack is
+selected.
+
+See [crud-stack.md](./references/crud-stack.md) for the optional adapter pattern.
+Use App Kit data views for typed domain CRUD and the Data feature pack for
+generic spreadsheet exploration rather than recreating either inside a card.
## Cross-References
-- [`constructive-blocks`](../constructive-blocks/SKILL.md) — exact registry roots, feature packs, Console Kit, runtime, and verification.
+- [`constructive-blocks`](../constructive-blocks/SKILL.md) — App Kit contracts, exact registry roots, platform feature packs, Console Kit, runtime, and verification.
- [`constructive-builder`](../constructive-builder/SKILL.md) — agent-driven tenant frontend assembly and acceptance against an already-provisioned tenant.
- [`constructive-security`](../constructive-security/SKILL.md) — RLS and authorization behavior behind application UI.
- [`constructive-platform`](../constructive-platform/SKILL.md) — public API and deployment configuration.
diff --git a/.agents/skills/constructive-frontend/references/crud-stack.md b/.agents/skills/constructive-frontend/references/crud-stack.md
index 7264af6..cd3524b 100644
--- a/.agents/skills/constructive-frontend/references/crud-stack.md
+++ b/.agents/skills/constructive-frontend/references/crud-stack.md
@@ -1,17 +1,24 @@
---
name: constructive-crud-stack
-description: Build custom-domain CRUD actions as Stack cards with typed card props, deferred loading, and stacked confirmation. Use the Data feature pack for generic metadata-driven CRUD.
+description: Adapt focused custom-domain CRUD and record details to optional Stack cards with typed card props, deferred loading, and stacked confirmation. Keep App Kit record opening host-controlled and use the Data feature pack only for generic spreadsheet CRUD.
---
# Constructive CRUD Stack Cards
-Build any create/edit/delete action as a slide-in Stack card. Cancel/Save/Delete CTAs live in a sticky footer. Cards stack naturally — e.g., pushing a confirm-delete card on top of an edit card.
+Use this pattern only after the host chooses Stack as its record-opening
+presentation. A route, dedicated page, or dialog may fit the same resource
+better. Keep `onOpenRecord` host-controlled so changing that presentation does
+not change the App Kit resource contract.
+
+When Stack is selected, render a focused create/edit/delete flow as a slide-in
+card with sticky actions. Cards can compose, such as pushing destructive
+confirmation over an edit card.
---
-## 1. Stack Card Trigger
+## 1. Optional Stack Card Adapter
-Every CRUD action opens a card. Push it from any button, row click, or link:
+Adapt the host callback from any button, row, or link:
```tsx
'use client';
@@ -245,11 +252,11 @@ stack.push({
## 8. Data boundary
-Use Stack cards for bespoke domain workflows whose field layout and validation
-belong to the application. Use the Data feature pack when the goal is generic
-metadata-driven table CRUD; it already owns the current `_meta` contract,
-standard-introspection reconciliation, row identity, pagination, mutation
-generation, and RLS-aware failure states.
+Use Stack cards for focused domain workflows whose field layout and validation
+belong to the application. Keep App Kit data views in control of typed resource
+identity, queries, forms, relations, semantic actions, and URL state; the Stack
+adapter owns presentation only. Use the Data feature pack when the goal is
+generic spreadsheet-style table CRUD.
If a custom Stack card still needs runtime metadata, follow
[meta-forms.md](./meta-forms.md): import the contract from
diff --git a/.agents/skills/constructive-troubleshooting/SKILL.md b/.agents/skills/constructive-troubleshooting/SKILL.md
index bd6c024..84a99b3 100644
--- a/.agents/skills/constructive-troubleshooting/SKILL.md
+++ b/.agents/skills/constructive-troubleshooting/SKILL.md
@@ -53,7 +53,7 @@ When you run into issues, read this document for known problems and solutions.
- No QueryClient set (SDK hooks vs app react-query instance; prefer generating SDK inside app)
- No redirect after login / no Sidebar entry (router.push in onSuccess, add links in sidebar)
- UI component import wrong (`@constructive-io/ui/*` vs template `@/components/ui/*`)
- - Use Stack when template has it (do not create Dialog for CRUD — check `ls .../ui/stack` first; see constructive-frontend / CRUD Stack)
+ - Record-opening surface does not match the host choice (route, page, dialog, or optional Stack adapter; see constructive-frontend / CRUD Stack)
- SDK query result fields nullable (type errors in form/handler — use `?? ''` or accept nullable type)
- Invalid UUID error on create/update (relation field `isRequired: false` missing)
- Used confirm() or alert() for delete (must use template AlertDialog from `@/components/ui/alert-dialog`)
@@ -1901,28 +1901,35 @@ TypeScript compiles and the update mutation succeeds at runtime.
---
-## Phase 3: Use Stack when template has it (do not create Dialog for CRUD panels)
+## Phase 3: Preserve the host-selected record-opening surface
### Problem
-You added or imported a generic Dialog (e.g. `@/components/ui/dialog`) for create/edit panels, and the template already has `@/components/ui/stack`. UI works but does not match the template’s intended pattern (slide-in Stack cards).
+You hard-coded a Dialog or Stack card for record details and CRUD even though
+the application brief or existing host adapter selected another presentation.
### Cause
-SKILL.md Phase 3.5 requires: **before any CRUD UI**, check whether the template has Stack (`ls packages/app/src/components/ui/stack`). If it exists, you must use **Stack Cards** (constructive-frontend / CRUD Stack), not a generic Dialog.
+The record-opening boundary was treated as a component default. App Kit keeps
+`onOpenRecord` host-controlled so routes, dedicated pages, dialogs, and Stack
+cards can share the same typed resource.
### Solution
-1. Run `ls packages/app/src/components/ui/stack` (or your app path). If the directory exists:
-2. Read the **constructive-frontend** skill (CRUD Stack section).
-3. Implement create/edit/delete with `useCardStack()`, `card.push()`, and `CardComponent`. Use stacked confirm-delete for delete, not a separate Dialog.
-4. Do not create or import `@/components/ui/dialog` for CRUD when Stack exists.
-
-If the template has **no** Stack, then use the template’s Dialog/AlertDialog from `@/components/ui/*`.
+1. Read the application brief and existing navigation adapter before choosing a
+ presentation.
+2. Keep App Kit `onOpenRecord` host-controlled.
+3. If the host selects Stack, read the **constructive-frontend** CRUD Stack
+ reference and adapt with `useCardStack()`, `card.push()`, and
+ `CardComponent`.
+4. If the host selects a route, page, or dialog, preserve that choice and use
+ the installed primitives. Keep destructive confirmation explicit in every
+ presentation.
### Verification
-Create/edit/delete use slide-in panels (Stack) when the template has `ui/stack`; no generic Dialog is used for CRUD.
+The same typed resource can open through the selected host adapter, and no view
+component silently imposes Stack or Dialog navigation.
---
diff --git a/AGENTS.md b/AGENTS.md
index 3f4886e..3e3e256 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -11,7 +11,7 @@ A collection of skills for AI coding agents working with Constructive tooling. S
| Skill | Absorbs | Purpose |
|-------|---------|---------|
| **constructive-features** | *(router)* | Maps application capabilities to Blocks feature packs and authoritative domain skills |
-| **constructive-blocks** | Constructive Blocks | Feature packs, Console Kit, registry installation, tenant descriptors, discovery, and runtime contracts |
+| **constructive-blocks** | Constructive Blocks | App Kit composition, feature packs, Console Kit, registry installation, tenant scope, discovery, and runtime contracts |
| **constructive-builder** | application harness | Agent-driven frontend assembly and acceptance against an existing workspace and already-provisioned tenant |
| **constructive-blueprints** | blueprint refs from constructive-platform | Declarative schema definition — blueprints, node type registry, presets |
| **constructive-auth** | auth/device/service refs from constructive-platform, auth-flow from constructive-sdk | Identity, login, sessions, MFA, devices |
@@ -31,7 +31,7 @@ A collection of skills for AI coding agents working with Constructive tooling. S
| **constructive-flow-graphs** | graph_module, merkle_store | Graph module + merkle store (SDK-authorable) with FBP spec links |
| **constructive-i18n** | constructive-sdk-i18n | Internationalization — DataI18n, multilingual search, i18n_module |
| **constructive-history** | *(standalone)* | Row history — DataHistory node, append-only version tables, pg_partman retention, graphile-history (versionAt, versionsBetween, restore) |
-| **constructive-frontend** | *(standalone)* | UI primitives, visual composition, CRUD Stack cards, and custom domain UI patterns |
+| **constructive-frontend** | *(standalone)* | UI primitives, App Kit visual composition, optional Stack navigation, and custom domain UI patterns |
| **constructive-codegen** | codegen refs from constructive-sdk-graphql | Optional generated clients for stable custom-domain schemas |
| **constructive-orm** | ORM refs from constructive-sdk-graphql | Optional generated ORM patterns for stable custom-domain schemas |
| **constructive-hooks** | hooks refs from constructive-sdk-graphql | Optional generated React Query hook patterns for fixed endpoints |
diff --git a/CLAUDE.md b/CLAUDE.md
index 30991c8..89f7046 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -11,7 +11,7 @@ A collection of skills for AI coding agents working with Constructive tooling. S
| Skill | Description |
|-------|-------------|
| **constructive-features** | Intent router — maps capabilities to Blocks feature packs and authoritative domain skills |
-| **constructive-blocks** | Feature packs, Console Kit, registry installation, tenant descriptors, discovery, and runtime contracts |
+| **constructive-blocks** | App Kit composition, feature packs, Console Kit, registry installation, tenant scope, discovery, and runtime contracts |
| **constructive-builder** | Agent-driven tenant frontend harness — assembles and acceptance-checks Blocks against an existing workspace and already-provisioned tenant |
| **constructive-blueprints** | Declarative schema definition — blueprints, node type registry, module presets |
| **constructive-auth** | Identity, login, sessions, MFA, devices, auth settings, service settings |
@@ -31,7 +31,7 @@ A collection of skills for AI coding agents working with Constructive tooling. S
| **constructive-flow-graphs** | Graph module + merkle store (SDK-authorable) with FBP spec links |
| **constructive-i18n** | Internationalization — DataI18n, multilingual search, lang_column, i18n_module |
| **constructive-history** | Row history — DataHistory version tables, retention/partitioning, graphile-history (history, versionAt, versionsBetween, restore) |
-| **constructive-frontend** | UI primitives, visual composition, CRUD Stack cards, and custom domain UI patterns |
+| **constructive-frontend** | UI primitives, App Kit visual composition, optional Stack navigation, and custom domain UI patterns |
| **constructive-codegen** | Optional generated clients for stable custom-domain schemas |
| **constructive-orm** | Optional generated ORM patterns for stable custom-domain schemas |
| **constructive-hooks** | Optional generated React Query hook patterns for fixed endpoints |
diff --git a/README.md b/README.md
index 52f7319..549c944 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
-A collection of skills for AI coding agents working with [Constructive](https://constructive.io) tooling. Skills cover application feature packs, Console Kit, PostgreSQL development, authorization, GraphQL workflows, and platform operations.
+A collection of skills for AI coding agents working with [Constructive](https://constructive.io) tooling. Skills cover App Kit application composition, platform feature packs, Console Kit, PostgreSQL development, authorization, GraphQL workflows, and platform operations.
Skills follow the [Agent Skills](https://agentskills.io/) format.
@@ -26,8 +26,8 @@ Skills are organized into 25 focused skills. Every skill has a `SKILL.md`; refer
| Skill | Description |
|-------|-------------|
-| `constructive-features` | Intent router — maps application capabilities to Blocks feature packs and the domain skill that explains the underlying behavior |
-| `constructive-blocks` | Constructive Blocks — feature packs, Console Kit, registry installation, tenant descriptors, capability discovery, and runtime contracts |
+| `constructive-features` | Intent router — maps application briefs to App Kit, optional Blocks capability packs, and authoritative domain skills |
+| `constructive-blocks` | Constructive Blocks — App Kit, feature packs, Console Kit, registry installation, tenant scope, capability discovery, and runtime contracts |
| `constructive-builder` | Agent-driven tenant frontend harness — assembles and acceptance-checks Blocks against an existing app workspace and already-provisioned tenant |
| `constructive-blueprints` | Declarative schema definition — blueprints, node type registry, presets |
| `constructive-auth` | Identity, login, sessions, MFA, devices, auth settings |
@@ -47,7 +47,7 @@ Skills are organized into 25 focused skills. Every skill has a `SKILL.md`; refer
| `constructive-flow-graphs` | Graph module + merkle store (SDK-authorable) with FBP spec links |
| `constructive-i18n` | Internationalization — DataI18n, multilingual search, lang_column, i18n_module |
| `constructive-history` | Row history — DataHistory version tables, retention/partitioning, graphile-history (history, versionAt, versionsBetween, restore) |
-| `constructive-frontend` | Constructive UI primitives, visual composition, CRUD Stack cards, and custom domain UI patterns |
+| `constructive-frontend` | Constructive UI primitives, App Kit visual composition, optional Stack navigation, and custom domain UI patterns |
| `constructive-codegen` | Optional generated clients for stable, custom domain UI and server workflows |
| `constructive-orm` | Optional generated ORM patterns for stable custom-domain schemas |
| `constructive-hooks` | Optional generated React Query hook patterns for fixed endpoints |
diff --git a/features.md b/features.md
index ecd062e..e7cb72c 100644
--- a/features.md
+++ b/features.md
@@ -1,8 +1,21 @@
-# Constructive application capabilities
+# Constructive application composition and capabilities
-Constructive applications are assembled from Blocks feature packs. A feature pack is a frontend capability surface with a machine-readable compatibility and host/runtime contract; it does not provision backend modules or grant access by itself.
+Constructive domain applications are composed with App Kit resources, queries,
+actions, and view families. Feature packs remain frontend surfaces for optional
+platform capabilities; they do not provision backend modules or grant access.
-Use [`constructive-blocks`](./.agents/skills/constructive-blocks/SKILL.md) for exact registry roots, installation, Console Kit composition, tenant descriptors, endpoint routing, capability discovery, and verification. Use the domain skills below when changing the underlying application behavior.
+Use [`constructive-blocks`](./.agents/skills/constructive-blocks/SKILL.md) for
+App Kit selection, exact registry roots, installation, Console Kit composition,
+tenant scope, capability discovery, and verification. Use the domain skills
+below when changing underlying application behavior.
+
+## App Kit
+
+Select App Kit from the brief's data geometry and user tasks: core contracts
+for every domain application, data views for records and relations, board for
+semantic stage movement, dashboard for explicit analytical loaders, calendar
+for range-based temporal views, and workflow for semantic actions and guided
+steps. Do not default to Sheets, Console Kit, or a review queue.
## Feature packs
@@ -28,6 +41,7 @@ Choose the smallest Blocks surface that owns the intended experience:
| A backend-aligned application console | Official preset root |
| A focused tenant console | Console Kit core plus selected console modules |
| A host-controlled screen | Standalone feature pack |
+| An application around domain records and actions | App Kit capability roots |
| A custom visual component | Constructive UI primitive or block |
The six non-Data standalone packs are provider-neutral views driven by host-injected resources, policy, actions, and state. Standalone Data is adapter-driven: the host configures its endpoint and adapter boundary, while the pack performs its own `_meta` and GraphQL introspection.
@@ -38,7 +52,7 @@ The canonical names, dependency closure, shadcn command, runtime requirements, a
| Intent | Skill |
|---|---|
-| Install or compose feature packs, Console Kit, app shell, app bar, billing blocks, or UI primitives | [`constructive-blocks`](./.agents/skills/constructive-blocks/SKILL.md) |
+| Compose App Kit or install feature packs, Console Kit, app shell, billing blocks, or UI primitives | [`constructive-blocks`](./.agents/skills/constructive-blocks/SKILL.md) |
| Assemble and acceptance-check a tenant frontend against an already-provisioned tenant | [`constructive-builder`](./.agents/skills/constructive-builder/SKILL.md) |
| Style or compose custom application UI | [`constructive-frontend`](./.agents/skills/constructive-frontend/SKILL.md) |
| Configure identity, sessions, MFA, devices, or account linking | [`constructive-auth`](./.agents/skills/constructive-auth/SKILL.md) |
@@ -66,6 +80,11 @@ The canonical names, dependency closure, shadcn command, runtime requirements, a
- Treat feature-pack installation, backend provisioning, and acceptance scenarios as separate decisions. Authentication scenarios such as password sign-in or recovery are tests within the Authentication pack, not install units.
- Pass a secret-free database identity and explicit semantic endpoints. Never derive related endpoint hostnames or send tenant credentials to an inferred route.
-- For a custom-domain route, follow the [`2026-07` `_meta` contract sequence](./.agents/skills/constructive-frontend/references/meta-forms.md): use `_meta` for Constructive schema facts and feature tags, then standard introspection for the exact executable GraphQL surface. Neither source proves the current user's write authority.
+- For App Kit or another custom-domain route, use `_meta` for Constructive
+ schema facts and final GraphQL introspection for exact executable names. Run
+ App Kit resource validation at generation/build time; neither schema source
+ proves the current user's write authority.
- Let runtime reads and mutations establish effective grants and RLS behavior. Do not replace an empty RLS result with an operator endpoint or private routing header.
-- Use generated clients only when a custom domain surface benefits from a stable compile-time schema. Console Kit and feature packs do not require generated SDKs or process-wide client configuration.
+- Generate or refresh typed App Kit definitions from the final schema. Console
+ Kit capability discovery and feature-pack host contracts remain separate and
+ do not require an application-wide process-global client.
From 4510ebc44c78171eba430bfc64d00d8d7c5d803e Mon Sep 17 00:00:00 2001
From: yyyyaaa
Date: Mon, 3 Aug 2026 16:49:37 +0700
Subject: [PATCH 2/4] Fix the Event Studio blueprint contract
---
.../references/event-studio-blueprint.json | 18 ++++++++++++++----
.../scripts/check-blocks-contract.mjs | 17 +++++++++++++++++
.../scripts/check-blocks-contract.test.mjs | 16 ++++++++++++++++
3 files changed, 47 insertions(+), 4 deletions(-)
diff --git a/.agents/skills/constructive-blocks/references/event-studio-blueprint.json b/.agents/skills/constructive-blocks/references/event-studio-blueprint.json
index 3e0ae5b..5fc0f87 100644
--- a/.agents/skills/constructive-blocks/references/event-studio-blueprint.json
+++ b/.agents/skills/constructive-blocks/references/event-studio-blueprint.json
@@ -62,6 +62,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "admin_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -71,6 +72,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "owner_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -158,6 +160,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "admin_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -167,6 +170,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "owner_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -228,6 +232,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "admin_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -237,6 +242,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "owner_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -304,6 +310,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "admin_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -313,6 +320,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "owner_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -366,6 +374,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "admin_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -375,6 +384,7 @@
},
{
"$type": "AuthzEntityMembership",
+ "policy_name": "owner_delete",
"data": {
"entity_field": "org_id",
"membership_type": 2,
@@ -397,7 +407,7 @@
"source_table": "sessions",
"target_table": "programs",
"field_name": "program_id",
- "delete_action": "RESTRICT",
+ "delete_action": "r",
"is_required": false
},
{
@@ -405,7 +415,7 @@
"source_table": "sessions",
"target_table": "venues",
"field_name": "venue_id",
- "delete_action": "SET NULL",
+ "delete_action": "n",
"is_required": false
},
{
@@ -413,7 +423,7 @@
"source_table": "session_people",
"target_table": "sessions",
"field_name": "session_id",
- "delete_action": "CASCADE",
+ "delete_action": "c",
"is_required": true
},
{
@@ -421,7 +431,7 @@
"source_table": "session_people",
"target_table": "people",
"field_name": "person_id",
- "delete_action": "CASCADE",
+ "delete_action": "c",
"is_required": true
}
]
diff --git a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
index 673cd8f..61aa327 100644
--- a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
+++ b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
@@ -2181,7 +2181,19 @@ export function assertEventStudioBlueprint(definition) {
['delete'],
`${table.table_name} ${roleFlag} delete policy`
);
+ assert(
+ destructivePolicy?.policy_name ===
+ (roleFlag === 'is_admin' ? 'admin_delete' : 'owner_delete'),
+ `${table.table_name} ${roleFlag} delete policy must have a distinct policy_name.`
+ );
}
+ const policyNames = table.policies?.map(
+ (policy) => policy.policy_name ?? policy.$type
+ );
+ assert(
+ new Set(policyNames).size === policyNames.length,
+ `${table.table_name} policy names must be unique.`
+ );
}
for (const tableName of ['programs', 'sessions']) {
@@ -2217,6 +2229,11 @@ export function assertEventStudioBlueprint(definition) {
],
'Event Studio relations'
);
+ assertExact(
+ definition.relations.map((relation) => relation.delete_action),
+ ['r', 'n', 'c', 'c'],
+ 'Event Studio relation delete actions'
+ );
assertExact(
definition.unique_constraints,
[
diff --git a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
index 5c51b8d..d42df2a 100644
--- a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
+++ b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
@@ -471,6 +471,15 @@ test('Event Studio remains a public org-scoped blueprint without realtime or raw
/is_owner delete policy/
);
+ const policyNameMutation = structuredClone(loaded.eventStudioBlueprint);
+ const mutatedPolicies = policyNameMutation.tables[0].policies;
+ mutatedPolicies.find((policy) => policy.data?.is_owner === true).policy_name =
+ 'admin_delete';
+ assert.throws(
+ () => assertEventStudioBlueprint(policyNameMutation),
+ /distinct policy_name|policy names must be unique/
+ );
+
const fieldMutation = structuredClone(loaded.eventStudioBlueprint);
fieldMutation.tables.find((table) => table.table_name === 'sessions')
.fields.find((field) => field.name === 'description').name = 'summary';
@@ -486,6 +495,13 @@ test('Event Studio remains a public org-scoped blueprint without realtime or raw
/Event Studio relation uniqueness drifted/
);
+ const deleteActionMutation = structuredClone(loaded.eventStudioBlueprint);
+ deleteActionMutation.relations[0].delete_action = 'RESTRICT';
+ assert.throws(
+ () => assertEventStudioBlueprint(deleteActionMutation),
+ /relation delete actions drifted/
+ );
+
const statusMutation = structuredClone(loaded.eventStudioBlueprint);
statusMutation.tables.find((table) => table.table_name === 'sessions')
.fields.find((field) => field.name === 'status').type.name = 'session_status';
From 82dc9ef79ad88f52172e5ad3868bfb415df53443 Mon Sep 17 00:00:00 2001
From: yyyyaaa
Date: Mon, 3 Aug 2026 18:11:54 +0700
Subject: [PATCH 3/4] Pin App Kit guidance to hardened Blocks runtime
---
.agents/skills/constructive-blocks/SKILL.md | 2 +-
.../references/app-actions-workflows.md | 9 +++++++--
.../references/app-resource-contract.md | 14 ++++++++++---
.../references/app-verification.md | 14 +++++++++----
.../references/install-roots.v1.json | 8 ++++----
.../references/package-resolutions.v1.json | 2 +-
.../references/registry-catalog.v1.json | 2 +-
.../references/registry-content.v1.json | 20 +++++++++----------
.../scripts/check-blocks-contract.mjs | 2 +-
.../scripts/check-blocks-contract.test.mjs | 2 +-
10 files changed, 47 insertions(+), 28 deletions(-)
diff --git a/.agents/skills/constructive-blocks/SKILL.md b/.agents/skills/constructive-blocks/SKILL.md
index 9a882b9..d4445f4 100644
--- a/.agents/skills/constructive-blocks/SKILL.md
+++ b/.agents/skills/constructive-blocks/SKILL.md
@@ -197,7 +197,7 @@ turn every action flow into a review queue.
## Respect the branch-only release gate
The pinned source is
-`feat/app-kit@706ae32b8b03cd6effaa9d0d5f385d93529635df`.
+`feat/app-kit@c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b`.
The checkout may be that named branch or detached at the exact commit. Its
publication status is `branch-only`, and
`release.publicRegistryReady` is `false`. Do not run a public install for these
diff --git a/.agents/skills/constructive-blocks/references/app-actions-workflows.md b/.agents/skills/constructive-blocks/references/app-actions-workflows.md
index 33a5412..c28205f 100644
--- a/.agents/skills/constructive-blocks/references/app-actions-workflows.md
+++ b/.agents/skills/constructive-blocks/references/app-actions-workflows.md
@@ -10,11 +10,16 @@ for current action definitions, runtime hooks, surfaces, and invalidation APIs.
1. Name the semantic intent and identify its typed input, output, validation,
confirmation, authority expectation, and affected views.
2. Inject an abortable executor through the host transport. Keep transport
- details and credentials outside reusable definitions.
+ details and credentials outside reusable definitions. Return framework
+ result envelopes only through the documented `appSuccess` and `appFailure`
+ helpers; do not hand-build lookalike `{ ok, data }` or `{ ok, error }`
+ objects.
3. Declare targeted invalidation for affected detail, collection, relation,
board, dashboard, and calendar queries. Avoid whole-cache invalidation.
4. Add optimistic behavior only when rollback is deterministic inside the
- active cache partition.
+ active cache partition. Use the callback's scope-bound cache facade and App
+ Kit query keys; do not reach through it to a raw TanStack `QueryClient` or
+ read, write, or cancel a key from another scope.
5. Choose a documented controlled surface when the host owns execution or a
connected surface when App Kit should own validation, progress,
cancellation, rollback, and invalidation.
diff --git a/.agents/skills/constructive-blocks/references/app-resource-contract.md b/.agents/skills/constructive-blocks/references/app-resource-contract.md
index 14865db..f0867a0 100644
--- a/.agents/skills/constructive-blocks/references/app-resource-contract.md
+++ b/.agents/skills/constructive-blocks/references/app-resource-contract.md
@@ -7,7 +7,12 @@ for exact types, signatures, entrypoints, and supported field kinds.
## Build from executable evidence
1. Fetch current `_meta` facts and final GraphQL introspection from the same
- tenant/schema revision. Refresh a selected generated SDK or ORM first.
+ tenant/schema revision. Current `_meta` can expose partly inflected names:
+ keep its database identity, constraints, nullability, and relation facts,
+ but let the final executable schema decide public GraphQL type, field,
+ relation, scalar/enum, and operation-root names. Treat `_meta` GraphQL names
+ and type hints as advisory; they must not override the executable schema.
+ Refresh a selected generated SDK or ORM first.
2. Inventory each resource's stable identity, display fields, editable fields,
relations, executable reads, executable writes, and semantic actions.
3. Map final inflected GraphQL names rather than deriving them from PostgreSQL
@@ -35,5 +40,8 @@ for exact types, signatures, entrypoints, and supported field kinds.
Follow the canonical scope and query-key contract exactly. Change endpoint,
database, authenticated session partition, organization/tenant, and schema or
security revision independently, then prove cached, cancelled, and optimistic
-data cannot cross any partition. Never place credentials in definitions,
-URLs, cache keys, or stores.
+data cannot cross any partition. Pass raw, credential-free domain input and let
+App Kit produce its opaque deterministic query-input fingerprint; do not hash
+or serialize inputs into ad hoc keys. Credential-shaped query or action input
+fails closed, so capture authentication in the injected executor closure and
+never place credentials in definitions, URLs, cache keys, or stores.
diff --git a/.agents/skills/constructive-blocks/references/app-verification.md b/.agents/skills/constructive-blocks/references/app-verification.md
index 1622f33..fa6bbd1 100644
--- a/.agents/skills/constructive-blocks/references/app-verification.md
+++ b/.agents/skills/constructive-blocks/references/app-verification.md
@@ -7,14 +7,20 @@ the pinned install contract.
## Run the evidence loop
-1. Reconcile `_meta` with final introspection. Cover inflected roots, enums,
- arrays, JSON, custom scalars, composite and absent identities, relations,
- absent operations, and custom roots.
+1. Reconcile partly inflected `_meta` with final introspection. Prove database
+ facts remain authoritative while the executable schema controls GraphQL
+ names, types, relations, and roots, including when an advisory `_meta`
+ GraphQL hint disagrees. Cover inflected roots, enums, arrays, JSON, custom
+ scalars, composite and absent identities, relations, absent operations, and
+ custom roots.
2. Vary every documented cache-scope dimension independently. Cancel slow work
during a scope switch and prove cached or optimistic data cannot cross it.
3. Exercise validation, confirmation, cancellation, duplicate submission,
partial GraphQL errors, denials, rollback, and targeted cross-view
- invalidation.
+ invalidation. Also prove credential-shaped query and action inputs are rejected,
+ ordinary records that resemble results stay ordinary records, only
+ `appSuccess` and `appFailure` create framework envelopes, and optimistic
+ callbacks cannot access another scope's cache keys.
4. Exercise intended member behavior plus anonymous, peer, revoked, cross-org,
and destructive member denials. Verify admin/owner destruction only where
the database policy permits it.
diff --git a/.agents/skills/constructive-blocks/references/install-roots.v1.json b/.agents/skills/constructive-blocks/references/install-roots.v1.json
index 2f20806..3deb7a6 100644
--- a/.agents/skills/constructive-blocks/references/install-roots.v1.json
+++ b/.agents/skills/constructive-blocks/references/install-roots.v1.json
@@ -4,7 +4,7 @@
"source": {
"repository": "https://github.com/constructive-io/blocks",
"branch": "feat/app-kit",
- "commit": "706ae32b8b03cd6effaa9d0d5f385d93529635df",
+ "commit": "c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b",
"inspector": {
"schemaVersion": 1,
"kind": "constructive.console-kit-install-roots",
@@ -26,15 +26,15 @@
},
"registryCatalog": {
"path": "references/registry-catalog.v1.json",
- "sha256": "95358574a470315a4862ecbf2faea159e2de6a4f7136bfa3de75c5a1578be4b7"
+ "sha256": "2016d63aa23228e9233f6046acf2167c8cd1ae0f3fc162341e91523cdc0286d8"
},
"registryContent": {
"path": "references/registry-content.v1.json",
- "sha256": "224c5f9da6b6d5f4920a2780f793431708b3257fee744f53dfa93586e2cb017a"
+ "sha256": "d809cd9fb01594de4d067e4900872ae0c2687cacf61fb73cd86f5abe9de0d8d0"
},
"packageResolutions": {
"path": "references/package-resolutions.v1.json",
- "sha256": "9373792323e42124de66d9c9dab9ec7c9c56e50dc3e45000ee9e9484bc58c014"
+ "sha256": "359b993ab97f40ebbd6f359442ace30d6f341268bfdfdd0749a6d68855f8f29a"
},
"canonicalFiles": [
{
diff --git a/.agents/skills/constructive-blocks/references/package-resolutions.v1.json b/.agents/skills/constructive-blocks/references/package-resolutions.v1.json
index 501de7f..a46cd39 100644
--- a/.agents/skills/constructive-blocks/references/package-resolutions.v1.json
+++ b/.agents/skills/constructive-blocks/references/package-resolutions.v1.json
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"kind": "constructive.blocks-package-resolutions",
- "sourceCommit": "706ae32b8b03cd6effaa9d0d5f385d93529635df",
+ "sourceCommit": "c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b",
"registry": "https://registry.npmjs.org",
"recordCount": 25,
"records": [
diff --git a/.agents/skills/constructive-blocks/references/registry-catalog.v1.json b/.agents/skills/constructive-blocks/references/registry-catalog.v1.json
index 181e3a4..d61e7ac 100644
--- a/.agents/skills/constructive-blocks/references/registry-catalog.v1.json
+++ b/.agents/skills/constructive-blocks/references/registry-catalog.v1.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.blocks-registry-catalog","sourceCommit":"706ae32b8b03cd6effaa9d0d5f385d93529635df","aggregatePath":"apps/registry/registry.json","registryNamespace":"@constructive","itemCount":123,"items":[{"name":"constructive-theme","type":"registry:theme","title":"Constructive Theme","description":"Constructive design system theme — OKLCH colors, z-index layers, shadow utilities, and animations.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/constructive-theme"},{"name":"cn","type":"registry:lib","title":"cn utility","description":"Tailwind CSS class name merge utility using clsx and tailwind-merge.","categories":["utility"],"docs":"Import: `import { cn } from '@/lib/utils'`","dependencies":["clsx","tailwind-merge"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/cn"},{"name":"slot","type":"registry:lib","title":"Slot utility","description":"Polymorphic component utilities for asChild pattern.","categories":["utility"],"docs":"Import: `import { Slot } from '@/lib/slot'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/slot.tsx","type":"registry:lib","target":"@lib/slot.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/slot"},{"name":"use-controllable-state","type":"registry:hook","title":"useControllableState","description":"Hook for components with controlled/uncontrolled state.","categories":["hook"],"docs":"Import: `import { useControllableState } from '@/hooks/use-controllable-state'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-controllable-state.ts","type":"registry:hook","target":"@hooks/use-controllable-state.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-controllable-state"},{"name":"use-debounce","type":"registry:hook","title":"useDebounce","description":"Hook for debouncing values.","categories":["hook"],"docs":"Import: `import { useDebounce } from '@/hooks/use-debounce'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-debounce.ts","type":"registry:hook","target":"@hooks/use-debounce.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-debounce"},{"name":"use-mobile","type":"registry:hook","title":"useIsMobile","description":"Hook for detecting mobile viewport.","categories":["hook"],"docs":"Import: `import { useIsMobile } from '@/hooks/use-mobile'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-mobile.ts","type":"registry:hook","target":"@hooks/use-mobile.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-mobile"},{"name":"motion-config","type":"registry:lib","title":"Motion Config","description":"Animation presets and spring configurations for motion library.","categories":["animation"],"docs":"Import: `import { motionConfig } from '@/lib/motion/motion-config'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/motion/motion-config.ts","type":"registry:lib","target":"@lib/motion/motion-config.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-config"},{"name":"button","type":"registry:ui","title":"Button","description":"A button component with multiple variants and sizes.","categories":["primitive"],"docs":"Import: `import { Button } from '@/components/ui/button'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/button.tsx","type":"registry:ui","target":"@ui/button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/button"},{"name":"badge","type":"registry:ui","title":"Badge","description":"A badge component for status indicators and labels.","categories":["primitive"],"docs":"Import: `import { Badge } from '@/components/ui/badge'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/badge.tsx","type":"registry:ui","target":"@ui/badge.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/badge"},{"name":"label","type":"registry:ui","title":"Label","description":"A label component for form fields.","categories":["primitive"],"docs":"Import: `import { Label } from '@/components/ui/label'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/label.tsx","type":"registry:ui","target":"@ui/label.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/label"},{"name":"skeleton","type":"registry:ui","title":"Skeleton","description":"A skeleton loading placeholder component.","categories":["primitive"],"docs":"Import: `import { Skeleton } from '@/components/ui/skeleton'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/skeleton.tsx","type":"registry:ui","target":"@ui/skeleton.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/skeleton"},{"name":"card","type":"registry:ui","title":"Card","description":"A card component with header, content, and footer sections.","categories":["primitive"],"docs":"Import: `import { Card, CardHeader, CardContent, CardFooter } from '@/components/ui/card'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/card.tsx","type":"registry:ui","target":"@ui/card.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/card"},{"name":"chart","type":"registry:ui","title":"Chart","description":"Accessible TanStack Charts React adapter with a theme-adaptive semantic token configuration.","categories":["data-display"],"docs":"Import: `import { Chart, CONSTRUCTIVE_CHART_THEME } from '@/components/ui/chart'`","dependencies":["@tanstack/charts@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/chart.tsx","type":"registry:ui","target":"@ui/chart.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/chart"},{"name":"separator","type":"registry:ui","title":"Separator","description":"A visual separator for dividing content.","categories":["primitive"],"docs":"Import: `import { Separator } from '@/components/ui/separator'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/separator.tsx","type":"registry:ui","target":"@ui/separator.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/separator"},{"name":"alert","type":"registry:ui","title":"Alert","description":"An alert component for displaying messages.","categories":["primitive"],"docs":"Import: `import { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert.tsx","type":"registry:ui","target":"@ui/alert.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert"},{"name":"input","type":"registry:ui","title":"Input","description":"A text input component built on Base UI.","categories":["form"],"docs":"Import: `import { Input } from '@/components/ui/input'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input.tsx","type":"registry:ui","target":"@ui/input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input"},{"name":"textarea","type":"registry:ui","title":"Textarea","description":"A multiline text input component.","categories":["form"],"docs":"Import: `import { Textarea } from '@/components/ui/textarea'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/textarea.tsx","type":"registry:ui","target":"@ui/textarea.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/textarea"},{"name":"checkbox","type":"registry:ui","title":"Checkbox","description":"A checkbox component built on Base UI.","categories":["form"],"docs":"Import: `import { Checkbox } from '@/components/ui/checkbox'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox.tsx","type":"registry:ui","target":"@ui/checkbox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox"},{"name":"checkbox-group","type":"registry:ui","title":"Checkbox Group","description":"A group wrapper for multiple checkboxes.","categories":["form"],"docs":"Import: `import { CheckboxGroup } from '@/components/ui/checkbox-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/checkbox","@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox-group.tsx","type":"registry:ui","target":"@ui/checkbox-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox-group"},{"name":"radio-group","type":"registry:ui","title":"Radio Group","description":"A radio group component built on Base UI.","categories":["form"],"docs":"Import: `import { RadioGroup } from '@/components/ui/radio-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/radio-group.tsx","type":"registry:ui","target":"@ui/radio-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/radio-group"},{"name":"switch","type":"registry:ui","title":"Switch","description":"A toggle switch component built on Base UI.","categories":["form"],"docs":"Import: `import { Switch } from '@/components/ui/switch'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/switch.tsx","type":"registry:ui","target":"@ui/switch.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/switch"},{"name":"progress","type":"registry:ui","title":"Progress","description":"A progress bar component built on Base UI.","categories":["form"],"docs":"Import: `import { Progress } from '@/components/ui/progress'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progress.tsx","type":"registry:ui","target":"@ui/progress.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progress"},{"name":"avatar","type":"registry:ui","title":"Avatar","description":"An avatar component with image and fallback support.","categories":["data-display"],"docs":"Import: `import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/avatar.tsx","type":"registry:ui","target":"@ui/avatar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/avatar"},{"name":"portal","type":"registry:ui","title":"Portal","description":"Portal management for overlay components with z-index layering.","categories":["layout"],"docs":"Import: `import { Portal } from '@/components/ui/portal'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/portal.tsx","type":"registry:ui","target":"@ui/portal.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/portal"},{"name":"scroll-area","type":"registry:ui","title":"Scroll Area","description":"A custom scrollable area component built on Base UI.","categories":["layout"],"docs":"Import: `import { ScrollArea } from '@/components/ui/scroll-area'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/scroll-area.tsx","type":"registry:ui","target":"@ui/scroll-area.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/scroll-area"},{"name":"select","type":"registry:ui","title":"Select","description":"A select/dropdown component built on Base UI.","categories":["form"],"docs":"Import: `import { Select } from '@/components/ui/select'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/select.tsx","type":"registry:ui","target":"@ui/select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/select"},{"name":"tooltip","type":"registry:ui","title":"Tooltip","description":"A tooltip component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Tooltip } from '@/components/ui/tooltip'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tooltip.tsx","type":"registry:ui","target":"@ui/tooltip.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tooltip"},{"name":"popover","type":"registry:ui","title":"Popover","description":"A popover component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Popover } from '@/components/ui/popover'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/popover.tsx","type":"registry:ui","target":"@ui/popover.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/popover"},{"name":"dialog","type":"registry:ui","title":"Dialog","description":"A modal dialog component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Dialog } from '@/components/ui/dialog'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dialog.tsx","type":"registry:ui","target":"@ui/dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dialog"},{"name":"alert-dialog","type":"registry:ui","title":"Alert Dialog","description":"An alert dialog for confirmations built on Base UI.","categories":["overlay"],"docs":"Import: `import { AlertDialog } from '@/components/ui/alert-dialog'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert-dialog.tsx","type":"registry:ui","target":"@ui/alert-dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert-dialog"},{"name":"dropdown-menu","type":"registry:ui","title":"Dropdown Menu","description":"A dropdown menu component built on Base UI.","categories":["overlay"],"docs":"Import: `import { DropdownMenu } from '@/components/ui/dropdown-menu'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dropdown-menu.tsx","type":"registry:ui","target":"@ui/dropdown-menu.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dropdown-menu"},{"name":"sheet","type":"registry:ui","title":"Sheet","description":"A slide-out panel component with animations.","categories":["overlay"],"docs":"Import: `import { Sheet } from '@/components/ui/sheet'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/motion-config","@constructive/use-controllable-state","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sheet.tsx","type":"registry:ui","target":"@ui/sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sheet"},{"name":"drawer","type":"registry:ui","title":"Drawer","description":"A bottom drawer component using Vaul.","categories":["overlay"],"docs":"Import: `import { Drawer } from '@/components/ui/drawer'`","dependencies":["vaul"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/drawer.tsx","type":"registry:ui","target":"@ui/drawer.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/drawer"},{"name":"tabs","type":"registry:ui","title":"Tabs","description":"A tabs component built on Base UI.","categories":["layout"],"docs":"Import: `import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tabs.tsx","type":"registry:ui","target":"@ui/tabs.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tabs"},{"name":"collapsible","type":"registry:ui","title":"Collapsible","description":"A collapsible/accordion component built on Base UI.","categories":["layout"],"docs":"Import: `import { Collapsible } from '@/components/ui/collapsible'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/collapsible.tsx","type":"registry:ui","target":"@ui/collapsible.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/collapsible"},{"name":"resizable","type":"registry:ui","title":"Resizable","description":"Resizable panel layouts using react-resizable-panels.","categories":["layout"],"docs":"Import: `import { ResizablePanel, ResizablePanelGroup, ResizableHandle } from '@/components/ui/resizable'`","dependencies":["lucide-react","react-resizable-panels@^3.0.0"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/resizable.tsx","type":"registry:ui","target":"@ui/resizable.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/resizable"},{"name":"table","type":"registry:ui","title":"Table","description":"A table component with header, body, and cell primitives.","categories":["data-display"],"docs":"Import: `import { Table, TableHeader, TableBody, TableRow, TableCell } from '@/components/ui/table'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/table.tsx","type":"registry:ui","target":"@ui/table.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/table"},{"name":"pagination","type":"registry:ui","title":"Pagination","description":"A pagination component with navigation controls.","categories":["navigation"],"docs":"Import: `import { Pagination } from '@/components/ui/pagination'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/pagination.tsx","type":"registry:ui","target":"@ui/pagination.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pagination"},{"name":"breadcrumb","type":"registry:ui","title":"Breadcrumb","description":"A breadcrumb navigation component.","categories":["navigation"],"docs":"Import: `import { Breadcrumb } from '@/components/ui/breadcrumb'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/breadcrumb.tsx","type":"registry:ui","target":"@ui/breadcrumb.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/breadcrumb"},{"name":"form","type":"registry:ui","title":"Form","description":"Form utilities with react-hook-form integration.","categories":["form"],"docs":"Import: `import { Form, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'`","dependencies":["react-hook-form"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form.tsx","type":"registry:ui","target":"@ui/form.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form"},{"name":"form-control","type":"registry:ui","title":"Form Control","description":"A form control wrapper with label and error display.","categories":["form"],"docs":"Import: `import { FormControl } from '@/components/ui/form-control'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/label","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form-control.tsx","type":"registry:ui","target":"@ui/form-control.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-control"},{"name":"input-group","type":"registry:ui","title":"Input Group","description":"Input with addons and icons.","categories":["form"],"docs":"Import: `import { InputGroup } from '@/components/ui/input-group'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/input","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input-group.tsx","type":"registry:ui","target":"@ui/input-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input-group"},{"name":"autocomplete","type":"registry:ui","title":"Autocomplete","description":"An autocomplete component built on Base UI.","categories":["input"],"docs":"Import: `import { Autocomplete } from '@/components/ui/autocomplete'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/autocomplete.tsx","type":"registry:ui","target":"@ui/autocomplete.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/autocomplete"},{"name":"command","type":"registry:ui","title":"Command","description":"A command palette component.","categories":["overlay"],"docs":"Import: `import { Command } from '@/components/ui/command'`","dependencies":["cmdk","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/command.tsx","type":"registry:ui","target":"@ui/command.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/command"},{"name":"combobox","type":"registry:ui","title":"Combobox","description":"A combobox component with search built on Base UI.","categories":["input"],"docs":"Import: `import { Combobox } from '@/components/ui/combobox'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/combobox.tsx","type":"registry:ui","target":"@ui/combobox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/combobox"},{"name":"multi-select","type":"registry:ui","title":"Multi Select","description":"A multi-select component with tags.","categories":["input"],"docs":"Import: `import { MultiSelect } from '@/components/ui/multi-select'`","dependencies":["class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/popover","@constructive/separator","@constructive/input","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/multi-select.tsx","type":"registry:ui","target":"@ui/multi-select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/multi-select"},{"name":"tags","type":"registry:ui","title":"Tags","description":"A tags input component with autocomplete.","categories":["input"],"docs":"Import: `import { Tags } from '@/components/ui/tags'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/button","@constructive/command","@constructive/popover","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tags.tsx","type":"registry:ui","target":"@ui/tags.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tags"},{"name":"record-picker","type":"registry:ui","title":"Record Picker","description":"A record selection component with search and filtering.","categories":["input"],"docs":"Import: `import { RecordPicker } from '@/components/ui/record-picker'`","dependencies":["@remixicon/react","match-sorter"],"devDependencies":[],"registryDependencies":["@constructive/use-debounce","@constructive/checkbox","@constructive/input-group","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/record-picker.tsx","type":"registry:ui","target":"@ui/record-picker.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/record-picker"},{"name":"stepper","type":"registry:ui","title":"Stepper","description":"A stepper component for multi-step workflows.","categories":["navigation"],"docs":"Import: `import { Stepper } from '@/components/ui/stepper'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/stepper.tsx","type":"registry:ui","target":"@ui/stepper.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stepper"},{"name":"sidebar","type":"registry:ui","title":"Sidebar","description":"A responsive Base UI sidebar with off-canvas, icon-only, and fixed collapse modes.","categories":["navigation"],"docs":"Import: `import { Sidebar, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/use-mobile","@constructive/button","@constructive/input","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sidebar.tsx","type":"registry:ui","target":"@ui/sidebar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sidebar"},{"name":"calendar-rac","type":"registry:ui","title":"Calendar","description":"A calendar component using React Aria Components.","categories":["input"],"docs":"Import: `import { Calendar } from '@/components/ui/calendar-rac'`","dependencies":["@internationalized/date","react-aria-components"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/calendar-rac.tsx","type":"registry:ui","target":"@ui/calendar-rac.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/calendar-rac"},{"name":"json-input","type":"registry:ui","title":"JSON Input","description":"A JSON editor component using React Ace.","categories":["input"],"docs":"Import: `import { JsonInput } from '@/components/ui/json-input'`","dependencies":["lucide-react","react-ace","ace-builds"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/json-input.tsx","type":"registry:ui","target":"@ui/json-input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/json-input"},{"name":"sonner","type":"registry:ui","title":"Toaster","description":"Toast notifications using Sonner.","categories":["block"],"docs":"Import: `import { Toaster } from '@/components/ui/sonner'`","dependencies":["sonner"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sonner.tsx","type":"registry:ui","target":"@ui/sonner.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sonner"},{"name":"dock","type":"registry:ui","title":"Dock","description":"A macOS-style dock component.","categories":["navigation"],"docs":"Import: `import { Dock, DockIcon } from '@/components/ui/dock'`","dependencies":["class-variance-authority","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dock.tsx","type":"registry:ui","target":"@ui/dock.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dock"},{"name":"page-header","type":"registry:ui","title":"Page Header","description":"A simple page header component.","categories":["navigation"],"docs":"Import: `import { PageHeader } from '@/components/ui/page-header'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/page-header.tsx","type":"registry:ui","target":"@ui/page-header.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/page-header"},{"name":"flickering-grid","type":"registry:ui","title":"Flickering Grid","description":"An animated grid background effect.","categories":["effect"],"docs":"Import: `import { FlickeringGrid } from '@/components/ui/flickering-grid'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flickering-grid.tsx","type":"registry:ui","target":"@ui/flickering-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flickering-grid"},{"name":"flow-zoom-panel","type":"registry:ui","title":"Flow Zoom Panel","description":"Zoom in/out and fit-view controls for React Flow canvases.","categories":["layout"],"docs":"Import: `import { FlowZoomPanel } from '@/components/ui/flow-zoom-panel'`","dependencies":["@xyflow/react","@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flow-zoom-panel.tsx","type":"registry:ui","target":"@ui/flow-zoom-panel.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flow-zoom-panel"},{"name":"motion-grid","type":"registry:ui","title":"Motion Grid","description":"An animated grid with frame-based transitions.","categories":["effect"],"docs":"Import: `import { MotionGrid } from '@/components/ui/motion-grid'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/motion-grid.tsx","type":"registry:ui","target":"@ui/motion-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-grid"},{"name":"progressive-blur","type":"registry:ui","title":"Progressive Blur","description":"A gradient blur overlay effect.","categories":["effect"],"docs":"Import: `import { ProgressiveBlur } from '@/components/ui/progressive-blur'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur.tsx","type":"registry:ui","target":"@ui/progressive-blur.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur"},{"name":"progressive-blur-scroll-container","type":"registry:ui","title":"Progressive Blur Scroll Container","description":"A scroll container with blur effects at edges.","categories":["effect"],"docs":"Import: `import { ProgressiveBlurScrollContainer } from '@/components/ui/progressive-blur-scroll-container'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/progressive-blur","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur-scroll-container.tsx","type":"registry:ui","target":"@ui/progressive-blur-scroll-container.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur-scroll-container"},{"name":"responsive-diagram","type":"registry:ui","title":"Responsive Diagram","description":"A responsive diagram container with auto-scaling.","categories":["effect"],"docs":"Import: `import { ResponsiveDiagram } from '@/components/ui/responsive-diagram'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/responsive-diagram.tsx","type":"registry:ui","target":"@ui/responsive-diagram.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/responsive-diagram"},{"name":"unlink-button","type":"registry:ui","title":"Unlink Button","description":"A button for unlinking/removing records.","categories":["action"],"docs":"Import: `import { UnlinkButton } from '@/components/ui/unlink-button'`","dependencies":["@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/unlink-button.tsx","type":"registry:ui","target":"@ui/unlink-button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/unlink-button"},{"name":"org-chart","type":"registry:block","title":"Org Chart","description":"An interactive organizational chart with automatic hierarchy layout, zoom controls, node actions, and drag-to-reparent behavior.","categories":["block","application"],"docs":"Import: `import { OrgChart } from '@/components/ui/org-chart'`","dependencies":["@xyflow/react","@remixicon/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/avatar","@constructive/badge","@constructive/dropdown-menu","@constructive/flow-zoom-panel","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/org-chart/index.ts","type":"registry:component","target":"@ui/org-chart/index.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.tsx","type":"registry:component","target":"@ui/org-chart/org-chart.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-context.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-context.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-node.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-node.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-edge.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-edge.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-empty.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-empty.tsx"},{"path":"registry/constructive/blocks/org-chart/layout.ts","type":"registry:lib","target":"@ui/org-chart/layout.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart-utils.ts","type":"registry:lib","target":"@ui/org-chart/org-chart-utils.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.types.ts","type":"registry:lib","target":"@ui/org-chart/org-chart.types.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/org-chart"},{"name":"storage","type":"registry:block","title":"Storage Foundation","description":"Shared storage types, formatters, file icons, status badges, breadcrumbs, and object-toolbar primitives.","categories":["block","application"],"docs":"Install this transitively through `storage-browser`, or import its files directly from `@/components/ui/storage/*`.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/breadcrumb","@constructive/button","@constructive/dropdown-menu","@constructive/input-group","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/types.ts","type":"registry:lib","target":"@ui/storage/types.ts"},{"path":"registry/constructive/blocks/storage/utils.ts","type":"registry:lib","target":"@ui/storage/utils.ts"},{"path":"registry/constructive/blocks/storage/file-type-icon.tsx","type":"registry:component","target":"@ui/storage/file-type-icon.tsx"},{"path":"registry/constructive/blocks/storage/visibility-badge.tsx","type":"registry:component","target":"@ui/storage/visibility-badge.tsx"},{"path":"registry/constructive/blocks/storage/storage-breadcrumb.tsx","type":"registry:component","target":"@ui/storage/storage-breadcrumb.tsx"},{"path":"registry/constructive/blocks/storage/object-toolbar.tsx","type":"registry:component","target":"@ui/storage/object-toolbar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage"},{"name":"storage-bucket-rail","type":"registry:block","title":"Storage Bucket Rail","description":"A controlled, scrollable bucket list with visibility, object-count, selection, and create-bucket affordances.","categories":["block","application"],"docs":"Import: `import { BucketRail } from '@/components/ui/storage/bucket-rail'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/scroll-area","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-rail.tsx","type":"registry:component","target":"@ui/storage/bucket-rail.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-bucket-rail"},{"name":"storage-object-table","type":"registry:block","title":"Storage Object Table","description":"A controlled object table with sorting, selection, row actions, skeleton loading, and empty results.","categories":["block","application"],"docs":"Import: `import { ObjectTable } from '@/components/ui/storage/object-table'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/button","@constructive/checkbox","@constructive/dropdown-menu","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-table.tsx","type":"registry:component","target":"@ui/storage/object-table.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-object-table"},{"name":"storage-upload-dropzone","type":"registry:block","title":"Storage Upload Dropzone","description":"A drag-and-drop upload target with a browse action and an in-flight upload progress list.","categories":["block","application"],"docs":"Import: `import { UploadDropzone } from '@/components/ui/storage/upload-dropzone'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/button","@constructive/progress","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/upload-dropzone.tsx","type":"registry:component","target":"@ui/storage/upload-dropzone.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-upload-dropzone"},{"name":"storage-object-detail-sheet","type":"registry:block","title":"Storage Object Detail Sheet","description":"A controlled object-detail sheet with preview, metadata, rename, download, link, and confirmed delete actions.","categories":["block","application"],"docs":"Import: `import { ObjectDetailSheet } from '@/components/ui/storage/object-detail-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/alert-dialog","@constructive/button","@constructive/input","@constructive/separator","@constructive/skeleton","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-detail-sheet.tsx","type":"registry:component","target":"@ui/storage/object-detail-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-object-detail-sheet"},{"name":"storage-bucket-config-sheet","type":"registry:block","title":"Storage Bucket Config Sheet","description":"A create-or-edit bucket form with visibility and optional controls gated by the host schema.","categories":["block","application"],"docs":"Import: `import { BucketConfigSheet } from '@/components/ui/storage/bucket-config-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/input","@constructive/label","@constructive/radio-group","@constructive/switch","@constructive/textarea","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-config-sheet.tsx","type":"registry:component","target":"@ui/storage/bucket-config-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-bucket-config-sheet"},{"name":"storage-empty-state","type":"registry:block","title":"Storage Empty State","description":"Accessible empty and unavailable states for missing buckets, unprovisioned storage, empty buckets, and denied access.","categories":["block","application"],"docs":"Import: `import { StorageEmptyState } from '@/components/ui/storage/storage-empty-state'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/storage-empty-state.tsx","type":"registry:component","target":"@ui/storage/storage-empty-state.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-empty-state"},{"name":"storage-browser","type":"registry:block","title":"Storage Browser","description":"A complete controlled storage workspace with bucket navigation, object discovery, upload, configuration, detail, and empty states.","categories":["block","application"],"docs":"Import: `import { StorageBrowser } from '@/components/ui/storage'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/storage-bucket-rail","@constructive/storage-object-table","@constructive/storage-upload-dropzone","@constructive/storage-object-detail-sheet","@constructive/storage-bucket-config-sheet","@constructive/storage-empty-state","@constructive/cn","@constructive/separator","@constructive/button","@constructive/select","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/index.ts","type":"registry:component","target":"@ui/storage/index.ts"},{"path":"registry/constructive/blocks/storage/storage-browser.tsx","type":"registry:component","target":"@ui/storage/storage-browser.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-browser"},{"name":"stack","type":"registry:block","title":"Stack Navigation","description":"iOS-style navigation stack with gestures and animations.","categories":["block"],"docs":"Import: `import { Stack, StackCard } from '@/components/ui/stack'`","dependencies":["motion","@use-gesture/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/stack/index.ts","type":"registry:component","target":"@ui/stack/index.ts"},{"path":"registry/constructive/blocks/stack/stack-context.tsx","type":"registry:component","target":"@ui/stack/stack-context.tsx"},{"path":"registry/constructive/blocks/stack/stack-card.tsx","type":"registry:component","target":"@ui/stack/stack-card.tsx"},{"path":"registry/constructive/blocks/stack/stack-header.tsx","type":"registry:component","target":"@ui/stack/stack-header.tsx"},{"path":"registry/constructive/blocks/stack/stack-backdrop.tsx","type":"registry:component","target":"@ui/stack/stack-backdrop.tsx"},{"path":"registry/constructive/blocks/stack/stack-viewport.tsx","type":"registry:component","target":"@ui/stack/stack-viewport.tsx"},{"path":"registry/constructive/blocks/stack/deferred-card-content.tsx","type":"registry:component","target":"@ui/stack/deferred-card-content.tsx"},{"path":"registry/constructive/blocks/stack/stack-animations.ts","type":"registry:lib","target":"@ui/stack/stack-animations.ts"},{"path":"registry/constructive/blocks/stack/stack-utils.ts","type":"registry:lib","target":"@ui/stack/stack-utils.ts"},{"path":"registry/constructive/blocks/stack/stack.types.ts","type":"registry:lib","target":"@ui/stack/stack.types.ts"},{"path":"registry/constructive/blocks/stack/use-stack-gestures.ts","type":"registry:hook","target":"@ui/stack/use-stack-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-peek-gestures.ts","type":"registry:hook","target":"@ui/stack/use-peek-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-stack-responsive.ts","type":"registry:hook","target":"@ui/stack/use-stack-responsive.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stack"},{"name":"toast","type":"registry:block","title":"Toast Notifications","description":"Styled toast notification functions using Sonner.","categories":["block"],"docs":"Import: `import { toastSuccess, toastError, toastWarning, toastInfo } from '@/components/ui/toast'`","dependencies":["sonner","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/button","@constructive/dialog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/toast/index.ts","type":"registry:component","target":"@ui/toast/index.ts"},{"path":"registry/constructive/blocks/toast/toast-error.tsx","type":"registry:component","target":"@ui/toast/toast-error.tsx"},{"path":"registry/constructive/blocks/toast/toast-success.tsx","type":"registry:component","target":"@ui/toast/toast-success.tsx"},{"path":"registry/constructive/blocks/toast/toast-warning.tsx","type":"registry:component","target":"@ui/toast/toast-warning.tsx"},{"path":"registry/constructive/blocks/toast/toast-info.tsx","type":"registry:component","target":"@ui/toast/toast-info.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/toast"},{"name":"app-bar","type":"registry:block","title":"App Bar","description":"A sticky application header with a sidebar trigger, responsive breadcrumbs, and framework-neutral search and action slots.","categories":["block","navigation"],"docs":"Import: `import { AppBar } from '@/components/ui/app-bar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/breadcrumb","@constructive/separator","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-bar.tsx","type":"registry:component","target":"@ui/app-bar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-bar"},{"name":"app-shell","type":"registry:block","title":"App Shell","description":"A provider-neutral application shell with typed navigation, brand, account, breadcrumb, and link-render contracts.","categories":["block","navigation"],"docs":"Import: `import { AppShell } from '@/components/ui/app-shell'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/app-bar","@constructive/avatar","@constructive/collapsible","@constructive/dropdown-menu","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-shell.tsx","type":"registry:component","target":"@ui/app-shell.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-shell"},{"name":"field","type":"registry:ui","title":"Field","description":"Composable form layout with groups, fieldsets, legends, labels, descriptions, separators, and accessible errors.","categories":["form"],"docs":"Import: `import { Field, FieldGroup, FieldLabel, FieldDescription, FieldError } from '@/components/ui/field'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/field.tsx","type":"registry:ui","target":"@ui/field.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/field"},{"name":"empty","type":"registry:ui","title":"Empty","description":"A composable empty-state layout with media, title, description, and action content.","categories":["layout"],"docs":"Import: `import { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent } from '@/components/ui/empty'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/empty.tsx","type":"registry:ui","target":"@ui/empty.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/empty"},{"name":"ai","type":"registry:block","title":"AI Kit","description":"Presentational primitives for AI and agentic chat UIs: composer, messages, reasoning, tools, HITL approval, plan tracking, and streaming surfaces.","categories":["block","ai"],"docs":"Import PromptInput, Message, Tool, Reasoning, and PlanTracker from the installed ai directory under your configured shadcn ui alias.","dependencies":["lucide-react","sugar-high"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/avatar","@constructive/tooltip","@constructive/alert","@constructive/collapsible","@constructive/badge","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/ai/agent-loader.tsx","type":"registry:component","target":"@ui/ai/agent-loader.tsx"},{"path":"registry/constructive/blocks/ai/approval-card.tsx","type":"registry:component","target":"@ui/ai/approval-card.tsx"},{"path":"registry/constructive/blocks/ai/chat-container.tsx","type":"registry:component","target":"@ui/ai/chat-container.tsx"},{"path":"registry/constructive/blocks/ai/code-block.tsx","type":"registry:component","target":"@ui/ai/code-block.tsx"},{"path":"registry/constructive/blocks/ai/context-card.tsx","type":"registry:component","target":"@ui/ai/context-card.tsx"},{"path":"registry/constructive/blocks/ai/context-ring.tsx","type":"registry:component","target":"@ui/ai/context-ring.tsx"},{"path":"registry/constructive/blocks/ai/diff-table.tsx","type":"registry:component","target":"@ui/ai/diff-table.tsx"},{"path":"registry/constructive/blocks/ai/feedback-bar.tsx","type":"registry:component","target":"@ui/ai/feedback-bar.tsx"},{"path":"registry/constructive/blocks/ai/file-upload.tsx","type":"registry:component","target":"@ui/ai/file-upload.tsx"},{"path":"registry/constructive/blocks/ai/format-duration.ts","type":"registry:component","target":"@ui/ai/format-duration.ts"},{"path":"registry/constructive/blocks/ai/image.tsx","type":"registry:component","target":"@ui/ai/image.tsx"},{"path":"registry/constructive/blocks/ai/index.ts","type":"registry:component","target":"@ui/ai/index.ts"},{"path":"registry/constructive/blocks/ai/inline-diff.tsx","type":"registry:component","target":"@ui/ai/inline-diff.tsx"},{"path":"registry/constructive/blocks/ai/markdown.tsx","type":"registry:component","target":"@ui/ai/markdown.tsx"},{"path":"registry/constructive/blocks/ai/message.tsx","type":"registry:component","target":"@ui/ai/message.tsx"},{"path":"registry/constructive/blocks/ai/plan-tracker.tsx","type":"registry:component","target":"@ui/ai/plan-tracker.tsx"},{"path":"registry/constructive/blocks/ai/prompt-input.tsx","type":"registry:component","target":"@ui/ai/prompt-input.tsx"},{"path":"registry/constructive/blocks/ai/prompt-suggestion.tsx","type":"registry:component","target":"@ui/ai/prompt-suggestion.tsx"},{"path":"registry/constructive/blocks/ai/reasoning.tsx","type":"registry:component","target":"@ui/ai/reasoning.tsx"},{"path":"registry/constructive/blocks/ai/recommendation-card.tsx","type":"registry:component","target":"@ui/ai/recommendation-card.tsx"},{"path":"registry/constructive/blocks/ai/response-stream.tsx","type":"registry:component","target":"@ui/ai/response-stream.tsx"},{"path":"registry/constructive/blocks/ai/scroll-button.tsx","type":"registry:component","target":"@ui/ai/scroll-button.tsx"},{"path":"registry/constructive/blocks/ai/source.tsx","type":"registry:component","target":"@ui/ai/source.tsx"},{"path":"registry/constructive/blocks/ai/steps.tsx","type":"registry:component","target":"@ui/ai/steps.tsx"},{"path":"registry/constructive/blocks/ai/streaming-text.tsx","type":"registry:component","target":"@ui/ai/streaming-text.tsx"},{"path":"registry/constructive/blocks/ai/system-message.tsx","type":"registry:component","target":"@ui/ai/system-message.tsx"},{"path":"registry/constructive/blocks/ai/task-row.tsx","type":"registry:component","target":"@ui/ai/task-row.tsx"},{"path":"registry/constructive/blocks/ai/text-shimmer.tsx","type":"registry:component","target":"@ui/ai/text-shimmer.tsx"},{"path":"registry/constructive/blocks/ai/thinking-trace.tsx","type":"registry:component","target":"@ui/ai/thinking-trace.tsx"},{"path":"registry/constructive/blocks/ai/tool.tsx","type":"registry:component","target":"@ui/ai/tool.tsx"},{"path":"registry/constructive/blocks/ai/types.ts","type":"registry:component","target":"@ui/ai/types.ts"},{"path":"registry/constructive/blocks/ai/use-throttled-text.ts","type":"registry:component","target":"@ui/ai/use-throttled-text.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/ai"},{"name":"form-kit","type":"registry:ui","title":"Form Kit","description":"All form-related components: input, textarea, checkbox, radio, select, switch, progress, form controls.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/input","@constructive/textarea","@constructive/checkbox","@constructive/checkbox-group","@constructive/radio-group","@constructive/switch","@constructive/select","@constructive/progress","@constructive/form","@constructive/form-control","@constructive/input-group","@constructive/field","@constructive/label","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-kit"},{"name":"overlay-kit","type":"registry:ui","title":"Overlay Kit","description":"All overlay components: dialog, sheet, drawer, popover, tooltip, dropdown menu, alert dialog.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/dialog","@constructive/sheet","@constructive/drawer","@constructive/popover","@constructive/tooltip","@constructive/dropdown-menu","@constructive/alert-dialog","@constructive/command","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/overlay-kit"},{"name":"layout-kit","type":"registry:ui","title":"Layout Kit","description":"Layout and navigation components: tabs, sidebar, collapsible, resizable panels, scroll area, breadcrumb, pagination.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/tabs","@constructive/sidebar","@constructive/collapsible","@constructive/resizable","@constructive/scroll-area","@constructive/breadcrumb","@constructive/pagination","@constructive/separator","@constructive/empty","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/layout-kit"},{"name":"sheets","type":"registry:block","title":"Sheets","description":"A metadata-driven, spreadsheet-grade CRUD grid with accessible DOM cells and adapter-owned data access.","categories":["blocks","data"],"docs":"Install the complete source-owned grid with `pnpm dlx shadcn@latest add @constructive/sheets`, then import `Sheets`, `SheetsProvider`, and the adapter contracts from `@/components/ui/sheets`. The copied source depends on `@constructive-io/data` for the current `_meta` contract and runtime GraphQL operations; your host remains responsible for its endpoint, session, and RLS-aware execution boundary.","dependencies":["@constructive-io/data@^0.5.0","@internationalized/date","@remixicon/react","@tanstack/react-form","@tanstack/react-query","@tanstack/react-table@9.0.0-beta.58","@tanstack/react-virtual","@types/leaflet","clsx","graphql","inflekt","leaflet","lucide-react","motion","react-aria-components","react-leaflet","tailwind-merge","zod","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/calendar-rac","@constructive/card","@constructive/checkbox","@constructive/collapsible","@constructive/dropdown-menu","@constructive/form-control","@constructive/input","@constructive/input-group","@constructive/label","@constructive/pagination","@constructive/popover","@constructive/progressive-blur","@constructive/scroll-area","@constructive/select","@constructive/skeleton","@constructive/tabs","@constructive/textarea","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/postgraphile-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/use-sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/advanced.ts","type":"registry:lib","target":"@ui/sheets/advanced.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-execute.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-execute.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx","type":"registry:component","target":"@ui/sheets/auth/auth-gate.tsx"},{"path":"registry/constructive/blocks/sheets/auth/auth-types.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-types.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/index.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-forgot-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-login.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-register.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-reset-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/index.ts","type":"registry:lib","target":"@ui/sheets/auth/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-error-alert.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-loading-button.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-header.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-layout.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/forgot-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/form-field.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/login-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/password-strength.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/register-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/reset-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/auth-errors.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/schemas.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/token-store.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/validators.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/validators.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts","type":"registry:lib","target":"@ui/sheets/cell-model/badge-tones.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-props.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-slots.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/create-sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/badges.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/boolean.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/datetime.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/geometry.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/image.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/interval.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/number.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/relation.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/text.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/types.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/uri.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts","type":"registry:lib","target":"@ui/sheets/cell-model/image-cache.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/badges-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/boolean-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/datetime-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/draft-action-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/geometry-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/image-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/interval-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/loading-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/number-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/relation-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/text-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/uri-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry-defaults.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-groups.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-resolver.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts","type":"registry:lib","target":"@ui/sheets/cell-types/define-cell-type.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts","type":"registry:lib","target":"@ui/sheets/cell-types/type-mapping.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/types.ts","type":"registry:lib","target":"@ui/sheets/cell-types/types.ts"},{"path":"registry/constructive/blocks/sheets/commands/context.ts","type":"registry:lib","target":"@ui/sheets/commands/context.ts"},{"path":"registry/constructive/blocks/sheets/commands/dispatch.ts","type":"registry:lib","target":"@ui/sheets/commands/dispatch.ts"},{"path":"registry/constructive/blocks/sheets/commands/index.ts","type":"registry:lib","target":"@ui/sheets/commands/index.ts"},{"path":"registry/constructive/blocks/sheets/commands/keybinding.ts","type":"registry:lib","target":"@ui/sheets/commands/keybinding.ts"},{"path":"registry/constructive/blocks/sheets/commands/keymap.ts","type":"registry:lib","target":"@ui/sheets/commands/keymap.ts"},{"path":"registry/constructive/blocks/sheets/commands/registry.ts","type":"registry:lib","target":"@ui/sheets/commands/registry.ts"},{"path":"registry/constructive/blocks/sheets/commands/types.ts","type":"registry:lib","target":"@ui/sheets/commands/types.ts"},{"path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts","type":"registry:lib","target":"@ui/sheets/config/sheets-concurrency.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-context.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-context.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-execute.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-execute.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx","type":"registry:component","target":"@ui/sheets/context/sheets-provider.tsx"},{"path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-upload-presigned.ts"},{"path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts","type":"registry:lib","target":"@ui/sheets/forms/form-spec-builder.ts"},{"path":"registry/constructive/blocks/sheets/forms/index.ts","type":"registry:lib","target":"@ui/sheets/forms/index.ts"},{"path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts","type":"registry:lib","target":"@ui/sheets/forms/metadata-hash.ts"},{"path":"registry/constructive/blocks/sheets/forms/mutations.ts","type":"registry:lib","target":"@ui/sheets/forms/mutations.ts"},{"path":"registry/constructive/blocks/sheets/forms/types.ts","type":"registry:lib","target":"@ui/sheets/forms/types.ts"},{"path":"registry/constructive/blocks/sheets/forms/zod-schema.ts","type":"registry:lib","target":"@ui/sheets/forms/zod-schema.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/edit-intent.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-props.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/number-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/text-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/inline-cell-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/sheets-cell-host.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/use-sheets-content.ts"},{"path":"registry/constructive/blocks/sheets/grid/cell-routing.ts","type":"registry:lib","target":"@ui/sheets/grid/cell-routing.ts"},{"path":"registry/constructive/blocks/sheets/grid/draft-types.ts","type":"registry:lib","target":"@ui/sheets/grid/draft-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/editor-focus-trap.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts","type":"registry:lib","target":"@ui/sheets/grid/editors/overlay-presets.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/dock-status-bar.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/feedback-context.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/feedback-reducer.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/floating-status.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/index.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/index.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-state.tsx"},{"path":"registry/constructive/blocks/sheets/grid/filter-operators.ts","type":"registry:lib","target":"@ui/sheets/grid/filter-operators.ts"},{"path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts","type":"registry:lib","target":"@ui/sheets/grid/grid-cell-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-batch-commit.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-cell-editing.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-rows.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-submission.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-filter-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-operations.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-selection.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-state.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-load-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-paginate-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-undo-redo.ts"},{"path":"registry/constructive/blocks/sheets/grid/row-model.ts","type":"registry:lib","target":"@ui/sheets/grid/row-model.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.constants.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.context-menu.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.controls.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.formatters.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.pagination.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.table-selector.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.theme.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.types.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.types.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.utils.ts"},{"path":"registry/constructive/blocks/sheets/grid/use-sheets.ts","type":"registry:lib","target":"@ui/sheets/grid/use-sheets.ts"},{"path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/orderby-enum-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/query-keys.ts","type":"registry:lib","target":"@ui/sheets/hooks/query-keys.ts"},{"path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/relation-field-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-columns.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-metadata-cache.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-infinite-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-meta.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table-cursor.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-upload.ts"},{"path":"registry/constructive/blocks/sheets/index.ts","type":"registry:lib","target":"@ui/sheets/index.ts"},{"path":"registry/constructive/blocks/sheets/row-identity.ts","type":"registry:lib","target":"@ui/sheets/row-identity.ts"},{"path":"registry/constructive/blocks/sheets/selection/cell-extract.ts","type":"registry:lib","target":"@ui/sheets/selection/cell-extract.ts"},{"path":"registry/constructive/blocks/sheets/selection/fill.ts","type":"registry:lib","target":"@ui/sheets/selection/fill.ts"},{"path":"registry/constructive/blocks/sheets/selection/range-set.ts","type":"registry:lib","target":"@ui/sheets/selection/range-set.ts"},{"path":"registry/constructive/blocks/sheets/selection/selection-model.ts","type":"registry:lib","target":"@ui/sheets/selection/selection-model.ts"},{"path":"registry/constructive/blocks/sheets/selection/tsv.ts","type":"registry:lib","target":"@ui/sheets/selection/tsv.ts"},{"path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts","type":"registry:lib","target":"@ui/sheets/store/draft-rows-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts","type":"registry:lib","target":"@ui/sheets/store/relation-info-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/sheets-store.ts","type":"registry:lib","target":"@ui/sheets/store/sheets-store.ts"},{"path":"registry/constructive/blocks/sheets/table/features.ts","type":"registry:lib","target":"@ui/sheets/table/features.ts"},{"path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx","type":"registry:component","target":"@ui/sheets/table/grid-viewport.tsx"},{"path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts","type":"registry:lib","target":"@ui/sheets/table/use-sheets-table-instance.ts"},{"path":"registry/constructive/blocks/sheets/utils/cn.ts","type":"registry:lib","target":"@ui/sheets/utils/cn.ts"},{"path":"registry/constructive/blocks/sheets/utils/file.utils.ts","type":"registry:lib","target":"@ui/sheets/utils/file.utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx","type":"registry:component","target":"@ui/sheets/utils/image-with-fallback.tsx"},{"path":"registry/constructive/blocks/sheets/utils/map-picker.tsx","type":"registry:component","target":"@ui/sheets/utils/map-picker.tsx"},{"path":"registry/constructive/blocks/sheets/utils/motion-config.ts","type":"registry:lib","target":"@ui/sheets/utils/motion-config.ts"},{"path":"registry/constructive/blocks/sheets/utils/relation-utils.ts","type":"registry:lib","target":"@ui/sheets/utils/relation-utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-i18n.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-logger.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts","type":"registry:lib","target":"@ui/sheets/utils/use-color-scheme.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-image-status.ts","type":"registry:lib","target":"@ui/sheets/utils/use-image-status.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts","type":"registry:lib","target":"@ui/sheets/utils/use-resize-observer.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sheets"},{"name":"schema-builder","type":"registry:block","title":"Schema Builder","description":"An adapter-driven PostgreSQL schema editor for tables, fields, relationships, indexes, and RLS policies.","categories":["blocks","schema"],"docs":"Install the complete source-owned editor with `pnpm dlx shadcn@latest add @constructive/schema-builder`, then import `SchemaBuilder` and `defineSchemaBuilderAdapter` from `@/components/schema-builder`. The host supplies its generated-SDK adapter, control-plane scope, navigation, preferences, and invalidation behavior; the block never owns backend endpoints or credentials.","dependencies":["@constructive-io/data@^0.5.0","@dnd-kit/core","@dnd-kit/utilities","@fluentui/react-context-selector","@pgsql/types@17.6.2","@remixicon/react","@tanstack/react-query","clsx","lucide-react","motion","node-type-registry@^1.11.0","pg-ast@2.11.3","tailwind-merge","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/button","@constructive/checkbox","@constructive/collapsible","@constructive/combobox","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/input-group","@constructive/label","@constructive/multi-select","@constructive/progressive-blur","@constructive/responsive-diagram","@constructive/scroll-area","@constructive/select","@constructive/stack","@constructive/stepper","@constructive/switch","@constructive/tabs","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/schema-builder/compat/admin-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/admin-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/auth-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/auth-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/block-config.tsx","type":"registry:component","target":"@components/schema-builder/compat/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/compat/generated-types.ts","type":"registry:lib","target":"@components/schema-builder/compat/generated-types.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/modules-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/modules-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/relation-provisions.ts","type":"registry:lib","target":"@components/schema-builder/compat/relation-provisions.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/schema-builder-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/schema-builder-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/components/schema-builder.tsx","type":"registry:component","target":"@components/schema-builder/components/schema-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/context.tsx","type":"registry:component","target":"@components/schema-builder/core/context.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/index.ts","type":"registry:lib","target":"@components/schema-builder/core/index.ts"},{"path":"registry/constructive/blocks/schema-builder/core/mutation.ts","type":"registry:lib","target":"@components/schema-builder/core/mutation.ts"},{"path":"registry/constructive/blocks/schema-builder/core/query.ts","type":"registry:lib","target":"@components/schema-builder/core/query.ts"},{"path":"registry/constructive/blocks/schema-builder/core/store.ts","type":"registry:lib","target":"@components/schema-builder/core/store.ts"},{"path":"registry/constructive/blocks/schema-builder/fields/index.ts","type":"registry:lib","target":"@components/schema-builder/fields/index.ts"},{"path":"registry/constructive/blocks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/lib/utils.ts","type":"registry:lib","target":"@components/schema-builder/lib/utils.ts"},{"path":"registry/constructive/blocks/schema-builder/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/app-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/app-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/databases/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/databases/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/context/block-config.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/context/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/app-store.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/app-store.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/preferences-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/preferences-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/schema-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/schema-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/client-only.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/client-only.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schema-builder-header.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schema-builder-header.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx"},{"path":"registry/constructive/blocks/schema-builder/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/types.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/schema-builder"},{"name":"billing-contracts","type":"registry:lib","title":"Billing Contracts","description":"Provider-neutral billing DTOs, arbitrary-precision formatters, open-status presentation maps, and explicit resource states shared by every customer billing block.","categories":["blocks","billing"],"docs":"## Usage\n\nInstall this item when building a custom billing composition. It defines the shared resource states, account references, money values, allowances, plans, subscriptions, usage, credits, activity, messages, and formatting options used by the billing blocks.\n\n```ts\nimport type { BillingPlan, BillingResource } from '@/blocks/billing/billing-contracts/billing-contracts';\n\nconst plans: BillingResource = {\n status: 'ready',\n quality: 'authoritative',\n asOf: '2026-07-20T12:00:00.000Z',\n data: [{\n id: 'growth',\n name: 'Growth',\n prices: [{\n kind: 'fixed',\n id: 'growth-monthly',\n interval: 'month',\n money: { amountMinor: '4900', currency: 'USD' }\n }]\n }]\n};\n```\n\nKeep quantities, limits, deltas, and minor-unit money as decimal strings so large values retain their precision. Supply an explicit locale and time zone to the formatters, keep each record's currency, and use the explicit contact-sales, unlimited, uninitialized, and unknown variants when they apply.","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts","type":"registry:lib","target":"src/blocks/billing/billing-contracts/billing-contracts.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-contracts"},{"name":"billing-ui","type":"registry:lib","title":"Billing UI Helpers","description":"Shared formatting and presentation helpers used by the customer billing blocks.","categories":["blocks","billing"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/billing-contracts","@constructive/cn"],"files":[{"path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx","type":"registry:lib","target":"src/blocks/billing/billing-ui/billing-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-ui"},{"name":"billing-pricing-table","type":"registry:block","title":"Billing Pricing Table","description":"Responsive plan comparison with controlled interval selection, fixed and contact-sales pricing, current and featured states, and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a plan resource, account context, formatting options, a controlled billing interval, and the actions you want to show.\n\n```tsx\nimport { BillingPricingTable } from '@/blocks/billing/billing-pricing-table/billing-pricing-table';\n\n openPlanSelection({ planId, priceId, account })}\n onContactSales={({ planId, account }) => openSalesRequest({ planId, account })}\n/>\n```\n\nFixed prices use minor-unit decimal strings and the currency on each record. Use `BillingPrice.kind = 'contact_sales'` for custom pricing. Missing callbacks remove their actions, rejected promises appear next to the action, and resolved promises leave the selected plan state under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-pricing-table"},{"name":"billing-subscription-card","type":"registry:block","title":"Billing Subscription Card","description":"Current-plan summary with independent subscription, provider, and payment status plus exact lifecycle dates and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass the current plan together with any payment and provider states you want to show. Add only the actions that make sense in your billing flow.\n\n```tsx\nimport { BillingSubscriptionCard } from '@/blocks/billing/billing-subscription-card/billing-subscription-card';\n\n openSubscriptionSettings(subscriptionId, account)}\n/>\n```\n\nOnly `renewsAt` is labelled “Renews”; `endsAt` is always labelled “Ends.” Status strings are open, unknown values render neutrally, and missing callbacks hide their controls.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-subscription-card"},{"name":"billing-entitlements-list","type":"registry:block","title":"Billing Entitlements List","description":"Structured display of plan feature flags, caps, discrete quotas, meter allowances, and neutral unknown values.","categories":["blocks","billing"],"docs":"## Usage\n\nPass each entitlement with a semantic kind so features, caps, quotas, and metered allowances keep their distinct meaning.\n\n```tsx\nimport { BillingEntitlementsList } from '@/blocks/billing/billing-entitlements-list/billing-entitlements-list';\n\n\n```\n\nUse explicit `unlimited`, `uninitialized`, and `unknown` variants. Unknown values stay visible with a neutral presentation, and message overrides let you adapt the labels without changing the data model.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"},{"path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-entitlements-list"},{"name":"billing-usage-overview","type":"registry:block","title":"Billing Usage Overview","description":"Current-period usage with quota, boolean, unlimited, uninitialized, exhausted, overage, category-pool, and universal-pool states.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a current-period usage snapshot and nest child meters beneath category or universal pools when credits are shared.\n\n```tsx\nimport { BillingUsageOverview } from '@/blocks/billing/billing-usage-overview/billing-usage-overview';\n\n openUsageHistory(meterSlug)}\n onBuyCredits={(meterSlug) => openCreditPurchase(meterSlug)}\n/>\n```\n\nCategory and universal pools stay nested so their application order remains clear. Progress caps visually at 100 percent while text and accessible values preserve the actual used, allowance, and overage values. Actions disappear when their callbacks are absent.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-overview"},{"name":"billing-credits-card","type":"registry:block","title":"Billing Credits Card","description":"Available credits grouped by compatible meter and unit with permanent, period, rollover, expiring, and unknown lot semantics.","categories":["blocks","billing"],"docs":"## Usage\n\nPass available balances and their credit lots while keeping each meter and unit independent.\n\n```tsx\nimport { BillingCreditsCard } from '@/blocks/billing/billing-credits-card/billing-credits-card';\n\n\n```\n\nKeep incompatible meters and units in separate balance groups. Credit lots show the current grant makeup, while `billing-activity-table` provides a chronological view of grants, usage, adjustments, rollover, and expiration.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-credits-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-credits-card"},{"name":"billing-usage-history","type":"registry:block","title":"Billing Usage History","description":"Accessible, table-first period history with controlled meter, period, and pagination filters plus explicit quality labels.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a page of usage periods and control the meter, period, and pagination values when you provide their callbacks.\n\n```tsx\nimport { BillingUsageHistory } from '@/blocks/billing/billing-usage-history/billing-usage-history';\n\n\n```\n\nCredits and overage columns appear only when their values are marked as confirmed. Quality labels remain visible on each period, and the table keeps pagination and filter changes under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-history/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-history"},{"name":"billing-activity-table","type":"registry:block","title":"Billing Activity Table","description":"Paginated ledger activity with controlled filters, semantic class/type presentation, and a titled metadata detail sheet.","categories":["blocks","billing"],"docs":"## Usage\n\nPass ledger class and entry type with each activity entry so labels and badge tones describe the event itself.\n\n```tsx\nimport { BillingActivityTable } from '@/blocks/billing/billing-activity-table/billing-activity-table';\n\n\n```\n\nA positive delta can represent consumption and a negative delta can represent release or reset, so presentation derives from `ledgerClass` and `entryType` rather than the sign. Unknown values remain neutral, and JSON-safe metadata opens in a titled detail sheet.","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-activity-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-activity-table"},{"name":"billing-settings-page","type":"registry:block","title":"Billing Settings Page","description":"Router-neutral Overview, Usage, and Plans composition that keeps subscription, usage, credits, entitlements, history, activity, and pricing failures isolated.","categories":["blocks","billing"],"docs":"## Usage\n\nPass one account together with independent resources and actions. Use `section` and `onSectionChange` to synchronize navigation, or `defaultSection` for local state. The page renders its own heading by default; set `showHeader={false}` when the surrounding document already provides it.\n\n```tsx\nimport { BillingSettingsPage } from '@/blocks/billing/billing-settings-page/billing-settings-page';\n\n\n```\n\nEach resource renders its own loading, empty, error, ready, and quality state, so one unavailable section never replaces the whole page. Controlled filters and actions are forwarded to their matching leaf blocks.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-activity-table","@constructive/billing-contracts","@constructive/billing-credits-card","@constructive/billing-entitlements-list","@constructive/billing-pricing-table","@constructive/billing-subscription-card","@constructive/billing-usage-history","@constructive/billing-usage-overview","@constructive/cn","@constructive/separator","@constructive/tabs","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx","type":"registry:component","target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx"},{"path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-settings-page/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-settings-page"},{"name":"command-palette","type":"registry:block","title":"Command Palette","description":"Framework-neutral command discovery with page-scoped registration, structured shortcuts, multi-step flows, and cancellable background tasks.","categories":["blocks","application-shell"],"docs":"## Usage\n\nCreate one registry for the application, adapt navigation at the host boundary, and render the palette near the root layout. Pages can register commands while mounted with `usePageCommands`.\n\n```tsx\nimport { createCommandRegistry, kbd } from '@constructive-io/command-palette';\nimport { CommandPalette } from '@/blocks/command-palette/command-palette';\n\nconst registry = createCommandRegistry({\n groups: [{ id: 'navigation', label: 'Navigation', priority: 1 }],\n commands: [{\n id: 'settings',\n label: 'Open settings',\n type: 'navigation',\n group: 'navigation',\n href: '/settings',\n shortcut: kbd(',', 'mod')\n }]\n});\n\n router.push(href)} />;\n```\n\nThe installed block owns presentation and keyboard interaction. The headless package owns command registration, execution, multi-step state, and background-task lifecycle. Route authorization, action permissions, errors, and business workflows remain the host application's responsibility.","dependencies":["@constructive-io/command-palette@^0.4.0","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/button","@constructive/cn","@constructive/command","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/command-palette/command-palette.tsx","type":"registry:component","target":"src/blocks/command-palette/command-palette.tsx"},{"path":"registry/constructive/blocks/command-palette/kbd-shortcut.tsx","type":"registry:component","target":"src/blocks/command-palette/kbd-shortcut.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/multi-step-view.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/multi-step-view.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/step-indicator.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/step-indicator.tsx"},{"path":"registry/constructive/blocks/command-palette/background/background-task-stack.tsx","type":"registry:component","target":"src/blocks/command-palette/background/background-task-stack.tsx"},{"path":"registry/constructive/blocks/command-palette/background/inline-task-bar.tsx","type":"registry:component","target":"src/blocks/command-palette/background/inline-task-bar.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-card.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-card.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-icons.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-icons.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/command-palette"},{"name":"pack-foundation","type":"registry:lib","title":"Feature Pack Foundation","description":"Provider-neutral resource, action-policy, error, loading, empty, and status contracts shared by Constructive feature packs.","categories":[],"docs":null,"dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/empty","@constructive/skeleton"],"files":[{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx","type":"registry:component","target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pack-foundation"},{"name":"console-runtime","type":"registry:lib","title":"Console Runtime","description":"Endpoint, session, transport, cache partitioning, and adapter contracts for identity-scoped Constructive consoles.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/console-runtime/capabilities.ts","type":"registry:lib","target":"src/blocks/console-runtime/capabilities.ts"},{"path":"registry/constructive/blocks/console-runtime/endpoints.ts","type":"registry:lib","target":"src/blocks/console-runtime/endpoints.ts"},{"path":"registry/constructive/blocks/console-runtime/feature-adapter.ts","type":"registry:lib","target":"src/blocks/console-runtime/feature-adapter.ts"},{"path":"registry/constructive/blocks/console-runtime/index.ts","type":"registry:lib","target":"src/blocks/console-runtime/index.ts"},{"path":"registry/constructive/blocks/console-runtime/session.ts","type":"registry:lib","target":"src/blocks/console-runtime/session.ts"},{"path":"registry/constructive/blocks/console-runtime/standalone-session.ts","type":"registry:lib","target":"src/blocks/console-runtime/standalone-session.ts"},{"path":"registry/constructive/blocks/console-runtime/transport.ts","type":"registry:lib","target":"src/blocks/console-runtime/transport.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-runtime"},{"name":"console-feature-catalog","type":"registry:lib","title":"Console Feature Catalog","description":"Validated feature-pack capability manifests and stable backend preset profiles.","categories":[],"docs":null,"dependencies":["zod"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime"],"files":[{"path":"registry/constructive/feature-packs/capabilities.ts","type":"registry:lib","target":"src/feature-packs/capabilities.ts"},{"path":"registry/constructive/feature-packs/catalog.ts","type":"registry:lib","target":"src/feature-packs/catalog.ts"},{"path":"registry/constructive/feature-packs/catalog-validation.ts","type":"registry:lib","target":"src/feature-packs/catalog-validation.ts"},{"path":"registry/constructive/feature-packs/index.ts","type":"registry:lib","target":"src/feature-packs/index.ts"},{"path":"registry/constructive/feature-packs/manifest.ts","type":"registry:lib","target":"src/feature-packs/manifest.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-feature-catalog"},{"name":"console-kit-core","type":"registry:block","title":"Constructive Console Kit Core","description":"The leaf-independent Console Kit shell, runtime, discovery, and single modular Zustand store.","categories":[],"docs":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":["@constructive-io/data@^0.5.0","@tanstack/react-query","graphql","lucide-react","zustand"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime","@constructive/console-feature-catalog","@constructive/alert","@constructive/app-bar","@constructive/app-shell","@constructive/badge","@constructive/button","@constructive/cn","@constructive/pack-foundation","@constructive/popover","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/feature-module.ts","type":"registry:lib","target":"src/blocks/console-kit/feature-module.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-routes.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-routes.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-contracts.ts"},{"path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx","type":"registry:component","target":"src/blocks/console-kit/console-connection-menu.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-runtime.tsx"},{"path":"registry/constructive/blocks/console-kit/use-latest-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/use-latest-callback.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-core.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-core.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-capabilities.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-callback.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-graphql.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts"},{"path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/adapter-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/context-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/context-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/endpoint-capability-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/navigation-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/runtime-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/session-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/session-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx","type":"registry:component","target":"src/blocks/console-kit/store/console-kit-store.tsx"},{"path":"registry/constructive/blocks/console-kit/store/index.ts","type":"registry:lib","target":"src/blocks/console-kit/store/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-core"},{"name":"feature-pack-data","type":"registry:block","title":"Data Feature Pack","description":"A current-_meta-only application data explorer with application-table filtering and spreadsheet CRUD.","categories":[],"docs":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":["@constructive-io/data@^0.5.0","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/sheets","@constructive/alert","@constructive/button","@constructive/card","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/data/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/data.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-data"},{"name":"console-module-data","type":"registry:block","title":"Data Console Module","description":"Console Kit navigation, capability discovery, and tenant runtime binding for the Data feature pack.","categories":[],"docs":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-data","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/sheets","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-console-module.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-data"},{"name":"feature-pack-auth","type":"registry:block","title":"Authentication Feature Pack","description":"Provider-neutral public authentication flows and personal account/session management.","categories":[],"docs":"`feature-pack-auth` installed a provider-neutral view and `.constructive/feature-packs/auth.json`. Import from `@/blocks/feature-packs/auth/auth-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-auth` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Unsupported policy grants or callbacks stay absent, provider failures remain explicit, and callback credentials never enter the view.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/field","@constructive/input","@constructive/input-group","@constructive/separator","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-account-view.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-password-policy.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/auth.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-auth"},{"name":"console-module-auth","type":"registry:block","title":"Authentication Console Module","description":"Console Kit session flow, capability discovery, and Constructive adapter for the Authentication feature pack.","categories":[],"docs":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-auth","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/auth-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-auth"},{"name":"feature-pack-users","type":"registry:block","title":"App access Feature Pack","description":"App access governance with member lifecycle controls, invitations, access profiles, direct and effective permissions, and new-member defaults.","categories":[],"docs":"`feature-pack-users` installed a provider-neutral view and `.constructive/feature-packs/users.json`. Import from `@/blocks/feature-packs/users/users-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-users` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources or callbacks stay unavailable, while row policy, PostgreSQL privileges, RLS, and final-owner constraints decide mutations.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/input-group","@constructive/select","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/users/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/users.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-users"},{"name":"console-module-users","type":"registry:block","title":"App access Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the App access feature pack.","categories":[],"docs":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-users","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/users-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-users"},{"name":"feature-pack-organizations","type":"registry:block","title":"Organizations Feature Pack","description":"Complete tenant administration for selection, member governance, invitations, profiles, permissions, defaults, hierarchy, settings, principals, and API keys.","categories":[],"docs":"`feature-pack-organizations` installed a provider-neutral view and `.constructive/feature-packs/organizations.json`. Import from `@/blocks/feature-packs/organizations/organizations-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-organizations` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: When the active organization is missing or does not match the host-provided list, the view selects the first available organization. It never infers a principal, policy grant, or mutation authority; missing resources and callbacks stay unavailable, while PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/select","@constructive/switch","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/organizations.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-organizations"},{"name":"console-module-organizations","type":"registry:block","title":"Organizations Console Module","description":"Console Kit discovery, metadata resolution, and Constructive adapter for the Organizations feature pack.","categories":[],"docs":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-organizations","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/pack-foundation","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/organizations-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-organizations"},{"name":"feature-pack-storage","type":"registry:block","title":"Storage Feature Pack","description":"Bucket, folder, object, upload, download, and deletion surfaces backed by injected storage actions.","categories":[],"docs":"`feature-pack-storage` installed a provider-neutral view and `.constructive/feature-packs/storage.json`. Import from `@/blocks/feature-packs/storage/storage-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-storage` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: An object endpoint alone does not prove bucket or file operations; incomplete and read-only contracts keep write controls hidden.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/radio-group","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-storage"},{"name":"console-module-storage","type":"registry:block","title":"Storage Console Module","description":"Console Kit discovery, metadata resolution, adapter, and modular state slice for the Storage feature pack.","categories":[],"docs":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-storage","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/storage-adapter.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-console-slice.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-meta-contract.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-storage"},{"name":"feature-pack-billing","type":"registry:block","title":"Billing Feature Pack","description":"The feature-pack root for Constructive billing plans, subscriptions, usage, entitlements, credits, and activity.","categories":[],"docs":"`feature-pack-billing` installed a provider-neutral view and `.constructive/feature-packs/billing.json`. Import from `@/blocks/feature-packs/billing/billing-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-billing` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources remain independent degraded states, and unavailable provider callbacks stay absent.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/billing-settings-page","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/billing.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-billing"},{"name":"console-module-billing","type":"registry:block","title":"Billing Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Billing feature pack.","categories":[],"docs":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-billing","@constructive/billing-contracts","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/billing-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-billing"},{"name":"feature-pack-notifications","type":"registry:block","title":"Notifications Feature Pack","description":"An application notification inbox with read, open, and deletion actions.","categories":[],"docs":"`feature-pack-notifications` installed a provider-neutral view and `.constructive/feature-packs/notifications.json`. Import from `@/blocks/feature-packs/notifications/notifications-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-notifications` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host must provide an authoritative inbox, policy, and callbacks; absent operations stay unavailable and mutations require a refreshed resource.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/notifications.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-notifications"},{"name":"console-module-notifications","type":"registry:block","title":"Notifications Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Notifications feature pack.","categories":[],"docs":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-notifications","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/notifications-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-notifications"},{"name":"preset-auth-hardened","type":"registry:block","title":"Hardened Authentication Preset","description":"Stable Constructive auth-hardened backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/auth-hardened-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/auth-hardened.json","type":"registry:file","target":"~/.constructive/feature-packs/auth-hardened.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-auth-hardened"},{"name":"preset-b2b-storage","type":"registry:block","title":"B2B with Storage Preset","description":"Stable Constructive b2b-storage backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/b2b-storage-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/b2b-storage.json","type":"registry:file","target":"~/.constructive/feature-packs/b2b-storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-b2b-storage"},{"name":"preset-full","type":"registry:block","title":"Full Preset","description":"Stable Constructive full backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/console-module-billing","@constructive/console-module-notifications","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/full-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/full-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/full.json","type":"registry:file","target":"~/.constructive/feature-packs/full.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-full"},{"name":"console-kit-nextjs","type":"registry:block","title":"Constructive Console Kit for Next.js","description":"A full-page Next.js tenant console with semantic routing, auth, dynamic endpoint discovery, first-party adapters, and every feature pack.","categories":[],"docs":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/preset-full","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/constructive/index.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-nextjs"},{"name":"app-kit-core","type":"registry:block","title":"Constructive App Kit Core","description":"Typed, server-safe application resources, queries, actions, scope partitioning, schema validation, and opt-in client runtime.","categories":[],"docs":"Install this root to define Constructive-native application contracts without choosing a view family. Import the client runtime explicitly when a connected view needs TanStack Query. Credentials never belong in definitions or AppScope.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/core/contracts.ts","type":"registry:lib","target":"src/blocks/app-kit/core/contracts.ts"},{"path":"registry/constructive/blocks/app-kit/core/navigation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/navigation.ts"},{"path":"registry/constructive/blocks/app-kit/core/schema-validation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/schema-validation.ts"},{"path":"registry/constructive/blocks/app-kit/core/scope.ts","type":"registry:lib","target":"src/blocks/app-kit/core/scope.ts"},{"path":"registry/constructive/blocks/app-kit/core/runtime.tsx","type":"registry:component","target":"src/blocks/app-kit/core/runtime.tsx"},{"path":"registry/constructive/blocks/app-kit/core/index.ts","type":"registry:lib","target":"src/blocks/app-kit/core/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"runtime","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal"],"intents":["define-resources","load-data","execute-actions","validate-schema"],"capabilities":["resource-contracts","query-contracts","action-contracts","scoped-cache","schema-validation","navigation-adapters"],"slots":["record-opener","url-state-adapter"],"events":["query-settled","action-settled","scope-changed"],"compatibleWith":["app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-core"},{"name":"app-kit-data","type":"registry:block","title":"Constructive App Kit Data Views","description":"Controlled and connected tables, lists, cards, record details, forms, relations, collection controls, and action bars.","categories":[],"docs":"Use this root for record and collection applications. Loaders stay server-driven, relation pickers search remotely, ambiguous identities fail read-only, and every view distinguishes loading, empty, denied, and error states.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/combobox","@constructive/empty","@constructive/field","@constructive/input","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/switch","@constructive/table","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/data/types.ts","type":"registry:lib","target":"src/blocks/app-kit/data/types.ts"},{"path":"registry/constructive/blocks/app-kit/data/states.tsx","type":"registry:component","target":"src/blocks/app-kit/data/states.tsx"},{"path":"registry/constructive/blocks/app-kit/data/controls.tsx","type":"registry:component","target":"src/blocks/app-kit/data/controls.tsx"},{"path":"registry/constructive/blocks/app-kit/data/collections.tsx","type":"registry:component","target":"src/blocks/app-kit/data/collections.tsx"},{"path":"registry/constructive/blocks/app-kit/data/detail-form.tsx","type":"registry:component","target":"src/blocks/app-kit/data/detail-form.tsx"},{"path":"registry/constructive/blocks/app-kit/data/relations.tsx","type":"registry:component","target":"src/blocks/app-kit/data/relations.tsx"},{"path":"registry/constructive/blocks/app-kit/data/action-bars.tsx","type":"registry:component","target":"src/blocks/app-kit/data/action-bars.tsx"},{"path":"registry/constructive/blocks/app-kit/data/index.ts","type":"registry:lib","target":"src/blocks/app-kit/data/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["record","collection"],"intents":["browse","search","filter","sort","edit","relate","bulk-act"],"capabilities":["table","list","cards","record-detail","generated-form","relation-picker","relation-panel","pagination","bulk-actions"],"slots":["cell-renderer","record-renderer","form-field","toolbar","footer"],"events":["state-change","open-record","submit","link-record","unlink-record","bulk-action"],"compatibleWith":["app-kit-core","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-data"},{"name":"app-kit-board","type":"registry:block","title":"Constructive App Kit Board","description":"A typed controlled board and connected resource wrapper with semantic moves, keyboard alternatives, and mutation rollback.","categories":[],"docs":"Board movement is disabled until the host supplies an explicit semantic action. Pointer and keyboard moves use the same action contract, restore focus, and roll back optimistic state on denial or failure.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/card","@constructive/dropdown-menu","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/board/board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/connected-board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/connected-board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/index.ts","type":"registry:lib","target":"src/blocks/app-kit/board/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["collection","board"],"intents":["plan","prioritize","move-records","inspect"],"capabilities":["board","typed-columns","semantic-move","keyboard-move","optimistic-rollback"],"slots":["card"],"events":["open-record","move-record","move-denied"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-board"},{"name":"app-kit-dashboard","type":"registry:block","title":"Constructive App Kit Dashboard","description":"Explicit analytical widgets and a versioned, replaceable layout store on the accessible SVG and SSR foundation from TanStack Charts.","categories":[],"docs":"Dashboard widgets always use explicit analytical loaders; they never derive totals from a paginated collection page. Runtime customization is limited to an approved typed catalog, while layout persistence is replaceable.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/charts@0.6.4","@tanstack/charts-scales@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/chart","@constructive/cn","@constructive/dropdown-menu","@constructive/empty","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/dashboard/widgets.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/widgets.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/layout-store.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/layout-store.ts"},{"path":"registry/constructive/blocks/app-kit/dashboard/dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/connected-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/connected-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/persisted-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/persisted-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/index.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["aggregate","series","breakdown"],"intents":["monitor","analyze","compare","configure-layout"],"capabilities":["kpi","bar-chart","line-chart","breakdown-table","widget-catalog","layout-store","layout-persistence"],"slots":["widget"],"events":["layout-change"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-dashboard"},{"name":"app-kit-calendar","type":"registry:block","title":"Constructive App Kit Calendar","description":"Localized controlled month and agenda views with explicit timezones and connected range-query loading.","categories":[],"docs":"The host owns record opening and editing, while the connected wrapper loads only the visible range. Recurrence, resource scheduling, and drag rescheduling are intentionally outside V1.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/cn","@constructive/empty","@constructive/skeleton","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/calendar/calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/connected-calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/connected-calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/index.ts","type":"registry:lib","target":"src/blocks/app-kit/calendar/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["temporal","collection"],"intents":["schedule","browse-by-date","inspect"],"capabilities":["temporal","month","agenda","range-query","localization","timezone"],"events":["range-change","view-change","open-record"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-calendar"},{"name":"app-kit-workflow","type":"registry:block","title":"Constructive App Kit Workflow UI","description":"Controlled and connected action surfaces, confirmation and input dialogs, bulk execution, and a multi-step stepper.","categories":[],"docs":"This root composes application and server actions into accessible interaction surfaces; it is not a durable workflow engine. Validation, permission failures, cancellation, and partial errors remain explicit.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/alert-dialog","@constructive/app-kit-core","@constructive/button","@constructive/dialog","@constructive/dropdown-menu","@constructive/separator","@constructive/stepper","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/workflow/actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/connected-actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/connected-actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/stepper.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/stepper.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/index.ts","type":"registry:lib","target":"src/blocks/app-kit/workflow/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"composition","boundary":"client","provider":"app-kit","dataShapes":["record","collection","action-input"],"intents":["execute-action","confirm","collect-input","bulk-execute","guide-steps"],"capabilities":["action-button","action-menu","input-dialog","confirmation-dialog","bulk-execution","stepper"],"slots":["action-input","confirmation-body","step-content"],"events":["action-start","action-settled","step-change","cancel"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-workflow"},{"name":"app-kit-event-studio","type":"registry:block","title":"Constructive App Kit Event Studio","description":"An opt-in page-scale proof starter combining analytical, collection, board, calendar, relation, form, and action views.","categories":[],"docs":"Event Studio pairs with the supported b2b:storage blueprint recipe and demonstrates explicit analytical loaders, semantic board movement, localized range queries, searchable relations, permission-aware actions, and host-controlled URL state. Supply adapters generated from the final executable GraphQL schema.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react","zod"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-board","@constructive/app-kit-calendar","@constructive/app-kit-core","@constructive/app-kit-dashboard","@constructive/app-kit-data","@constructive/app-kit-workflow","@constructive/badge","@constructive/button","@constructive/dialog","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/event-studio/definitions.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/definitions.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/state.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/state.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/event-studio.tsx","type":"registry:component","target":"src/blocks/app-kit/event-studio/event-studio.tsx"},{"path":"registry/constructive/blocks/app-kit/event-studio/index.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"starter","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal","board"],"intents":["manage-events","analyze","schedule","publish","relate-people","configure-views"],"capabilities":["event-studio","dashboard","collections","record-detail","generated-form","relations","board","calendar","actions","url-state"],"slots":["record-opener","dashboard-layout-store","url-state-adapter"],"events":["view-change","open-record","move-session","publish-session","schedule-session","link-person"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-event-studio"}]}
+{"schemaVersion":1,"kind":"constructive.blocks-registry-catalog","sourceCommit":"c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b","aggregatePath":"apps/registry/registry.json","registryNamespace":"@constructive","itemCount":123,"items":[{"name":"constructive-theme","type":"registry:theme","title":"Constructive Theme","description":"Constructive design system theme — OKLCH colors, z-index layers, shadow utilities, and animations.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/constructive-theme"},{"name":"cn","type":"registry:lib","title":"cn utility","description":"Tailwind CSS class name merge utility using clsx and tailwind-merge.","categories":["utility"],"docs":"Import: `import { cn } from '@/lib/utils'`","dependencies":["clsx","tailwind-merge"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/cn"},{"name":"slot","type":"registry:lib","title":"Slot utility","description":"Polymorphic component utilities for asChild pattern.","categories":["utility"],"docs":"Import: `import { Slot } from '@/lib/slot'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/slot.tsx","type":"registry:lib","target":"@lib/slot.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/slot"},{"name":"use-controllable-state","type":"registry:hook","title":"useControllableState","description":"Hook for components with controlled/uncontrolled state.","categories":["hook"],"docs":"Import: `import { useControllableState } from '@/hooks/use-controllable-state'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-controllable-state.ts","type":"registry:hook","target":"@hooks/use-controllable-state.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-controllable-state"},{"name":"use-debounce","type":"registry:hook","title":"useDebounce","description":"Hook for debouncing values.","categories":["hook"],"docs":"Import: `import { useDebounce } from '@/hooks/use-debounce'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-debounce.ts","type":"registry:hook","target":"@hooks/use-debounce.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-debounce"},{"name":"use-mobile","type":"registry:hook","title":"useIsMobile","description":"Hook for detecting mobile viewport.","categories":["hook"],"docs":"Import: `import { useIsMobile } from '@/hooks/use-mobile'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-mobile.ts","type":"registry:hook","target":"@hooks/use-mobile.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-mobile"},{"name":"motion-config","type":"registry:lib","title":"Motion Config","description":"Animation presets and spring configurations for motion library.","categories":["animation"],"docs":"Import: `import { motionConfig } from '@/lib/motion/motion-config'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/motion/motion-config.ts","type":"registry:lib","target":"@lib/motion/motion-config.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-config"},{"name":"button","type":"registry:ui","title":"Button","description":"A button component with multiple variants and sizes.","categories":["primitive"],"docs":"Import: `import { Button } from '@/components/ui/button'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/button.tsx","type":"registry:ui","target":"@ui/button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/button"},{"name":"badge","type":"registry:ui","title":"Badge","description":"A badge component for status indicators and labels.","categories":["primitive"],"docs":"Import: `import { Badge } from '@/components/ui/badge'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/badge.tsx","type":"registry:ui","target":"@ui/badge.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/badge"},{"name":"label","type":"registry:ui","title":"Label","description":"A label component for form fields.","categories":["primitive"],"docs":"Import: `import { Label } from '@/components/ui/label'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/label.tsx","type":"registry:ui","target":"@ui/label.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/label"},{"name":"skeleton","type":"registry:ui","title":"Skeleton","description":"A skeleton loading placeholder component.","categories":["primitive"],"docs":"Import: `import { Skeleton } from '@/components/ui/skeleton'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/skeleton.tsx","type":"registry:ui","target":"@ui/skeleton.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/skeleton"},{"name":"card","type":"registry:ui","title":"Card","description":"A card component with header, content, and footer sections.","categories":["primitive"],"docs":"Import: `import { Card, CardHeader, CardContent, CardFooter } from '@/components/ui/card'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/card.tsx","type":"registry:ui","target":"@ui/card.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/card"},{"name":"chart","type":"registry:ui","title":"Chart","description":"Accessible TanStack Charts React adapter with a theme-adaptive semantic token configuration.","categories":["data-display"],"docs":"Import: `import { Chart, CONSTRUCTIVE_CHART_THEME } from '@/components/ui/chart'`","dependencies":["@tanstack/charts@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/chart.tsx","type":"registry:ui","target":"@ui/chart.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/chart"},{"name":"separator","type":"registry:ui","title":"Separator","description":"A visual separator for dividing content.","categories":["primitive"],"docs":"Import: `import { Separator } from '@/components/ui/separator'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/separator.tsx","type":"registry:ui","target":"@ui/separator.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/separator"},{"name":"alert","type":"registry:ui","title":"Alert","description":"An alert component for displaying messages.","categories":["primitive"],"docs":"Import: `import { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert.tsx","type":"registry:ui","target":"@ui/alert.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert"},{"name":"input","type":"registry:ui","title":"Input","description":"A text input component built on Base UI.","categories":["form"],"docs":"Import: `import { Input } from '@/components/ui/input'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input.tsx","type":"registry:ui","target":"@ui/input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input"},{"name":"textarea","type":"registry:ui","title":"Textarea","description":"A multiline text input component.","categories":["form"],"docs":"Import: `import { Textarea } from '@/components/ui/textarea'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/textarea.tsx","type":"registry:ui","target":"@ui/textarea.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/textarea"},{"name":"checkbox","type":"registry:ui","title":"Checkbox","description":"A checkbox component built on Base UI.","categories":["form"],"docs":"Import: `import { Checkbox } from '@/components/ui/checkbox'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox.tsx","type":"registry:ui","target":"@ui/checkbox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox"},{"name":"checkbox-group","type":"registry:ui","title":"Checkbox Group","description":"A group wrapper for multiple checkboxes.","categories":["form"],"docs":"Import: `import { CheckboxGroup } from '@/components/ui/checkbox-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/checkbox","@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox-group.tsx","type":"registry:ui","target":"@ui/checkbox-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox-group"},{"name":"radio-group","type":"registry:ui","title":"Radio Group","description":"A radio group component built on Base UI.","categories":["form"],"docs":"Import: `import { RadioGroup } from '@/components/ui/radio-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/radio-group.tsx","type":"registry:ui","target":"@ui/radio-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/radio-group"},{"name":"switch","type":"registry:ui","title":"Switch","description":"A toggle switch component built on Base UI.","categories":["form"],"docs":"Import: `import { Switch } from '@/components/ui/switch'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/switch.tsx","type":"registry:ui","target":"@ui/switch.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/switch"},{"name":"progress","type":"registry:ui","title":"Progress","description":"A progress bar component built on Base UI.","categories":["form"],"docs":"Import: `import { Progress } from '@/components/ui/progress'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progress.tsx","type":"registry:ui","target":"@ui/progress.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progress"},{"name":"avatar","type":"registry:ui","title":"Avatar","description":"An avatar component with image and fallback support.","categories":["data-display"],"docs":"Import: `import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/avatar.tsx","type":"registry:ui","target":"@ui/avatar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/avatar"},{"name":"portal","type":"registry:ui","title":"Portal","description":"Portal management for overlay components with z-index layering.","categories":["layout"],"docs":"Import: `import { Portal } from '@/components/ui/portal'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/portal.tsx","type":"registry:ui","target":"@ui/portal.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/portal"},{"name":"scroll-area","type":"registry:ui","title":"Scroll Area","description":"A custom scrollable area component built on Base UI.","categories":["layout"],"docs":"Import: `import { ScrollArea } from '@/components/ui/scroll-area'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/scroll-area.tsx","type":"registry:ui","target":"@ui/scroll-area.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/scroll-area"},{"name":"select","type":"registry:ui","title":"Select","description":"A select/dropdown component built on Base UI.","categories":["form"],"docs":"Import: `import { Select } from '@/components/ui/select'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/select.tsx","type":"registry:ui","target":"@ui/select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/select"},{"name":"tooltip","type":"registry:ui","title":"Tooltip","description":"A tooltip component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Tooltip } from '@/components/ui/tooltip'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tooltip.tsx","type":"registry:ui","target":"@ui/tooltip.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tooltip"},{"name":"popover","type":"registry:ui","title":"Popover","description":"A popover component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Popover } from '@/components/ui/popover'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/popover.tsx","type":"registry:ui","target":"@ui/popover.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/popover"},{"name":"dialog","type":"registry:ui","title":"Dialog","description":"A modal dialog component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Dialog } from '@/components/ui/dialog'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dialog.tsx","type":"registry:ui","target":"@ui/dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dialog"},{"name":"alert-dialog","type":"registry:ui","title":"Alert Dialog","description":"An alert dialog for confirmations built on Base UI.","categories":["overlay"],"docs":"Import: `import { AlertDialog } from '@/components/ui/alert-dialog'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert-dialog.tsx","type":"registry:ui","target":"@ui/alert-dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert-dialog"},{"name":"dropdown-menu","type":"registry:ui","title":"Dropdown Menu","description":"A dropdown menu component built on Base UI.","categories":["overlay"],"docs":"Import: `import { DropdownMenu } from '@/components/ui/dropdown-menu'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dropdown-menu.tsx","type":"registry:ui","target":"@ui/dropdown-menu.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dropdown-menu"},{"name":"sheet","type":"registry:ui","title":"Sheet","description":"A slide-out panel component with animations.","categories":["overlay"],"docs":"Import: `import { Sheet } from '@/components/ui/sheet'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/motion-config","@constructive/use-controllable-state","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sheet.tsx","type":"registry:ui","target":"@ui/sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sheet"},{"name":"drawer","type":"registry:ui","title":"Drawer","description":"A bottom drawer component using Vaul.","categories":["overlay"],"docs":"Import: `import { Drawer } from '@/components/ui/drawer'`","dependencies":["vaul"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/drawer.tsx","type":"registry:ui","target":"@ui/drawer.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/drawer"},{"name":"tabs","type":"registry:ui","title":"Tabs","description":"A tabs component built on Base UI.","categories":["layout"],"docs":"Import: `import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tabs.tsx","type":"registry:ui","target":"@ui/tabs.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tabs"},{"name":"collapsible","type":"registry:ui","title":"Collapsible","description":"A collapsible/accordion component built on Base UI.","categories":["layout"],"docs":"Import: `import { Collapsible } from '@/components/ui/collapsible'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/collapsible.tsx","type":"registry:ui","target":"@ui/collapsible.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/collapsible"},{"name":"resizable","type":"registry:ui","title":"Resizable","description":"Resizable panel layouts using react-resizable-panels.","categories":["layout"],"docs":"Import: `import { ResizablePanel, ResizablePanelGroup, ResizableHandle } from '@/components/ui/resizable'`","dependencies":["lucide-react","react-resizable-panels@^3.0.0"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/resizable.tsx","type":"registry:ui","target":"@ui/resizable.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/resizable"},{"name":"table","type":"registry:ui","title":"Table","description":"A table component with header, body, and cell primitives.","categories":["data-display"],"docs":"Import: `import { Table, TableHeader, TableBody, TableRow, TableCell } from '@/components/ui/table'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/table.tsx","type":"registry:ui","target":"@ui/table.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/table"},{"name":"pagination","type":"registry:ui","title":"Pagination","description":"A pagination component with navigation controls.","categories":["navigation"],"docs":"Import: `import { Pagination } from '@/components/ui/pagination'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/pagination.tsx","type":"registry:ui","target":"@ui/pagination.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pagination"},{"name":"breadcrumb","type":"registry:ui","title":"Breadcrumb","description":"A breadcrumb navigation component.","categories":["navigation"],"docs":"Import: `import { Breadcrumb } from '@/components/ui/breadcrumb'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/breadcrumb.tsx","type":"registry:ui","target":"@ui/breadcrumb.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/breadcrumb"},{"name":"form","type":"registry:ui","title":"Form","description":"Form utilities with react-hook-form integration.","categories":["form"],"docs":"Import: `import { Form, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'`","dependencies":["react-hook-form"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form.tsx","type":"registry:ui","target":"@ui/form.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form"},{"name":"form-control","type":"registry:ui","title":"Form Control","description":"A form control wrapper with label and error display.","categories":["form"],"docs":"Import: `import { FormControl } from '@/components/ui/form-control'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/label","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form-control.tsx","type":"registry:ui","target":"@ui/form-control.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-control"},{"name":"input-group","type":"registry:ui","title":"Input Group","description":"Input with addons and icons.","categories":["form"],"docs":"Import: `import { InputGroup } from '@/components/ui/input-group'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/input","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input-group.tsx","type":"registry:ui","target":"@ui/input-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input-group"},{"name":"autocomplete","type":"registry:ui","title":"Autocomplete","description":"An autocomplete component built on Base UI.","categories":["input"],"docs":"Import: `import { Autocomplete } from '@/components/ui/autocomplete'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/autocomplete.tsx","type":"registry:ui","target":"@ui/autocomplete.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/autocomplete"},{"name":"command","type":"registry:ui","title":"Command","description":"A command palette component.","categories":["overlay"],"docs":"Import: `import { Command } from '@/components/ui/command'`","dependencies":["cmdk","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/command.tsx","type":"registry:ui","target":"@ui/command.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/command"},{"name":"combobox","type":"registry:ui","title":"Combobox","description":"A combobox component with search built on Base UI.","categories":["input"],"docs":"Import: `import { Combobox } from '@/components/ui/combobox'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/combobox.tsx","type":"registry:ui","target":"@ui/combobox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/combobox"},{"name":"multi-select","type":"registry:ui","title":"Multi Select","description":"A multi-select component with tags.","categories":["input"],"docs":"Import: `import { MultiSelect } from '@/components/ui/multi-select'`","dependencies":["class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/popover","@constructive/separator","@constructive/input","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/multi-select.tsx","type":"registry:ui","target":"@ui/multi-select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/multi-select"},{"name":"tags","type":"registry:ui","title":"Tags","description":"A tags input component with autocomplete.","categories":["input"],"docs":"Import: `import { Tags } from '@/components/ui/tags'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/button","@constructive/command","@constructive/popover","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tags.tsx","type":"registry:ui","target":"@ui/tags.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tags"},{"name":"record-picker","type":"registry:ui","title":"Record Picker","description":"A record selection component with search and filtering.","categories":["input"],"docs":"Import: `import { RecordPicker } from '@/components/ui/record-picker'`","dependencies":["@remixicon/react","match-sorter"],"devDependencies":[],"registryDependencies":["@constructive/use-debounce","@constructive/checkbox","@constructive/input-group","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/record-picker.tsx","type":"registry:ui","target":"@ui/record-picker.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/record-picker"},{"name":"stepper","type":"registry:ui","title":"Stepper","description":"A stepper component for multi-step workflows.","categories":["navigation"],"docs":"Import: `import { Stepper } from '@/components/ui/stepper'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/stepper.tsx","type":"registry:ui","target":"@ui/stepper.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stepper"},{"name":"sidebar","type":"registry:ui","title":"Sidebar","description":"A responsive Base UI sidebar with off-canvas, icon-only, and fixed collapse modes.","categories":["navigation"],"docs":"Import: `import { Sidebar, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/use-mobile","@constructive/button","@constructive/input","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sidebar.tsx","type":"registry:ui","target":"@ui/sidebar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sidebar"},{"name":"calendar-rac","type":"registry:ui","title":"Calendar","description":"A calendar component using React Aria Components.","categories":["input"],"docs":"Import: `import { Calendar } from '@/components/ui/calendar-rac'`","dependencies":["@internationalized/date","react-aria-components"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/calendar-rac.tsx","type":"registry:ui","target":"@ui/calendar-rac.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/calendar-rac"},{"name":"json-input","type":"registry:ui","title":"JSON Input","description":"A JSON editor component using React Ace.","categories":["input"],"docs":"Import: `import { JsonInput } from '@/components/ui/json-input'`","dependencies":["lucide-react","react-ace","ace-builds"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/json-input.tsx","type":"registry:ui","target":"@ui/json-input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/json-input"},{"name":"sonner","type":"registry:ui","title":"Toaster","description":"Toast notifications using Sonner.","categories":["block"],"docs":"Import: `import { Toaster } from '@/components/ui/sonner'`","dependencies":["sonner"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sonner.tsx","type":"registry:ui","target":"@ui/sonner.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sonner"},{"name":"dock","type":"registry:ui","title":"Dock","description":"A macOS-style dock component.","categories":["navigation"],"docs":"Import: `import { Dock, DockIcon } from '@/components/ui/dock'`","dependencies":["class-variance-authority","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dock.tsx","type":"registry:ui","target":"@ui/dock.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dock"},{"name":"page-header","type":"registry:ui","title":"Page Header","description":"A simple page header component.","categories":["navigation"],"docs":"Import: `import { PageHeader } from '@/components/ui/page-header'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/page-header.tsx","type":"registry:ui","target":"@ui/page-header.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/page-header"},{"name":"flickering-grid","type":"registry:ui","title":"Flickering Grid","description":"An animated grid background effect.","categories":["effect"],"docs":"Import: `import { FlickeringGrid } from '@/components/ui/flickering-grid'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flickering-grid.tsx","type":"registry:ui","target":"@ui/flickering-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flickering-grid"},{"name":"flow-zoom-panel","type":"registry:ui","title":"Flow Zoom Panel","description":"Zoom in/out and fit-view controls for React Flow canvases.","categories":["layout"],"docs":"Import: `import { FlowZoomPanel } from '@/components/ui/flow-zoom-panel'`","dependencies":["@xyflow/react","@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flow-zoom-panel.tsx","type":"registry:ui","target":"@ui/flow-zoom-panel.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flow-zoom-panel"},{"name":"motion-grid","type":"registry:ui","title":"Motion Grid","description":"An animated grid with frame-based transitions.","categories":["effect"],"docs":"Import: `import { MotionGrid } from '@/components/ui/motion-grid'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/motion-grid.tsx","type":"registry:ui","target":"@ui/motion-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-grid"},{"name":"progressive-blur","type":"registry:ui","title":"Progressive Blur","description":"A gradient blur overlay effect.","categories":["effect"],"docs":"Import: `import { ProgressiveBlur } from '@/components/ui/progressive-blur'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur.tsx","type":"registry:ui","target":"@ui/progressive-blur.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur"},{"name":"progressive-blur-scroll-container","type":"registry:ui","title":"Progressive Blur Scroll Container","description":"A scroll container with blur effects at edges.","categories":["effect"],"docs":"Import: `import { ProgressiveBlurScrollContainer } from '@/components/ui/progressive-blur-scroll-container'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/progressive-blur","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur-scroll-container.tsx","type":"registry:ui","target":"@ui/progressive-blur-scroll-container.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur-scroll-container"},{"name":"responsive-diagram","type":"registry:ui","title":"Responsive Diagram","description":"A responsive diagram container with auto-scaling.","categories":["effect"],"docs":"Import: `import { ResponsiveDiagram } from '@/components/ui/responsive-diagram'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/responsive-diagram.tsx","type":"registry:ui","target":"@ui/responsive-diagram.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/responsive-diagram"},{"name":"unlink-button","type":"registry:ui","title":"Unlink Button","description":"A button for unlinking/removing records.","categories":["action"],"docs":"Import: `import { UnlinkButton } from '@/components/ui/unlink-button'`","dependencies":["@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/unlink-button.tsx","type":"registry:ui","target":"@ui/unlink-button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/unlink-button"},{"name":"org-chart","type":"registry:block","title":"Org Chart","description":"An interactive organizational chart with automatic hierarchy layout, zoom controls, node actions, and drag-to-reparent behavior.","categories":["block","application"],"docs":"Import: `import { OrgChart } from '@/components/ui/org-chart'`","dependencies":["@xyflow/react","@remixicon/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/avatar","@constructive/badge","@constructive/dropdown-menu","@constructive/flow-zoom-panel","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/org-chart/index.ts","type":"registry:component","target":"@ui/org-chart/index.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.tsx","type":"registry:component","target":"@ui/org-chart/org-chart.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-context.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-context.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-node.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-node.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-edge.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-edge.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-empty.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-empty.tsx"},{"path":"registry/constructive/blocks/org-chart/layout.ts","type":"registry:lib","target":"@ui/org-chart/layout.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart-utils.ts","type":"registry:lib","target":"@ui/org-chart/org-chart-utils.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.types.ts","type":"registry:lib","target":"@ui/org-chart/org-chart.types.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/org-chart"},{"name":"storage","type":"registry:block","title":"Storage Foundation","description":"Shared storage types, formatters, file icons, status badges, breadcrumbs, and object-toolbar primitives.","categories":["block","application"],"docs":"Install this transitively through `storage-browser`, or import its files directly from `@/components/ui/storage/*`.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/breadcrumb","@constructive/button","@constructive/dropdown-menu","@constructive/input-group","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/types.ts","type":"registry:lib","target":"@ui/storage/types.ts"},{"path":"registry/constructive/blocks/storage/utils.ts","type":"registry:lib","target":"@ui/storage/utils.ts"},{"path":"registry/constructive/blocks/storage/file-type-icon.tsx","type":"registry:component","target":"@ui/storage/file-type-icon.tsx"},{"path":"registry/constructive/blocks/storage/visibility-badge.tsx","type":"registry:component","target":"@ui/storage/visibility-badge.tsx"},{"path":"registry/constructive/blocks/storage/storage-breadcrumb.tsx","type":"registry:component","target":"@ui/storage/storage-breadcrumb.tsx"},{"path":"registry/constructive/blocks/storage/object-toolbar.tsx","type":"registry:component","target":"@ui/storage/object-toolbar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage"},{"name":"storage-bucket-rail","type":"registry:block","title":"Storage Bucket Rail","description":"A controlled, scrollable bucket list with visibility, object-count, selection, and create-bucket affordances.","categories":["block","application"],"docs":"Import: `import { BucketRail } from '@/components/ui/storage/bucket-rail'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/scroll-area","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-rail.tsx","type":"registry:component","target":"@ui/storage/bucket-rail.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-bucket-rail"},{"name":"storage-object-table","type":"registry:block","title":"Storage Object Table","description":"A controlled object table with sorting, selection, row actions, skeleton loading, and empty results.","categories":["block","application"],"docs":"Import: `import { ObjectTable } from '@/components/ui/storage/object-table'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/button","@constructive/checkbox","@constructive/dropdown-menu","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-table.tsx","type":"registry:component","target":"@ui/storage/object-table.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-object-table"},{"name":"storage-upload-dropzone","type":"registry:block","title":"Storage Upload Dropzone","description":"A drag-and-drop upload target with a browse action and an in-flight upload progress list.","categories":["block","application"],"docs":"Import: `import { UploadDropzone } from '@/components/ui/storage/upload-dropzone'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/button","@constructive/progress","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/upload-dropzone.tsx","type":"registry:component","target":"@ui/storage/upload-dropzone.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-upload-dropzone"},{"name":"storage-object-detail-sheet","type":"registry:block","title":"Storage Object Detail Sheet","description":"A controlled object-detail sheet with preview, metadata, rename, download, link, and confirmed delete actions.","categories":["block","application"],"docs":"Import: `import { ObjectDetailSheet } from '@/components/ui/storage/object-detail-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/alert-dialog","@constructive/button","@constructive/input","@constructive/separator","@constructive/skeleton","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-detail-sheet.tsx","type":"registry:component","target":"@ui/storage/object-detail-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-object-detail-sheet"},{"name":"storage-bucket-config-sheet","type":"registry:block","title":"Storage Bucket Config Sheet","description":"A create-or-edit bucket form with visibility and optional controls gated by the host schema.","categories":["block","application"],"docs":"Import: `import { BucketConfigSheet } from '@/components/ui/storage/bucket-config-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/input","@constructive/label","@constructive/radio-group","@constructive/switch","@constructive/textarea","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-config-sheet.tsx","type":"registry:component","target":"@ui/storage/bucket-config-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-bucket-config-sheet"},{"name":"storage-empty-state","type":"registry:block","title":"Storage Empty State","description":"Accessible empty and unavailable states for missing buckets, unprovisioned storage, empty buckets, and denied access.","categories":["block","application"],"docs":"Import: `import { StorageEmptyState } from '@/components/ui/storage/storage-empty-state'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/storage-empty-state.tsx","type":"registry:component","target":"@ui/storage/storage-empty-state.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-empty-state"},{"name":"storage-browser","type":"registry:block","title":"Storage Browser","description":"A complete controlled storage workspace with bucket navigation, object discovery, upload, configuration, detail, and empty states.","categories":["block","application"],"docs":"Import: `import { StorageBrowser } from '@/components/ui/storage'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/storage-bucket-rail","@constructive/storage-object-table","@constructive/storage-upload-dropzone","@constructive/storage-object-detail-sheet","@constructive/storage-bucket-config-sheet","@constructive/storage-empty-state","@constructive/cn","@constructive/separator","@constructive/button","@constructive/select","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/index.ts","type":"registry:component","target":"@ui/storage/index.ts"},{"path":"registry/constructive/blocks/storage/storage-browser.tsx","type":"registry:component","target":"@ui/storage/storage-browser.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-browser"},{"name":"stack","type":"registry:block","title":"Stack Navigation","description":"iOS-style navigation stack with gestures and animations.","categories":["block"],"docs":"Import: `import { Stack, StackCard } from '@/components/ui/stack'`","dependencies":["motion","@use-gesture/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/stack/index.ts","type":"registry:component","target":"@ui/stack/index.ts"},{"path":"registry/constructive/blocks/stack/stack-context.tsx","type":"registry:component","target":"@ui/stack/stack-context.tsx"},{"path":"registry/constructive/blocks/stack/stack-card.tsx","type":"registry:component","target":"@ui/stack/stack-card.tsx"},{"path":"registry/constructive/blocks/stack/stack-header.tsx","type":"registry:component","target":"@ui/stack/stack-header.tsx"},{"path":"registry/constructive/blocks/stack/stack-backdrop.tsx","type":"registry:component","target":"@ui/stack/stack-backdrop.tsx"},{"path":"registry/constructive/blocks/stack/stack-viewport.tsx","type":"registry:component","target":"@ui/stack/stack-viewport.tsx"},{"path":"registry/constructive/blocks/stack/deferred-card-content.tsx","type":"registry:component","target":"@ui/stack/deferred-card-content.tsx"},{"path":"registry/constructive/blocks/stack/stack-animations.ts","type":"registry:lib","target":"@ui/stack/stack-animations.ts"},{"path":"registry/constructive/blocks/stack/stack-utils.ts","type":"registry:lib","target":"@ui/stack/stack-utils.ts"},{"path":"registry/constructive/blocks/stack/stack.types.ts","type":"registry:lib","target":"@ui/stack/stack.types.ts"},{"path":"registry/constructive/blocks/stack/use-stack-gestures.ts","type":"registry:hook","target":"@ui/stack/use-stack-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-peek-gestures.ts","type":"registry:hook","target":"@ui/stack/use-peek-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-stack-responsive.ts","type":"registry:hook","target":"@ui/stack/use-stack-responsive.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stack"},{"name":"toast","type":"registry:block","title":"Toast Notifications","description":"Styled toast notification functions using Sonner.","categories":["block"],"docs":"Import: `import { toastSuccess, toastError, toastWarning, toastInfo } from '@/components/ui/toast'`","dependencies":["sonner","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/button","@constructive/dialog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/toast/index.ts","type":"registry:component","target":"@ui/toast/index.ts"},{"path":"registry/constructive/blocks/toast/toast-error.tsx","type":"registry:component","target":"@ui/toast/toast-error.tsx"},{"path":"registry/constructive/blocks/toast/toast-success.tsx","type":"registry:component","target":"@ui/toast/toast-success.tsx"},{"path":"registry/constructive/blocks/toast/toast-warning.tsx","type":"registry:component","target":"@ui/toast/toast-warning.tsx"},{"path":"registry/constructive/blocks/toast/toast-info.tsx","type":"registry:component","target":"@ui/toast/toast-info.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/toast"},{"name":"app-bar","type":"registry:block","title":"App Bar","description":"A sticky application header with a sidebar trigger, responsive breadcrumbs, and framework-neutral search and action slots.","categories":["block","navigation"],"docs":"Import: `import { AppBar } from '@/components/ui/app-bar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/breadcrumb","@constructive/separator","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-bar.tsx","type":"registry:component","target":"@ui/app-bar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-bar"},{"name":"app-shell","type":"registry:block","title":"App Shell","description":"A provider-neutral application shell with typed navigation, brand, account, breadcrumb, and link-render contracts.","categories":["block","navigation"],"docs":"Import: `import { AppShell } from '@/components/ui/app-shell'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/app-bar","@constructive/avatar","@constructive/collapsible","@constructive/dropdown-menu","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-shell.tsx","type":"registry:component","target":"@ui/app-shell.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-shell"},{"name":"field","type":"registry:ui","title":"Field","description":"Composable form layout with groups, fieldsets, legends, labels, descriptions, separators, and accessible errors.","categories":["form"],"docs":"Import: `import { Field, FieldGroup, FieldLabel, FieldDescription, FieldError } from '@/components/ui/field'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/field.tsx","type":"registry:ui","target":"@ui/field.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/field"},{"name":"empty","type":"registry:ui","title":"Empty","description":"A composable empty-state layout with media, title, description, and action content.","categories":["layout"],"docs":"Import: `import { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent } from '@/components/ui/empty'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/empty.tsx","type":"registry:ui","target":"@ui/empty.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/empty"},{"name":"ai","type":"registry:block","title":"AI Kit","description":"Presentational primitives for AI and agentic chat UIs: composer, messages, reasoning, tools, HITL approval, plan tracking, and streaming surfaces.","categories":["block","ai"],"docs":"Import PromptInput, Message, Tool, Reasoning, and PlanTracker from the installed ai directory under your configured shadcn ui alias.","dependencies":["lucide-react","sugar-high"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/avatar","@constructive/tooltip","@constructive/alert","@constructive/collapsible","@constructive/badge","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/ai/agent-loader.tsx","type":"registry:component","target":"@ui/ai/agent-loader.tsx"},{"path":"registry/constructive/blocks/ai/approval-card.tsx","type":"registry:component","target":"@ui/ai/approval-card.tsx"},{"path":"registry/constructive/blocks/ai/chat-container.tsx","type":"registry:component","target":"@ui/ai/chat-container.tsx"},{"path":"registry/constructive/blocks/ai/code-block.tsx","type":"registry:component","target":"@ui/ai/code-block.tsx"},{"path":"registry/constructive/blocks/ai/context-card.tsx","type":"registry:component","target":"@ui/ai/context-card.tsx"},{"path":"registry/constructive/blocks/ai/context-ring.tsx","type":"registry:component","target":"@ui/ai/context-ring.tsx"},{"path":"registry/constructive/blocks/ai/diff-table.tsx","type":"registry:component","target":"@ui/ai/diff-table.tsx"},{"path":"registry/constructive/blocks/ai/feedback-bar.tsx","type":"registry:component","target":"@ui/ai/feedback-bar.tsx"},{"path":"registry/constructive/blocks/ai/file-upload.tsx","type":"registry:component","target":"@ui/ai/file-upload.tsx"},{"path":"registry/constructive/blocks/ai/format-duration.ts","type":"registry:component","target":"@ui/ai/format-duration.ts"},{"path":"registry/constructive/blocks/ai/image.tsx","type":"registry:component","target":"@ui/ai/image.tsx"},{"path":"registry/constructive/blocks/ai/index.ts","type":"registry:component","target":"@ui/ai/index.ts"},{"path":"registry/constructive/blocks/ai/inline-diff.tsx","type":"registry:component","target":"@ui/ai/inline-diff.tsx"},{"path":"registry/constructive/blocks/ai/markdown.tsx","type":"registry:component","target":"@ui/ai/markdown.tsx"},{"path":"registry/constructive/blocks/ai/message.tsx","type":"registry:component","target":"@ui/ai/message.tsx"},{"path":"registry/constructive/blocks/ai/plan-tracker.tsx","type":"registry:component","target":"@ui/ai/plan-tracker.tsx"},{"path":"registry/constructive/blocks/ai/prompt-input.tsx","type":"registry:component","target":"@ui/ai/prompt-input.tsx"},{"path":"registry/constructive/blocks/ai/prompt-suggestion.tsx","type":"registry:component","target":"@ui/ai/prompt-suggestion.tsx"},{"path":"registry/constructive/blocks/ai/reasoning.tsx","type":"registry:component","target":"@ui/ai/reasoning.tsx"},{"path":"registry/constructive/blocks/ai/recommendation-card.tsx","type":"registry:component","target":"@ui/ai/recommendation-card.tsx"},{"path":"registry/constructive/blocks/ai/response-stream.tsx","type":"registry:component","target":"@ui/ai/response-stream.tsx"},{"path":"registry/constructive/blocks/ai/scroll-button.tsx","type":"registry:component","target":"@ui/ai/scroll-button.tsx"},{"path":"registry/constructive/blocks/ai/source.tsx","type":"registry:component","target":"@ui/ai/source.tsx"},{"path":"registry/constructive/blocks/ai/steps.tsx","type":"registry:component","target":"@ui/ai/steps.tsx"},{"path":"registry/constructive/blocks/ai/streaming-text.tsx","type":"registry:component","target":"@ui/ai/streaming-text.tsx"},{"path":"registry/constructive/blocks/ai/system-message.tsx","type":"registry:component","target":"@ui/ai/system-message.tsx"},{"path":"registry/constructive/blocks/ai/task-row.tsx","type":"registry:component","target":"@ui/ai/task-row.tsx"},{"path":"registry/constructive/blocks/ai/text-shimmer.tsx","type":"registry:component","target":"@ui/ai/text-shimmer.tsx"},{"path":"registry/constructive/blocks/ai/thinking-trace.tsx","type":"registry:component","target":"@ui/ai/thinking-trace.tsx"},{"path":"registry/constructive/blocks/ai/tool.tsx","type":"registry:component","target":"@ui/ai/tool.tsx"},{"path":"registry/constructive/blocks/ai/types.ts","type":"registry:component","target":"@ui/ai/types.ts"},{"path":"registry/constructive/blocks/ai/use-throttled-text.ts","type":"registry:component","target":"@ui/ai/use-throttled-text.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/ai"},{"name":"form-kit","type":"registry:ui","title":"Form Kit","description":"All form-related components: input, textarea, checkbox, radio, select, switch, progress, form controls.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/input","@constructive/textarea","@constructive/checkbox","@constructive/checkbox-group","@constructive/radio-group","@constructive/switch","@constructive/select","@constructive/progress","@constructive/form","@constructive/form-control","@constructive/input-group","@constructive/field","@constructive/label","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-kit"},{"name":"overlay-kit","type":"registry:ui","title":"Overlay Kit","description":"All overlay components: dialog, sheet, drawer, popover, tooltip, dropdown menu, alert dialog.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/dialog","@constructive/sheet","@constructive/drawer","@constructive/popover","@constructive/tooltip","@constructive/dropdown-menu","@constructive/alert-dialog","@constructive/command","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/overlay-kit"},{"name":"layout-kit","type":"registry:ui","title":"Layout Kit","description":"Layout and navigation components: tabs, sidebar, collapsible, resizable panels, scroll area, breadcrumb, pagination.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/tabs","@constructive/sidebar","@constructive/collapsible","@constructive/resizable","@constructive/scroll-area","@constructive/breadcrumb","@constructive/pagination","@constructive/separator","@constructive/empty","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/layout-kit"},{"name":"sheets","type":"registry:block","title":"Sheets","description":"A metadata-driven, spreadsheet-grade CRUD grid with accessible DOM cells and adapter-owned data access.","categories":["blocks","data"],"docs":"Install the complete source-owned grid with `pnpm dlx shadcn@latest add @constructive/sheets`, then import `Sheets`, `SheetsProvider`, and the adapter contracts from `@/components/ui/sheets`. The copied source depends on `@constructive-io/data` for the current `_meta` contract and runtime GraphQL operations; your host remains responsible for its endpoint, session, and RLS-aware execution boundary.","dependencies":["@constructive-io/data@^0.5.0","@internationalized/date","@remixicon/react","@tanstack/react-form","@tanstack/react-query","@tanstack/react-table@9.0.0-beta.58","@tanstack/react-virtual","@types/leaflet","clsx","graphql","inflekt","leaflet","lucide-react","motion","react-aria-components","react-leaflet","tailwind-merge","zod","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/calendar-rac","@constructive/card","@constructive/checkbox","@constructive/collapsible","@constructive/dropdown-menu","@constructive/form-control","@constructive/input","@constructive/input-group","@constructive/label","@constructive/pagination","@constructive/popover","@constructive/progressive-blur","@constructive/scroll-area","@constructive/select","@constructive/skeleton","@constructive/tabs","@constructive/textarea","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/postgraphile-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/use-sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/advanced.ts","type":"registry:lib","target":"@ui/sheets/advanced.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-execute.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-execute.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx","type":"registry:component","target":"@ui/sheets/auth/auth-gate.tsx"},{"path":"registry/constructive/blocks/sheets/auth/auth-types.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-types.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/index.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-forgot-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-login.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-register.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-reset-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/index.ts","type":"registry:lib","target":"@ui/sheets/auth/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-error-alert.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-loading-button.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-header.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-layout.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/forgot-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/form-field.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/login-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/password-strength.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/register-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/reset-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/auth-errors.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/schemas.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/token-store.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/validators.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/validators.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts","type":"registry:lib","target":"@ui/sheets/cell-model/badge-tones.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-props.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-slots.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/create-sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/badges.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/boolean.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/datetime.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/geometry.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/image.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/interval.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/number.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/relation.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/text.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/types.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/uri.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts","type":"registry:lib","target":"@ui/sheets/cell-model/image-cache.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/badges-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/boolean-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/datetime-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/draft-action-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/geometry-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/image-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/interval-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/loading-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/number-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/relation-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/text-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/uri-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry-defaults.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-groups.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-resolver.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts","type":"registry:lib","target":"@ui/sheets/cell-types/define-cell-type.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts","type":"registry:lib","target":"@ui/sheets/cell-types/type-mapping.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/types.ts","type":"registry:lib","target":"@ui/sheets/cell-types/types.ts"},{"path":"registry/constructive/blocks/sheets/commands/context.ts","type":"registry:lib","target":"@ui/sheets/commands/context.ts"},{"path":"registry/constructive/blocks/sheets/commands/dispatch.ts","type":"registry:lib","target":"@ui/sheets/commands/dispatch.ts"},{"path":"registry/constructive/blocks/sheets/commands/index.ts","type":"registry:lib","target":"@ui/sheets/commands/index.ts"},{"path":"registry/constructive/blocks/sheets/commands/keybinding.ts","type":"registry:lib","target":"@ui/sheets/commands/keybinding.ts"},{"path":"registry/constructive/blocks/sheets/commands/keymap.ts","type":"registry:lib","target":"@ui/sheets/commands/keymap.ts"},{"path":"registry/constructive/blocks/sheets/commands/registry.ts","type":"registry:lib","target":"@ui/sheets/commands/registry.ts"},{"path":"registry/constructive/blocks/sheets/commands/types.ts","type":"registry:lib","target":"@ui/sheets/commands/types.ts"},{"path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts","type":"registry:lib","target":"@ui/sheets/config/sheets-concurrency.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-context.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-context.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-execute.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-execute.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx","type":"registry:component","target":"@ui/sheets/context/sheets-provider.tsx"},{"path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-upload-presigned.ts"},{"path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts","type":"registry:lib","target":"@ui/sheets/forms/form-spec-builder.ts"},{"path":"registry/constructive/blocks/sheets/forms/index.ts","type":"registry:lib","target":"@ui/sheets/forms/index.ts"},{"path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts","type":"registry:lib","target":"@ui/sheets/forms/metadata-hash.ts"},{"path":"registry/constructive/blocks/sheets/forms/mutations.ts","type":"registry:lib","target":"@ui/sheets/forms/mutations.ts"},{"path":"registry/constructive/blocks/sheets/forms/types.ts","type":"registry:lib","target":"@ui/sheets/forms/types.ts"},{"path":"registry/constructive/blocks/sheets/forms/zod-schema.ts","type":"registry:lib","target":"@ui/sheets/forms/zod-schema.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/edit-intent.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-props.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/number-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/text-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/inline-cell-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/sheets-cell-host.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/use-sheets-content.ts"},{"path":"registry/constructive/blocks/sheets/grid/cell-routing.ts","type":"registry:lib","target":"@ui/sheets/grid/cell-routing.ts"},{"path":"registry/constructive/blocks/sheets/grid/draft-types.ts","type":"registry:lib","target":"@ui/sheets/grid/draft-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/editor-focus-trap.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts","type":"registry:lib","target":"@ui/sheets/grid/editors/overlay-presets.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/dock-status-bar.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/feedback-context.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/feedback-reducer.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/floating-status.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/index.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/index.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-state.tsx"},{"path":"registry/constructive/blocks/sheets/grid/filter-operators.ts","type":"registry:lib","target":"@ui/sheets/grid/filter-operators.ts"},{"path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts","type":"registry:lib","target":"@ui/sheets/grid/grid-cell-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-batch-commit.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-cell-editing.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-rows.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-submission.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-filter-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-operations.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-selection.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-state.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-load-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-paginate-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-undo-redo.ts"},{"path":"registry/constructive/blocks/sheets/grid/row-model.ts","type":"registry:lib","target":"@ui/sheets/grid/row-model.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.constants.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.context-menu.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.controls.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.formatters.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.pagination.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.table-selector.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.theme.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.types.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.types.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.utils.ts"},{"path":"registry/constructive/blocks/sheets/grid/use-sheets.ts","type":"registry:lib","target":"@ui/sheets/grid/use-sheets.ts"},{"path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/orderby-enum-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/query-keys.ts","type":"registry:lib","target":"@ui/sheets/hooks/query-keys.ts"},{"path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/relation-field-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-columns.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-metadata-cache.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-infinite-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-meta.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table-cursor.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-upload.ts"},{"path":"registry/constructive/blocks/sheets/index.ts","type":"registry:lib","target":"@ui/sheets/index.ts"},{"path":"registry/constructive/blocks/sheets/row-identity.ts","type":"registry:lib","target":"@ui/sheets/row-identity.ts"},{"path":"registry/constructive/blocks/sheets/selection/cell-extract.ts","type":"registry:lib","target":"@ui/sheets/selection/cell-extract.ts"},{"path":"registry/constructive/blocks/sheets/selection/fill.ts","type":"registry:lib","target":"@ui/sheets/selection/fill.ts"},{"path":"registry/constructive/blocks/sheets/selection/range-set.ts","type":"registry:lib","target":"@ui/sheets/selection/range-set.ts"},{"path":"registry/constructive/blocks/sheets/selection/selection-model.ts","type":"registry:lib","target":"@ui/sheets/selection/selection-model.ts"},{"path":"registry/constructive/blocks/sheets/selection/tsv.ts","type":"registry:lib","target":"@ui/sheets/selection/tsv.ts"},{"path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts","type":"registry:lib","target":"@ui/sheets/store/draft-rows-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts","type":"registry:lib","target":"@ui/sheets/store/relation-info-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/sheets-store.ts","type":"registry:lib","target":"@ui/sheets/store/sheets-store.ts"},{"path":"registry/constructive/blocks/sheets/table/features.ts","type":"registry:lib","target":"@ui/sheets/table/features.ts"},{"path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx","type":"registry:component","target":"@ui/sheets/table/grid-viewport.tsx"},{"path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts","type":"registry:lib","target":"@ui/sheets/table/use-sheets-table-instance.ts"},{"path":"registry/constructive/blocks/sheets/utils/cn.ts","type":"registry:lib","target":"@ui/sheets/utils/cn.ts"},{"path":"registry/constructive/blocks/sheets/utils/file.utils.ts","type":"registry:lib","target":"@ui/sheets/utils/file.utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx","type":"registry:component","target":"@ui/sheets/utils/image-with-fallback.tsx"},{"path":"registry/constructive/blocks/sheets/utils/map-picker.tsx","type":"registry:component","target":"@ui/sheets/utils/map-picker.tsx"},{"path":"registry/constructive/blocks/sheets/utils/motion-config.ts","type":"registry:lib","target":"@ui/sheets/utils/motion-config.ts"},{"path":"registry/constructive/blocks/sheets/utils/relation-utils.ts","type":"registry:lib","target":"@ui/sheets/utils/relation-utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-i18n.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-logger.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts","type":"registry:lib","target":"@ui/sheets/utils/use-color-scheme.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-image-status.ts","type":"registry:lib","target":"@ui/sheets/utils/use-image-status.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts","type":"registry:lib","target":"@ui/sheets/utils/use-resize-observer.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sheets"},{"name":"schema-builder","type":"registry:block","title":"Schema Builder","description":"An adapter-driven PostgreSQL schema editor for tables, fields, relationships, indexes, and RLS policies.","categories":["blocks","schema"],"docs":"Install the complete source-owned editor with `pnpm dlx shadcn@latest add @constructive/schema-builder`, then import `SchemaBuilder` and `defineSchemaBuilderAdapter` from `@/components/schema-builder`. The host supplies its generated-SDK adapter, control-plane scope, navigation, preferences, and invalidation behavior; the block never owns backend endpoints or credentials.","dependencies":["@constructive-io/data@^0.5.0","@dnd-kit/core","@dnd-kit/utilities","@fluentui/react-context-selector","@pgsql/types@17.6.2","@remixicon/react","@tanstack/react-query","clsx","lucide-react","motion","node-type-registry@^1.11.0","pg-ast@2.11.3","tailwind-merge","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/button","@constructive/checkbox","@constructive/collapsible","@constructive/combobox","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/input-group","@constructive/label","@constructive/multi-select","@constructive/progressive-blur","@constructive/responsive-diagram","@constructive/scroll-area","@constructive/select","@constructive/stack","@constructive/stepper","@constructive/switch","@constructive/tabs","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/schema-builder/compat/admin-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/admin-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/auth-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/auth-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/block-config.tsx","type":"registry:component","target":"@components/schema-builder/compat/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/compat/generated-types.ts","type":"registry:lib","target":"@components/schema-builder/compat/generated-types.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/modules-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/modules-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/relation-provisions.ts","type":"registry:lib","target":"@components/schema-builder/compat/relation-provisions.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/schema-builder-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/schema-builder-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/components/schema-builder.tsx","type":"registry:component","target":"@components/schema-builder/components/schema-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/context.tsx","type":"registry:component","target":"@components/schema-builder/core/context.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/index.ts","type":"registry:lib","target":"@components/schema-builder/core/index.ts"},{"path":"registry/constructive/blocks/schema-builder/core/mutation.ts","type":"registry:lib","target":"@components/schema-builder/core/mutation.ts"},{"path":"registry/constructive/blocks/schema-builder/core/query.ts","type":"registry:lib","target":"@components/schema-builder/core/query.ts"},{"path":"registry/constructive/blocks/schema-builder/core/store.ts","type":"registry:lib","target":"@components/schema-builder/core/store.ts"},{"path":"registry/constructive/blocks/schema-builder/fields/index.ts","type":"registry:lib","target":"@components/schema-builder/fields/index.ts"},{"path":"registry/constructive/blocks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/lib/utils.ts","type":"registry:lib","target":"@components/schema-builder/lib/utils.ts"},{"path":"registry/constructive/blocks/schema-builder/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/app-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/app-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/databases/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/databases/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/context/block-config.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/context/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/app-store.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/app-store.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/preferences-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/preferences-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/schema-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/schema-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/client-only.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/client-only.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schema-builder-header.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schema-builder-header.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx"},{"path":"registry/constructive/blocks/schema-builder/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/types.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/schema-builder"},{"name":"billing-contracts","type":"registry:lib","title":"Billing Contracts","description":"Provider-neutral billing DTOs, arbitrary-precision formatters, open-status presentation maps, and explicit resource states shared by every customer billing block.","categories":["blocks","billing"],"docs":"## Usage\n\nInstall this item when building a custom billing composition. It defines the shared resource states, account references, money values, allowances, plans, subscriptions, usage, credits, activity, messages, and formatting options used by the billing blocks.\n\n```ts\nimport type { BillingPlan, BillingResource } from '@/blocks/billing/billing-contracts/billing-contracts';\n\nconst plans: BillingResource = {\n status: 'ready',\n quality: 'authoritative',\n asOf: '2026-07-20T12:00:00.000Z',\n data: [{\n id: 'growth',\n name: 'Growth',\n prices: [{\n kind: 'fixed',\n id: 'growth-monthly',\n interval: 'month',\n money: { amountMinor: '4900', currency: 'USD' }\n }]\n }]\n};\n```\n\nKeep quantities, limits, deltas, and minor-unit money as decimal strings so large values retain their precision. Supply an explicit locale and time zone to the formatters, keep each record's currency, and use the explicit contact-sales, unlimited, uninitialized, and unknown variants when they apply.","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts","type":"registry:lib","target":"src/blocks/billing/billing-contracts/billing-contracts.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-contracts"},{"name":"billing-ui","type":"registry:lib","title":"Billing UI Helpers","description":"Shared formatting and presentation helpers used by the customer billing blocks.","categories":["blocks","billing"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/billing-contracts","@constructive/cn"],"files":[{"path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx","type":"registry:lib","target":"src/blocks/billing/billing-ui/billing-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-ui"},{"name":"billing-pricing-table","type":"registry:block","title":"Billing Pricing Table","description":"Responsive plan comparison with controlled interval selection, fixed and contact-sales pricing, current and featured states, and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a plan resource, account context, formatting options, a controlled billing interval, and the actions you want to show.\n\n```tsx\nimport { BillingPricingTable } from '@/blocks/billing/billing-pricing-table/billing-pricing-table';\n\n openPlanSelection({ planId, priceId, account })}\n onContactSales={({ planId, account }) => openSalesRequest({ planId, account })}\n/>\n```\n\nFixed prices use minor-unit decimal strings and the currency on each record. Use `BillingPrice.kind = 'contact_sales'` for custom pricing. Missing callbacks remove their actions, rejected promises appear next to the action, and resolved promises leave the selected plan state under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-pricing-table"},{"name":"billing-subscription-card","type":"registry:block","title":"Billing Subscription Card","description":"Current-plan summary with independent subscription, provider, and payment status plus exact lifecycle dates and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass the current plan together with any payment and provider states you want to show. Add only the actions that make sense in your billing flow.\n\n```tsx\nimport { BillingSubscriptionCard } from '@/blocks/billing/billing-subscription-card/billing-subscription-card';\n\n openSubscriptionSettings(subscriptionId, account)}\n/>\n```\n\nOnly `renewsAt` is labelled “Renews”; `endsAt` is always labelled “Ends.” Status strings are open, unknown values render neutrally, and missing callbacks hide their controls.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-subscription-card"},{"name":"billing-entitlements-list","type":"registry:block","title":"Billing Entitlements List","description":"Structured display of plan feature flags, caps, discrete quotas, meter allowances, and neutral unknown values.","categories":["blocks","billing"],"docs":"## Usage\n\nPass each entitlement with a semantic kind so features, caps, quotas, and metered allowances keep their distinct meaning.\n\n```tsx\nimport { BillingEntitlementsList } from '@/blocks/billing/billing-entitlements-list/billing-entitlements-list';\n\n\n```\n\nUse explicit `unlimited`, `uninitialized`, and `unknown` variants. Unknown values stay visible with a neutral presentation, and message overrides let you adapt the labels without changing the data model.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"},{"path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-entitlements-list"},{"name":"billing-usage-overview","type":"registry:block","title":"Billing Usage Overview","description":"Current-period usage with quota, boolean, unlimited, uninitialized, exhausted, overage, category-pool, and universal-pool states.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a current-period usage snapshot and nest child meters beneath category or universal pools when credits are shared.\n\n```tsx\nimport { BillingUsageOverview } from '@/blocks/billing/billing-usage-overview/billing-usage-overview';\n\n openUsageHistory(meterSlug)}\n onBuyCredits={(meterSlug) => openCreditPurchase(meterSlug)}\n/>\n```\n\nCategory and universal pools stay nested so their application order remains clear. Progress caps visually at 100 percent while text and accessible values preserve the actual used, allowance, and overage values. Actions disappear when their callbacks are absent.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-overview"},{"name":"billing-credits-card","type":"registry:block","title":"Billing Credits Card","description":"Available credits grouped by compatible meter and unit with permanent, period, rollover, expiring, and unknown lot semantics.","categories":["blocks","billing"],"docs":"## Usage\n\nPass available balances and their credit lots while keeping each meter and unit independent.\n\n```tsx\nimport { BillingCreditsCard } from '@/blocks/billing/billing-credits-card/billing-credits-card';\n\n\n```\n\nKeep incompatible meters and units in separate balance groups. Credit lots show the current grant makeup, while `billing-activity-table` provides a chronological view of grants, usage, adjustments, rollover, and expiration.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-credits-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-credits-card"},{"name":"billing-usage-history","type":"registry:block","title":"Billing Usage History","description":"Accessible, table-first period history with controlled meter, period, and pagination filters plus explicit quality labels.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a page of usage periods and control the meter, period, and pagination values when you provide their callbacks.\n\n```tsx\nimport { BillingUsageHistory } from '@/blocks/billing/billing-usage-history/billing-usage-history';\n\n\n```\n\nCredits and overage columns appear only when their values are marked as confirmed. Quality labels remain visible on each period, and the table keeps pagination and filter changes under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-history/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-history"},{"name":"billing-activity-table","type":"registry:block","title":"Billing Activity Table","description":"Paginated ledger activity with controlled filters, semantic class/type presentation, and a titled metadata detail sheet.","categories":["blocks","billing"],"docs":"## Usage\n\nPass ledger class and entry type with each activity entry so labels and badge tones describe the event itself.\n\n```tsx\nimport { BillingActivityTable } from '@/blocks/billing/billing-activity-table/billing-activity-table';\n\n\n```\n\nA positive delta can represent consumption and a negative delta can represent release or reset, so presentation derives from `ledgerClass` and `entryType` rather than the sign. Unknown values remain neutral, and JSON-safe metadata opens in a titled detail sheet.","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-activity-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-activity-table"},{"name":"billing-settings-page","type":"registry:block","title":"Billing Settings Page","description":"Router-neutral Overview, Usage, and Plans composition that keeps subscription, usage, credits, entitlements, history, activity, and pricing failures isolated.","categories":["blocks","billing"],"docs":"## Usage\n\nPass one account together with independent resources and actions. Use `section` and `onSectionChange` to synchronize navigation, or `defaultSection` for local state. The page renders its own heading by default; set `showHeader={false}` when the surrounding document already provides it.\n\n```tsx\nimport { BillingSettingsPage } from '@/blocks/billing/billing-settings-page/billing-settings-page';\n\n\n```\n\nEach resource renders its own loading, empty, error, ready, and quality state, so one unavailable section never replaces the whole page. Controlled filters and actions are forwarded to their matching leaf blocks.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-activity-table","@constructive/billing-contracts","@constructive/billing-credits-card","@constructive/billing-entitlements-list","@constructive/billing-pricing-table","@constructive/billing-subscription-card","@constructive/billing-usage-history","@constructive/billing-usage-overview","@constructive/cn","@constructive/separator","@constructive/tabs","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx","type":"registry:component","target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx"},{"path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-settings-page/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-settings-page"},{"name":"command-palette","type":"registry:block","title":"Command Palette","description":"Framework-neutral command discovery with page-scoped registration, structured shortcuts, multi-step flows, and cancellable background tasks.","categories":["blocks","application-shell"],"docs":"## Usage\n\nCreate one registry for the application, adapt navigation at the host boundary, and render the palette near the root layout. Pages can register commands while mounted with `usePageCommands`.\n\n```tsx\nimport { createCommandRegistry, kbd } from '@constructive-io/command-palette';\nimport { CommandPalette } from '@/blocks/command-palette/command-palette';\n\nconst registry = createCommandRegistry({\n groups: [{ id: 'navigation', label: 'Navigation', priority: 1 }],\n commands: [{\n id: 'settings',\n label: 'Open settings',\n type: 'navigation',\n group: 'navigation',\n href: '/settings',\n shortcut: kbd(',', 'mod')\n }]\n});\n\n router.push(href)} />;\n```\n\nThe installed block owns presentation and keyboard interaction. The headless package owns command registration, execution, multi-step state, and background-task lifecycle. Route authorization, action permissions, errors, and business workflows remain the host application's responsibility.","dependencies":["@constructive-io/command-palette@^0.4.0","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/button","@constructive/cn","@constructive/command","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/command-palette/command-palette.tsx","type":"registry:component","target":"src/blocks/command-palette/command-palette.tsx"},{"path":"registry/constructive/blocks/command-palette/kbd-shortcut.tsx","type":"registry:component","target":"src/blocks/command-palette/kbd-shortcut.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/multi-step-view.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/multi-step-view.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/step-indicator.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/step-indicator.tsx"},{"path":"registry/constructive/blocks/command-palette/background/background-task-stack.tsx","type":"registry:component","target":"src/blocks/command-palette/background/background-task-stack.tsx"},{"path":"registry/constructive/blocks/command-palette/background/inline-task-bar.tsx","type":"registry:component","target":"src/blocks/command-palette/background/inline-task-bar.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-card.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-card.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-icons.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-icons.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/command-palette"},{"name":"pack-foundation","type":"registry:lib","title":"Feature Pack Foundation","description":"Provider-neutral resource, action-policy, error, loading, empty, and status contracts shared by Constructive feature packs.","categories":[],"docs":null,"dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/empty","@constructive/skeleton"],"files":[{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx","type":"registry:component","target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pack-foundation"},{"name":"console-runtime","type":"registry:lib","title":"Console Runtime","description":"Endpoint, session, transport, cache partitioning, and adapter contracts for identity-scoped Constructive consoles.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/console-runtime/capabilities.ts","type":"registry:lib","target":"src/blocks/console-runtime/capabilities.ts"},{"path":"registry/constructive/blocks/console-runtime/endpoints.ts","type":"registry:lib","target":"src/blocks/console-runtime/endpoints.ts"},{"path":"registry/constructive/blocks/console-runtime/feature-adapter.ts","type":"registry:lib","target":"src/blocks/console-runtime/feature-adapter.ts"},{"path":"registry/constructive/blocks/console-runtime/index.ts","type":"registry:lib","target":"src/blocks/console-runtime/index.ts"},{"path":"registry/constructive/blocks/console-runtime/session.ts","type":"registry:lib","target":"src/blocks/console-runtime/session.ts"},{"path":"registry/constructive/blocks/console-runtime/standalone-session.ts","type":"registry:lib","target":"src/blocks/console-runtime/standalone-session.ts"},{"path":"registry/constructive/blocks/console-runtime/transport.ts","type":"registry:lib","target":"src/blocks/console-runtime/transport.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-runtime"},{"name":"console-feature-catalog","type":"registry:lib","title":"Console Feature Catalog","description":"Validated feature-pack capability manifests and stable backend preset profiles.","categories":[],"docs":null,"dependencies":["zod"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime"],"files":[{"path":"registry/constructive/feature-packs/capabilities.ts","type":"registry:lib","target":"src/feature-packs/capabilities.ts"},{"path":"registry/constructive/feature-packs/catalog.ts","type":"registry:lib","target":"src/feature-packs/catalog.ts"},{"path":"registry/constructive/feature-packs/catalog-validation.ts","type":"registry:lib","target":"src/feature-packs/catalog-validation.ts"},{"path":"registry/constructive/feature-packs/index.ts","type":"registry:lib","target":"src/feature-packs/index.ts"},{"path":"registry/constructive/feature-packs/manifest.ts","type":"registry:lib","target":"src/feature-packs/manifest.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-feature-catalog"},{"name":"console-kit-core","type":"registry:block","title":"Constructive Console Kit Core","description":"The leaf-independent Console Kit shell, runtime, discovery, and single modular Zustand store.","categories":[],"docs":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":["@constructive-io/data@^0.5.0","@tanstack/react-query","graphql","lucide-react","zustand"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime","@constructive/console-feature-catalog","@constructive/alert","@constructive/app-bar","@constructive/app-shell","@constructive/badge","@constructive/button","@constructive/cn","@constructive/pack-foundation","@constructive/popover","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/feature-module.ts","type":"registry:lib","target":"src/blocks/console-kit/feature-module.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-routes.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-routes.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-contracts.ts"},{"path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx","type":"registry:component","target":"src/blocks/console-kit/console-connection-menu.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-runtime.tsx"},{"path":"registry/constructive/blocks/console-kit/use-latest-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/use-latest-callback.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-core.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-core.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-capabilities.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-callback.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-graphql.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts"},{"path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/adapter-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/context-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/context-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/endpoint-capability-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/navigation-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/runtime-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/session-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/session-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx","type":"registry:component","target":"src/blocks/console-kit/store/console-kit-store.tsx"},{"path":"registry/constructive/blocks/console-kit/store/index.ts","type":"registry:lib","target":"src/blocks/console-kit/store/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-core"},{"name":"feature-pack-data","type":"registry:block","title":"Data Feature Pack","description":"A current-_meta-only application data explorer with application-table filtering and spreadsheet CRUD.","categories":[],"docs":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":["@constructive-io/data@^0.5.0","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/sheets","@constructive/alert","@constructive/button","@constructive/card","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/data/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/data.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-data"},{"name":"console-module-data","type":"registry:block","title":"Data Console Module","description":"Console Kit navigation, capability discovery, and tenant runtime binding for the Data feature pack.","categories":[],"docs":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-data","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/sheets","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-console-module.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-data"},{"name":"feature-pack-auth","type":"registry:block","title":"Authentication Feature Pack","description":"Provider-neutral public authentication flows and personal account/session management.","categories":[],"docs":"`feature-pack-auth` installed a provider-neutral view and `.constructive/feature-packs/auth.json`. Import from `@/blocks/feature-packs/auth/auth-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-auth` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Unsupported policy grants or callbacks stay absent, provider failures remain explicit, and callback credentials never enter the view.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/field","@constructive/input","@constructive/input-group","@constructive/separator","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-account-view.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-password-policy.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/auth.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-auth"},{"name":"console-module-auth","type":"registry:block","title":"Authentication Console Module","description":"Console Kit session flow, capability discovery, and Constructive adapter for the Authentication feature pack.","categories":[],"docs":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-auth","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/auth-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-auth"},{"name":"feature-pack-users","type":"registry:block","title":"App access Feature Pack","description":"App access governance with member lifecycle controls, invitations, access profiles, direct and effective permissions, and new-member defaults.","categories":[],"docs":"`feature-pack-users` installed a provider-neutral view and `.constructive/feature-packs/users.json`. Import from `@/blocks/feature-packs/users/users-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-users` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources or callbacks stay unavailable, while row policy, PostgreSQL privileges, RLS, and final-owner constraints decide mutations.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/input-group","@constructive/select","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/users/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/users.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-users"},{"name":"console-module-users","type":"registry:block","title":"App access Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the App access feature pack.","categories":[],"docs":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-users","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/users-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-users"},{"name":"feature-pack-organizations","type":"registry:block","title":"Organizations Feature Pack","description":"Complete tenant administration for selection, member governance, invitations, profiles, permissions, defaults, hierarchy, settings, principals, and API keys.","categories":[],"docs":"`feature-pack-organizations` installed a provider-neutral view and `.constructive/feature-packs/organizations.json`. Import from `@/blocks/feature-packs/organizations/organizations-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-organizations` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: When the active organization is missing or does not match the host-provided list, the view selects the first available organization. It never infers a principal, policy grant, or mutation authority; missing resources and callbacks stay unavailable, while PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/select","@constructive/switch","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/organizations.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-organizations"},{"name":"console-module-organizations","type":"registry:block","title":"Organizations Console Module","description":"Console Kit discovery, metadata resolution, and Constructive adapter for the Organizations feature pack.","categories":[],"docs":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-organizations","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/pack-foundation","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/organizations-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-organizations"},{"name":"feature-pack-storage","type":"registry:block","title":"Storage Feature Pack","description":"Bucket, folder, object, upload, download, and deletion surfaces backed by injected storage actions.","categories":[],"docs":"`feature-pack-storage` installed a provider-neutral view and `.constructive/feature-packs/storage.json`. Import from `@/blocks/feature-packs/storage/storage-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-storage` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: An object endpoint alone does not prove bucket or file operations; incomplete and read-only contracts keep write controls hidden.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/radio-group","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-storage"},{"name":"console-module-storage","type":"registry:block","title":"Storage Console Module","description":"Console Kit discovery, metadata resolution, adapter, and modular state slice for the Storage feature pack.","categories":[],"docs":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-storage","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/storage-adapter.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-console-slice.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-meta-contract.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-storage"},{"name":"feature-pack-billing","type":"registry:block","title":"Billing Feature Pack","description":"The feature-pack root for Constructive billing plans, subscriptions, usage, entitlements, credits, and activity.","categories":[],"docs":"`feature-pack-billing` installed a provider-neutral view and `.constructive/feature-packs/billing.json`. Import from `@/blocks/feature-packs/billing/billing-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-billing` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources remain independent degraded states, and unavailable provider callbacks stay absent.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/billing-settings-page","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/billing.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-billing"},{"name":"console-module-billing","type":"registry:block","title":"Billing Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Billing feature pack.","categories":[],"docs":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-billing","@constructive/billing-contracts","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/billing-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-billing"},{"name":"feature-pack-notifications","type":"registry:block","title":"Notifications Feature Pack","description":"An application notification inbox with read, open, and deletion actions.","categories":[],"docs":"`feature-pack-notifications` installed a provider-neutral view and `.constructive/feature-packs/notifications.json`. Import from `@/blocks/feature-packs/notifications/notifications-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-notifications` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host must provide an authoritative inbox, policy, and callbacks; absent operations stay unavailable and mutations require a refreshed resource.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/notifications.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-notifications"},{"name":"console-module-notifications","type":"registry:block","title":"Notifications Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Notifications feature pack.","categories":[],"docs":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-notifications","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/notifications-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-notifications"},{"name":"preset-auth-hardened","type":"registry:block","title":"Hardened Authentication Preset","description":"Stable Constructive auth-hardened backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/auth-hardened-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/auth-hardened.json","type":"registry:file","target":"~/.constructive/feature-packs/auth-hardened.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-auth-hardened"},{"name":"preset-b2b-storage","type":"registry:block","title":"B2B with Storage Preset","description":"Stable Constructive b2b-storage backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/b2b-storage-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/b2b-storage.json","type":"registry:file","target":"~/.constructive/feature-packs/b2b-storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-b2b-storage"},{"name":"preset-full","type":"registry:block","title":"Full Preset","description":"Stable Constructive full backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/console-module-billing","@constructive/console-module-notifications","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/full-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/full-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/full.json","type":"registry:file","target":"~/.constructive/feature-packs/full.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-full"},{"name":"console-kit-nextjs","type":"registry:block","title":"Constructive Console Kit for Next.js","description":"A full-page Next.js tenant console with semantic routing, auth, dynamic endpoint discovery, first-party adapters, and every feature pack.","categories":[],"docs":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/preset-full","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/constructive/index.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-nextjs"},{"name":"app-kit-core","type":"registry:block","title":"Constructive App Kit Core","description":"Typed, server-safe application resources, queries, actions, scope partitioning, schema validation, and opt-in client runtime.","categories":[],"docs":"Install this root to define Constructive-native application contracts without choosing a view family. Import the client runtime explicitly when a connected view needs TanStack Query. Credentials never belong in definitions or AppScope.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/core/contracts.ts","type":"registry:lib","target":"src/blocks/app-kit/core/contracts.ts"},{"path":"registry/constructive/blocks/app-kit/core/navigation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/navigation.ts"},{"path":"registry/constructive/blocks/app-kit/core/schema-validation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/schema-validation.ts"},{"path":"registry/constructive/blocks/app-kit/core/scope.ts","type":"registry:lib","target":"src/blocks/app-kit/core/scope.ts"},{"path":"registry/constructive/blocks/app-kit/core/runtime.tsx","type":"registry:component","target":"src/blocks/app-kit/core/runtime.tsx"},{"path":"registry/constructive/blocks/app-kit/core/index.ts","type":"registry:lib","target":"src/blocks/app-kit/core/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"runtime","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal"],"intents":["define-resources","load-data","execute-actions","validate-schema"],"capabilities":["resource-contracts","query-contracts","action-contracts","scoped-cache","schema-validation","navigation-adapters"],"slots":["record-opener","url-state-adapter"],"events":["query-settled","action-settled","scope-changed"],"compatibleWith":["app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-core"},{"name":"app-kit-data","type":"registry:block","title":"Constructive App Kit Data Views","description":"Controlled and connected tables, lists, cards, record details, forms, relations, collection controls, and action bars.","categories":[],"docs":"Use this root for record and collection applications. Loaders stay server-driven, relation pickers search remotely, ambiguous identities fail read-only, and every view distinguishes loading, empty, denied, and error states.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/combobox","@constructive/empty","@constructive/field","@constructive/input","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/switch","@constructive/table","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/data/types.ts","type":"registry:lib","target":"src/blocks/app-kit/data/types.ts"},{"path":"registry/constructive/blocks/app-kit/data/states.tsx","type":"registry:component","target":"src/blocks/app-kit/data/states.tsx"},{"path":"registry/constructive/blocks/app-kit/data/controls.tsx","type":"registry:component","target":"src/blocks/app-kit/data/controls.tsx"},{"path":"registry/constructive/blocks/app-kit/data/collections.tsx","type":"registry:component","target":"src/blocks/app-kit/data/collections.tsx"},{"path":"registry/constructive/blocks/app-kit/data/detail-form.tsx","type":"registry:component","target":"src/blocks/app-kit/data/detail-form.tsx"},{"path":"registry/constructive/blocks/app-kit/data/relations.tsx","type":"registry:component","target":"src/blocks/app-kit/data/relations.tsx"},{"path":"registry/constructive/blocks/app-kit/data/action-bars.tsx","type":"registry:component","target":"src/blocks/app-kit/data/action-bars.tsx"},{"path":"registry/constructive/blocks/app-kit/data/index.ts","type":"registry:lib","target":"src/blocks/app-kit/data/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["record","collection"],"intents":["browse","search","filter","sort","edit","relate","bulk-act"],"capabilities":["table","list","cards","record-detail","generated-form","relation-picker","relation-panel","pagination","bulk-actions"],"slots":["cell-renderer","record-renderer","form-field","toolbar","footer"],"events":["state-change","open-record","submit","link-record","unlink-record","bulk-action"],"compatibleWith":["app-kit-core","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-data"},{"name":"app-kit-board","type":"registry:block","title":"Constructive App Kit Board","description":"A typed controlled board and connected resource wrapper with semantic moves, keyboard alternatives, and mutation rollback.","categories":[],"docs":"Board movement is disabled until the host supplies an explicit semantic action. Pointer and keyboard moves use the same action contract, restore focus, and roll back optimistic state on denial or failure.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/card","@constructive/dropdown-menu","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/board/board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/connected-board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/connected-board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/index.ts","type":"registry:lib","target":"src/blocks/app-kit/board/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["collection","board"],"intents":["plan","prioritize","move-records","inspect"],"capabilities":["board","typed-columns","semantic-move","keyboard-move","optimistic-rollback"],"slots":["card"],"events":["open-record","move-record","move-denied"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-board"},{"name":"app-kit-dashboard","type":"registry:block","title":"Constructive App Kit Dashboard","description":"Explicit analytical widgets and a versioned, replaceable layout store on the accessible SVG and SSR foundation from TanStack Charts.","categories":[],"docs":"Dashboard widgets always use explicit analytical loaders; they never derive totals from a paginated collection page. Runtime customization is limited to an approved typed catalog, while layout persistence is replaceable.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/charts@0.6.4","@tanstack/charts-scales@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/chart","@constructive/cn","@constructive/dropdown-menu","@constructive/empty","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/dashboard/widgets.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/widgets.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/layout-store.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/layout-store.ts"},{"path":"registry/constructive/blocks/app-kit/dashboard/dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/connected-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/connected-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/persisted-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/persisted-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/index.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["aggregate","series","breakdown"],"intents":["monitor","analyze","compare","configure-layout"],"capabilities":["kpi","bar-chart","line-chart","breakdown-table","widget-catalog","layout-store","layout-persistence"],"slots":["widget"],"events":["layout-change"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-dashboard"},{"name":"app-kit-calendar","type":"registry:block","title":"Constructive App Kit Calendar","description":"Localized controlled month and agenda views with explicit timezones and connected range-query loading.","categories":[],"docs":"The host owns record opening and editing, while the connected wrapper loads only the visible range. Recurrence, resource scheduling, and drag rescheduling are intentionally outside V1.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/cn","@constructive/empty","@constructive/skeleton","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/calendar/calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/connected-calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/connected-calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/index.ts","type":"registry:lib","target":"src/blocks/app-kit/calendar/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["temporal","collection"],"intents":["schedule","browse-by-date","inspect"],"capabilities":["temporal","month","agenda","range-query","localization","timezone"],"events":["range-change","view-change","open-record"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-calendar"},{"name":"app-kit-workflow","type":"registry:block","title":"Constructive App Kit Workflow UI","description":"Controlled and connected action surfaces, confirmation and input dialogs, bulk execution, and a multi-step stepper.","categories":[],"docs":"This root composes application and server actions into accessible interaction surfaces; it is not a durable workflow engine. Validation, permission failures, cancellation, and partial errors remain explicit.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/alert-dialog","@constructive/app-kit-core","@constructive/button","@constructive/dialog","@constructive/dropdown-menu","@constructive/separator","@constructive/stepper","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/workflow/actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/connected-actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/connected-actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/stepper.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/stepper.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/index.ts","type":"registry:lib","target":"src/blocks/app-kit/workflow/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"composition","boundary":"client","provider":"app-kit","dataShapes":["record","collection","action-input"],"intents":["execute-action","confirm","collect-input","bulk-execute","guide-steps"],"capabilities":["action-button","action-menu","input-dialog","confirmation-dialog","bulk-execution","stepper"],"slots":["action-input","confirmation-body","step-content"],"events":["action-start","action-settled","step-change","cancel"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-workflow"},{"name":"app-kit-event-studio","type":"registry:block","title":"Constructive App Kit Event Studio","description":"An opt-in page-scale proof starter combining analytical, collection, board, calendar, relation, form, and action views.","categories":[],"docs":"Event Studio pairs with the supported b2b:storage blueprint recipe and demonstrates explicit analytical loaders, semantic board movement, localized range queries, searchable relations, permission-aware actions, and host-controlled URL state. Supply adapters generated from the final executable GraphQL schema.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react","zod"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-board","@constructive/app-kit-calendar","@constructive/app-kit-core","@constructive/app-kit-dashboard","@constructive/app-kit-data","@constructive/app-kit-workflow","@constructive/badge","@constructive/button","@constructive/dialog","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/event-studio/definitions.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/definitions.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/state.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/state.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/event-studio.tsx","type":"registry:component","target":"src/blocks/app-kit/event-studio/event-studio.tsx"},{"path":"registry/constructive/blocks/app-kit/event-studio/index.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"starter","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal","board"],"intents":["manage-events","analyze","schedule","publish","relate-people","configure-views"],"capabilities":["event-studio","dashboard","collections","record-detail","generated-form","relations","board","calendar","actions","url-state"],"slots":["record-opener","dashboard-layout-store","url-state-adapter"],"events":["view-change","open-record","move-session","publish-session","schedule-session","link-person"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-event-studio"}]}
diff --git a/.agents/skills/constructive-blocks/references/registry-content.v1.json b/.agents/skills/constructive-blocks/references/registry-content.v1.json
index 38c2033..ff1ea31 100644
--- a/.agents/skills/constructive-blocks/references/registry-content.v1.json
+++ b/.agents/skills/constructive-blocks/references/registry-content.v1.json
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"kind": "constructive.blocks-registry-content",
- "sourceCommit": "706ae32b8b03cd6effaa9d0d5f385d93529635df",
+ "sourceCommit": "c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b",
"recordCount": 371,
"records": [
{
@@ -26,13 +26,13 @@
"registryItem": "app-kit-board",
"path": "registry/constructive/blocks/app-kit/board/board.tsx",
"type": "registry:component",
- "contentSha256": "d502bd6aa66cd94d52f3605f17721c982579314bdb82de3374f4ebc33ff4e4ee"
+ "contentSha256": "ffecbaff4fddf5f117ccb9fb5aaa084a8395178d3a38a4cccb6d9617f07a0010"
},
{
"registryItem": "app-kit-board",
"path": "registry/constructive/blocks/app-kit/board/connected-board.tsx",
"type": "registry:component",
- "contentSha256": "0f87d69bbb4d04bbf0c958afa11ff2ad6245dd91854bb312f5229a51642a356b"
+ "contentSha256": "f4cc1f3a0d375383d20bb17cbbef7e9794c38f83e6e7780a2d4e92891ca84f7f"
},
{
"registryItem": "app-kit-board",
@@ -62,7 +62,7 @@
"registryItem": "app-kit-core",
"path": "registry/constructive/blocks/app-kit/core/contracts.ts",
"type": "registry:lib",
- "contentSha256": "477d3d183d0511d32a9f20ee4812a2820f4c71ac51b88fba051cf21d4ed82c29"
+ "contentSha256": "cb61146fb27a67b782a9393f5a00c704a539d0bba10af6cb1266a877633ea5ec"
},
{
"registryItem": "app-kit-core",
@@ -80,19 +80,19 @@
"registryItem": "app-kit-core",
"path": "registry/constructive/blocks/app-kit/core/runtime.tsx",
"type": "registry:component",
- "contentSha256": "fafadf39a5dc31bc34c96d53221aab79798a544f24892f14fbaf5a95c2b57d14"
+ "contentSha256": "179c9a6931552012ea9cb482079ee2ab06530efbca7057a0f1279b80e76a8108"
},
{
"registryItem": "app-kit-core",
"path": "registry/constructive/blocks/app-kit/core/schema-validation.ts",
"type": "registry:lib",
- "contentSha256": "15fc21e9dc189c1ab8045d43fbf95f90214dc91b6c214b130760bf1c14d6e1af"
+ "contentSha256": "1dffb89f0a4be4b4ebbf784c5da68194f9e196ebf9caa4f42f624385b619d793"
},
{
"registryItem": "app-kit-core",
"path": "registry/constructive/blocks/app-kit/core/scope.ts",
"type": "registry:lib",
- "contentSha256": "14da0433216deabd51dd1917b163fb21922e9c4a314f6ad184d638f054bdb866"
+ "contentSha256": "ce7b39eb0f639d73b73474701b671600427e4796833d3a6bcd135635bbc2823f"
},
{
"registryItem": "app-kit-dashboard",
@@ -152,7 +152,7 @@
"registryItem": "app-kit-data",
"path": "registry/constructive/blocks/app-kit/data/detail-form.tsx",
"type": "registry:component",
- "contentSha256": "0bf42fdf00f390e66de256e4d4e9307b6058fc015b79c2ed9483ac43190986ba"
+ "contentSha256": "427073f1bba16b4ee1dc0e5314d3f8fd139abd2c770ffba9dfd189b11fc95c55"
},
{
"registryItem": "app-kit-data",
@@ -164,7 +164,7 @@
"registryItem": "app-kit-data",
"path": "registry/constructive/blocks/app-kit/data/relations.tsx",
"type": "registry:component",
- "contentSha256": "abd903d5ab3a28c97c16642cce54ba77c7dc67d6cd7a8c7b6f3fb4e639eef057"
+ "contentSha256": "d0b2b0211bc0caea0bad5171d9651dd286c6a9578d3342f5260d2d3214b9afff"
},
{
"registryItem": "app-kit-data",
@@ -182,7 +182,7 @@
"registryItem": "app-kit-event-studio",
"path": "registry/constructive/blocks/app-kit/event-studio/definitions.ts",
"type": "registry:lib",
- "contentSha256": "5d600406f9f124e9be4320cb00f6fc3dd53b7d0abde50dc22d1c89113912fe51"
+ "contentSha256": "fe97707725c449a70c048ecb24951fc50ae32636ed6c4a9ef8cbffe837a546ef"
},
{
"registryItem": "app-kit-event-studio",
diff --git a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
index 61aa327..8a50335 100644
--- a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
+++ b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
@@ -28,7 +28,7 @@ const eventStudioBlueprintPath = path.join(
const PINNED = Object.freeze({
repository: 'https://github.com/constructive-io/blocks',
branch: 'feat/app-kit',
- commit: '706ae32b8b03cd6effaa9d0d5f385d93529635df',
+ commit: 'c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b',
publicationStatus: 'branch-only',
registryNamespace: '@constructive',
registryUrl: 'https://constructive-io.github.io/blocks/r/{name}.json',
diff --git a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
index d42df2a..267e26f 100644
--- a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
+++ b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
@@ -810,7 +810,7 @@ test('every query mode exposes the same branch-only installability gate', () =>
);
assert.equal(
gate.pinnedLocalConsumption.sourceCommit,
- '706ae32b8b03cd6effaa9d0d5f385d93529635df'
+ 'c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b'
);
assert.equal(
gate.pinnedLocalConsumption.consumerIsolation.required,
From 26a5790a02047936018583919bd89d097a259a2e Mon Sep 17 00:00:00 2001
From: yyyyaaa
Date: Mon, 3 Aug 2026 19:46:57 +0700
Subject: [PATCH 4/4] Harden App Kit agent composition guidance
---
.agents/skills/constructive-blocks/SKILL.md | 26 ++-
.../references/app-actions-workflows.md | 6 +-
.../references/app-composition.md | 22 ++-
.../references/app-recipes.md | 6 +-
.../references/app-resource-contract.md | 7 +-
.../references/app-verification.md | 19 +-
.../references/app-view-patterns.md | 6 +-
.../references/brief-to-roots.v1.json | 36 ++--
.../references/event-studio.md | 8 +-
.../install-plans.v1/console-kit-core.json | 2 +-
.../install-plans.v1/console-kit-nextjs.json | 2 +-
.../install-plans.v1/console-module-auth.json | 2 +-
.../console-module-billing.json | 2 +-
.../install-plans.v1/console-module-data.json | 2 +-
.../console-module-notifications.json | 2 +-
.../console-module-organizations.json | 2 +-
.../console-module-storage.json | 2 +-
.../console-module-users.json | 2 +-
.../install-plans.v1/feature-pack-auth.json | 2 +-
.../feature-pack-billing.json | 2 +-
.../install-plans.v1/feature-pack-data.json | 2 +-
.../feature-pack-notifications.json | 2 +-
.../feature-pack-organizations.json | 2 +-
.../feature-pack-storage.json | 2 +-
.../install-plans.v1/feature-pack-users.json | 2 +-
.../preset-auth-hardened.json | 2 +-
.../install-plans.v1/preset-b2b-storage.json | 2 +-
.../install-plans.v1/preset-full.json | 2 +-
.../references/install-roots.v1.json | 112 ++++++-----
.../references/package-resolutions.v1.json | 2 +-
.../references/registry-catalog.v1.json | 2 +-
.../references/registry-content.v1.json | 12 +-
.../references/runtime-contract.md | 12 +-
.../scripts/check-blocks-contract.mjs | 177 +++++++++++++++---
.../scripts/check-blocks-contract.test.mjs | 149 ++++++++++++---
.../scripts/sync-blocks-contract.mjs | 25 ++-
.agents/skills/constructive-features/SKILL.md | 7 +-
.agents/skills/constructive-frontend/SKILL.md | 8 +-
.../references/ui-foundations.md | 2 +-
.../references/ui-registry.md | 8 +-
40 files changed, 504 insertions(+), 186 deletions(-)
diff --git a/.agents/skills/constructive-blocks/SKILL.md b/.agents/skills/constructive-blocks/SKILL.md
index d4445f4..499c1a5 100644
--- a/.agents/skills/constructive-blocks/SKILL.md
+++ b/.agents/skills/constructive-blocks/SKILL.md
@@ -13,16 +13,19 @@ PostgreSQL/RLS authority. Keep those as separate facts.
Choose between two orthogonal lanes. Use App Kit to compose an application
around domain resources and user tasks. Add feature packs or Console Kit only
when the product also needs their specific platform-capability surfaces.
-Treat the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-as authority for exact APIs and exports; this skill owns selection and
-verification procedure.
+Treat `installability.appKitDocumentation.authority` from the validated catalog
+query as authority for exact APIs and exports; this skill owns selection and
+verification procedure. While the release is branch-only, read the returned
+`pinned-source` path from the source-preflighted Blocks checkout. Use the public
+URL only when the query returns `kind: public-url`.
## Read the pinned contract first
[`references/install-roots.v1.json`](references/install-roots.v1.json) is the
portable authority for the exact Blocks branch and commit, release state,
`_meta` contract, endpoint bindings, package versions, source and built-content
-hashes, 19 complete inspector plans, Console runtime invariants, and
+hashes, the branch-aware App Kit documentation source, 19 complete inspector
+plans, Console runtime invariants, and
structurally scoped source limitations. Use the validated
queries below for ordinary selection; load the full snapshot only when
auditing or updating the contract.
@@ -41,6 +44,8 @@ node /absolute/path/to/check-blocks-contract.mjs --registry-item app-shell
Use the returned `name`, `type`, `categories`, `docs`, and versioned metadata to
select candidates. Inspect one item before installation to verify its
dependencies, file targets, release status, and limitations.
+For App Kit, also resolve the returned
+`installability.appKitDocumentation.authority` before implementing an exact API.
Always use the validated queries for Data. The byte-pinned source catalog and
plan retain incorrect generic Data documentation as drift evidence; query
@@ -190,6 +195,11 @@ without replacing checked-in files.
availability, executable roots, grants, or RLS-visible rows. Verify those
after integration.
+For App Kit, installation is only dependency acquisition. Application-owned
+code must import and compose the selected definitions and views into working
+user paths; installed source directories, navigation labels, prose, or empty
+placeholders are never evidence that a capability was implemented.
+
Select Sheets only for spreadsheet-style inline editing and generic table
exploration. Do not substitute Console Kit for a domain application shell or
turn every action flow into a review queue.
@@ -197,7 +207,7 @@ turn every action flow into a review queue.
## Respect the branch-only release gate
The pinned source is
-`feat/app-kit@c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b`.
+`feat/app-kit@1a72e5d95f7ce4a243cd4536ed78c638708d538c`.
The checkout may be that named branch or detached at the exact commit. Its
publication status is `branch-only`, and
`release.publicRegistryReady` is `false`. Do not run a public install for these
@@ -227,8 +237,10 @@ Released query surfaces expose `publicInstall` with the command beside its
`status` and `availability`; execute it only when status is `available`.
Branch-only responses mark it `blocked` and `future-only`, so use the
`installability.pinnedLocalConsumption` command template instead. Keep shadcn
-at `4.13.1`; nested dependencies still require the `@constructive` namespace
-when the root is installed by direct URL.
+at the exact returned `testedShadcnVersion` for reproducible branch-local
+diagnostics. Released public commands use `shadcn@latest`; nested dependencies
+still require the `@constructive` namespace when a root is installed by direct
+URL.
## Integrate the installed owner
diff --git a/.agents/skills/constructive-blocks/references/app-actions-workflows.md b/.agents/skills/constructive-blocks/references/app-actions-workflows.md
index c28205f..c638d58 100644
--- a/.agents/skills/constructive-blocks/references/app-actions-workflows.md
+++ b/.agents/skills/constructive-blocks/references/app-actions-workflows.md
@@ -1,9 +1,9 @@
# Wire App Kit actions and workflows
Read this when a brief includes mutations, confirmations, bulk execution, or a
-multi-step interaction. Use the
-[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-for current action definitions, runtime hooks, surfaces, and invalidation APIs.
+multi-step interaction. Resolve `installability.appKitDocumentation.authority`
+through the validated App Kit catalog query for current action definitions,
+runtime hooks, surfaces, and invalidation APIs.
## Define actions from user intent
diff --git a/.agents/skills/constructive-blocks/references/app-composition.md b/.agents/skills/constructive-blocks/references/app-composition.md
index 7388ec4..335871b 100644
--- a/.agents/skills/constructive-blocks/references/app-composition.md
+++ b/.agents/skills/constructive-blocks/references/app-composition.md
@@ -1,8 +1,9 @@
# Compose an App Kit application
Read this when a brief describes a domain application rather than a platform
-console. Use the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-for current APIs, exports, and component contracts.
+console. Resolve `installability.appKitDocumentation.authority` through the
+validated App Kit catalog query before reading current APIs, exports, or
+component contracts.
## Route the brief
@@ -25,6 +26,23 @@ for current APIs, exports, and component contracts.
5. Decide how the host owns routes, URL state, and record opening. A route,
page, dialog, or Stack card may be appropriate; do not impose Stack.
+## Prepare and compose the consumer
+
+1. Start with a valid consumer before invoking shadcn. Confirm `components.json`
+ resolves every alias and its configured Tailwind stylesheet already exists;
+ run all package and registry commands from that consumer root.
+2. Treat installed roots as source dependencies, not finished features. Define
+ the selected resources, queries, actions, and scope in application-owned
+ code, then import the relevant controlled views or connected wrappers into
+ real routes or surfaces.
+3. Trace every requested job to an executable path. A link, heading, explanatory
+ paragraph, empty placeholder, or installed-but-unimported source tree does
+ not satisfy a collection, form, relation, board, dashboard, calendar, or
+ workflow requirement.
+4. Preserve the selected view's data contract. Server-driven search, filters,
+ sorting, ranges, aggregates, and pagination must reach their query loaders;
+ do not relabel client filtering of one fetched page as server-driven work.
+
## Establish ownership before coding
- Keep remote state in App Kit's documented TanStack Query boundary and keep
diff --git a/.agents/skills/constructive-blocks/references/app-recipes.md b/.agents/skills/constructive-blocks/references/app-recipes.md
index 5016e58..2e81608 100644
--- a/.agents/skills/constructive-blocks/references/app-recipes.md
+++ b/.agents/skills/constructive-blocks/references/app-recipes.md
@@ -1,9 +1,9 @@
# Adapt compact App Kit recipes
Read this when a brief resembles a common app shape but does not need Event
-Studio. Use the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-for current capabilities, then query the validated catalog instead of copying
-root names from these prompts.
+Studio. Resolve `installability.appKitDocumentation.authority` through the
+validated App Kit catalog query for current capabilities, then use catalog
+metadata instead of copying root names from these prompts.
| Recipe | Extract from the brief | Challenge before selecting views |
| --- | --- | --- |
diff --git a/.agents/skills/constructive-blocks/references/app-resource-contract.md b/.agents/skills/constructive-blocks/references/app-resource-contract.md
index f0867a0..68477ff 100644
--- a/.agents/skills/constructive-blocks/references/app-resource-contract.md
+++ b/.agents/skills/constructive-blocks/references/app-resource-contract.md
@@ -1,8 +1,9 @@
# Generate App Kit resource contracts
-Read this before generating resources, queries, forms, or relations. Use the
-[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-for exact types, signatures, entrypoints, and supported field kinds.
+Read this before generating resources, queries, forms, or relations. Resolve
+`installability.appKitDocumentation.authority` through the validated App Kit
+catalog query for exact types, signatures, entrypoints, and supported field
+kinds.
## Build from executable evidence
diff --git a/.agents/skills/constructive-blocks/references/app-verification.md b/.agents/skills/constructive-blocks/references/app-verification.md
index fa6bbd1..573edf7 100644
--- a/.agents/skills/constructive-blocks/references/app-verification.md
+++ b/.agents/skills/constructive-blocks/references/app-verification.md
@@ -1,9 +1,9 @@
# Verify an App Kit application
-Read this before declaring an App Kit build complete. Use the
-[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-for the current runtime and accessibility contracts, and use the checker for
-the pinned install contract.
+Read this before declaring an App Kit build complete. Resolve
+`installability.appKitDocumentation.authority` through the validated App Kit
+catalog query for current runtime and accessibility contracts, and use the
+checker for the pinned install contract.
## Run the evidence loop
@@ -30,9 +30,18 @@ the pinned install contract.
6. Install each selected root independently under default and custom aliases.
Reject hidden dependencies on Constructive UI packages, Sheets, Console Kit,
or an unselected App Kit family.
-7. Build and hydrate a real Next.js App Router consumer for page-scale
+7. Prove every selected root is imported by application-owned code and drives
+ at least one requested, user-reachable behavior. An installed directory is
+ not composition evidence.
+8. Build and hydrate a real Next.js App Router consumer for page-scale
starters.
+Behavior evidence must execute behavior. Reject tests that only search source
+text, check that labels exist, or serialize hard-coded `true` claims for URL
+state, hydration, mobile layout, keyboard/focus behavior, or presentation
+states. Exercise the rendered application and real loaders/actions, and retain
+the command or browser evidence that distinguishes each result.
+
Discover and narrow candidates before installation:
```bash
diff --git a/.agents/skills/constructive-blocks/references/app-view-patterns.md b/.agents/skills/constructive-blocks/references/app-view-patterns.md
index 5c1fe52..db9ce0b 100644
--- a/.agents/skills/constructive-blocks/references/app-view-patterns.md
+++ b/.agents/skills/constructive-blocks/references/app-view-patterns.md
@@ -1,9 +1,9 @@
# Select and compose App Kit views
Read this after resources are validated and the brief needs a collection,
-board, dashboard, or temporal surface. Use the
-[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-for current controlled and connected component APIs.
+board, dashboard, or temporal surface. Resolve
+`installability.appKitDocumentation.authority` through the validated App Kit
+catalog query for current controlled and connected component APIs.
## Select by geometry
diff --git a/.agents/skills/constructive-blocks/references/brief-to-roots.v1.json b/.agents/skills/constructive-blocks/references/brief-to-roots.v1.json
index a5709c2..43db1f4 100644
--- a/.agents/skills/constructive-blocks/references/brief-to-roots.v1.json
+++ b/.agents/skills/constructive-blocks/references/brief-to-roots.v1.json
@@ -5,9 +5,9 @@
{
"id": "event-planning",
"brief": "Plan programs and sessions, publish them, assign speakers, review KPIs, move sessions between stages, and browse a month schedule.",
- "dataShapes": ["record", "collection", "aggregate", "board", "temporal"],
- "userIntents": ["search", "edit", "analyze", "plan", "schedule", "publish"],
- "capabilities": ["records", "relations", "dashboard", "board", "calendar", "actions"],
+ "dataShapes": ["record", "collection", "aggregate", "board", "temporal", "action-input"],
+ "userIntents": ["define-resources", "search", "edit", "analyze", "plan", "move-records", "schedule", "execute-action", "confirm"],
+ "capabilities": ["resource-contracts", "record-detail", "relation-panel", "board", "semantic-move", "kpi", "line-chart", "month", "agenda", "action-button", "confirmation-dialog"],
"starterRequested": false,
"expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-board", "app-kit-dashboard", "app-kit-calendar", "app-kit-workflow"],
"forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-event-studio"],
@@ -20,7 +20,7 @@
"userIntents": ["manage-events", "analyze", "schedule", "publish", "relate-people", "configure-views"],
"capabilities": ["event-studio", "dashboard", "collections", "record-detail", "generated-form", "relations", "board", "calendar", "actions", "url-state"],
"starterRequested": true,
- "backendPreset": "b2b",
+ "backendPreset": "b2b:storage",
"expectedRoots": ["app-kit-event-studio"],
"forbiddenRoots": ["feature-pack-data", "console-kit-nextjs"],
"forbiddenAssumptions": ["spreadsheet-default", "console-default", "review-queue-default"]
@@ -28,9 +28,9 @@
{
"id": "service-desk",
"brief": "Search customers and tickets, assign owners, add notes, and move tickets through an explicit support lifecycle.",
- "dataShapes": ["record", "collection", "board"],
- "userIntents": ["search", "edit", "triage"],
- "capabilities": ["records", "relations", "board", "actions"],
+ "dataShapes": ["record", "collection", "board", "action-input"],
+ "userIntents": ["define-resources", "search", "edit", "plan", "move-records", "execute-action", "confirm"],
+ "capabilities": ["resource-contracts", "record-detail", "relation-panel", "board", "semantic-move", "action-button", "confirmation-dialog"],
"starterRequested": false,
"expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-board", "app-kit-workflow"],
"forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-event-studio"],
@@ -39,9 +39,9 @@
{
"id": "intake-approval",
"brief": "Collect typed requests, show their evidence, and let authorized reviewers approve, reject, or request changes.",
- "dataShapes": ["record", "collection"],
- "userIntents": ["submit", "review", "decide"],
- "capabilities": ["records", "forms", "actions", "steps"],
+ "dataShapes": ["record", "collection", "action-input"],
+ "userIntents": ["define-resources", "edit", "collect-input", "confirm", "execute-action", "guide-steps"],
+ "capabilities": ["resource-contracts", "record-detail", "generated-form", "action-button", "confirmation-dialog", "stepper"],
"starterRequested": false,
"expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-workflow"],
"forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-board", "app-kit-event-studio"],
@@ -51,8 +51,8 @@
"id": "directory-search",
"brief": "Search a large people and teams directory, filter by attributes, inspect records, and link existing memberships.",
"dataShapes": ["record", "collection"],
- "userIntents": ["search", "inspect", "link"],
- "capabilities": ["records", "relations"],
+ "userIntents": ["define-resources", "browse", "search", "relate"],
+ "capabilities": ["resource-contracts", "record-detail", "relation-picker", "relation-panel", "pagination"],
"starterRequested": false,
"expectedRoots": ["app-kit-core", "app-kit-data"],
"forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-dashboard", "app-kit-event-studio"],
@@ -61,9 +61,9 @@
{
"id": "planning",
"brief": "Plan milestones and sessions by stage and date, assign owners, and publish the approved schedule.",
- "dataShapes": ["record", "collection", "board", "temporal"],
- "userIntents": ["plan", "schedule", "assign", "publish"],
- "capabilities": ["records", "board", "calendar", "actions"],
+ "dataShapes": ["record", "collection", "board", "temporal", "action-input"],
+ "userIntents": ["define-resources", "edit", "relate", "plan", "move-records", "schedule", "execute-action"],
+ "capabilities": ["resource-contracts", "record-detail", "relation-picker", "board", "semantic-move", "month", "agenda", "action-button"],
"starterRequested": false,
"expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-board", "app-kit-calendar", "app-kit-workflow"],
"forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-dashboard", "app-kit-event-studio"],
@@ -72,9 +72,9 @@
{
"id": "reporting-configuration",
"brief": "Show approved KPIs and trend series, edit the settings records that control report behavior, and run an explicit refresh action.",
- "dataShapes": ["record", "aggregate"],
- "userIntents": ["analyze", "configure", "execute"],
- "capabilities": ["records", "dashboard", "actions"],
+ "dataShapes": ["record", "aggregate", "series", "action-input"],
+ "userIntents": ["define-resources", "edit", "analyze", "configure-layout", "execute-action"],
+ "capabilities": ["resource-contracts", "generated-form", "kpi", "line-chart", "layout-persistence", "action-button"],
"starterRequested": false,
"expectedRoots": ["app-kit-core", "app-kit-data", "app-kit-dashboard", "app-kit-workflow"],
"forbiddenRoots": ["feature-pack-data", "console-kit-nextjs", "app-kit-board", "app-kit-event-studio"],
diff --git a/.agents/skills/constructive-blocks/references/event-studio.md b/.agents/skills/constructive-blocks/references/event-studio.md
index 0a935d1..bccd249 100644
--- a/.agents/skills/constructive-blocks/references/event-studio.md
+++ b/.agents/skills/constructive-blocks/references/event-studio.md
@@ -1,12 +1,12 @@
# Build the Event Studio starter
-Read this only for the complete Event Studio recipe. Use the
-[canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-for its current UI exports and integration contract.
+Read this only for the complete Event Studio recipe. Resolve
+`installability.appKitDocumentation.authority` through the validated App Kit
+catalog query for its current UI exports and integration contract.
## Provision the paired domain
-1. Select the supported `b2b` preset through the normal backend
+1. Select the supported `b2b:storage` preset through the normal backend
provisioning flow. Keep preset selection separate from frontend install.
2. Apply `event-studio-blueprint.json` through the public blueprint SDK/ORM
workflow. Do not translate it into raw SQL or edit backend repositories.
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-core.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-core.json
index 2acd0b7..cbd9e18 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-core.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-core.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-kit-core","surface":"core","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-core","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]}]},"featurePacks":[],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-kit-core","surface":"core","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/console-kit-core","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]}]},"featurePacks":[],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-nextjs.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-nextjs.json
index 950df69..79c8f1f 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-nextjs.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-kit-nextjs.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-kit-nextjs","surface":"full-console","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-nextjs","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]},{"name":"preset-full","title":"Full Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","console-module-billing","console-module-notifications","constructive-theme"]},{"name":"console-kit-nextjs","title":"Constructive Console Kit for Next.js","type":"registry:block","directRegistryDependencies":["preset-full","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog","switch","radio-group","progress"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users","feature-pack-organizations","feature-pack-storage","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets","billing-credits-card","billing-usage-overview"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-nextjs"],"sources":[{"registryItem":"console-kit-nextjs","path":"registry/constructive/blocks/console-kit/constructive/index.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/full-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/full.json","targetKind":"project-root","type":"registry:file","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full.json"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"full","presetSlug":"full","title":"Full","description":"Every first-release Constructive feature pack.","stability":"stable","featurePacks":["data","auth","users","organizations","storage","billing","notifications"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-kit-nextjs","surface":"full-console","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/console-kit-nextjs","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]},{"name":"preset-full","title":"Full Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","console-module-billing","console-module-notifications","constructive-theme"]},{"name":"console-kit-nextjs","title":"Constructive Console Kit for Next.js","type":"registry:block","directRegistryDependencies":["preset-full","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog","switch","radio-group","progress"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users","feature-pack-organizations","feature-pack-storage","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets","billing-credits-card","billing-usage-overview"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-nextjs"],"sources":[{"registryItem":"console-kit-nextjs","path":"registry/constructive/blocks/console-kit/constructive/index.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/full-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/full.json","targetKind":"project-root","type":"registry:file","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full.json"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"full","presetSlug":"full","title":"Full","description":"Every first-release Constructive feature pack.","stability":"stable","featurePacks":["data","auth","users","organizations","storage","billing","notifications"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-auth.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-auth.json
index a2dda3c..c212996 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-auth.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-auth.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-auth","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-auth","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","feature-pack-auth"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-auth","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-auth","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","feature-pack-auth"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-billing.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-billing.json
index c9fa37a..44a00f6 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-billing.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-billing.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-billing","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-billing","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","select","progress","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","pagination","select","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page"]},{"name":"motion","requiredBy":["motion-config","sheet","billing-credits-card","billing-usage-overview"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-billing","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-billing","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","select","progress","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","pagination","select","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page"]},{"name":"motion","requiredBy":["motion-config","sheet","billing-credits-card","billing-usage-overview"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-data.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-data.json
index d413956..54a33a3 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-data.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-data.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-data","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-data","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-data","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-data","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-notifications.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-notifications.json
index 9f7cd73..df883bb 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-notifications.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-notifications.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-notifications","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-notifications","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-notifications","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-notifications","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-organizations.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-organizations.json
index 6f41216..5b9a292 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-organizations.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-organizations.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-organizations","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-organizations","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","dialog","select","switch","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","select","feature-pack-organizations"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-organizations","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-organizations","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","dialog","select","switch","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","select","feature-pack-organizations"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-storage.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-storage.json
index 4feb5a3..2adf958 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-storage.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-storage.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-storage","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","scroll-area","dialog","radio-group"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","feature-pack-storage"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-storage","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","scroll-area","dialog","radio-group"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","feature-pack-storage"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-users.json b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-users.json
index ea9e30f..473b76f 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-users.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/console-module-users.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-users","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-users","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","dialog","select","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","input-group","select","feature-pack-users"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"console-module-users","surface":"console-module","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-users","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","dialog","select","tabs"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"graphql","requiredBy":["console-kit-core"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","dialog","input-group","select","feature-pack-users"]},{"name":"motion","requiredBy":["motion-config","sheet"]},{"name":"tailwind-merge","requiredBy":["cn"]},{"name":"zod","requiredBy":["console-feature-catalog"]},{"name":"zustand","requiredBy":["console-kit-core"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-auth.json b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-auth.json
index ae49678..5a62da0 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-auth.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-auth.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-auth","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-auth","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","avatar","checkbox","separator","input","tabs"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","input-group","feature-pack-auth"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-auth when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-auth` installed a provider-neutral view and `.constructive/feature-packs/auth.json`. Import from `@/blocks/feature-packs/auth/auth-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-auth` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Unsupported policy grants or callbacks stay absent, provider failures remain explicit, and callback credentials never enter the view.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-auth","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-auth","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","avatar","checkbox","separator","input","tabs"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","input-group","feature-pack-auth"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-auth when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-auth` installed a provider-neutral view and `.constructive/feature-packs/auth.json`. Import from `@/blocks/feature-packs/auth/auth-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-auth` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Unsupported policy grants or callbacks stay absent, provider failures remain explicit, and callback credentials never enter the view.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-billing.json b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-billing.json
index c1824bb..347ebbc 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-billing.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-billing.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-billing","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-billing","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","select","sheet","collapsible","progress","tooltip","tabs"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card","sheet"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pagination","select","sheet","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page"]},{"name":"motion","requiredBy":["motion-config","sheet","billing-credits-card","billing-usage-overview"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-billing when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-billing` installed a provider-neutral view and `.constructive/feature-packs/billing.json`. Import from `@/blocks/feature-packs/billing/billing-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-billing` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources remain independent degraded states, and unavailable provider callbacks stay absent.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-billing","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-billing","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","select","sheet","collapsible","progress","tooltip","tabs"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card","sheet"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pagination","select","sheet","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page"]},{"name":"motion","requiredBy":["motion-config","sheet","billing-credits-card","billing-usage-overview"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-billing when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-billing` installed a provider-neutral view and `.constructive/feature-packs/billing.json`. Import from `@/blocks/feature-packs/billing/billing-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-billing` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources remain independent degraded states, and unavailable provider callbacks stay absent.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-data.json b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-data.json
index 88085f5..e88bd49 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-data.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-data.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-data","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-data","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","checkbox","collapsible","dropdown-menu","input","popover","scroll-area","select","tabs","dialog","tooltip"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["pack-foundation","dropdown-menu","input-group","pagination","select","dialog","toast","sheets","feature-pack-data"]},{"name":"motion","requiredBy":["sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["sheets"]},{"name":"zustand","requiredBy":["sheets"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-data when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-data","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-data","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","checkbox","collapsible","dropdown-menu","input","popover","scroll-area","select","tabs","dialog","tooltip"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["pack-foundation","dropdown-menu","input-group","pagination","select","dialog","toast","sheets","feature-pack-data"]},{"name":"motion","requiredBy":["sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["sheets"]},{"name":"zustand","requiredBy":["sheets"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-data when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-notifications.json b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-notifications.json
index d6f93bb..9f5c621 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-notifications.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-notifications.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-notifications","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-notifications","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","separator"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","feature-pack-notifications"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-notifications when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-notifications` installed a provider-neutral view and `.constructive/feature-packs/notifications.json`. Import from `@/blocks/feature-packs/notifications/notifications-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-notifications` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host must provide an authoritative inbox, policy, and callbacks; absent operations stay unavailable and mutations require a refreshed resource.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-notifications","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-notifications","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","separator"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","feature-pack-notifications"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-notifications when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-notifications` installed a provider-neutral view and `.constructive/feature-packs/notifications.json`. Import from `@/blocks/feature-packs/notifications/notifications-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-notifications` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host must provide an authoritative inbox, policy, and callbacks; absent operations stay unavailable and mutations require a refreshed resource.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-organizations.json b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-organizations.json
index 154f11e..c9be260 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-organizations.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-organizations.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-organizations","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-organizations","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","avatar","checkbox","scroll-area","dialog","dropdown-menu","separator","input","select","switch","tabs"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","dialog","dropdown-menu","select","feature-pack-organizations"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-organizations when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-organizations` installed a provider-neutral view and `.constructive/feature-packs/organizations.json`. Import from `@/blocks/feature-packs/organizations/organizations-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-organizations` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: When the active organization is missing or does not match the host-provided list, the view selects the first available organization. It never infers a principal, policy grant, or mutation authority; missing resources and callbacks stay unavailable, while PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-organizations","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-organizations","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","avatar","checkbox","scroll-area","dialog","dropdown-menu","separator","input","select","switch","tabs"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","dialog","dropdown-menu","select","feature-pack-organizations"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-organizations when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-organizations` installed a provider-neutral view and `.constructive/feature-packs/organizations.json`. Import from `@/blocks/feature-packs/organizations/organizations-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-organizations` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: When the active organization is missing or does not match the host-provided list, the view selects the first available organization. It never infers a principal, policy grant, or mutation authority; missing resources and callbacks stay unavailable, while PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-storage.json b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-storage.json
index 67bb9f1..d30596b 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-storage.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-storage.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-storage","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","scroll-area","dialog","dropdown-menu","separator","input","radio-group"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","dialog","dropdown-menu","feature-pack-storage"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-storage when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-storage` installed a provider-neutral view and `.constructive/feature-packs/storage.json`. Import from `@/blocks/feature-packs/storage/storage-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-storage` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: An object endpoint alone does not prove bucket or file operations; incomplete and read-only contracts keep write controls hidden.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-storage","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","scroll-area","dialog","dropdown-menu","separator","input","radio-group"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","dialog","dropdown-menu","feature-pack-storage"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-storage when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-storage` installed a provider-neutral view and `.constructive/feature-packs/storage.json`. Import from `@/blocks/feature-packs/storage/storage-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-storage` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: An object endpoint alone does not prove bucket or file operations; incomplete and read-only contracts keep write controls hidden.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-users.json b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-users.json
index 4506efc..2c9642e 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-users.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/feature-pack-users.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-users","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-users","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","avatar","checkbox","scroll-area","dialog","dropdown-menu","separator","input","select","tabs"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","dialog","dropdown-menu","input-group","select","feature-pack-users"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-users when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-users` installed a provider-neutral view and `.constructive/feature-packs/users.json`. Import from `@/blocks/feature-packs/users/users-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-users` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources or callbacks stay unavailable, while row policy, PostgreSQL privileges, RLS, and final-owner constraints decide mutations.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"feature-pack-users","surface":"standalone-feature-pack","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-users","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["alert-dialog","avatar","checkbox","scroll-area","dialog","dropdown-menu","separator","input","select","tabs"]},{"name":"class-variance-authority","requiredBy":["alert","badge","button","card"]},{"name":"clsx","requiredBy":["cn"]},{"name":"lucide-react","requiredBy":["pack-foundation","dialog","dropdown-menu","input-group","select","feature-pack-users"]},{"name":"tailwind-merge","requiredBy":["cn"]}],"devDependencies":[],"files":[{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[],"standaloneContract":{"appliesTo":"standalone-feature-pack","consoleKitRequired":false,"hostOwns":["provider-neutral resources and resource states","policy grants and row-level action policy","semantic action callbacks and error reporting","controlled or default selection and routing state"],"discovery":"The standalone view performs no endpoint, _meta, introspection, session, or capability discovery.","state":"Use the feature pack controlled/default props and host state. The standalone surface does not impose Console Kit or Zustand.","authorizationBoundary":"Props describe the view the host may offer; provider policy, PostgreSQL privileges, and RLS remain authoritative.","consoleIntegration":"Install console-module-users when Console Kit should own Constructive discovery, routing, session, and adapters."},"runtimeContract":null,"registryDocumentation":"`feature-pack-users` installed a provider-neutral view and `.constructive/feature-packs/users.json`. Import from `@/blocks/feature-packs/users/users-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-users` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources or callbacks stay unavailable, while row policy, PostgreSQL privileges, RLS, and final-owner constraints decide mutations.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-auth-hardened.json b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-auth-hardened.json
index 5eb2d0e..79b92f5 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-auth-hardened.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-auth-hardened.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-auth-hardened","surface":"preset","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/preset-auth-hardened","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"preset-auth-hardened","title":"Hardened Authentication Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/auth-hardened-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-auth-hardened"],"sources":[{"registryItem":"preset-auth-hardened","path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth-hardened.json","targetKind":"project-root","type":"registry:file","owners":["preset-auth-hardened"],"sources":[{"registryItem":"preset-auth-hardened","path":"registry/constructive/blocks/presets/auth-hardened.json"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"auth-hardened","presetSlug":"auth:hardened","title":"Hardened authentication","description":"Data, authentication, and user-management feature packs.","stability":"stable","featurePacks":["data","auth","users"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-auth-hardened","surface":"preset","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/preset-auth-hardened","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"preset-auth-hardened","title":"Hardened Authentication Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/auth-hardened-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-auth-hardened"],"sources":[{"registryItem":"preset-auth-hardened","path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth-hardened.json","targetKind":"project-root","type":"registry:file","owners":["preset-auth-hardened"],"sources":[{"registryItem":"preset-auth-hardened","path":"registry/constructive/blocks/presets/auth-hardened.json"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"auth-hardened","presetSlug":"auth:hardened","title":"Hardened authentication","description":"Data, authentication, and user-management feature packs.","stability":"stable","featurePacks":["data","auth","users"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-b2b-storage.json b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-b2b-storage.json
index fcfb317..05e1c2a 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-b2b-storage.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-b2b-storage.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-b2b-storage","surface":"preset","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/preset-b2b-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"preset-b2b-storage","title":"B2B with Storage Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog","switch","radio-group"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users","feature-pack-organizations","feature-pack-storage"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/b2b-storage-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-b2b-storage"],"sources":[{"registryItem":"preset-b2b-storage","path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/b2b-storage.json","targetKind":"project-root","type":"registry:file","owners":["preset-b2b-storage"],"sources":[{"registryItem":"preset-b2b-storage","path":"registry/constructive/blocks/presets/b2b-storage.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"b2b-storage","presetSlug":"b2b:storage","title":"B2B with storage","description":"Data, authentication, users, organizations, and storage feature packs.","stability":"stable","featurePacks":["data","auth","users","organizations","storage"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-b2b-storage","surface":"preset","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/preset-b2b-storage","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"preset-b2b-storage","title":"B2B with Storage Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog","switch","radio-group"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users","feature-pack-organizations","feature-pack-storage"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/b2b-storage-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-b2b-storage"],"sources":[{"registryItem":"preset-b2b-storage","path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/b2b-storage.json","targetKind":"project-root","type":"registry:file","owners":["preset-b2b-storage"],"sources":[{"registryItem":"preset-b2b-storage","path":"registry/constructive/blocks/presets/b2b-storage.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"b2b-storage","presetSlug":"b2b:storage","title":"B2B with storage","description":"Data, authentication, users, organizations, and storage feature packs.","stability":"stable","featurePacks":["data","auth","users","organizations","storage"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-full.json b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-full.json
index f847184..af2ade8 100644
--- a/.agents/skills/constructive-blocks/references/install-plans.v1/preset-full.json
+++ b/.agents/skills/constructive-blocks/references/install-plans.v1/preset-full.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-full","surface":"preset","install":{"command":"pnpm dlx shadcn@4.13.1 add @constructive/preset-full","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]},{"name":"preset-full","title":"Full Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","console-module-billing","console-module-notifications","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog","switch","radio-group","progress"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users","feature-pack-organizations","feature-pack-storage","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets","billing-credits-card","billing-usage-overview"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/full-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/full.json","targetKind":"project-root","type":"registry:file","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full.json"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"full","presetSlug":"full","title":"Full","description":"Every first-release Constructive feature pack.","stability":"stable","featurePacks":["data","auth","users","organizations","storage","billing","notifications"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
+{"schemaVersion":1,"kind":"constructive.console-kit-install-plan","item":"preset-full","surface":"preset","install":{"command":"pnpm dlx shadcn@4.16.1 add @constructive/preset-full","prerequisites":["Run from an existing shadcn project root with components.json.","Keep the project aliases in components.json; targets beginning with @ are resolved through those aliases."],"componentsJson":{"registries":{"@constructive":"https://constructive-io.github.io/blocks/r/{name}.json"}}},"composition":{"registryItems":[{"name":"console-runtime","title":"Console Runtime","type":"registry:lib","directRegistryDependencies":[]},{"name":"console-feature-catalog","title":"Console Feature Catalog","type":"registry:lib","directRegistryDependencies":["console-runtime"]},{"name":"cn","title":"cn utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"constructive-theme","title":"Constructive Theme","type":"registry:theme","directRegistryDependencies":[]},{"name":"alert","title":"Alert","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"breadcrumb","title":"Breadcrumb","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"separator","title":"Separator","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"use-mobile","title":"useIsMobile","type":"registry:hook","directRegistryDependencies":[]},{"name":"slot","title":"Slot utility","type":"registry:lib","directRegistryDependencies":[]},{"name":"button","title":"Button","type":"registry:ui","directRegistryDependencies":["cn","slot","constructive-theme"]},{"name":"input","title":"Input","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"portal","title":"Portal","type":"registry:ui","directRegistryDependencies":["constructive-theme"]},{"name":"motion-config","title":"Motion Config","type":"registry:lib","directRegistryDependencies":[]},{"name":"use-controllable-state","title":"useControllableState","type":"registry:hook","directRegistryDependencies":[]},{"name":"sheet","title":"Sheet","type":"registry:ui","directRegistryDependencies":["cn","portal","motion-config","use-controllable-state","constructive-theme"]},{"name":"skeleton","title":"Skeleton","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"tooltip","title":"Tooltip","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"sidebar","title":"Sidebar","type":"registry:ui","directRegistryDependencies":["cn","use-mobile","button","input","separator","sheet","skeleton","tooltip","constructive-theme"]},{"name":"app-bar","title":"App Bar","type":"registry:block","directRegistryDependencies":["cn","breadcrumb","separator","sidebar","constructive-theme"]},{"name":"avatar","title":"Avatar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"collapsible","title":"Collapsible","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dropdown-menu","title":"Dropdown Menu","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"app-shell","title":"App Shell","type":"registry:block","directRegistryDependencies":["cn","app-bar","avatar","collapsible","dropdown-menu","sidebar","constructive-theme"]},{"name":"badge","title":"Badge","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"card","title":"Card","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"empty","title":"Empty","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"pack-foundation","title":"Feature Pack Foundation","type":"registry:lib","directRegistryDependencies":["alert","badge","button","card","cn","empty","skeleton"]},{"name":"popover","title":"Popover","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"console-kit-core","title":"Constructive Console Kit Core","type":"registry:block","directRegistryDependencies":["console-runtime","console-feature-catalog","alert","app-bar","app-shell","badge","button","cn","pack-foundation","popover","skeleton","constructive-theme"]},{"name":"alert-dialog","title":"Alert Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","constructive-theme"]},{"name":"calendar-rac","title":"Calendar","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"checkbox","title":"Checkbox","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"label","title":"Label","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"form-control","title":"Form Control","type":"registry:ui","directRegistryDependencies":["cn","slot","label","constructive-theme"]},{"name":"textarea","title":"Textarea","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"input-group","title":"Input Group","type":"registry:ui","directRegistryDependencies":["cn","input","textarea","constructive-theme"]},{"name":"pagination","title":"Pagination","type":"registry:ui","directRegistryDependencies":["cn","button","constructive-theme"]},{"name":"progressive-blur","title":"Progressive Blur","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"scroll-area","title":"Scroll Area","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"select","title":"Select","type":"registry:ui","directRegistryDependencies":["cn","portal","constructive-theme"]},{"name":"tabs","title":"Tabs","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"dialog","title":"Dialog","type":"registry:ui","directRegistryDependencies":["cn","portal","button","scroll-area","constructive-theme"]},{"name":"toast","title":"Toast Notifications","type":"registry:block","directRegistryDependencies":["button","dialog","constructive-theme"]},{"name":"sheets","title":"Sheets","type":"registry:block","directRegistryDependencies":["alert-dialog","badge","button","calendar-rac","card","checkbox","collapsible","dropdown-menu","form-control","input","input-group","label","pagination","popover","progressive-blur","scroll-area","select","skeleton","tabs","textarea","toast","tooltip","constructive-theme"]},{"name":"feature-pack-data","title":"Data Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","sheets","alert","button","card","constructive-theme"]},{"name":"console-module-data","title":"Data Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-data","console-feature-catalog","console-runtime","sheets","constructive-theme"]},{"name":"field","title":"Field","type":"registry:ui","directRegistryDependencies":["cn","label","separator","constructive-theme"]},{"name":"feature-pack-auth","title":"Authentication Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","card","checkbox","cn","field","input","input-group","separator","tabs","constructive-theme"]},{"name":"console-module-auth","title":"Authentication Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-auth","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"table","title":"Table","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-users","title":"App access Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","avatar","badge","button","checkbox","cn","dialog","dropdown-menu","empty","field","input","input-group","select","table","tabs","textarea","constructive-theme"]},{"name":"console-module-users","title":"App access Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-users","console-feature-catalog","constructive-theme"]},{"name":"switch","title":"Switch","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-organizations","title":"Organizations Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert-dialog","avatar","badge","button","card","checkbox","cn","dialog","dropdown-menu","empty","field","input","select","switch","table","tabs","textarea","constructive-theme"]},{"name":"console-module-organizations","title":"Organizations Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-organizations","console-feature-catalog","console-runtime","pack-foundation","constructive-theme"]},{"name":"radio-group","title":"Radio Group","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"feature-pack-storage","title":"Storage Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","cn","dialog","dropdown-menu","field","input","radio-group","table","constructive-theme"]},{"name":"console-module-storage","title":"Storage Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-storage","console-feature-catalog","console-runtime","constructive-theme"]},{"name":"billing-contracts","title":"Billing Contracts","type":"registry:lib","directRegistryDependencies":[]},{"name":"billing-ui","title":"Billing UI Helpers","type":"registry:lib","directRegistryDependencies":["badge","billing-contracts","cn"]},{"name":"billing-activity-table","title":"Billing Activity Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","sheet","skeleton","table","constructive-theme"]},{"name":"progress","title":"Progress","type":"registry:ui","directRegistryDependencies":["cn","constructive-theme"]},{"name":"billing-credits-card","title":"Billing Credits Card","type":"registry:block","directRegistryDependencies":["alert","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-entitlements-list","title":"Billing Entitlements List","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","tooltip","constructive-theme"]},{"name":"billing-pricing-table","title":"Billing Pricing Table","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","select","separator","skeleton","constructive-theme"]},{"name":"billing-subscription-card","title":"Billing Subscription Card","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","skeleton","constructive-theme"]},{"name":"billing-usage-history","title":"Billing Usage History","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","field","pagination","select","separator","skeleton","table","constructive-theme"]},{"name":"billing-usage-overview","title":"Billing Usage Overview","type":"registry:block","directRegistryDependencies":["alert","badge","billing-contracts","billing-ui","button","card","cn","collapsible","progress","skeleton","tooltip","constructive-theme"]},{"name":"billing-settings-page","title":"Billing Settings Page","type":"registry:block","directRegistryDependencies":["alert","badge","billing-activity-table","billing-contracts","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","cn","separator","tabs","tooltip","constructive-theme"]},{"name":"feature-pack-billing","title":"Billing Feature Pack","type":"registry:block","directRegistryDependencies":["billing-settings-page","constructive-theme"]},{"name":"console-module-billing","title":"Billing Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-billing","billing-contracts","console-feature-catalog","constructive-theme"]},{"name":"feature-pack-notifications","title":"Notifications Feature Pack","type":"registry:block","directRegistryDependencies":["pack-foundation","alert","alert-dialog","badge","button","card","separator","constructive-theme"]},{"name":"console-module-notifications","title":"Notifications Console Module","type":"registry:block","directRegistryDependencies":["console-kit-core","feature-pack-notifications","console-feature-catalog","constructive-theme"]},{"name":"preset-full","title":"Full Preset","type":"registry:block","directRegistryDependencies":["console-kit-core","console-module-data","console-module-auth","console-module-users","console-module-organizations","console-module-storage","console-module-billing","console-module-notifications","constructive-theme"]}],"npmDependencies":[{"name":"@base-ui/react","requiredBy":["separator","input","sheet","tooltip","sidebar","app-bar","avatar","collapsible","dropdown-menu","app-shell","popover","alert-dialog","checkbox","scroll-area","select","tabs","dialog","switch","radio-group","progress"]},{"name":"@constructive-io/data@^0.5.0","requiredBy":["console-kit-core","sheets","feature-pack-data"]},{"name":"@internationalized/date","requiredBy":["calendar-rac","sheets"]},{"name":"@remixicon/react","requiredBy":["sheets"]},{"name":"@tanstack/react-form","requiredBy":["sheets"]},{"name":"@tanstack/react-query","requiredBy":["console-kit-core","sheets"]},{"name":"@tanstack/react-table@9.0.0-beta.58","requiredBy":["sheets"]},{"name":"@tanstack/react-virtual","requiredBy":["sheets"]},{"name":"@types/leaflet","requiredBy":["sheets"]},{"name":"class-variance-authority","requiredBy":["alert","button","sheet","sidebar","badge","card"]},{"name":"clsx","requiredBy":["cn","sheets"]},{"name":"graphql","requiredBy":["console-kit-core","sheets"]},{"name":"inflekt","requiredBy":["sheets"]},{"name":"leaflet","requiredBy":["sheets"]},{"name":"lucide-react","requiredBy":["breadcrumb","sheet","sidebar","dropdown-menu","app-shell","pack-foundation","console-kit-core","input-group","pagination","select","dialog","toast","sheets","feature-pack-data","feature-pack-auth","feature-pack-users","feature-pack-organizations","feature-pack-storage","billing-credits-card","billing-entitlements-list","billing-pricing-table","billing-subscription-card","billing-usage-history","billing-usage-overview","billing-settings-page","feature-pack-notifications"]},{"name":"motion","requiredBy":["motion-config","sheet","sheets","billing-credits-card","billing-usage-overview"]},{"name":"react-aria-components","requiredBy":["calendar-rac","sheets"]},{"name":"react-leaflet","requiredBy":["sheets"]},{"name":"sonner","requiredBy":["toast"]},{"name":"tailwind-merge","requiredBy":["cn","sheets"]},{"name":"zod","requiredBy":["console-feature-catalog","sheets"]},{"name":"zustand","requiredBy":["console-kit-core","sheets"]}],"devDependencies":[],"files":[{"target":"@hooks/use-controllable-state.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-controllable-state"],"sources":[{"registryItem":"use-controllable-state","path":"registry/constructive/hooks/use-controllable-state.ts"}]},{"target":"@hooks/use-mobile.ts","targetKind":"shadcn-alias","type":"registry:hook","owners":["use-mobile"],"sources":[{"registryItem":"use-mobile","path":"registry/constructive/hooks/use-mobile.ts"}]},{"target":"@lib/motion/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["motion-config"],"sources":[{"registryItem":"motion-config","path":"registry/constructive/lib/motion/motion-config.ts"}]},{"target":"@lib/slot.tsx","targetKind":"shadcn-alias","type":"registry:lib","owners":["slot"],"sources":[{"registryItem":"slot","path":"registry/constructive/lib/slot.tsx"}]},{"target":"@lib/utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["cn"],"sources":[{"registryItem":"cn","path":"registry/constructive/lib/utils.ts"}]},{"target":"@ui/alert-dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert-dialog"],"sources":[{"registryItem":"alert-dialog","path":"registry/constructive/ui/alert-dialog.tsx"}]},{"target":"@ui/alert.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["alert"],"sources":[{"registryItem":"alert","path":"registry/constructive/ui/alert.tsx"}]},{"target":"@ui/app-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-bar"],"sources":[{"registryItem":"app-bar","path":"registry/constructive/blocks/app-bar.tsx"}]},{"target":"@ui/app-shell.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["app-shell"],"sources":[{"registryItem":"app-shell","path":"registry/constructive/blocks/app-shell.tsx"}]},{"target":"@ui/avatar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["avatar"],"sources":[{"registryItem":"avatar","path":"registry/constructive/ui/avatar.tsx"}]},{"target":"@ui/badge.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["badge"],"sources":[{"registryItem":"badge","path":"registry/constructive/ui/badge.tsx"}]},{"target":"@ui/breadcrumb.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["breadcrumb"],"sources":[{"registryItem":"breadcrumb","path":"registry/constructive/ui/breadcrumb.tsx"}]},{"target":"@ui/button.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["button"],"sources":[{"registryItem":"button","path":"registry/constructive/ui/button.tsx"}]},{"target":"@ui/calendar-rac.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["calendar-rac"],"sources":[{"registryItem":"calendar-rac","path":"registry/constructive/ui/calendar-rac.tsx"}]},{"target":"@ui/card.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["card"],"sources":[{"registryItem":"card","path":"registry/constructive/ui/card.tsx"}]},{"target":"@ui/checkbox.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["checkbox"],"sources":[{"registryItem":"checkbox","path":"registry/constructive/ui/checkbox.tsx"}]},{"target":"@ui/collapsible.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["collapsible"],"sources":[{"registryItem":"collapsible","path":"registry/constructive/ui/collapsible.tsx"}]},{"target":"@ui/dialog.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dialog"],"sources":[{"registryItem":"dialog","path":"registry/constructive/ui/dialog.tsx"}]},{"target":"@ui/dropdown-menu.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["dropdown-menu"],"sources":[{"registryItem":"dropdown-menu","path":"registry/constructive/ui/dropdown-menu.tsx"}]},{"target":"@ui/empty.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["empty"],"sources":[{"registryItem":"empty","path":"registry/constructive/ui/empty.tsx"}]},{"target":"@ui/field.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["field"],"sources":[{"registryItem":"field","path":"registry/constructive/ui/field.tsx"}]},{"target":"@ui/form-control.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["form-control"],"sources":[{"registryItem":"form-control","path":"registry/constructive/ui/form-control.tsx"}]},{"target":"@ui/input-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input-group"],"sources":[{"registryItem":"input-group","path":"registry/constructive/ui/input-group.tsx"}]},{"target":"@ui/input.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["input"],"sources":[{"registryItem":"input","path":"registry/constructive/ui/input.tsx"}]},{"target":"@ui/label.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["label"],"sources":[{"registryItem":"label","path":"registry/constructive/ui/label.tsx"}]},{"target":"@ui/pagination.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["pagination"],"sources":[{"registryItem":"pagination","path":"registry/constructive/ui/pagination.tsx"}]},{"target":"@ui/popover.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["popover"],"sources":[{"registryItem":"popover","path":"registry/constructive/ui/popover.tsx"}]},{"target":"@ui/portal.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["portal"],"sources":[{"registryItem":"portal","path":"registry/constructive/ui/portal.tsx"}]},{"target":"@ui/progress.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progress"],"sources":[{"registryItem":"progress","path":"registry/constructive/ui/progress.tsx"}]},{"target":"@ui/progressive-blur.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["progressive-blur"],"sources":[{"registryItem":"progressive-blur","path":"registry/constructive/ui/progressive-blur.tsx"}]},{"target":"@ui/radio-group.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["radio-group"],"sources":[{"registryItem":"radio-group","path":"registry/constructive/ui/radio-group.tsx"}]},{"target":"@ui/scroll-area.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["scroll-area"],"sources":[{"registryItem":"scroll-area","path":"registry/constructive/ui/scroll-area.tsx"}]},{"target":"@ui/select.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["select"],"sources":[{"registryItem":"select","path":"registry/constructive/ui/select.tsx"}]},{"target":"@ui/separator.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["separator"],"sources":[{"registryItem":"separator","path":"registry/constructive/ui/separator.tsx"}]},{"target":"@ui/sheet.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sheet"],"sources":[{"registryItem":"sheet","path":"registry/constructive/ui/sheet.tsx"}]},{"target":"@ui/sheets/adapter/postgraphile-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts"}]},{"target":"@ui/sheets/adapter/sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts"}]},{"target":"@ui/sheets/adapter/use-sheets-adapter.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts"}]},{"target":"@ui/sheets/advanced.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/advanced.ts"}]},{"target":"@ui/sheets/auth/auth-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-execute.ts"}]},{"target":"@ui/sheets/auth/auth-gate.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx"}]},{"target":"@ui/sheets/auth/auth-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/auth-types.ts"}]},{"target":"@ui/sheets/auth/hooks/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/index.ts"}]},{"target":"@ui/sheets/auth/hooks/use-forgot-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts"}]},{"target":"@ui/sheets/auth/hooks/use-login.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts"}]},{"target":"@ui/sheets/auth/hooks/use-register.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts"}]},{"target":"@ui/sheets/auth/hooks/use-reset-password.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts"}]},{"target":"@ui/sheets/auth/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/index.ts"}]},{"target":"@ui/sheets/auth/ui/auth-error-alert.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-loading-button.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-header.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx"}]},{"target":"@ui/sheets/auth/ui/auth-screen-layout.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx"}]},{"target":"@ui/sheets/auth/ui/forgot-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx"}]},{"target":"@ui/sheets/auth/ui/form-field.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx"}]},{"target":"@ui/sheets/auth/ui/login-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx"}]},{"target":"@ui/sheets/auth/ui/password-strength.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx"}]},{"target":"@ui/sheets/auth/ui/register-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx"}]},{"target":"@ui/sheets/auth/ui/reset-password-form.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx"}]},{"target":"@ui/sheets/auth/utils/auth-errors.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts"}]},{"target":"@ui/sheets/auth/utils/schemas.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts"}]},{"target":"@ui/sheets/auth/utils/token-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts"}]},{"target":"@ui/sheets/auth/utils/validators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/auth/utils/validators.ts"}]},{"target":"@ui/sheets/cell-model/badge-tones.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts"}]},{"target":"@ui/sheets/cell-model/cell-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts"}]},{"target":"@ui/sheets/cell-model/cell-slots.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts"}]},{"target":"@ui/sheets/cell-model/create-sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/factories/badges.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts"}]},{"target":"@ui/sheets/cell-model/factories/boolean.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts"}]},{"target":"@ui/sheets/cell-model/factories/datetime.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts"}]},{"target":"@ui/sheets/cell-model/factories/geometry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts"}]},{"target":"@ui/sheets/cell-model/factories/image.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts"}]},{"target":"@ui/sheets/cell-model/factories/interval.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts"}]},{"target":"@ui/sheets/cell-model/factories/number.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts"}]},{"target":"@ui/sheets/cell-model/factories/relation.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts"}]},{"target":"@ui/sheets/cell-model/factories/text.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts"}]},{"target":"@ui/sheets/cell-model/factories/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts"}]},{"target":"@ui/sheets/cell-model/factories/uri.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts"}]},{"target":"@ui/sheets/cell-model/image-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts"}]},{"target":"@ui/sheets/cell-model/sheets-cell.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts"}]},{"target":"@ui/sheets/cell-model/views/badges-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/boolean-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/datetime-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/draft-action-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/geometry-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/image-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/interval-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/loading-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/number-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/relation-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/text-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx"}]},{"target":"@ui/sheets/cell-model/views/uri-view.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx"}]},{"target":"@ui/sheets/cell-types/cell-registry-defaults.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts"}]},{"target":"@ui/sheets/cell-types/cell-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-groups.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts"}]},{"target":"@ui/sheets/cell-types/cell-type-resolver.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts"}]},{"target":"@ui/sheets/cell-types/define-cell-type.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts"}]},{"target":"@ui/sheets/cell-types/type-mapping.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts"}]},{"target":"@ui/sheets/cell-types/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/cell-types/types.ts"}]},{"target":"@ui/sheets/commands/context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/context.ts"}]},{"target":"@ui/sheets/commands/dispatch.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/dispatch.ts"}]},{"target":"@ui/sheets/commands/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/index.ts"}]},{"target":"@ui/sheets/commands/keybinding.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keybinding.ts"}]},{"target":"@ui/sheets/commands/keymap.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/keymap.ts"}]},{"target":"@ui/sheets/commands/registry.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/registry.ts"}]},{"target":"@ui/sheets/commands/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/commands/types.ts"}]},{"target":"@ui/sheets/config/sheets-concurrency.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts"}]},{"target":"@ui/sheets/context/sheets-context.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-context.ts"}]},{"target":"@ui/sheets/context/sheets-execute.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-execute.ts"}]},{"target":"@ui/sheets/context/sheets-provider.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx"}]},{"target":"@ui/sheets/context/sheets-upload-presigned.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts"}]},{"target":"@ui/sheets/forms/form-spec-builder.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts"}]},{"target":"@ui/sheets/forms/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/index.ts"}]},{"target":"@ui/sheets/forms/metadata-hash.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts"}]},{"target":"@ui/sheets/forms/mutations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/mutations.ts"}]},{"target":"@ui/sheets/forms/types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/types.ts"}]},{"target":"@ui/sheets/forms/zod-schema.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/forms/zod-schema.ts"}]},{"target":"@ui/sheets/grid-dom/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/edit-intent.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-props.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts"}]},{"target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts"}]},{"target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/number-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/text-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/inline-cell-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx"}]},{"target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts"}]},{"target":"@ui/sheets/grid-dom/sheets-cell-host.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx"}]},{"target":"@ui/sheets/grid-dom/use-sheets-content.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts"}]},{"target":"@ui/sheets/grid/cell-routing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/cell-routing.ts"}]},{"target":"@ui/sheets/grid/draft-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/draft-types.ts"}]},{"target":"@ui/sheets/grid/editors/array-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/date-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/editor-focus-trap.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx"}]},{"target":"@ui/sheets/grid/editors/geometry-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/image-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/inet-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/interval-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/json-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/overlay-presets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts"}]},{"target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx"}]},{"target":"@ui/sheets/grid/editors/tsvector-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/upload-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx"}]},{"target":"@ui/sheets/grid/editors/url-editor.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx"}]},{"target":"@ui/sheets/grid/feedback/dock-status-bar.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx"}]},{"target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-context.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx"}]},{"target":"@ui/sheets/grid/feedback/feedback-reducer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts"}]},{"target":"@ui/sheets/grid/feedback/floating-status.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx"}]},{"target":"@ui/sheets/grid/feedback/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/index.ts"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx"}]},{"target":"@ui/sheets/grid/feedback/sheets-error-state.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx"}]},{"target":"@ui/sheets/grid/filter-operators.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/filter-operators.ts"}]},{"target":"@ui/sheets/grid/grid-cell-types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts"}]},{"target":"@ui/sheets/grid/hooks/use-batch-commit.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts"}]},{"target":"@ui/sheets/grid/hooks/use-cell-editing.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-rows.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts"}]},{"target":"@ui/sheets/grid/hooks/use-draft-submission.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts"}]},{"target":"@ui/sheets/grid/hooks/use-filter-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-operations.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-selection.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts"}]},{"target":"@ui/sheets/grid/hooks/use-grid-state.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts"}]},{"target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts"}]},{"target":"@ui/sheets/grid/hooks/use-load-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-paginate-grid.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts"}]},{"target":"@ui/sheets/grid/hooks/use-undo-redo.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts"}]},{"target":"@ui/sheets/grid/row-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/row-model.ts"}]},{"target":"@ui/sheets/grid/sheets.constants.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts"}]},{"target":"@ui/sheets/grid/sheets.context-menu.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx"}]},{"target":"@ui/sheets/grid/sheets.controls.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx"}]},{"target":"@ui/sheets/grid/sheets.formatters.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts"}]},{"target":"@ui/sheets/grid/sheets.pagination.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx"}]},{"target":"@ui/sheets/grid/sheets.table-selector.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx"}]},{"target":"@ui/sheets/grid/sheets.theme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts"}]},{"target":"@ui/sheets/grid/sheets.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.tsx"}]},{"target":"@ui/sheets/grid/sheets.types.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.types.ts"}]},{"target":"@ui/sheets/grid/sheets.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts"}]},{"target":"@ui/sheets/grid/use-sheets.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/grid/use-sheets.ts"}]},{"target":"@ui/sheets/hooks/orderby-enum-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts"}]},{"target":"@ui/sheets/hooks/query-keys.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/query-keys.ts"}]},{"target":"@ui/sheets/hooks/relation-field-resolution.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts"}]},{"target":"@ui/sheets/hooks/use-relation-columns.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts"}]},{"target":"@ui/sheets/hooks/use-relation-metadata-cache.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-infinite-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-meta.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table-cursor.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-table.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts"}]},{"target":"@ui/sheets/hooks/use-sheets-upload.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts"}]},{"target":"@ui/sheets/index.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/index.ts"}]},{"target":"@ui/sheets/row-identity.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/row-identity.ts"}]},{"target":"@ui/sheets/selection/cell-extract.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/cell-extract.ts"}]},{"target":"@ui/sheets/selection/fill.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/fill.ts"}]},{"target":"@ui/sheets/selection/range-set.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/range-set.ts"}]},{"target":"@ui/sheets/selection/selection-model.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/selection-model.ts"}]},{"target":"@ui/sheets/selection/tsv.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/selection/tsv.ts"}]},{"target":"@ui/sheets/store/draft-rows-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts"}]},{"target":"@ui/sheets/store/relation-info-slice.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts"}]},{"target":"@ui/sheets/store/sheets-store.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/store/sheets-store.ts"}]},{"target":"@ui/sheets/table/features.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/features.ts"}]},{"target":"@ui/sheets/table/grid-viewport.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx"}]},{"target":"@ui/sheets/table/use-sheets-table-instance.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts"}]},{"target":"@ui/sheets/utils/cn.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/cn.ts"}]},{"target":"@ui/sheets/utils/file.utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/file.utils.ts"}]},{"target":"@ui/sheets/utils/image-with-fallback.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx"}]},{"target":"@ui/sheets/utils/map-picker.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/map-picker.tsx"}]},{"target":"@ui/sheets/utils/motion-config.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/motion-config.ts"}]},{"target":"@ui/sheets/utils/relation-utils.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/relation-utils.ts"}]},{"target":"@ui/sheets/utils/sheets-i18n.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts"}]},{"target":"@ui/sheets/utils/sheets-logger.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts"}]},{"target":"@ui/sheets/utils/use-color-scheme.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts"}]},{"target":"@ui/sheets/utils/use-image-status.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-image-status.ts"}]},{"target":"@ui/sheets/utils/use-resize-observer.ts","targetKind":"shadcn-alias","type":"registry:lib","owners":["sheets"],"sources":[{"registryItem":"sheets","path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts"}]},{"target":"@ui/sidebar.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["sidebar"],"sources":[{"registryItem":"sidebar","path":"registry/constructive/ui/sidebar.tsx"}]},{"target":"@ui/skeleton.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["skeleton"],"sources":[{"registryItem":"skeleton","path":"registry/constructive/ui/skeleton.tsx"}]},{"target":"@ui/switch.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["switch"],"sources":[{"registryItem":"switch","path":"registry/constructive/ui/switch.tsx"}]},{"target":"@ui/table.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["table"],"sources":[{"registryItem":"table","path":"registry/constructive/ui/table.tsx"}]},{"target":"@ui/tabs.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tabs"],"sources":[{"registryItem":"tabs","path":"registry/constructive/ui/tabs.tsx"}]},{"target":"@ui/textarea.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["textarea"],"sources":[{"registryItem":"textarea","path":"registry/constructive/ui/textarea.tsx"}]},{"target":"@ui/toast/index.ts","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/index.ts"}]},{"target":"@ui/toast/toast-error.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-error.tsx"}]},{"target":"@ui/toast/toast-info.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-info.tsx"}]},{"target":"@ui/toast/toast-success.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-success.tsx"}]},{"target":"@ui/toast/toast-warning.tsx","targetKind":"shadcn-alias","type":"registry:component","owners":["toast"],"sources":[{"registryItem":"toast","path":"registry/constructive/blocks/toast/toast-warning.tsx"}]},{"target":"@ui/tooltip.tsx","targetKind":"shadcn-alias","type":"registry:ui","owners":["tooltip"],"sources":[{"registryItem":"tooltip","path":"registry/constructive/ui/tooltip.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx"}]},{"target":"src/blocks/billing/billing-activity-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-activity-table"],"sources":[{"registryItem":"billing-activity-table","path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts"}]},{"target":"src/blocks/billing/billing-contracts/billing-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["billing-contracts"],"sources":[{"registryItem":"billing-contracts","path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts"}]},{"target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx"}]},{"target":"src/blocks/billing/billing-credits-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-credits-card"],"sources":[{"registryItem":"billing-credits-card","path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts"}]},{"target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"}]},{"target":"src/blocks/billing/billing-entitlements-list/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-entitlements-list"],"sources":[{"registryItem":"billing-entitlements-list","path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts"}]},{"target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"}]},{"target":"src/blocks/billing/billing-pricing-table/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-pricing-table"],"sources":[{"registryItem":"billing-pricing-table","path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts"}]},{"target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx"}]},{"target":"src/blocks/billing/billing-settings-page/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-settings-page"],"sources":[{"registryItem":"billing-settings-page","path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts"}]},{"target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"}]},{"target":"src/blocks/billing/billing-subscription-card/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-subscription-card"],"sources":[{"registryItem":"billing-subscription-card","path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts"}]},{"target":"src/blocks/billing/billing-ui/billing-ui.tsx","targetKind":"literal","type":"registry:lib","owners":["billing-ui"],"sources":[{"registryItem":"billing-ui","path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx"}]},{"target":"src/blocks/billing/billing-usage-history/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-history"],"sources":[{"registryItem":"billing-usage-history","path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts"}]},{"target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"}]},{"target":"src/blocks/billing/billing-usage-overview/messages.ts","targetKind":"literal","type":"registry:component","owners":["billing-usage-overview"],"sources":[{"registryItem":"billing-usage-overview","path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts"}]},{"target":"src/blocks/console-kit/console-connection-menu.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx"}]},{"target":"src/blocks/console-kit/console-kit-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts"}]},{"target":"src/blocks/console-kit/console-kit-core.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-core.tsx"}]},{"target":"src/blocks/console-kit/console-kit-routes.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-routes.ts"}]},{"target":"src/blocks/console-kit/console-kit-runtime.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx"}]},{"target":"src/blocks/console-kit/console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/auth-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/billing-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx"}]},{"target":"src/blocks/console-kit/constructive/constructive-graphql.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts"}]},{"target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts"}]},{"target":"src/blocks/console-kit/constructive/notifications-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/organizations-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/storage-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts"}]},{"target":"src/blocks/console-kit/constructive/users-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts"}]},{"target":"src/blocks/console-kit/feature-module.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/feature-module.ts"}]},{"target":"src/blocks/console-kit/store/adapter-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts"}]},{"target":"src/blocks/console-kit/store/console-kit-store.tsx","targetKind":"literal","type":"registry:component","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx"}]},{"target":"src/blocks/console-kit/store/context-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/context-slice.ts"}]},{"target":"src/blocks/console-kit/store/endpoint-capability-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts"}]},{"target":"src/blocks/console-kit/store/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/index.ts"}]},{"target":"src/blocks/console-kit/store/navigation-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts"}]},{"target":"src/blocks/console-kit/store/runtime-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts"}]},{"target":"src/blocks/console-kit/store/session-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/store/session-slice.ts"}]},{"target":"src/blocks/console-kit/use-latest-callback.ts","targetKind":"literal","type":"registry:lib","owners":["console-kit-core"],"sources":[{"registryItem":"console-kit-core","path":"registry/constructive/blocks/console-kit/use-latest-callback.ts"}]},{"target":"src/blocks/console-runtime/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/capabilities.ts"}]},{"target":"src/blocks/console-runtime/endpoints.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/endpoints.ts"}]},{"target":"src/blocks/console-runtime/feature-adapter.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/feature-adapter.ts"}]},{"target":"src/blocks/console-runtime/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/index.ts"}]},{"target":"src/blocks/console-runtime/session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/session.ts"}]},{"target":"src/blocks/console-runtime/standalone-session.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/standalone-session.ts"}]},{"target":"src/blocks/console-runtime/transport.ts","targetKind":"literal","type":"registry:lib","owners":["console-runtime"],"sources":[{"registryItem":"console-runtime","path":"registry/constructive/blocks/console-runtime/transport.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-account-view.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-auth"],"sources":[{"registryItem":"console-module-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts"}]},{"target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/auth/auth-password-policy.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts"}]},{"target":"src/blocks/feature-packs/billing/billing-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-billing"],"sources":[{"registryItem":"console-module-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx"}]},{"target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/data/data-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-data"],"sources":[{"registryItem":"console-module-data","path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx"}]},{"target":"src/blocks/feature-packs/data/data-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-notifications"],"sources":[{"registryItem":"console-module-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx"}]},{"target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-organizations"],"sources":[{"registryItem":"console-module-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts","targetKind":"literal","type":"registry:lib","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts"}]},{"target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx","targetKind":"literal","type":"registry:component","owners":["pack-foundation"],"sources":[{"registryItem":"pack-foundation","path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-console-slice.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts"}]},{"target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx"}]},{"target":"src/blocks/feature-packs/storage/storage-meta-contract.ts","targetKind":"literal","type":"registry:lib","owners":["console-module-storage"],"sources":[{"registryItem":"console-module-storage","path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts"}]},{"target":"src/blocks/feature-packs/users/users-console-module.tsx","targetKind":"literal","type":"registry:component","owners":["console-module-users"],"sources":[{"registryItem":"console-module-users","path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx"}]},{"target":"src/blocks/feature-packs/users/users-feature-pack.tsx","targetKind":"literal","type":"registry:component","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx"}]},{"target":"src/blocks/presets/full-console-kit.tsx","targetKind":"literal","type":"registry:component","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full-console-kit.tsx"}]},{"target":"src/feature-packs/capabilities.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/capabilities.ts"}]},{"target":"src/feature-packs/catalog-validation.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog-validation.ts"}]},{"target":"src/feature-packs/catalog.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/catalog.ts"}]},{"target":"src/feature-packs/index.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/index.ts"}]},{"target":"src/feature-packs/manifest.ts","targetKind":"literal","type":"registry:lib","owners":["console-feature-catalog"],"sources":[{"registryItem":"console-feature-catalog","path":"registry/constructive/feature-packs/manifest.ts"}]},{"target":"~/.constructive/feature-packs/auth.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-auth"],"sources":[{"registryItem":"feature-pack-auth","path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/billing.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-billing"],"sources":[{"registryItem":"feature-pack-billing","path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/data.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-data"],"sources":[{"registryItem":"feature-pack-data","path":"registry/constructive/blocks/feature-packs/data/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/full.json","targetKind":"project-root","type":"registry:file","owners":["preset-full"],"sources":[{"registryItem":"preset-full","path":"registry/constructive/blocks/presets/full.json"}]},{"target":"~/.constructive/feature-packs/notifications.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-notifications"],"sources":[{"registryItem":"feature-pack-notifications","path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/organizations.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-organizations"],"sources":[{"registryItem":"feature-pack-organizations","path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/storage.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-storage"],"sources":[{"registryItem":"feature-pack-storage","path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json"}]},{"target":"~/.constructive/feature-packs/users.json","targetKind":"project-root","type":"registry:file","owners":["feature-pack-users"],"sources":[{"registryItem":"feature-pack-users","path":"registry/constructive/blocks/feature-packs/users/feature-pack.json"}]}]},"featurePacks":[{"schemaVersion":1,"id":"data","title":"Data","description":"Dynamic table exploration and CRUD surfaces driven by Constructive metadata and GraphQL introspection.","dependencies":[],"endpoints":{"required":["data"],"optional":[]},"capabilities":{"required":["data.meta","data.introspection"],"optional":["data.search","data.i18n","data.realtime"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","search","i18n","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"auth","title":"Authentication","description":"Consumer sign-in, account profile, password, and session-management surfaces.","dependencies":[],"endpoints":{"required":["auth"],"optional":[]},"capabilities":{"required":["auth.sessions","auth.credentials","auth.password"],"optional":["auth.email","auth.connected-accounts","auth.identity-providers","auth.passkeys","auth.phone","auth.devices"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"users","title":"App access","description":"Application member governance, lifecycle controls, profiles, permission grants, and invitations.","dependencies":[],"endpoints":{"required":["admin"],"optional":["auth"]},"capabilities":{"required":["users.directory","users.memberships"],"optional":["users.permissions","users.profiles","users.invites"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"organizations","title":"Organizations","description":"Tenant membership governance, invitations, access policy, hierarchy, settings, and developer credentials.","dependencies":[],"endpoints":{"required":[],"optional":["admin","auth","billing","data"]},"capabilities":{"required":["organizations.memberships"],"optional":["organizations.permissions","organizations.limits","organizations.profiles","organizations.hierarchy","organizations.invites"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"storage","title":"Storage","description":"Policy-aware bucket navigation, uploads, downloads, and object deletion.","dependencies":[],"endpoints":{"required":[],"optional":["storage","admin","data"]},"capabilities":{"required":["storage.buckets","storage.files"],"optional":["storage.versioning","storage.content-hash","storage.custom-keys","storage.audit-log"]},"metadata":{"requiredMetaSections":["tables","fields","constraints","relations","query","scope"],"optionalMetaSections":["encoding","storage"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"billing","title":"Billing","description":"Plans, subscriptions, entitlement meters, usage, credits, and account activity.","dependencies":[],"endpoints":{"required":[],"optional":["billing","admin","data"]},"capabilities":{"required":["billing.plans","billing.subscriptions"],"optional":["billing.meters"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}},{"schemaVersion":1,"id":"notifications","title":"Notifications","description":"User notification inbox and read-state actions with optional settings and realtime capabilities.","dependencies":[],"endpoints":{"required":[],"optional":["notifications","auth","data"]},"capabilities":{"required":["notifications.inbox"],"optional":["notifications.settings","notifications.realtime"]},"metadata":{"requiredMetaSections":[],"optionalMetaSections":["tables","fields","constraints","relations","query","scope","encoding","realtime"],"requiredIntrospectionSections":["root-operations","types","input-objects"],"optionalIntrospectionSections":["enums","directives"]}}],"presetProfiles":[{"schemaVersion":1,"id":"full","presetSlug":"full","title":"Full","description":"Every first-release Constructive feature pack.","stability":"stable","featurePacks":["data","auth","users","organizations","storage","billing","notifications"]}],"standaloneContract":null,"runtimeContract":{"appliesTo":"console-kit","tenantDescriptor":{"type":"ConstructiveTenantDatabase","requiredFields":["id","endpoints"],"optionalFields":["name"],"endpointKinds":["data","auth","admin","billing","storage","notifications"],"endpointValue":"string | { id?: string; url: string }","rules":["Use the secret-free descriptor returned by provisioning.","Pass explicit semantic endpoints; never derive sibling hosts or private routing headers.","A host-owned session must declare the same databaseId."]},"routing":{"type":"ConsoleKitRoute","sourceTarget":"src/blocks/console-kit/console-kit-routes.ts","internalOwnership":"Omit routes.route and optionally pass routes.defaultRoute.","controlledProps":["route","getHref","onRouteChange","renderLink"],"initialRouteProp":"defaultRoute"},"state":{"factory":"createConsoleKitStore","architecture":"one per-instance Zustand store with modular slices","hostStoreRule":"Create a host-owned store with every installed module storeSlice contribution.","resetScope":["database","identity"],"forbidden":["credentials in Zustand","a process-wide Console Kit store","a second provider or state system per feature pack"]},"authentication":{"internalSession":"When an auth endpoint is present and no host session is passed, ConstructiveConsoleKitCore creates a database-scoped standalone session that supports sign-in, sign-up, restoration, and authentication-failure handling.","hostSession":"Without a routable auth endpoint, pass a host-owned session whose databaseId exactly matches the tenant descriptor. A mismatch fails closed.","csrf":"Pass csrfTokenProvider when the tenant enables require_csrf_for_auth.","callback":"By default the browser wrapper parses the current URL and scrubs recognized callback credentials. Pass callback={false} only when the host owns the complete callback lifecycle.","credentials":"Callback credentials stay in a closure-owned vault and session credentials stay in the database-scoped session; neither belongs in Zustand or component props."},"evidenceOrder":["explicit endpoint resolution","current _meta","GraphQL introspection","authenticated resource reads"],"metadataStates":["checking","compatible","incompatible","error"],"featureAvailabilityStates":["checking","available","unavailable","unauthorized","incompatible","error"],"capabilityStates":["checking","ready","partial","unavailable"],"degradedBehavior":"Installed Console modules stay fail-closed when required public evidence is absent. Standalone feature packs render only the resource, policy, actions, and state supplied by their host.","authorizationBoundary":"Registry installation and schema discovery never grant authority. PostgreSQL privileges and RLS remain authoritative for every request.","diagnostics":"Set showDiagnostics on ConstructiveConsoleKit/Core only outside production to expose endpoint and capability evidence. Retry after correcting the host endpoint map; do not infer sibling endpoints or operator authority."},"registryDocumentation":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","verify":{"runFrom":"consumer project root after installation","prerequisites":["Install the consumer project dependencies before running these commands.","Provide no live tenant or credentials for static verification."],"commands":["pnpm exec tsc --noEmit","pnpm build"],"manualChecks":["Confirm .constructive/feature-packs/data.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/auth.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/users.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/organizations.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/storage.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/billing.json exists and matches the endpoint, capability, and metadata requirements in this plan.","Confirm .constructive/feature-packs/notifications.json exists and matches the endpoint, capability, and metadata requirements in this plan.","During integration, render with showDiagnostics enabled only outside production and resolve every unexpected endpoint or capability state.","Exercise authenticated reads and writes with the intended tenant role; schema evidence does not prove RLS authority."]}}
diff --git a/.agents/skills/constructive-blocks/references/install-roots.v1.json b/.agents/skills/constructive-blocks/references/install-roots.v1.json
index 3deb7a6..cf86a5b 100644
--- a/.agents/skills/constructive-blocks/references/install-roots.v1.json
+++ b/.agents/skills/constructive-blocks/references/install-roots.v1.json
@@ -4,7 +4,7 @@
"source": {
"repository": "https://github.com/constructive-io/blocks",
"branch": "feat/app-kit",
- "commit": "c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b",
+ "commit": "1a72e5d95f7ce4a243cd4536ed78c638708d538c",
"inspector": {
"schemaVersion": 1,
"kind": "constructive.console-kit-install-roots",
@@ -26,15 +26,15 @@
},
"registryCatalog": {
"path": "references/registry-catalog.v1.json",
- "sha256": "2016d63aa23228e9233f6046acf2167c8cd1ae0f3fc162341e91523cdc0286d8"
+ "sha256": "4a5fd029f66e146b4218e47f86ba35fcbbf2572faaa274fc0a3c30088304ba66"
},
"registryContent": {
"path": "references/registry-content.v1.json",
- "sha256": "d809cd9fb01594de4d067e4900872ae0c2687cacf61fb73cd86f5abe9de0d8d0"
+ "sha256": "15908ba4f3c30d4b0da8424f796df1a376f7f24f58a23554ad2282812a829ec4"
},
"packageResolutions": {
"path": "references/package-resolutions.v1.json",
- "sha256": "359b993ab97f40ebbd6f359442ace30d6f341268bfdfdd0749a6d68855f8f29a"
+ "sha256": "b2243347053c6cb2298147f50d6a2502a158a2d891e1fc3bac4923ad799c7cad"
},
"canonicalFiles": [
{
@@ -43,7 +43,7 @@
},
{
"path": "apps/registry/package.json",
- "sha256": "0263177a6461eb7223fc33c5725bba85053e5ea34a814a4b1ba5371220badcfb"
+ "sha256": "6e0d7140478d98d7271de4e8ff24001c65a299672ca3f34b250e5a30f973ebb0"
},
{
"path": "apps/registry/scripts/build.ts",
@@ -57,6 +57,10 @@
"path": "apps/blocks/registry.json",
"sha256": "cbe89216a09780463262fe10284e3b5d6b7cb3d67e35853005d4bb105b62c79f"
},
+ {
+ "path": "apps/blocks/src/app/blocks/app-kit/page.tsx",
+ "sha256": "9bce8d78d2f951416fa43385937add24c27a3cb881ec56f8b1bf5cd36e37c740"
+ },
{
"path": "scripts/inspect-console-kit.ts",
"sha256": "22b32cdb69e3a2162a11930d72d718b1ecd8480c06340d62d0c303e72f8f0be7"
@@ -290,97 +294,97 @@
{
"item": "console-kit-core",
"path": "references/install-plans.v1/console-kit-core.json",
- "sha256": "1414597f5ddee0c8e2d36fab8449c4d418d623926d96b8bfb14a3ced2c252563"
+ "sha256": "99ba624565edf8e5f5061afc4796c33dd193253b9442eb3a901295e80507f2e7"
},
{
"item": "console-kit-nextjs",
"path": "references/install-plans.v1/console-kit-nextjs.json",
- "sha256": "dae45c7a952e3d8d72a6bf00b0ba464352c41b3ac4a9dfce3daac21fc868eb2f"
+ "sha256": "fbeed09b27a1c0858fe369a27467bed2eed559802cf86f6414740552dc2eddbb"
},
{
"item": "console-module-auth",
"path": "references/install-plans.v1/console-module-auth.json",
- "sha256": "40c25a2d59cfe9732c6f78253340bbc38261d9142e85e1972d07b6dea49c0c58"
+ "sha256": "a4fa3d1b48fc0ee038ffc132fe1d9a50a4d017e069a007dee3d111a344ab6e9f"
},
{
"item": "console-module-billing",
"path": "references/install-plans.v1/console-module-billing.json",
- "sha256": "643159e2de3653344a65f5786dc4584c681f9ce236c414f26d2b6be8b395fcb3"
+ "sha256": "3b420f8bb6ba86ff0a943c3abb12922e6a0c8f610a55a741c94e214d4fb8df3b"
},
{
"item": "console-module-data",
"path": "references/install-plans.v1/console-module-data.json",
- "sha256": "f76209fb16e5792abb918f506873469a747e75ffc0f2c7c523efae0363bf3048"
+ "sha256": "fd9830c4f19702ed25f4fb087ba2907e6768ad188bb4726d6664dff6858aa03d"
},
{
"item": "console-module-notifications",
"path": "references/install-plans.v1/console-module-notifications.json",
- "sha256": "30b4b7bb585e70f34609bd703768386f315c45e9242034557c6f5dccb9414276"
+ "sha256": "48596bfdd151391f59e9bf1849a68d6901b121f4359bf894c94e6bb0f7af7ebe"
},
{
"item": "console-module-organizations",
"path": "references/install-plans.v1/console-module-organizations.json",
- "sha256": "01d0a271b0fc9411572ece022491a250a65c34c35120e0adc4588f1b5f48d824"
+ "sha256": "277f8823ad07f1e285c932c4fab629ce8264d465cfcce32867f3eb39c9181087"
},
{
"item": "console-module-storage",
"path": "references/install-plans.v1/console-module-storage.json",
- "sha256": "112494d8b7d1d9b00d55a752408dcff335318e4cfdcfd474f5c3cdd681eb58e6"
+ "sha256": "da09bc13a0007638d04e0e0a17ce24e8a000f35e0549897e0e59c6054a3d1f92"
},
{
"item": "console-module-users",
"path": "references/install-plans.v1/console-module-users.json",
- "sha256": "d53d09adca9e341f2c3b20e0b6d2d427359a499c39803939b83ad55e67e7eea2"
+ "sha256": "622e869c96bb9eb8aa2d1a898093e7dac177db8ecedf7b6ff9f4ad45ec9ffe50"
},
{
"item": "feature-pack-auth",
"path": "references/install-plans.v1/feature-pack-auth.json",
- "sha256": "bbf4a8e9e0fde6ac950d03d36863026fb7621e7b0a46ab970ef543b43c624506"
+ "sha256": "2beb9aaec013747942f8aa5fc19d95427c3899d26ff4bb4e767ecffed81e4b09"
},
{
"item": "feature-pack-billing",
"path": "references/install-plans.v1/feature-pack-billing.json",
- "sha256": "db4e4b528bd624ab072574a540656e0f6c637b0c90bb3fe7bd9010ea7972d322"
+ "sha256": "e0420dcfa4a41bd52ef08039dfff3960cd78d169212491037ceea5995001808b"
},
{
"item": "feature-pack-data",
"path": "references/install-plans.v1/feature-pack-data.json",
- "sha256": "b36ce78ff965ac2b63c65ea20043849efb621aa31d41e93dbcdabfd38166ea97"
+ "sha256": "158c549f952d1017c42ac625cfb36fdc8c1b4161e5400bd94e0c9a74a36c1f5f"
},
{
"item": "feature-pack-notifications",
"path": "references/install-plans.v1/feature-pack-notifications.json",
- "sha256": "db7bb7227b51c42ce43b07229e29225c928e544fbd22516fa20a2442e3935615"
+ "sha256": "71cccfcfbcd48aac9ae05a2fb01a37f881add15ef9cf1fdb11c6db3272e98f8c"
},
{
"item": "feature-pack-organizations",
"path": "references/install-plans.v1/feature-pack-organizations.json",
- "sha256": "9d1d14ece5f438e8c4d29f0b7257e7466a3f96a335bc074ab6a946901280e1dc"
+ "sha256": "14ed1faf5b76eece952e6325cbd154c4d0eb41039a43c28e5337082235176e15"
},
{
"item": "feature-pack-storage",
"path": "references/install-plans.v1/feature-pack-storage.json",
- "sha256": "5261a3e9145d113ad3cc03e45e11edbde7e9fbf025d3188ce097bd72d6ee15be"
+ "sha256": "b2478f019c18fb2ca427427cdb32cd25c740e562ee1043ae5490eb1dce41dcc9"
},
{
"item": "feature-pack-users",
"path": "references/install-plans.v1/feature-pack-users.json",
- "sha256": "946ee2328e1823e29b5253338b6c984d33231dba2539329f773a73d400c3a7d1"
+ "sha256": "38e69edfb2073d6910765843922d0067a2c43bb3647a974b2e0ef20c1b5f6cb8"
},
{
"item": "preset-auth-hardened",
"path": "references/install-plans.v1/preset-auth-hardened.json",
- "sha256": "d3e30c6230a45d1ad5b5e90f01f25c3e083a8dab0fc15e28332220c0098fbea2"
+ "sha256": "eae85c94268c930ed993676d474b248bd6f8b5926479c806c572b4f2e1425195"
},
{
"item": "preset-b2b-storage",
"path": "references/install-plans.v1/preset-b2b-storage.json",
- "sha256": "23800feb34604277b4212ce972e63015954383d5f71c6ffebcda450ab11d4a88"
+ "sha256": "d3cbff7babe99ba89acc55f8dd62a7c9ced312835bf6269c77f8f9126a45e6a6"
},
{
"item": "preset-full",
"path": "references/install-plans.v1/preset-full.json",
- "sha256": "d289d95105fd4a41c76c3f65ca5b4371a48c3f67797d8131dfbc14d0039c8a74"
+ "sha256": "8e8c2bf3b3ec1d35b965c23d2fa7ff4a342a3eade593463881702774b34014be"
}
]
}
@@ -390,7 +394,7 @@
"publicRegistryReady": false,
"packageManager": "pnpm@10.28.0",
"nodeEngine": ">=24.0.0",
- "shadcnVersion": "4.13.1",
+ "testedShadcnVersion": "4.16.1",
"packages": [
{
"name": "@constructive-io/ui",
@@ -461,16 +465,30 @@
"consumerWorkspace": "disposable-or-isolated-worktree",
"localLockfilePolicy": "The local install necessarily records localhost tarball resolutions; never commit its temporary .npmrc or lockfile.",
"promotionRule": "After public release, remove local registry settings, regenerate the lockfile from public registries, reject every localhost reference, then commit or merge the consumer.",
- "installCommandTemplate": "pnpm dlx shadcn@4.13.1 add @constructive/{name}",
+ "testedInstallCommandTemplate": "pnpm dlx shadcn@4.16.1 add @constructive/{name}",
"localInstallCommandTemplate": "pnpm --dir /apps/registry exec shadcn add @constructive/{name} --cwd --yes",
"maintainerVerificationCommand": "SMOKE_CASE=app-shell,billing-settings-page,feature-pack-data,preset-b2b-storage,console-kit-nextjs pnpm --dir --filter @constructive-io/registry smoke:install"
}
},
+ "documentation": {
+ "appKit": {
+ "public": {
+ "url": "https://constructive-io.github.io/blocks/blocks/app-kit/",
+ "status": "future-only"
+ },
+ "pinnedSource": {
+ "path": "apps/blocks/src/app/blocks/app-kit/page.tsx",
+ "sha256": "9bce8d78d2f951416fa43385937add24c27a3cb881ec56f8b1bf5cd36e37c740"
+ }
+ }
+ },
"registry": {
"namespace": "@constructive",
"urlTemplate": "https://constructive-io.github.io/blocks/r/{name}.json",
- "shadcnVersion": "4.13.1",
- "shadcnVersionPolicy": "exact",
+ "publicShadcnTag": "latest",
+ "publicInstallCommandTemplate": "pnpm dlx shadcn@latest add @constructive/{name}",
+ "testedShadcnVersion": "4.16.1",
+ "testedShadcnVersionPolicy": "exact",
"queryOverrides": [
{
"item": "feature-pack-data",
@@ -4397,7 +4415,7 @@
"presetProfiles": [
"full"
],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/console-kit-nextjs"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/console-kit-nextjs"
},
{
"name": "preset-auth-hardened",
@@ -4412,7 +4430,7 @@
"presetProfiles": [
"auth-hardened"
],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/preset-auth-hardened"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/preset-auth-hardened"
},
{
"name": "preset-b2b-storage",
@@ -4429,7 +4447,7 @@
"presetProfiles": [
"b2b-storage"
],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/preset-b2b-storage"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/preset-b2b-storage"
},
{
"name": "preset-full",
@@ -4448,7 +4466,7 @@
"presetProfiles": [
"full"
],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/preset-full"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/preset-full"
},
{
"name": "console-kit-core",
@@ -4457,7 +4475,7 @@
"description": "The leaf-independent Console Kit shell, runtime, discovery, and single modular Zustand store.",
"featurePacks": [],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/console-kit-core"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/console-kit-core"
},
{
"name": "console-module-data",
@@ -4468,7 +4486,7 @@
"data"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/console-module-data"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/console-module-data"
},
{
"name": "console-module-auth",
@@ -4479,7 +4497,7 @@
"auth"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/console-module-auth"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/console-module-auth"
},
{
"name": "console-module-users",
@@ -4490,7 +4508,7 @@
"users"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/console-module-users"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/console-module-users"
},
{
"name": "console-module-organizations",
@@ -4501,7 +4519,7 @@
"organizations"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/console-module-organizations"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/console-module-organizations"
},
{
"name": "console-module-storage",
@@ -4512,7 +4530,7 @@
"storage"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/console-module-storage"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/console-module-storage"
},
{
"name": "console-module-billing",
@@ -4523,7 +4541,7 @@
"billing"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/console-module-billing"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/console-module-billing"
},
{
"name": "console-module-notifications",
@@ -4534,7 +4552,7 @@
"notifications"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/console-module-notifications"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/console-module-notifications"
},
{
"name": "feature-pack-data",
@@ -4545,7 +4563,7 @@
"data"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-data"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-data"
},
{
"name": "feature-pack-auth",
@@ -4556,7 +4574,7 @@
"auth"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-auth"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-auth"
},
{
"name": "feature-pack-users",
@@ -4567,7 +4585,7 @@
"users"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-users"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-users"
},
{
"name": "feature-pack-organizations",
@@ -4578,7 +4596,7 @@
"organizations"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-organizations"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-organizations"
},
{
"name": "feature-pack-storage",
@@ -4589,7 +4607,7 @@
"storage"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-storage"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-storage"
},
{
"name": "feature-pack-billing",
@@ -4600,7 +4618,7 @@
"billing"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-billing"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-billing"
},
{
"name": "feature-pack-notifications",
@@ -4611,7 +4629,7 @@
"notifications"
],
"presetProfiles": [],
- "installCommand": "pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-notifications"
+ "installCommand": "pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-notifications"
}
],
"featurePackManifests": [
diff --git a/.agents/skills/constructive-blocks/references/package-resolutions.v1.json b/.agents/skills/constructive-blocks/references/package-resolutions.v1.json
index a46cd39..0933773 100644
--- a/.agents/skills/constructive-blocks/references/package-resolutions.v1.json
+++ b/.agents/skills/constructive-blocks/references/package-resolutions.v1.json
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"kind": "constructive.blocks-package-resolutions",
- "sourceCommit": "c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b",
+ "sourceCommit": "1a72e5d95f7ce4a243cd4536ed78c638708d538c",
"registry": "https://registry.npmjs.org",
"recordCount": 25,
"records": [
diff --git a/.agents/skills/constructive-blocks/references/registry-catalog.v1.json b/.agents/skills/constructive-blocks/references/registry-catalog.v1.json
index d61e7ac..67f49a6 100644
--- a/.agents/skills/constructive-blocks/references/registry-catalog.v1.json
+++ b/.agents/skills/constructive-blocks/references/registry-catalog.v1.json
@@ -1 +1 @@
-{"schemaVersion":1,"kind":"constructive.blocks-registry-catalog","sourceCommit":"c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b","aggregatePath":"apps/registry/registry.json","registryNamespace":"@constructive","itemCount":123,"items":[{"name":"constructive-theme","type":"registry:theme","title":"Constructive Theme","description":"Constructive design system theme — OKLCH colors, z-index layers, shadow utilities, and animations.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/constructive-theme"},{"name":"cn","type":"registry:lib","title":"cn utility","description":"Tailwind CSS class name merge utility using clsx and tailwind-merge.","categories":["utility"],"docs":"Import: `import { cn } from '@/lib/utils'`","dependencies":["clsx","tailwind-merge"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/cn"},{"name":"slot","type":"registry:lib","title":"Slot utility","description":"Polymorphic component utilities for asChild pattern.","categories":["utility"],"docs":"Import: `import { Slot } from '@/lib/slot'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/slot.tsx","type":"registry:lib","target":"@lib/slot.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/slot"},{"name":"use-controllable-state","type":"registry:hook","title":"useControllableState","description":"Hook for components with controlled/uncontrolled state.","categories":["hook"],"docs":"Import: `import { useControllableState } from '@/hooks/use-controllable-state'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-controllable-state.ts","type":"registry:hook","target":"@hooks/use-controllable-state.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-controllable-state"},{"name":"use-debounce","type":"registry:hook","title":"useDebounce","description":"Hook for debouncing values.","categories":["hook"],"docs":"Import: `import { useDebounce } from '@/hooks/use-debounce'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-debounce.ts","type":"registry:hook","target":"@hooks/use-debounce.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-debounce"},{"name":"use-mobile","type":"registry:hook","title":"useIsMobile","description":"Hook for detecting mobile viewport.","categories":["hook"],"docs":"Import: `import { useIsMobile } from '@/hooks/use-mobile'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-mobile.ts","type":"registry:hook","target":"@hooks/use-mobile.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/use-mobile"},{"name":"motion-config","type":"registry:lib","title":"Motion Config","description":"Animation presets and spring configurations for motion library.","categories":["animation"],"docs":"Import: `import { motionConfig } from '@/lib/motion/motion-config'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/motion/motion-config.ts","type":"registry:lib","target":"@lib/motion/motion-config.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-config"},{"name":"button","type":"registry:ui","title":"Button","description":"A button component with multiple variants and sizes.","categories":["primitive"],"docs":"Import: `import { Button } from '@/components/ui/button'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/button.tsx","type":"registry:ui","target":"@ui/button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/button"},{"name":"badge","type":"registry:ui","title":"Badge","description":"A badge component for status indicators and labels.","categories":["primitive"],"docs":"Import: `import { Badge } from '@/components/ui/badge'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/badge.tsx","type":"registry:ui","target":"@ui/badge.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/badge"},{"name":"label","type":"registry:ui","title":"Label","description":"A label component for form fields.","categories":["primitive"],"docs":"Import: `import { Label } from '@/components/ui/label'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/label.tsx","type":"registry:ui","target":"@ui/label.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/label"},{"name":"skeleton","type":"registry:ui","title":"Skeleton","description":"A skeleton loading placeholder component.","categories":["primitive"],"docs":"Import: `import { Skeleton } from '@/components/ui/skeleton'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/skeleton.tsx","type":"registry:ui","target":"@ui/skeleton.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/skeleton"},{"name":"card","type":"registry:ui","title":"Card","description":"A card component with header, content, and footer sections.","categories":["primitive"],"docs":"Import: `import { Card, CardHeader, CardContent, CardFooter } from '@/components/ui/card'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/card.tsx","type":"registry:ui","target":"@ui/card.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/card"},{"name":"chart","type":"registry:ui","title":"Chart","description":"Accessible TanStack Charts React adapter with a theme-adaptive semantic token configuration.","categories":["data-display"],"docs":"Import: `import { Chart, CONSTRUCTIVE_CHART_THEME } from '@/components/ui/chart'`","dependencies":["@tanstack/charts@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/chart.tsx","type":"registry:ui","target":"@ui/chart.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/chart"},{"name":"separator","type":"registry:ui","title":"Separator","description":"A visual separator for dividing content.","categories":["primitive"],"docs":"Import: `import { Separator } from '@/components/ui/separator'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/separator.tsx","type":"registry:ui","target":"@ui/separator.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/separator"},{"name":"alert","type":"registry:ui","title":"Alert","description":"An alert component for displaying messages.","categories":["primitive"],"docs":"Import: `import { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert.tsx","type":"registry:ui","target":"@ui/alert.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert"},{"name":"input","type":"registry:ui","title":"Input","description":"A text input component built on Base UI.","categories":["form"],"docs":"Import: `import { Input } from '@/components/ui/input'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input.tsx","type":"registry:ui","target":"@ui/input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input"},{"name":"textarea","type":"registry:ui","title":"Textarea","description":"A multiline text input component.","categories":["form"],"docs":"Import: `import { Textarea } from '@/components/ui/textarea'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/textarea.tsx","type":"registry:ui","target":"@ui/textarea.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/textarea"},{"name":"checkbox","type":"registry:ui","title":"Checkbox","description":"A checkbox component built on Base UI.","categories":["form"],"docs":"Import: `import { Checkbox } from '@/components/ui/checkbox'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox.tsx","type":"registry:ui","target":"@ui/checkbox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox"},{"name":"checkbox-group","type":"registry:ui","title":"Checkbox Group","description":"A group wrapper for multiple checkboxes.","categories":["form"],"docs":"Import: `import { CheckboxGroup } from '@/components/ui/checkbox-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/checkbox","@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox-group.tsx","type":"registry:ui","target":"@ui/checkbox-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/checkbox-group"},{"name":"radio-group","type":"registry:ui","title":"Radio Group","description":"A radio group component built on Base UI.","categories":["form"],"docs":"Import: `import { RadioGroup } from '@/components/ui/radio-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/radio-group.tsx","type":"registry:ui","target":"@ui/radio-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/radio-group"},{"name":"switch","type":"registry:ui","title":"Switch","description":"A toggle switch component built on Base UI.","categories":["form"],"docs":"Import: `import { Switch } from '@/components/ui/switch'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/switch.tsx","type":"registry:ui","target":"@ui/switch.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/switch"},{"name":"progress","type":"registry:ui","title":"Progress","description":"A progress bar component built on Base UI.","categories":["form"],"docs":"Import: `import { Progress } from '@/components/ui/progress'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progress.tsx","type":"registry:ui","target":"@ui/progress.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progress"},{"name":"avatar","type":"registry:ui","title":"Avatar","description":"An avatar component with image and fallback support.","categories":["data-display"],"docs":"Import: `import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/avatar.tsx","type":"registry:ui","target":"@ui/avatar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/avatar"},{"name":"portal","type":"registry:ui","title":"Portal","description":"Portal management for overlay components with z-index layering.","categories":["layout"],"docs":"Import: `import { Portal } from '@/components/ui/portal'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/portal.tsx","type":"registry:ui","target":"@ui/portal.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/portal"},{"name":"scroll-area","type":"registry:ui","title":"Scroll Area","description":"A custom scrollable area component built on Base UI.","categories":["layout"],"docs":"Import: `import { ScrollArea } from '@/components/ui/scroll-area'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/scroll-area.tsx","type":"registry:ui","target":"@ui/scroll-area.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/scroll-area"},{"name":"select","type":"registry:ui","title":"Select","description":"A select/dropdown component built on Base UI.","categories":["form"],"docs":"Import: `import { Select } from '@/components/ui/select'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/select.tsx","type":"registry:ui","target":"@ui/select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/select"},{"name":"tooltip","type":"registry:ui","title":"Tooltip","description":"A tooltip component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Tooltip } from '@/components/ui/tooltip'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tooltip.tsx","type":"registry:ui","target":"@ui/tooltip.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tooltip"},{"name":"popover","type":"registry:ui","title":"Popover","description":"A popover component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Popover } from '@/components/ui/popover'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/popover.tsx","type":"registry:ui","target":"@ui/popover.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/popover"},{"name":"dialog","type":"registry:ui","title":"Dialog","description":"A modal dialog component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Dialog } from '@/components/ui/dialog'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dialog.tsx","type":"registry:ui","target":"@ui/dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dialog"},{"name":"alert-dialog","type":"registry:ui","title":"Alert Dialog","description":"An alert dialog for confirmations built on Base UI.","categories":["overlay"],"docs":"Import: `import { AlertDialog } from '@/components/ui/alert-dialog'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert-dialog.tsx","type":"registry:ui","target":"@ui/alert-dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/alert-dialog"},{"name":"dropdown-menu","type":"registry:ui","title":"Dropdown Menu","description":"A dropdown menu component built on Base UI.","categories":["overlay"],"docs":"Import: `import { DropdownMenu } from '@/components/ui/dropdown-menu'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dropdown-menu.tsx","type":"registry:ui","target":"@ui/dropdown-menu.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dropdown-menu"},{"name":"sheet","type":"registry:ui","title":"Sheet","description":"A slide-out panel component with animations.","categories":["overlay"],"docs":"Import: `import { Sheet } from '@/components/ui/sheet'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/motion-config","@constructive/use-controllable-state","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sheet.tsx","type":"registry:ui","target":"@ui/sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sheet"},{"name":"drawer","type":"registry:ui","title":"Drawer","description":"A bottom drawer component using Vaul.","categories":["overlay"],"docs":"Import: `import { Drawer } from '@/components/ui/drawer'`","dependencies":["vaul"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/drawer.tsx","type":"registry:ui","target":"@ui/drawer.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/drawer"},{"name":"tabs","type":"registry:ui","title":"Tabs","description":"A tabs component built on Base UI.","categories":["layout"],"docs":"Import: `import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tabs.tsx","type":"registry:ui","target":"@ui/tabs.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tabs"},{"name":"collapsible","type":"registry:ui","title":"Collapsible","description":"A collapsible/accordion component built on Base UI.","categories":["layout"],"docs":"Import: `import { Collapsible } from '@/components/ui/collapsible'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/collapsible.tsx","type":"registry:ui","target":"@ui/collapsible.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/collapsible"},{"name":"resizable","type":"registry:ui","title":"Resizable","description":"Resizable panel layouts using react-resizable-panels.","categories":["layout"],"docs":"Import: `import { ResizablePanel, ResizablePanelGroup, ResizableHandle } from '@/components/ui/resizable'`","dependencies":["lucide-react","react-resizable-panels@^3.0.0"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/resizable.tsx","type":"registry:ui","target":"@ui/resizable.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/resizable"},{"name":"table","type":"registry:ui","title":"Table","description":"A table component with header, body, and cell primitives.","categories":["data-display"],"docs":"Import: `import { Table, TableHeader, TableBody, TableRow, TableCell } from '@/components/ui/table'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/table.tsx","type":"registry:ui","target":"@ui/table.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/table"},{"name":"pagination","type":"registry:ui","title":"Pagination","description":"A pagination component with navigation controls.","categories":["navigation"],"docs":"Import: `import { Pagination } from '@/components/ui/pagination'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/pagination.tsx","type":"registry:ui","target":"@ui/pagination.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pagination"},{"name":"breadcrumb","type":"registry:ui","title":"Breadcrumb","description":"A breadcrumb navigation component.","categories":["navigation"],"docs":"Import: `import { Breadcrumb } from '@/components/ui/breadcrumb'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/breadcrumb.tsx","type":"registry:ui","target":"@ui/breadcrumb.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/breadcrumb"},{"name":"form","type":"registry:ui","title":"Form","description":"Form utilities with react-hook-form integration.","categories":["form"],"docs":"Import: `import { Form, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'`","dependencies":["react-hook-form"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form.tsx","type":"registry:ui","target":"@ui/form.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form"},{"name":"form-control","type":"registry:ui","title":"Form Control","description":"A form control wrapper with label and error display.","categories":["form"],"docs":"Import: `import { FormControl } from '@/components/ui/form-control'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/label","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form-control.tsx","type":"registry:ui","target":"@ui/form-control.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-control"},{"name":"input-group","type":"registry:ui","title":"Input Group","description":"Input with addons and icons.","categories":["form"],"docs":"Import: `import { InputGroup } from '@/components/ui/input-group'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/input","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input-group.tsx","type":"registry:ui","target":"@ui/input-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/input-group"},{"name":"autocomplete","type":"registry:ui","title":"Autocomplete","description":"An autocomplete component built on Base UI.","categories":["input"],"docs":"Import: `import { Autocomplete } from '@/components/ui/autocomplete'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/autocomplete.tsx","type":"registry:ui","target":"@ui/autocomplete.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/autocomplete"},{"name":"command","type":"registry:ui","title":"Command","description":"A command palette component.","categories":["overlay"],"docs":"Import: `import { Command } from '@/components/ui/command'`","dependencies":["cmdk","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/command.tsx","type":"registry:ui","target":"@ui/command.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/command"},{"name":"combobox","type":"registry:ui","title":"Combobox","description":"A combobox component with search built on Base UI.","categories":["input"],"docs":"Import: `import { Combobox } from '@/components/ui/combobox'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/combobox.tsx","type":"registry:ui","target":"@ui/combobox.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/combobox"},{"name":"multi-select","type":"registry:ui","title":"Multi Select","description":"A multi-select component with tags.","categories":["input"],"docs":"Import: `import { MultiSelect } from '@/components/ui/multi-select'`","dependencies":["class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/popover","@constructive/separator","@constructive/input","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/multi-select.tsx","type":"registry:ui","target":"@ui/multi-select.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/multi-select"},{"name":"tags","type":"registry:ui","title":"Tags","description":"A tags input component with autocomplete.","categories":["input"],"docs":"Import: `import { Tags } from '@/components/ui/tags'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/button","@constructive/command","@constructive/popover","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tags.tsx","type":"registry:ui","target":"@ui/tags.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/tags"},{"name":"record-picker","type":"registry:ui","title":"Record Picker","description":"A record selection component with search and filtering.","categories":["input"],"docs":"Import: `import { RecordPicker } from '@/components/ui/record-picker'`","dependencies":["@remixicon/react","match-sorter"],"devDependencies":[],"registryDependencies":["@constructive/use-debounce","@constructive/checkbox","@constructive/input-group","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/record-picker.tsx","type":"registry:ui","target":"@ui/record-picker.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/record-picker"},{"name":"stepper","type":"registry:ui","title":"Stepper","description":"A stepper component for multi-step workflows.","categories":["navigation"],"docs":"Import: `import { Stepper } from '@/components/ui/stepper'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/stepper.tsx","type":"registry:ui","target":"@ui/stepper.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stepper"},{"name":"sidebar","type":"registry:ui","title":"Sidebar","description":"A responsive Base UI sidebar with off-canvas, icon-only, and fixed collapse modes.","categories":["navigation"],"docs":"Import: `import { Sidebar, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/use-mobile","@constructive/button","@constructive/input","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sidebar.tsx","type":"registry:ui","target":"@ui/sidebar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sidebar"},{"name":"calendar-rac","type":"registry:ui","title":"Calendar","description":"A calendar component using React Aria Components.","categories":["input"],"docs":"Import: `import { Calendar } from '@/components/ui/calendar-rac'`","dependencies":["@internationalized/date","react-aria-components"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/calendar-rac.tsx","type":"registry:ui","target":"@ui/calendar-rac.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/calendar-rac"},{"name":"json-input","type":"registry:ui","title":"JSON Input","description":"A JSON editor component using React Ace.","categories":["input"],"docs":"Import: `import { JsonInput } from '@/components/ui/json-input'`","dependencies":["lucide-react","react-ace","ace-builds"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/json-input.tsx","type":"registry:ui","target":"@ui/json-input.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/json-input"},{"name":"sonner","type":"registry:ui","title":"Toaster","description":"Toast notifications using Sonner.","categories":["block"],"docs":"Import: `import { Toaster } from '@/components/ui/sonner'`","dependencies":["sonner"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sonner.tsx","type":"registry:ui","target":"@ui/sonner.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sonner"},{"name":"dock","type":"registry:ui","title":"Dock","description":"A macOS-style dock component.","categories":["navigation"],"docs":"Import: `import { Dock, DockIcon } from '@/components/ui/dock'`","dependencies":["class-variance-authority","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dock.tsx","type":"registry:ui","target":"@ui/dock.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/dock"},{"name":"page-header","type":"registry:ui","title":"Page Header","description":"A simple page header component.","categories":["navigation"],"docs":"Import: `import { PageHeader } from '@/components/ui/page-header'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/page-header.tsx","type":"registry:ui","target":"@ui/page-header.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/page-header"},{"name":"flickering-grid","type":"registry:ui","title":"Flickering Grid","description":"An animated grid background effect.","categories":["effect"],"docs":"Import: `import { FlickeringGrid } from '@/components/ui/flickering-grid'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flickering-grid.tsx","type":"registry:ui","target":"@ui/flickering-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flickering-grid"},{"name":"flow-zoom-panel","type":"registry:ui","title":"Flow Zoom Panel","description":"Zoom in/out and fit-view controls for React Flow canvases.","categories":["layout"],"docs":"Import: `import { FlowZoomPanel } from '@/components/ui/flow-zoom-panel'`","dependencies":["@xyflow/react","@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flow-zoom-panel.tsx","type":"registry:ui","target":"@ui/flow-zoom-panel.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/flow-zoom-panel"},{"name":"motion-grid","type":"registry:ui","title":"Motion Grid","description":"An animated grid with frame-based transitions.","categories":["effect"],"docs":"Import: `import { MotionGrid } from '@/components/ui/motion-grid'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/motion-grid.tsx","type":"registry:ui","target":"@ui/motion-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/motion-grid"},{"name":"progressive-blur","type":"registry:ui","title":"Progressive Blur","description":"A gradient blur overlay effect.","categories":["effect"],"docs":"Import: `import { ProgressiveBlur } from '@/components/ui/progressive-blur'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur.tsx","type":"registry:ui","target":"@ui/progressive-blur.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur"},{"name":"progressive-blur-scroll-container","type":"registry:ui","title":"Progressive Blur Scroll Container","description":"A scroll container with blur effects at edges.","categories":["effect"],"docs":"Import: `import { ProgressiveBlurScrollContainer } from '@/components/ui/progressive-blur-scroll-container'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/progressive-blur","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur-scroll-container.tsx","type":"registry:ui","target":"@ui/progressive-blur-scroll-container.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/progressive-blur-scroll-container"},{"name":"responsive-diagram","type":"registry:ui","title":"Responsive Diagram","description":"A responsive diagram container with auto-scaling.","categories":["effect"],"docs":"Import: `import { ResponsiveDiagram } from '@/components/ui/responsive-diagram'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/responsive-diagram.tsx","type":"registry:ui","target":"@ui/responsive-diagram.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/responsive-diagram"},{"name":"unlink-button","type":"registry:ui","title":"Unlink Button","description":"A button for unlinking/removing records.","categories":["action"],"docs":"Import: `import { UnlinkButton } from '@/components/ui/unlink-button'`","dependencies":["@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/unlink-button.tsx","type":"registry:ui","target":"@ui/unlink-button.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/unlink-button"},{"name":"org-chart","type":"registry:block","title":"Org Chart","description":"An interactive organizational chart with automatic hierarchy layout, zoom controls, node actions, and drag-to-reparent behavior.","categories":["block","application"],"docs":"Import: `import { OrgChart } from '@/components/ui/org-chart'`","dependencies":["@xyflow/react","@remixicon/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/avatar","@constructive/badge","@constructive/dropdown-menu","@constructive/flow-zoom-panel","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/org-chart/index.ts","type":"registry:component","target":"@ui/org-chart/index.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.tsx","type":"registry:component","target":"@ui/org-chart/org-chart.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-context.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-context.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-node.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-node.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-edge.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-edge.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-empty.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-empty.tsx"},{"path":"registry/constructive/blocks/org-chart/layout.ts","type":"registry:lib","target":"@ui/org-chart/layout.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart-utils.ts","type":"registry:lib","target":"@ui/org-chart/org-chart-utils.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.types.ts","type":"registry:lib","target":"@ui/org-chart/org-chart.types.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/org-chart"},{"name":"storage","type":"registry:block","title":"Storage Foundation","description":"Shared storage types, formatters, file icons, status badges, breadcrumbs, and object-toolbar primitives.","categories":["block","application"],"docs":"Install this transitively through `storage-browser`, or import its files directly from `@/components/ui/storage/*`.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/breadcrumb","@constructive/button","@constructive/dropdown-menu","@constructive/input-group","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/types.ts","type":"registry:lib","target":"@ui/storage/types.ts"},{"path":"registry/constructive/blocks/storage/utils.ts","type":"registry:lib","target":"@ui/storage/utils.ts"},{"path":"registry/constructive/blocks/storage/file-type-icon.tsx","type":"registry:component","target":"@ui/storage/file-type-icon.tsx"},{"path":"registry/constructive/blocks/storage/visibility-badge.tsx","type":"registry:component","target":"@ui/storage/visibility-badge.tsx"},{"path":"registry/constructive/blocks/storage/storage-breadcrumb.tsx","type":"registry:component","target":"@ui/storage/storage-breadcrumb.tsx"},{"path":"registry/constructive/blocks/storage/object-toolbar.tsx","type":"registry:component","target":"@ui/storage/object-toolbar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage"},{"name":"storage-bucket-rail","type":"registry:block","title":"Storage Bucket Rail","description":"A controlled, scrollable bucket list with visibility, object-count, selection, and create-bucket affordances.","categories":["block","application"],"docs":"Import: `import { BucketRail } from '@/components/ui/storage/bucket-rail'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/scroll-area","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-rail.tsx","type":"registry:component","target":"@ui/storage/bucket-rail.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-bucket-rail"},{"name":"storage-object-table","type":"registry:block","title":"Storage Object Table","description":"A controlled object table with sorting, selection, row actions, skeleton loading, and empty results.","categories":["block","application"],"docs":"Import: `import { ObjectTable } from '@/components/ui/storage/object-table'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/button","@constructive/checkbox","@constructive/dropdown-menu","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-table.tsx","type":"registry:component","target":"@ui/storage/object-table.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-object-table"},{"name":"storage-upload-dropzone","type":"registry:block","title":"Storage Upload Dropzone","description":"A drag-and-drop upload target with a browse action and an in-flight upload progress list.","categories":["block","application"],"docs":"Import: `import { UploadDropzone } from '@/components/ui/storage/upload-dropzone'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/button","@constructive/progress","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/upload-dropzone.tsx","type":"registry:component","target":"@ui/storage/upload-dropzone.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-upload-dropzone"},{"name":"storage-object-detail-sheet","type":"registry:block","title":"Storage Object Detail Sheet","description":"A controlled object-detail sheet with preview, metadata, rename, download, link, and confirmed delete actions.","categories":["block","application"],"docs":"Import: `import { ObjectDetailSheet } from '@/components/ui/storage/object-detail-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/alert-dialog","@constructive/button","@constructive/input","@constructive/separator","@constructive/skeleton","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-detail-sheet.tsx","type":"registry:component","target":"@ui/storage/object-detail-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-object-detail-sheet"},{"name":"storage-bucket-config-sheet","type":"registry:block","title":"Storage Bucket Config Sheet","description":"A create-or-edit bucket form with visibility and optional controls gated by the host schema.","categories":["block","application"],"docs":"Import: `import { BucketConfigSheet } from '@/components/ui/storage/bucket-config-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/input","@constructive/label","@constructive/radio-group","@constructive/switch","@constructive/textarea","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-config-sheet.tsx","type":"registry:component","target":"@ui/storage/bucket-config-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-bucket-config-sheet"},{"name":"storage-empty-state","type":"registry:block","title":"Storage Empty State","description":"Accessible empty and unavailable states for missing buckets, unprovisioned storage, empty buckets, and denied access.","categories":["block","application"],"docs":"Import: `import { StorageEmptyState } from '@/components/ui/storage/storage-empty-state'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/storage-empty-state.tsx","type":"registry:component","target":"@ui/storage/storage-empty-state.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-empty-state"},{"name":"storage-browser","type":"registry:block","title":"Storage Browser","description":"A complete controlled storage workspace with bucket navigation, object discovery, upload, configuration, detail, and empty states.","categories":["block","application"],"docs":"Import: `import { StorageBrowser } from '@/components/ui/storage'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/storage-bucket-rail","@constructive/storage-object-table","@constructive/storage-upload-dropzone","@constructive/storage-object-detail-sheet","@constructive/storage-bucket-config-sheet","@constructive/storage-empty-state","@constructive/cn","@constructive/separator","@constructive/button","@constructive/select","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/index.ts","type":"registry:component","target":"@ui/storage/index.ts"},{"path":"registry/constructive/blocks/storage/storage-browser.tsx","type":"registry:component","target":"@ui/storage/storage-browser.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/storage-browser"},{"name":"stack","type":"registry:block","title":"Stack Navigation","description":"iOS-style navigation stack with gestures and animations.","categories":["block"],"docs":"Import: `import { Stack, StackCard } from '@/components/ui/stack'`","dependencies":["motion","@use-gesture/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/stack/index.ts","type":"registry:component","target":"@ui/stack/index.ts"},{"path":"registry/constructive/blocks/stack/stack-context.tsx","type":"registry:component","target":"@ui/stack/stack-context.tsx"},{"path":"registry/constructive/blocks/stack/stack-card.tsx","type":"registry:component","target":"@ui/stack/stack-card.tsx"},{"path":"registry/constructive/blocks/stack/stack-header.tsx","type":"registry:component","target":"@ui/stack/stack-header.tsx"},{"path":"registry/constructive/blocks/stack/stack-backdrop.tsx","type":"registry:component","target":"@ui/stack/stack-backdrop.tsx"},{"path":"registry/constructive/blocks/stack/stack-viewport.tsx","type":"registry:component","target":"@ui/stack/stack-viewport.tsx"},{"path":"registry/constructive/blocks/stack/deferred-card-content.tsx","type":"registry:component","target":"@ui/stack/deferred-card-content.tsx"},{"path":"registry/constructive/blocks/stack/stack-animations.ts","type":"registry:lib","target":"@ui/stack/stack-animations.ts"},{"path":"registry/constructive/blocks/stack/stack-utils.ts","type":"registry:lib","target":"@ui/stack/stack-utils.ts"},{"path":"registry/constructive/blocks/stack/stack.types.ts","type":"registry:lib","target":"@ui/stack/stack.types.ts"},{"path":"registry/constructive/blocks/stack/use-stack-gestures.ts","type":"registry:hook","target":"@ui/stack/use-stack-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-peek-gestures.ts","type":"registry:hook","target":"@ui/stack/use-peek-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-stack-responsive.ts","type":"registry:hook","target":"@ui/stack/use-stack-responsive.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/stack"},{"name":"toast","type":"registry:block","title":"Toast Notifications","description":"Styled toast notification functions using Sonner.","categories":["block"],"docs":"Import: `import { toastSuccess, toastError, toastWarning, toastInfo } from '@/components/ui/toast'`","dependencies":["sonner","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/button","@constructive/dialog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/toast/index.ts","type":"registry:component","target":"@ui/toast/index.ts"},{"path":"registry/constructive/blocks/toast/toast-error.tsx","type":"registry:component","target":"@ui/toast/toast-error.tsx"},{"path":"registry/constructive/blocks/toast/toast-success.tsx","type":"registry:component","target":"@ui/toast/toast-success.tsx"},{"path":"registry/constructive/blocks/toast/toast-warning.tsx","type":"registry:component","target":"@ui/toast/toast-warning.tsx"},{"path":"registry/constructive/blocks/toast/toast-info.tsx","type":"registry:component","target":"@ui/toast/toast-info.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/toast"},{"name":"app-bar","type":"registry:block","title":"App Bar","description":"A sticky application header with a sidebar trigger, responsive breadcrumbs, and framework-neutral search and action slots.","categories":["block","navigation"],"docs":"Import: `import { AppBar } from '@/components/ui/app-bar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/breadcrumb","@constructive/separator","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-bar.tsx","type":"registry:component","target":"@ui/app-bar.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-bar"},{"name":"app-shell","type":"registry:block","title":"App Shell","description":"A provider-neutral application shell with typed navigation, brand, account, breadcrumb, and link-render contracts.","categories":["block","navigation"],"docs":"Import: `import { AppShell } from '@/components/ui/app-shell'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/app-bar","@constructive/avatar","@constructive/collapsible","@constructive/dropdown-menu","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-shell.tsx","type":"registry:component","target":"@ui/app-shell.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-shell"},{"name":"field","type":"registry:ui","title":"Field","description":"Composable form layout with groups, fieldsets, legends, labels, descriptions, separators, and accessible errors.","categories":["form"],"docs":"Import: `import { Field, FieldGroup, FieldLabel, FieldDescription, FieldError } from '@/components/ui/field'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/field.tsx","type":"registry:ui","target":"@ui/field.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/field"},{"name":"empty","type":"registry:ui","title":"Empty","description":"A composable empty-state layout with media, title, description, and action content.","categories":["layout"],"docs":"Import: `import { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent } from '@/components/ui/empty'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/empty.tsx","type":"registry:ui","target":"@ui/empty.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/empty"},{"name":"ai","type":"registry:block","title":"AI Kit","description":"Presentational primitives for AI and agentic chat UIs: composer, messages, reasoning, tools, HITL approval, plan tracking, and streaming surfaces.","categories":["block","ai"],"docs":"Import PromptInput, Message, Tool, Reasoning, and PlanTracker from the installed ai directory under your configured shadcn ui alias.","dependencies":["lucide-react","sugar-high"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/avatar","@constructive/tooltip","@constructive/alert","@constructive/collapsible","@constructive/badge","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/ai/agent-loader.tsx","type":"registry:component","target":"@ui/ai/agent-loader.tsx"},{"path":"registry/constructive/blocks/ai/approval-card.tsx","type":"registry:component","target":"@ui/ai/approval-card.tsx"},{"path":"registry/constructive/blocks/ai/chat-container.tsx","type":"registry:component","target":"@ui/ai/chat-container.tsx"},{"path":"registry/constructive/blocks/ai/code-block.tsx","type":"registry:component","target":"@ui/ai/code-block.tsx"},{"path":"registry/constructive/blocks/ai/context-card.tsx","type":"registry:component","target":"@ui/ai/context-card.tsx"},{"path":"registry/constructive/blocks/ai/context-ring.tsx","type":"registry:component","target":"@ui/ai/context-ring.tsx"},{"path":"registry/constructive/blocks/ai/diff-table.tsx","type":"registry:component","target":"@ui/ai/diff-table.tsx"},{"path":"registry/constructive/blocks/ai/feedback-bar.tsx","type":"registry:component","target":"@ui/ai/feedback-bar.tsx"},{"path":"registry/constructive/blocks/ai/file-upload.tsx","type":"registry:component","target":"@ui/ai/file-upload.tsx"},{"path":"registry/constructive/blocks/ai/format-duration.ts","type":"registry:component","target":"@ui/ai/format-duration.ts"},{"path":"registry/constructive/blocks/ai/image.tsx","type":"registry:component","target":"@ui/ai/image.tsx"},{"path":"registry/constructive/blocks/ai/index.ts","type":"registry:component","target":"@ui/ai/index.ts"},{"path":"registry/constructive/blocks/ai/inline-diff.tsx","type":"registry:component","target":"@ui/ai/inline-diff.tsx"},{"path":"registry/constructive/blocks/ai/markdown.tsx","type":"registry:component","target":"@ui/ai/markdown.tsx"},{"path":"registry/constructive/blocks/ai/message.tsx","type":"registry:component","target":"@ui/ai/message.tsx"},{"path":"registry/constructive/blocks/ai/plan-tracker.tsx","type":"registry:component","target":"@ui/ai/plan-tracker.tsx"},{"path":"registry/constructive/blocks/ai/prompt-input.tsx","type":"registry:component","target":"@ui/ai/prompt-input.tsx"},{"path":"registry/constructive/blocks/ai/prompt-suggestion.tsx","type":"registry:component","target":"@ui/ai/prompt-suggestion.tsx"},{"path":"registry/constructive/blocks/ai/reasoning.tsx","type":"registry:component","target":"@ui/ai/reasoning.tsx"},{"path":"registry/constructive/blocks/ai/recommendation-card.tsx","type":"registry:component","target":"@ui/ai/recommendation-card.tsx"},{"path":"registry/constructive/blocks/ai/response-stream.tsx","type":"registry:component","target":"@ui/ai/response-stream.tsx"},{"path":"registry/constructive/blocks/ai/scroll-button.tsx","type":"registry:component","target":"@ui/ai/scroll-button.tsx"},{"path":"registry/constructive/blocks/ai/source.tsx","type":"registry:component","target":"@ui/ai/source.tsx"},{"path":"registry/constructive/blocks/ai/steps.tsx","type":"registry:component","target":"@ui/ai/steps.tsx"},{"path":"registry/constructive/blocks/ai/streaming-text.tsx","type":"registry:component","target":"@ui/ai/streaming-text.tsx"},{"path":"registry/constructive/blocks/ai/system-message.tsx","type":"registry:component","target":"@ui/ai/system-message.tsx"},{"path":"registry/constructive/blocks/ai/task-row.tsx","type":"registry:component","target":"@ui/ai/task-row.tsx"},{"path":"registry/constructive/blocks/ai/text-shimmer.tsx","type":"registry:component","target":"@ui/ai/text-shimmer.tsx"},{"path":"registry/constructive/blocks/ai/thinking-trace.tsx","type":"registry:component","target":"@ui/ai/thinking-trace.tsx"},{"path":"registry/constructive/blocks/ai/tool.tsx","type":"registry:component","target":"@ui/ai/tool.tsx"},{"path":"registry/constructive/blocks/ai/types.ts","type":"registry:component","target":"@ui/ai/types.ts"},{"path":"registry/constructive/blocks/ai/use-throttled-text.ts","type":"registry:component","target":"@ui/ai/use-throttled-text.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/ai"},{"name":"form-kit","type":"registry:ui","title":"Form Kit","description":"All form-related components: input, textarea, checkbox, radio, select, switch, progress, form controls.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/input","@constructive/textarea","@constructive/checkbox","@constructive/checkbox-group","@constructive/radio-group","@constructive/switch","@constructive/select","@constructive/progress","@constructive/form","@constructive/form-control","@constructive/input-group","@constructive/field","@constructive/label","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/form-kit"},{"name":"overlay-kit","type":"registry:ui","title":"Overlay Kit","description":"All overlay components: dialog, sheet, drawer, popover, tooltip, dropdown menu, alert dialog.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/dialog","@constructive/sheet","@constructive/drawer","@constructive/popover","@constructive/tooltip","@constructive/dropdown-menu","@constructive/alert-dialog","@constructive/command","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/overlay-kit"},{"name":"layout-kit","type":"registry:ui","title":"Layout Kit","description":"Layout and navigation components: tabs, sidebar, collapsible, resizable panels, scroll area, breadcrumb, pagination.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/tabs","@constructive/sidebar","@constructive/collapsible","@constructive/resizable","@constructive/scroll-area","@constructive/breadcrumb","@constructive/pagination","@constructive/separator","@constructive/empty","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/layout-kit"},{"name":"sheets","type":"registry:block","title":"Sheets","description":"A metadata-driven, spreadsheet-grade CRUD grid with accessible DOM cells and adapter-owned data access.","categories":["blocks","data"],"docs":"Install the complete source-owned grid with `pnpm dlx shadcn@latest add @constructive/sheets`, then import `Sheets`, `SheetsProvider`, and the adapter contracts from `@/components/ui/sheets`. The copied source depends on `@constructive-io/data` for the current `_meta` contract and runtime GraphQL operations; your host remains responsible for its endpoint, session, and RLS-aware execution boundary.","dependencies":["@constructive-io/data@^0.5.0","@internationalized/date","@remixicon/react","@tanstack/react-form","@tanstack/react-query","@tanstack/react-table@9.0.0-beta.58","@tanstack/react-virtual","@types/leaflet","clsx","graphql","inflekt","leaflet","lucide-react","motion","react-aria-components","react-leaflet","tailwind-merge","zod","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/calendar-rac","@constructive/card","@constructive/checkbox","@constructive/collapsible","@constructive/dropdown-menu","@constructive/form-control","@constructive/input","@constructive/input-group","@constructive/label","@constructive/pagination","@constructive/popover","@constructive/progressive-blur","@constructive/scroll-area","@constructive/select","@constructive/skeleton","@constructive/tabs","@constructive/textarea","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/postgraphile-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/use-sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/advanced.ts","type":"registry:lib","target":"@ui/sheets/advanced.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-execute.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-execute.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx","type":"registry:component","target":"@ui/sheets/auth/auth-gate.tsx"},{"path":"registry/constructive/blocks/sheets/auth/auth-types.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-types.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/index.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-forgot-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-login.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-register.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-reset-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/index.ts","type":"registry:lib","target":"@ui/sheets/auth/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-error-alert.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-loading-button.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-header.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-layout.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/forgot-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/form-field.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/login-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/password-strength.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/register-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/reset-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/auth-errors.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/schemas.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/token-store.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/validators.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/validators.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts","type":"registry:lib","target":"@ui/sheets/cell-model/badge-tones.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-props.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-slots.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/create-sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/badges.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/boolean.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/datetime.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/geometry.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/image.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/interval.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/number.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/relation.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/text.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/types.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/uri.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts","type":"registry:lib","target":"@ui/sheets/cell-model/image-cache.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/badges-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/boolean-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/datetime-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/draft-action-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/geometry-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/image-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/interval-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/loading-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/number-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/relation-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/text-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/uri-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry-defaults.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-groups.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-resolver.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts","type":"registry:lib","target":"@ui/sheets/cell-types/define-cell-type.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts","type":"registry:lib","target":"@ui/sheets/cell-types/type-mapping.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/types.ts","type":"registry:lib","target":"@ui/sheets/cell-types/types.ts"},{"path":"registry/constructive/blocks/sheets/commands/context.ts","type":"registry:lib","target":"@ui/sheets/commands/context.ts"},{"path":"registry/constructive/blocks/sheets/commands/dispatch.ts","type":"registry:lib","target":"@ui/sheets/commands/dispatch.ts"},{"path":"registry/constructive/blocks/sheets/commands/index.ts","type":"registry:lib","target":"@ui/sheets/commands/index.ts"},{"path":"registry/constructive/blocks/sheets/commands/keybinding.ts","type":"registry:lib","target":"@ui/sheets/commands/keybinding.ts"},{"path":"registry/constructive/blocks/sheets/commands/keymap.ts","type":"registry:lib","target":"@ui/sheets/commands/keymap.ts"},{"path":"registry/constructive/blocks/sheets/commands/registry.ts","type":"registry:lib","target":"@ui/sheets/commands/registry.ts"},{"path":"registry/constructive/blocks/sheets/commands/types.ts","type":"registry:lib","target":"@ui/sheets/commands/types.ts"},{"path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts","type":"registry:lib","target":"@ui/sheets/config/sheets-concurrency.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-context.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-context.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-execute.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-execute.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx","type":"registry:component","target":"@ui/sheets/context/sheets-provider.tsx"},{"path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-upload-presigned.ts"},{"path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts","type":"registry:lib","target":"@ui/sheets/forms/form-spec-builder.ts"},{"path":"registry/constructive/blocks/sheets/forms/index.ts","type":"registry:lib","target":"@ui/sheets/forms/index.ts"},{"path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts","type":"registry:lib","target":"@ui/sheets/forms/metadata-hash.ts"},{"path":"registry/constructive/blocks/sheets/forms/mutations.ts","type":"registry:lib","target":"@ui/sheets/forms/mutations.ts"},{"path":"registry/constructive/blocks/sheets/forms/types.ts","type":"registry:lib","target":"@ui/sheets/forms/types.ts"},{"path":"registry/constructive/blocks/sheets/forms/zod-schema.ts","type":"registry:lib","target":"@ui/sheets/forms/zod-schema.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/edit-intent.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-props.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/number-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/text-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/inline-cell-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/sheets-cell-host.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/use-sheets-content.ts"},{"path":"registry/constructive/blocks/sheets/grid/cell-routing.ts","type":"registry:lib","target":"@ui/sheets/grid/cell-routing.ts"},{"path":"registry/constructive/blocks/sheets/grid/draft-types.ts","type":"registry:lib","target":"@ui/sheets/grid/draft-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/editor-focus-trap.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts","type":"registry:lib","target":"@ui/sheets/grid/editors/overlay-presets.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/dock-status-bar.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/feedback-context.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/feedback-reducer.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/floating-status.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/index.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/index.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-state.tsx"},{"path":"registry/constructive/blocks/sheets/grid/filter-operators.ts","type":"registry:lib","target":"@ui/sheets/grid/filter-operators.ts"},{"path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts","type":"registry:lib","target":"@ui/sheets/grid/grid-cell-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-batch-commit.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-cell-editing.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-rows.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-submission.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-filter-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-operations.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-selection.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-state.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-load-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-paginate-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-undo-redo.ts"},{"path":"registry/constructive/blocks/sheets/grid/row-model.ts","type":"registry:lib","target":"@ui/sheets/grid/row-model.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.constants.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.context-menu.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.controls.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.formatters.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.pagination.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.table-selector.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.theme.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.types.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.types.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.utils.ts"},{"path":"registry/constructive/blocks/sheets/grid/use-sheets.ts","type":"registry:lib","target":"@ui/sheets/grid/use-sheets.ts"},{"path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/orderby-enum-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/query-keys.ts","type":"registry:lib","target":"@ui/sheets/hooks/query-keys.ts"},{"path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/relation-field-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-columns.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-metadata-cache.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-infinite-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-meta.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table-cursor.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-upload.ts"},{"path":"registry/constructive/blocks/sheets/index.ts","type":"registry:lib","target":"@ui/sheets/index.ts"},{"path":"registry/constructive/blocks/sheets/row-identity.ts","type":"registry:lib","target":"@ui/sheets/row-identity.ts"},{"path":"registry/constructive/blocks/sheets/selection/cell-extract.ts","type":"registry:lib","target":"@ui/sheets/selection/cell-extract.ts"},{"path":"registry/constructive/blocks/sheets/selection/fill.ts","type":"registry:lib","target":"@ui/sheets/selection/fill.ts"},{"path":"registry/constructive/blocks/sheets/selection/range-set.ts","type":"registry:lib","target":"@ui/sheets/selection/range-set.ts"},{"path":"registry/constructive/blocks/sheets/selection/selection-model.ts","type":"registry:lib","target":"@ui/sheets/selection/selection-model.ts"},{"path":"registry/constructive/blocks/sheets/selection/tsv.ts","type":"registry:lib","target":"@ui/sheets/selection/tsv.ts"},{"path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts","type":"registry:lib","target":"@ui/sheets/store/draft-rows-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts","type":"registry:lib","target":"@ui/sheets/store/relation-info-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/sheets-store.ts","type":"registry:lib","target":"@ui/sheets/store/sheets-store.ts"},{"path":"registry/constructive/blocks/sheets/table/features.ts","type":"registry:lib","target":"@ui/sheets/table/features.ts"},{"path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx","type":"registry:component","target":"@ui/sheets/table/grid-viewport.tsx"},{"path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts","type":"registry:lib","target":"@ui/sheets/table/use-sheets-table-instance.ts"},{"path":"registry/constructive/blocks/sheets/utils/cn.ts","type":"registry:lib","target":"@ui/sheets/utils/cn.ts"},{"path":"registry/constructive/blocks/sheets/utils/file.utils.ts","type":"registry:lib","target":"@ui/sheets/utils/file.utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx","type":"registry:component","target":"@ui/sheets/utils/image-with-fallback.tsx"},{"path":"registry/constructive/blocks/sheets/utils/map-picker.tsx","type":"registry:component","target":"@ui/sheets/utils/map-picker.tsx"},{"path":"registry/constructive/blocks/sheets/utils/motion-config.ts","type":"registry:lib","target":"@ui/sheets/utils/motion-config.ts"},{"path":"registry/constructive/blocks/sheets/utils/relation-utils.ts","type":"registry:lib","target":"@ui/sheets/utils/relation-utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-i18n.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-logger.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts","type":"registry:lib","target":"@ui/sheets/utils/use-color-scheme.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-image-status.ts","type":"registry:lib","target":"@ui/sheets/utils/use-image-status.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts","type":"registry:lib","target":"@ui/sheets/utils/use-resize-observer.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/sheets"},{"name":"schema-builder","type":"registry:block","title":"Schema Builder","description":"An adapter-driven PostgreSQL schema editor for tables, fields, relationships, indexes, and RLS policies.","categories":["blocks","schema"],"docs":"Install the complete source-owned editor with `pnpm dlx shadcn@latest add @constructive/schema-builder`, then import `SchemaBuilder` and `defineSchemaBuilderAdapter` from `@/components/schema-builder`. The host supplies its generated-SDK adapter, control-plane scope, navigation, preferences, and invalidation behavior; the block never owns backend endpoints or credentials.","dependencies":["@constructive-io/data@^0.5.0","@dnd-kit/core","@dnd-kit/utilities","@fluentui/react-context-selector","@pgsql/types@17.6.2","@remixicon/react","@tanstack/react-query","clsx","lucide-react","motion","node-type-registry@^1.11.0","pg-ast@2.11.3","tailwind-merge","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/button","@constructive/checkbox","@constructive/collapsible","@constructive/combobox","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/input-group","@constructive/label","@constructive/multi-select","@constructive/progressive-blur","@constructive/responsive-diagram","@constructive/scroll-area","@constructive/select","@constructive/stack","@constructive/stepper","@constructive/switch","@constructive/tabs","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/schema-builder/compat/admin-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/admin-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/auth-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/auth-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/block-config.tsx","type":"registry:component","target":"@components/schema-builder/compat/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/compat/generated-types.ts","type":"registry:lib","target":"@components/schema-builder/compat/generated-types.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/modules-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/modules-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/relation-provisions.ts","type":"registry:lib","target":"@components/schema-builder/compat/relation-provisions.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/schema-builder-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/schema-builder-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/components/schema-builder.tsx","type":"registry:component","target":"@components/schema-builder/components/schema-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/context.tsx","type":"registry:component","target":"@components/schema-builder/core/context.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/index.ts","type":"registry:lib","target":"@components/schema-builder/core/index.ts"},{"path":"registry/constructive/blocks/schema-builder/core/mutation.ts","type":"registry:lib","target":"@components/schema-builder/core/mutation.ts"},{"path":"registry/constructive/blocks/schema-builder/core/query.ts","type":"registry:lib","target":"@components/schema-builder/core/query.ts"},{"path":"registry/constructive/blocks/schema-builder/core/store.ts","type":"registry:lib","target":"@components/schema-builder/core/store.ts"},{"path":"registry/constructive/blocks/schema-builder/fields/index.ts","type":"registry:lib","target":"@components/schema-builder/fields/index.ts"},{"path":"registry/constructive/blocks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/lib/utils.ts","type":"registry:lib","target":"@components/schema-builder/lib/utils.ts"},{"path":"registry/constructive/blocks/schema-builder/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/app-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/app-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/databases/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/databases/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/context/block-config.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/context/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/app-store.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/app-store.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/preferences-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/preferences-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/schema-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/schema-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/client-only.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/client-only.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schema-builder-header.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schema-builder-header.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx"},{"path":"registry/constructive/blocks/schema-builder/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/types.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/schema-builder"},{"name":"billing-contracts","type":"registry:lib","title":"Billing Contracts","description":"Provider-neutral billing DTOs, arbitrary-precision formatters, open-status presentation maps, and explicit resource states shared by every customer billing block.","categories":["blocks","billing"],"docs":"## Usage\n\nInstall this item when building a custom billing composition. It defines the shared resource states, account references, money values, allowances, plans, subscriptions, usage, credits, activity, messages, and formatting options used by the billing blocks.\n\n```ts\nimport type { BillingPlan, BillingResource } from '@/blocks/billing/billing-contracts/billing-contracts';\n\nconst plans: BillingResource = {\n status: 'ready',\n quality: 'authoritative',\n asOf: '2026-07-20T12:00:00.000Z',\n data: [{\n id: 'growth',\n name: 'Growth',\n prices: [{\n kind: 'fixed',\n id: 'growth-monthly',\n interval: 'month',\n money: { amountMinor: '4900', currency: 'USD' }\n }]\n }]\n};\n```\n\nKeep quantities, limits, deltas, and minor-unit money as decimal strings so large values retain their precision. Supply an explicit locale and time zone to the formatters, keep each record's currency, and use the explicit contact-sales, unlimited, uninitialized, and unknown variants when they apply.","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts","type":"registry:lib","target":"src/blocks/billing/billing-contracts/billing-contracts.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-contracts"},{"name":"billing-ui","type":"registry:lib","title":"Billing UI Helpers","description":"Shared formatting and presentation helpers used by the customer billing blocks.","categories":["blocks","billing"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/billing-contracts","@constructive/cn"],"files":[{"path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx","type":"registry:lib","target":"src/blocks/billing/billing-ui/billing-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-ui"},{"name":"billing-pricing-table","type":"registry:block","title":"Billing Pricing Table","description":"Responsive plan comparison with controlled interval selection, fixed and contact-sales pricing, current and featured states, and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a plan resource, account context, formatting options, a controlled billing interval, and the actions you want to show.\n\n```tsx\nimport { BillingPricingTable } from '@/blocks/billing/billing-pricing-table/billing-pricing-table';\n\n openPlanSelection({ planId, priceId, account })}\n onContactSales={({ planId, account }) => openSalesRequest({ planId, account })}\n/>\n```\n\nFixed prices use minor-unit decimal strings and the currency on each record. Use `BillingPrice.kind = 'contact_sales'` for custom pricing. Missing callbacks remove their actions, rejected promises appear next to the action, and resolved promises leave the selected plan state under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-pricing-table"},{"name":"billing-subscription-card","type":"registry:block","title":"Billing Subscription Card","description":"Current-plan summary with independent subscription, provider, and payment status plus exact lifecycle dates and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass the current plan together with any payment and provider states you want to show. Add only the actions that make sense in your billing flow.\n\n```tsx\nimport { BillingSubscriptionCard } from '@/blocks/billing/billing-subscription-card/billing-subscription-card';\n\n openSubscriptionSettings(subscriptionId, account)}\n/>\n```\n\nOnly `renewsAt` is labelled “Renews”; `endsAt` is always labelled “Ends.” Status strings are open, unknown values render neutrally, and missing callbacks hide their controls.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-subscription-card"},{"name":"billing-entitlements-list","type":"registry:block","title":"Billing Entitlements List","description":"Structured display of plan feature flags, caps, discrete quotas, meter allowances, and neutral unknown values.","categories":["blocks","billing"],"docs":"## Usage\n\nPass each entitlement with a semantic kind so features, caps, quotas, and metered allowances keep their distinct meaning.\n\n```tsx\nimport { BillingEntitlementsList } from '@/blocks/billing/billing-entitlements-list/billing-entitlements-list';\n\n\n```\n\nUse explicit `unlimited`, `uninitialized`, and `unknown` variants. Unknown values stay visible with a neutral presentation, and message overrides let you adapt the labels without changing the data model.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"},{"path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-entitlements-list"},{"name":"billing-usage-overview","type":"registry:block","title":"Billing Usage Overview","description":"Current-period usage with quota, boolean, unlimited, uninitialized, exhausted, overage, category-pool, and universal-pool states.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a current-period usage snapshot and nest child meters beneath category or universal pools when credits are shared.\n\n```tsx\nimport { BillingUsageOverview } from '@/blocks/billing/billing-usage-overview/billing-usage-overview';\n\n openUsageHistory(meterSlug)}\n onBuyCredits={(meterSlug) => openCreditPurchase(meterSlug)}\n/>\n```\n\nCategory and universal pools stay nested so their application order remains clear. Progress caps visually at 100 percent while text and accessible values preserve the actual used, allowance, and overage values. Actions disappear when their callbacks are absent.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-overview"},{"name":"billing-credits-card","type":"registry:block","title":"Billing Credits Card","description":"Available credits grouped by compatible meter and unit with permanent, period, rollover, expiring, and unknown lot semantics.","categories":["blocks","billing"],"docs":"## Usage\n\nPass available balances and their credit lots while keeping each meter and unit independent.\n\n```tsx\nimport { BillingCreditsCard } from '@/blocks/billing/billing-credits-card/billing-credits-card';\n\n\n```\n\nKeep incompatible meters and units in separate balance groups. Credit lots show the current grant makeup, while `billing-activity-table` provides a chronological view of grants, usage, adjustments, rollover, and expiration.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-credits-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-credits-card"},{"name":"billing-usage-history","type":"registry:block","title":"Billing Usage History","description":"Accessible, table-first period history with controlled meter, period, and pagination filters plus explicit quality labels.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a page of usage periods and control the meter, period, and pagination values when you provide their callbacks.\n\n```tsx\nimport { BillingUsageHistory } from '@/blocks/billing/billing-usage-history/billing-usage-history';\n\n\n```\n\nCredits and overage columns appear only when their values are marked as confirmed. Quality labels remain visible on each period, and the table keeps pagination and filter changes under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-history/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-usage-history"},{"name":"billing-activity-table","type":"registry:block","title":"Billing Activity Table","description":"Paginated ledger activity with controlled filters, semantic class/type presentation, and a titled metadata detail sheet.","categories":["blocks","billing"],"docs":"## Usage\n\nPass ledger class and entry type with each activity entry so labels and badge tones describe the event itself.\n\n```tsx\nimport { BillingActivityTable } from '@/blocks/billing/billing-activity-table/billing-activity-table';\n\n\n```\n\nA positive delta can represent consumption and a negative delta can represent release or reset, so presentation derives from `ledgerClass` and `entryType` rather than the sign. Unknown values remain neutral, and JSON-safe metadata opens in a titled detail sheet.","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-activity-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-activity-table"},{"name":"billing-settings-page","type":"registry:block","title":"Billing Settings Page","description":"Router-neutral Overview, Usage, and Plans composition that keeps subscription, usage, credits, entitlements, history, activity, and pricing failures isolated.","categories":["blocks","billing"],"docs":"## Usage\n\nPass one account together with independent resources and actions. Use `section` and `onSectionChange` to synchronize navigation, or `defaultSection` for local state. The page renders its own heading by default; set `showHeader={false}` when the surrounding document already provides it.\n\n```tsx\nimport { BillingSettingsPage } from '@/blocks/billing/billing-settings-page/billing-settings-page';\n\n\n```\n\nEach resource renders its own loading, empty, error, ready, and quality state, so one unavailable section never replaces the whole page. Controlled filters and actions are forwarded to their matching leaf blocks.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-activity-table","@constructive/billing-contracts","@constructive/billing-credits-card","@constructive/billing-entitlements-list","@constructive/billing-pricing-table","@constructive/billing-subscription-card","@constructive/billing-usage-history","@constructive/billing-usage-overview","@constructive/cn","@constructive/separator","@constructive/tabs","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx","type":"registry:component","target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx"},{"path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-settings-page/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/billing-settings-page"},{"name":"command-palette","type":"registry:block","title":"Command Palette","description":"Framework-neutral command discovery with page-scoped registration, structured shortcuts, multi-step flows, and cancellable background tasks.","categories":["blocks","application-shell"],"docs":"## Usage\n\nCreate one registry for the application, adapt navigation at the host boundary, and render the palette near the root layout. Pages can register commands while mounted with `usePageCommands`.\n\n```tsx\nimport { createCommandRegistry, kbd } from '@constructive-io/command-palette';\nimport { CommandPalette } from '@/blocks/command-palette/command-palette';\n\nconst registry = createCommandRegistry({\n groups: [{ id: 'navigation', label: 'Navigation', priority: 1 }],\n commands: [{\n id: 'settings',\n label: 'Open settings',\n type: 'navigation',\n group: 'navigation',\n href: '/settings',\n shortcut: kbd(',', 'mod')\n }]\n});\n\n router.push(href)} />;\n```\n\nThe installed block owns presentation and keyboard interaction. The headless package owns command registration, execution, multi-step state, and background-task lifecycle. Route authorization, action permissions, errors, and business workflows remain the host application's responsibility.","dependencies":["@constructive-io/command-palette@^0.4.0","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/button","@constructive/cn","@constructive/command","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/command-palette/command-palette.tsx","type":"registry:component","target":"src/blocks/command-palette/command-palette.tsx"},{"path":"registry/constructive/blocks/command-palette/kbd-shortcut.tsx","type":"registry:component","target":"src/blocks/command-palette/kbd-shortcut.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/multi-step-view.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/multi-step-view.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/step-indicator.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/step-indicator.tsx"},{"path":"registry/constructive/blocks/command-palette/background/background-task-stack.tsx","type":"registry:component","target":"src/blocks/command-palette/background/background-task-stack.tsx"},{"path":"registry/constructive/blocks/command-palette/background/inline-task-bar.tsx","type":"registry:component","target":"src/blocks/command-palette/background/inline-task-bar.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-card.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-card.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-icons.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-icons.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/command-palette"},{"name":"pack-foundation","type":"registry:lib","title":"Feature Pack Foundation","description":"Provider-neutral resource, action-policy, error, loading, empty, and status contracts shared by Constructive feature packs.","categories":[],"docs":null,"dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/empty","@constructive/skeleton"],"files":[{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx","type":"registry:component","target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/pack-foundation"},{"name":"console-runtime","type":"registry:lib","title":"Console Runtime","description":"Endpoint, session, transport, cache partitioning, and adapter contracts for identity-scoped Constructive consoles.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/console-runtime/capabilities.ts","type":"registry:lib","target":"src/blocks/console-runtime/capabilities.ts"},{"path":"registry/constructive/blocks/console-runtime/endpoints.ts","type":"registry:lib","target":"src/blocks/console-runtime/endpoints.ts"},{"path":"registry/constructive/blocks/console-runtime/feature-adapter.ts","type":"registry:lib","target":"src/blocks/console-runtime/feature-adapter.ts"},{"path":"registry/constructive/blocks/console-runtime/index.ts","type":"registry:lib","target":"src/blocks/console-runtime/index.ts"},{"path":"registry/constructive/blocks/console-runtime/session.ts","type":"registry:lib","target":"src/blocks/console-runtime/session.ts"},{"path":"registry/constructive/blocks/console-runtime/standalone-session.ts","type":"registry:lib","target":"src/blocks/console-runtime/standalone-session.ts"},{"path":"registry/constructive/blocks/console-runtime/transport.ts","type":"registry:lib","target":"src/blocks/console-runtime/transport.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-runtime"},{"name":"console-feature-catalog","type":"registry:lib","title":"Console Feature Catalog","description":"Validated feature-pack capability manifests and stable backend preset profiles.","categories":[],"docs":null,"dependencies":["zod"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime"],"files":[{"path":"registry/constructive/feature-packs/capabilities.ts","type":"registry:lib","target":"src/feature-packs/capabilities.ts"},{"path":"registry/constructive/feature-packs/catalog.ts","type":"registry:lib","target":"src/feature-packs/catalog.ts"},{"path":"registry/constructive/feature-packs/catalog-validation.ts","type":"registry:lib","target":"src/feature-packs/catalog-validation.ts"},{"path":"registry/constructive/feature-packs/index.ts","type":"registry:lib","target":"src/feature-packs/index.ts"},{"path":"registry/constructive/feature-packs/manifest.ts","type":"registry:lib","target":"src/feature-packs/manifest.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-feature-catalog"},{"name":"console-kit-core","type":"registry:block","title":"Constructive Console Kit Core","description":"The leaf-independent Console Kit shell, runtime, discovery, and single modular Zustand store.","categories":[],"docs":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":["@constructive-io/data@^0.5.0","@tanstack/react-query","graphql","lucide-react","zustand"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime","@constructive/console-feature-catalog","@constructive/alert","@constructive/app-bar","@constructive/app-shell","@constructive/badge","@constructive/button","@constructive/cn","@constructive/pack-foundation","@constructive/popover","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/feature-module.ts","type":"registry:lib","target":"src/blocks/console-kit/feature-module.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-routes.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-routes.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-contracts.ts"},{"path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx","type":"registry:component","target":"src/blocks/console-kit/console-connection-menu.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-runtime.tsx"},{"path":"registry/constructive/blocks/console-kit/use-latest-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/use-latest-callback.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-core.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-core.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-capabilities.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-callback.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-graphql.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts"},{"path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/adapter-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/context-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/context-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/endpoint-capability-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/navigation-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/runtime-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/session-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/session-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx","type":"registry:component","target":"src/blocks/console-kit/store/console-kit-store.tsx"},{"path":"registry/constructive/blocks/console-kit/store/index.ts","type":"registry:lib","target":"src/blocks/console-kit/store/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-core"},{"name":"feature-pack-data","type":"registry:block","title":"Data Feature Pack","description":"A current-_meta-only application data explorer with application-table filtering and spreadsheet CRUD.","categories":[],"docs":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":["@constructive-io/data@^0.5.0","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/sheets","@constructive/alert","@constructive/button","@constructive/card","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/data/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/data.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-data"},{"name":"console-module-data","type":"registry:block","title":"Data Console Module","description":"Console Kit navigation, capability discovery, and tenant runtime binding for the Data feature pack.","categories":[],"docs":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-data","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/sheets","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-console-module.tsx"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-data"},{"name":"feature-pack-auth","type":"registry:block","title":"Authentication Feature Pack","description":"Provider-neutral public authentication flows and personal account/session management.","categories":[],"docs":"`feature-pack-auth` installed a provider-neutral view and `.constructive/feature-packs/auth.json`. Import from `@/blocks/feature-packs/auth/auth-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-auth` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Unsupported policy grants or callbacks stay absent, provider failures remain explicit, and callback credentials never enter the view.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/field","@constructive/input","@constructive/input-group","@constructive/separator","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-account-view.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-password-policy.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/auth.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-auth"},{"name":"console-module-auth","type":"registry:block","title":"Authentication Console Module","description":"Console Kit session flow, capability discovery, and Constructive adapter for the Authentication feature pack.","categories":[],"docs":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-auth","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/auth-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-auth"},{"name":"feature-pack-users","type":"registry:block","title":"App access Feature Pack","description":"App access governance with member lifecycle controls, invitations, access profiles, direct and effective permissions, and new-member defaults.","categories":[],"docs":"`feature-pack-users` installed a provider-neutral view and `.constructive/feature-packs/users.json`. Import from `@/blocks/feature-packs/users/users-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-users` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources or callbacks stay unavailable, while row policy, PostgreSQL privileges, RLS, and final-owner constraints decide mutations.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/input-group","@constructive/select","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/users/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/users.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-users"},{"name":"console-module-users","type":"registry:block","title":"App access Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the App access feature pack.","categories":[],"docs":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-users","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/users-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-users"},{"name":"feature-pack-organizations","type":"registry:block","title":"Organizations Feature Pack","description":"Complete tenant administration for selection, member governance, invitations, profiles, permissions, defaults, hierarchy, settings, principals, and API keys.","categories":[],"docs":"`feature-pack-organizations` installed a provider-neutral view and `.constructive/feature-packs/organizations.json`. Import from `@/blocks/feature-packs/organizations/organizations-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-organizations` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: When the active organization is missing or does not match the host-provided list, the view selects the first available organization. It never infers a principal, policy grant, or mutation authority; missing resources and callbacks stay unavailable, while PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/select","@constructive/switch","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/organizations.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-organizations"},{"name":"console-module-organizations","type":"registry:block","title":"Organizations Console Module","description":"Console Kit discovery, metadata resolution, and Constructive adapter for the Organizations feature pack.","categories":[],"docs":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-organizations","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/pack-foundation","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/organizations-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-organizations"},{"name":"feature-pack-storage","type":"registry:block","title":"Storage Feature Pack","description":"Bucket, folder, object, upload, download, and deletion surfaces backed by injected storage actions.","categories":[],"docs":"`feature-pack-storage` installed a provider-neutral view and `.constructive/feature-packs/storage.json`. Import from `@/blocks/feature-packs/storage/storage-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-storage` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: An object endpoint alone does not prove bucket or file operations; incomplete and read-only contracts keep write controls hidden.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/radio-group","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-storage"},{"name":"console-module-storage","type":"registry:block","title":"Storage Console Module","description":"Console Kit discovery, metadata resolution, adapter, and modular state slice for the Storage feature pack.","categories":[],"docs":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-storage","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/storage-adapter.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-console-slice.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-meta-contract.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-storage"},{"name":"feature-pack-billing","type":"registry:block","title":"Billing Feature Pack","description":"The feature-pack root for Constructive billing plans, subscriptions, usage, entitlements, credits, and activity.","categories":[],"docs":"`feature-pack-billing` installed a provider-neutral view and `.constructive/feature-packs/billing.json`. Import from `@/blocks/feature-packs/billing/billing-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-billing` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources remain independent degraded states, and unavailable provider callbacks stay absent.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/billing-settings-page","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/billing.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-billing"},{"name":"console-module-billing","type":"registry:block","title":"Billing Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Billing feature pack.","categories":[],"docs":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-billing","@constructive/billing-contracts","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/billing-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-billing"},{"name":"feature-pack-notifications","type":"registry:block","title":"Notifications Feature Pack","description":"An application notification inbox with read, open, and deletion actions.","categories":[],"docs":"`feature-pack-notifications` installed a provider-neutral view and `.constructive/feature-packs/notifications.json`. Import from `@/blocks/feature-packs/notifications/notifications-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-notifications` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host must provide an authoritative inbox, policy, and callbacks; absent operations stay unavailable and mutations require a refreshed resource.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/notifications.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/feature-pack-notifications"},{"name":"console-module-notifications","type":"registry:block","title":"Notifications Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Notifications feature pack.","categories":[],"docs":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-notifications","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/notifications-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-module-notifications"},{"name":"preset-auth-hardened","type":"registry:block","title":"Hardened Authentication Preset","description":"Stable Constructive auth-hardened backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/auth-hardened-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/auth-hardened.json","type":"registry:file","target":"~/.constructive/feature-packs/auth-hardened.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-auth-hardened"},{"name":"preset-b2b-storage","type":"registry:block","title":"B2B with Storage Preset","description":"Stable Constructive b2b-storage backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/b2b-storage-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/b2b-storage.json","type":"registry:file","target":"~/.constructive/feature-packs/b2b-storage.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-b2b-storage"},{"name":"preset-full","type":"registry:block","title":"Full Preset","description":"Stable Constructive full backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/console-module-billing","@constructive/console-module-notifications","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/full-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/full-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/full.json","type":"registry:file","target":"~/.constructive/feature-packs/full.json"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/preset-full"},{"name":"console-kit-nextjs","type":"registry:block","title":"Constructive Console Kit for Next.js","description":"A full-page Next.js tenant console with semantic routing, auth, dynamic endpoint discovery, first-party adapters, and every feature pack.","categories":[],"docs":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/preset-full","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/constructive/index.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/index.ts"}],"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/console-kit-nextjs"},{"name":"app-kit-core","type":"registry:block","title":"Constructive App Kit Core","description":"Typed, server-safe application resources, queries, actions, scope partitioning, schema validation, and opt-in client runtime.","categories":[],"docs":"Install this root to define Constructive-native application contracts without choosing a view family. Import the client runtime explicitly when a connected view needs TanStack Query. Credentials never belong in definitions or AppScope.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/core/contracts.ts","type":"registry:lib","target":"src/blocks/app-kit/core/contracts.ts"},{"path":"registry/constructive/blocks/app-kit/core/navigation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/navigation.ts"},{"path":"registry/constructive/blocks/app-kit/core/schema-validation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/schema-validation.ts"},{"path":"registry/constructive/blocks/app-kit/core/scope.ts","type":"registry:lib","target":"src/blocks/app-kit/core/scope.ts"},{"path":"registry/constructive/blocks/app-kit/core/runtime.tsx","type":"registry:component","target":"src/blocks/app-kit/core/runtime.tsx"},{"path":"registry/constructive/blocks/app-kit/core/index.ts","type":"registry:lib","target":"src/blocks/app-kit/core/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"runtime","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal"],"intents":["define-resources","load-data","execute-actions","validate-schema"],"capabilities":["resource-contracts","query-contracts","action-contracts","scoped-cache","schema-validation","navigation-adapters"],"slots":["record-opener","url-state-adapter"],"events":["query-settled","action-settled","scope-changed"],"compatibleWith":["app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-core"},{"name":"app-kit-data","type":"registry:block","title":"Constructive App Kit Data Views","description":"Controlled and connected tables, lists, cards, record details, forms, relations, collection controls, and action bars.","categories":[],"docs":"Use this root for record and collection applications. Loaders stay server-driven, relation pickers search remotely, ambiguous identities fail read-only, and every view distinguishes loading, empty, denied, and error states.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/combobox","@constructive/empty","@constructive/field","@constructive/input","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/switch","@constructive/table","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/data/types.ts","type":"registry:lib","target":"src/blocks/app-kit/data/types.ts"},{"path":"registry/constructive/blocks/app-kit/data/states.tsx","type":"registry:component","target":"src/blocks/app-kit/data/states.tsx"},{"path":"registry/constructive/blocks/app-kit/data/controls.tsx","type":"registry:component","target":"src/blocks/app-kit/data/controls.tsx"},{"path":"registry/constructive/blocks/app-kit/data/collections.tsx","type":"registry:component","target":"src/blocks/app-kit/data/collections.tsx"},{"path":"registry/constructive/blocks/app-kit/data/detail-form.tsx","type":"registry:component","target":"src/blocks/app-kit/data/detail-form.tsx"},{"path":"registry/constructive/blocks/app-kit/data/relations.tsx","type":"registry:component","target":"src/blocks/app-kit/data/relations.tsx"},{"path":"registry/constructive/blocks/app-kit/data/action-bars.tsx","type":"registry:component","target":"src/blocks/app-kit/data/action-bars.tsx"},{"path":"registry/constructive/blocks/app-kit/data/index.ts","type":"registry:lib","target":"src/blocks/app-kit/data/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["record","collection"],"intents":["browse","search","filter","sort","edit","relate","bulk-act"],"capabilities":["table","list","cards","record-detail","generated-form","relation-picker","relation-panel","pagination","bulk-actions"],"slots":["cell-renderer","record-renderer","form-field","toolbar","footer"],"events":["state-change","open-record","submit","link-record","unlink-record","bulk-action"],"compatibleWith":["app-kit-core","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-data"},{"name":"app-kit-board","type":"registry:block","title":"Constructive App Kit Board","description":"A typed controlled board and connected resource wrapper with semantic moves, keyboard alternatives, and mutation rollback.","categories":[],"docs":"Board movement is disabled until the host supplies an explicit semantic action. Pointer and keyboard moves use the same action contract, restore focus, and roll back optimistic state on denial or failure.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/card","@constructive/dropdown-menu","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/board/board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/connected-board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/connected-board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/index.ts","type":"registry:lib","target":"src/blocks/app-kit/board/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["collection","board"],"intents":["plan","prioritize","move-records","inspect"],"capabilities":["board","typed-columns","semantic-move","keyboard-move","optimistic-rollback"],"slots":["card"],"events":["open-record","move-record","move-denied"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-board"},{"name":"app-kit-dashboard","type":"registry:block","title":"Constructive App Kit Dashboard","description":"Explicit analytical widgets and a versioned, replaceable layout store on the accessible SVG and SSR foundation from TanStack Charts.","categories":[],"docs":"Dashboard widgets always use explicit analytical loaders; they never derive totals from a paginated collection page. Runtime customization is limited to an approved typed catalog, while layout persistence is replaceable.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/charts@0.6.4","@tanstack/charts-scales@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/chart","@constructive/cn","@constructive/dropdown-menu","@constructive/empty","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/dashboard/widgets.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/widgets.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/layout-store.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/layout-store.ts"},{"path":"registry/constructive/blocks/app-kit/dashboard/dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/connected-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/connected-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/persisted-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/persisted-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/index.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["aggregate","series","breakdown"],"intents":["monitor","analyze","compare","configure-layout"],"capabilities":["kpi","bar-chart","line-chart","breakdown-table","widget-catalog","layout-store","layout-persistence"],"slots":["widget"],"events":["layout-change"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-dashboard"},{"name":"app-kit-calendar","type":"registry:block","title":"Constructive App Kit Calendar","description":"Localized controlled month and agenda views with explicit timezones and connected range-query loading.","categories":[],"docs":"The host owns record opening and editing, while the connected wrapper loads only the visible range. Recurrence, resource scheduling, and drag rescheduling are intentionally outside V1.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/cn","@constructive/empty","@constructive/skeleton","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/calendar/calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/connected-calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/connected-calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/index.ts","type":"registry:lib","target":"src/blocks/app-kit/calendar/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["temporal","collection"],"intents":["schedule","browse-by-date","inspect"],"capabilities":["temporal","month","agenda","range-query","localization","timezone"],"events":["range-change","view-change","open-record"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-calendar"},{"name":"app-kit-workflow","type":"registry:block","title":"Constructive App Kit Workflow UI","description":"Controlled and connected action surfaces, confirmation and input dialogs, bulk execution, and a multi-step stepper.","categories":[],"docs":"This root composes application and server actions into accessible interaction surfaces; it is not a durable workflow engine. Validation, permission failures, cancellation, and partial errors remain explicit.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/alert-dialog","@constructive/app-kit-core","@constructive/button","@constructive/dialog","@constructive/dropdown-menu","@constructive/separator","@constructive/stepper","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/workflow/actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/connected-actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/connected-actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/stepper.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/stepper.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/index.ts","type":"registry:lib","target":"src/blocks/app-kit/workflow/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"composition","boundary":"client","provider":"app-kit","dataShapes":["record","collection","action-input"],"intents":["execute-action","confirm","collect-input","bulk-execute","guide-steps"],"capabilities":["action-button","action-menu","input-dialog","confirmation-dialog","bulk-execution","stepper"],"slots":["action-input","confirmation-body","step-content"],"events":["action-start","action-settled","step-change","cancel"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-workflow"},{"name":"app-kit-event-studio","type":"registry:block","title":"Constructive App Kit Event Studio","description":"An opt-in page-scale proof starter combining analytical, collection, board, calendar, relation, form, and action views.","categories":[],"docs":"Event Studio pairs with the supported b2b:storage blueprint recipe and demonstrates explicit analytical loaders, semantic board movement, localized range queries, searchable relations, permission-aware actions, and host-controlled URL state. Supply adapters generated from the final executable GraphQL schema.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react","zod"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-board","@constructive/app-kit-calendar","@constructive/app-kit-core","@constructive/app-kit-dashboard","@constructive/app-kit-data","@constructive/app-kit-workflow","@constructive/badge","@constructive/button","@constructive/dialog","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/event-studio/definitions.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/definitions.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/state.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/state.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/event-studio.tsx","type":"registry:component","target":"src/blocks/app-kit/event-studio/event-studio.tsx"},{"path":"registry/constructive/blocks/app-kit/event-studio/index.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"starter","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal","board"],"intents":["manage-events","analyze","schedule","publish","relate-people","configure-views"],"capabilities":["event-studio","dashboard","collections","record-detail","generated-form","relations","board","calendar","actions","url-state"],"slots":["record-opener","dashboard-layout-store","url-state-adapter"],"events":["view-change","open-record","move-session","publish-session","schedule-session","link-person"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow"]}},"installCommand":"pnpm dlx shadcn@4.13.1 add @constructive/app-kit-event-studio"}]}
+{"schemaVersion":1,"kind":"constructive.blocks-registry-catalog","sourceCommit":"1a72e5d95f7ce4a243cd4536ed78c638708d538c","aggregatePath":"apps/registry/registry.json","registryNamespace":"@constructive","itemCount":123,"items":[{"name":"constructive-theme","type":"registry:theme","title":"Constructive Theme","description":"Constructive design system theme — OKLCH colors, z-index layers, shadow utilities, and animations.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/constructive-theme"},{"name":"cn","type":"registry:lib","title":"cn utility","description":"Tailwind CSS class name merge utility using clsx and tailwind-merge.","categories":["utility"],"docs":"Import: `import { cn } from '@/lib/utils'`","dependencies":["clsx","tailwind-merge"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/cn"},{"name":"slot","type":"registry:lib","title":"Slot utility","description":"Polymorphic component utilities for asChild pattern.","categories":["utility"],"docs":"Import: `import { Slot } from '@/lib/slot'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/slot.tsx","type":"registry:lib","target":"@lib/slot.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/slot"},{"name":"use-controllable-state","type":"registry:hook","title":"useControllableState","description":"Hook for components with controlled/uncontrolled state.","categories":["hook"],"docs":"Import: `import { useControllableState } from '@/hooks/use-controllable-state'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-controllable-state.ts","type":"registry:hook","target":"@hooks/use-controllable-state.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/use-controllable-state"},{"name":"use-debounce","type":"registry:hook","title":"useDebounce","description":"Hook for debouncing values.","categories":["hook"],"docs":"Import: `import { useDebounce } from '@/hooks/use-debounce'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-debounce.ts","type":"registry:hook","target":"@hooks/use-debounce.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/use-debounce"},{"name":"use-mobile","type":"registry:hook","title":"useIsMobile","description":"Hook for detecting mobile viewport.","categories":["hook"],"docs":"Import: `import { useIsMobile } from '@/hooks/use-mobile'`","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/hooks/use-mobile.ts","type":"registry:hook","target":"@hooks/use-mobile.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/use-mobile"},{"name":"motion-config","type":"registry:lib","title":"Motion Config","description":"Animation presets and spring configurations for motion library.","categories":["animation"],"docs":"Import: `import { motionConfig } from '@/lib/motion/motion-config'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/lib/motion/motion-config.ts","type":"registry:lib","target":"@lib/motion/motion-config.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/motion-config"},{"name":"button","type":"registry:ui","title":"Button","description":"A button component with multiple variants and sizes.","categories":["primitive"],"docs":"Import: `import { Button } from '@/components/ui/button'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/button.tsx","type":"registry:ui","target":"@ui/button.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/button"},{"name":"badge","type":"registry:ui","title":"Badge","description":"A badge component for status indicators and labels.","categories":["primitive"],"docs":"Import: `import { Badge } from '@/components/ui/badge'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/badge.tsx","type":"registry:ui","target":"@ui/badge.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/badge"},{"name":"label","type":"registry:ui","title":"Label","description":"A label component for form fields.","categories":["primitive"],"docs":"Import: `import { Label } from '@/components/ui/label'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/label.tsx","type":"registry:ui","target":"@ui/label.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/label"},{"name":"skeleton","type":"registry:ui","title":"Skeleton","description":"A skeleton loading placeholder component.","categories":["primitive"],"docs":"Import: `import { Skeleton } from '@/components/ui/skeleton'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/skeleton.tsx","type":"registry:ui","target":"@ui/skeleton.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/skeleton"},{"name":"card","type":"registry:ui","title":"Card","description":"A card component with header, content, and footer sections.","categories":["primitive"],"docs":"Import: `import { Card, CardHeader, CardContent, CardFooter } from '@/components/ui/card'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/card.tsx","type":"registry:ui","target":"@ui/card.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/card"},{"name":"chart","type":"registry:ui","title":"Chart","description":"Accessible TanStack Charts React adapter with a theme-adaptive semantic token configuration.","categories":["data-display"],"docs":"Import: `import { Chart, CONSTRUCTIVE_CHART_THEME } from '@/components/ui/chart'`","dependencies":["@tanstack/charts@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/chart.tsx","type":"registry:ui","target":"@ui/chart.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/chart"},{"name":"separator","type":"registry:ui","title":"Separator","description":"A visual separator for dividing content.","categories":["primitive"],"docs":"Import: `import { Separator } from '@/components/ui/separator'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/separator.tsx","type":"registry:ui","target":"@ui/separator.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/separator"},{"name":"alert","type":"registry:ui","title":"Alert","description":"An alert component for displaying messages.","categories":["primitive"],"docs":"Import: `import { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'`","dependencies":["class-variance-authority"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert.tsx","type":"registry:ui","target":"@ui/alert.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/alert"},{"name":"input","type":"registry:ui","title":"Input","description":"A text input component built on Base UI.","categories":["form"],"docs":"Import: `import { Input } from '@/components/ui/input'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input.tsx","type":"registry:ui","target":"@ui/input.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/input"},{"name":"textarea","type":"registry:ui","title":"Textarea","description":"A multiline text input component.","categories":["form"],"docs":"Import: `import { Textarea } from '@/components/ui/textarea'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/textarea.tsx","type":"registry:ui","target":"@ui/textarea.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/textarea"},{"name":"checkbox","type":"registry:ui","title":"Checkbox","description":"A checkbox component built on Base UI.","categories":["form"],"docs":"Import: `import { Checkbox } from '@/components/ui/checkbox'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox.tsx","type":"registry:ui","target":"@ui/checkbox.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/checkbox"},{"name":"checkbox-group","type":"registry:ui","title":"Checkbox Group","description":"A group wrapper for multiple checkboxes.","categories":["form"],"docs":"Import: `import { CheckboxGroup } from '@/components/ui/checkbox-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/checkbox","@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/checkbox-group.tsx","type":"registry:ui","target":"@ui/checkbox-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/checkbox-group"},{"name":"radio-group","type":"registry:ui","title":"Radio Group","description":"A radio group component built on Base UI.","categories":["form"],"docs":"Import: `import { RadioGroup } from '@/components/ui/radio-group'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/radio-group.tsx","type":"registry:ui","target":"@ui/radio-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/radio-group"},{"name":"switch","type":"registry:ui","title":"Switch","description":"A toggle switch component built on Base UI.","categories":["form"],"docs":"Import: `import { Switch } from '@/components/ui/switch'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/switch.tsx","type":"registry:ui","target":"@ui/switch.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/switch"},{"name":"progress","type":"registry:ui","title":"Progress","description":"A progress bar component built on Base UI.","categories":["form"],"docs":"Import: `import { Progress } from '@/components/ui/progress'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progress.tsx","type":"registry:ui","target":"@ui/progress.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/progress"},{"name":"avatar","type":"registry:ui","title":"Avatar","description":"An avatar component with image and fallback support.","categories":["data-display"],"docs":"Import: `import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/avatar.tsx","type":"registry:ui","target":"@ui/avatar.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/avatar"},{"name":"portal","type":"registry:ui","title":"Portal","description":"Portal management for overlay components with z-index layering.","categories":["layout"],"docs":"Import: `import { Portal } from '@/components/ui/portal'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/portal.tsx","type":"registry:ui","target":"@ui/portal.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/portal"},{"name":"scroll-area","type":"registry:ui","title":"Scroll Area","description":"A custom scrollable area component built on Base UI.","categories":["layout"],"docs":"Import: `import { ScrollArea } from '@/components/ui/scroll-area'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/scroll-area.tsx","type":"registry:ui","target":"@ui/scroll-area.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/scroll-area"},{"name":"select","type":"registry:ui","title":"Select","description":"A select/dropdown component built on Base UI.","categories":["form"],"docs":"Import: `import { Select } from '@/components/ui/select'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/select.tsx","type":"registry:ui","target":"@ui/select.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/select"},{"name":"tooltip","type":"registry:ui","title":"Tooltip","description":"A tooltip component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Tooltip } from '@/components/ui/tooltip'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tooltip.tsx","type":"registry:ui","target":"@ui/tooltip.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/tooltip"},{"name":"popover","type":"registry:ui","title":"Popover","description":"A popover component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Popover } from '@/components/ui/popover'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/popover.tsx","type":"registry:ui","target":"@ui/popover.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/popover"},{"name":"dialog","type":"registry:ui","title":"Dialog","description":"A modal dialog component built on Base UI.","categories":["overlay"],"docs":"Import: `import { Dialog } from '@/components/ui/dialog'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dialog.tsx","type":"registry:ui","target":"@ui/dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/dialog"},{"name":"alert-dialog","type":"registry:ui","title":"Alert Dialog","description":"An alert dialog for confirmations built on Base UI.","categories":["overlay"],"docs":"Import: `import { AlertDialog } from '@/components/ui/alert-dialog'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/alert-dialog.tsx","type":"registry:ui","target":"@ui/alert-dialog.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/alert-dialog"},{"name":"dropdown-menu","type":"registry:ui","title":"Dropdown Menu","description":"A dropdown menu component built on Base UI.","categories":["overlay"],"docs":"Import: `import { DropdownMenu } from '@/components/ui/dropdown-menu'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dropdown-menu.tsx","type":"registry:ui","target":"@ui/dropdown-menu.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/dropdown-menu"},{"name":"sheet","type":"registry:ui","title":"Sheet","description":"A slide-out panel component with animations.","categories":["overlay"],"docs":"Import: `import { Sheet } from '@/components/ui/sheet'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/motion-config","@constructive/use-controllable-state","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sheet.tsx","type":"registry:ui","target":"@ui/sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/sheet"},{"name":"drawer","type":"registry:ui","title":"Drawer","description":"A bottom drawer component using Vaul.","categories":["overlay"],"docs":"Import: `import { Drawer } from '@/components/ui/drawer'`","dependencies":["vaul"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/drawer.tsx","type":"registry:ui","target":"@ui/drawer.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/drawer"},{"name":"tabs","type":"registry:ui","title":"Tabs","description":"A tabs component built on Base UI.","categories":["layout"],"docs":"Import: `import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tabs.tsx","type":"registry:ui","target":"@ui/tabs.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/tabs"},{"name":"collapsible","type":"registry:ui","title":"Collapsible","description":"A collapsible/accordion component built on Base UI.","categories":["layout"],"docs":"Import: `import { Collapsible } from '@/components/ui/collapsible'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/collapsible.tsx","type":"registry:ui","target":"@ui/collapsible.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/collapsible"},{"name":"resizable","type":"registry:ui","title":"Resizable","description":"Resizable panel layouts using react-resizable-panels.","categories":["layout"],"docs":"Import: `import { ResizablePanel, ResizablePanelGroup, ResizableHandle } from '@/components/ui/resizable'`","dependencies":["lucide-react","react-resizable-panels@^3.0.0"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/resizable.tsx","type":"registry:ui","target":"@ui/resizable.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/resizable"},{"name":"table","type":"registry:ui","title":"Table","description":"A table component with header, body, and cell primitives.","categories":["data-display"],"docs":"Import: `import { Table, TableHeader, TableBody, TableRow, TableCell } from '@/components/ui/table'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/table.tsx","type":"registry:ui","target":"@ui/table.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/table"},{"name":"pagination","type":"registry:ui","title":"Pagination","description":"A pagination component with navigation controls.","categories":["navigation"],"docs":"Import: `import { Pagination } from '@/components/ui/pagination'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/pagination.tsx","type":"registry:ui","target":"@ui/pagination.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/pagination"},{"name":"breadcrumb","type":"registry:ui","title":"Breadcrumb","description":"A breadcrumb navigation component.","categories":["navigation"],"docs":"Import: `import { Breadcrumb } from '@/components/ui/breadcrumb'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/breadcrumb.tsx","type":"registry:ui","target":"@ui/breadcrumb.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/breadcrumb"},{"name":"form","type":"registry:ui","title":"Form","description":"Form utilities with react-hook-form integration.","categories":["form"],"docs":"Import: `import { Form, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'`","dependencies":["react-hook-form"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form.tsx","type":"registry:ui","target":"@ui/form.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/form"},{"name":"form-control","type":"registry:ui","title":"Form Control","description":"A form control wrapper with label and error display.","categories":["form"],"docs":"Import: `import { FormControl } from '@/components/ui/form-control'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/label","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/form-control.tsx","type":"registry:ui","target":"@ui/form-control.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/form-control"},{"name":"input-group","type":"registry:ui","title":"Input Group","description":"Input with addons and icons.","categories":["form"],"docs":"Import: `import { InputGroup } from '@/components/ui/input-group'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/input","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/input-group.tsx","type":"registry:ui","target":"@ui/input-group.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/input-group"},{"name":"autocomplete","type":"registry:ui","title":"Autocomplete","description":"An autocomplete component built on Base UI.","categories":["input"],"docs":"Import: `import { Autocomplete } from '@/components/ui/autocomplete'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/autocomplete.tsx","type":"registry:ui","target":"@ui/autocomplete.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/autocomplete"},{"name":"command","type":"registry:ui","title":"Command","description":"A command palette component.","categories":["overlay"],"docs":"Import: `import { Command } from '@/components/ui/command'`","dependencies":["cmdk","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/command.tsx","type":"registry:ui","target":"@ui/command.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/command"},{"name":"combobox","type":"registry:ui","title":"Combobox","description":"A combobox component with search built on Base UI.","categories":["input"],"docs":"Import: `import { Combobox } from '@/components/ui/combobox'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/input","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/combobox.tsx","type":"registry:ui","target":"@ui/combobox.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/combobox"},{"name":"multi-select","type":"registry:ui","title":"Multi Select","description":"A multi-select component with tags.","categories":["input"],"docs":"Import: `import { MultiSelect } from '@/components/ui/multi-select'`","dependencies":["class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/popover","@constructive/separator","@constructive/input","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/multi-select.tsx","type":"registry:ui","target":"@ui/multi-select.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/multi-select"},{"name":"tags","type":"registry:ui","title":"Tags","description":"A tags input component with autocomplete.","categories":["input"],"docs":"Import: `import { Tags } from '@/components/ui/tags'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/button","@constructive/command","@constructive/popover","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/tags.tsx","type":"registry:ui","target":"@ui/tags.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/tags"},{"name":"record-picker","type":"registry:ui","title":"Record Picker","description":"A record selection component with search and filtering.","categories":["input"],"docs":"Import: `import { RecordPicker } from '@/components/ui/record-picker'`","dependencies":["@remixicon/react","match-sorter"],"devDependencies":[],"registryDependencies":["@constructive/use-debounce","@constructive/checkbox","@constructive/input-group","@constructive/scroll-area","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/record-picker.tsx","type":"registry:ui","target":"@ui/record-picker.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/record-picker"},{"name":"stepper","type":"registry:ui","title":"Stepper","description":"A stepper component for multi-step workflows.","categories":["navigation"],"docs":"Import: `import { Stepper } from '@/components/ui/stepper'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/slot","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/stepper.tsx","type":"registry:ui","target":"@ui/stepper.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/stepper"},{"name":"sidebar","type":"registry:ui","title":"Sidebar","description":"A responsive Base UI sidebar with off-canvas, icon-only, and fixed collapse modes.","categories":["navigation"],"docs":"Import: `import { Sidebar, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'`","dependencies":["@base-ui/react","class-variance-authority","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/use-mobile","@constructive/button","@constructive/input","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sidebar.tsx","type":"registry:ui","target":"@ui/sidebar.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/sidebar"},{"name":"calendar-rac","type":"registry:ui","title":"Calendar","description":"A calendar component using React Aria Components.","categories":["input"],"docs":"Import: `import { Calendar } from '@/components/ui/calendar-rac'`","dependencies":["@internationalized/date","react-aria-components"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/calendar-rac.tsx","type":"registry:ui","target":"@ui/calendar-rac.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/calendar-rac"},{"name":"json-input","type":"registry:ui","title":"JSON Input","description":"A JSON editor component using React Ace.","categories":["input"],"docs":"Import: `import { JsonInput } from '@/components/ui/json-input'`","dependencies":["lucide-react","react-ace","ace-builds"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/json-input.tsx","type":"registry:ui","target":"@ui/json-input.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/json-input"},{"name":"sonner","type":"registry:ui","title":"Toaster","description":"Toast notifications using Sonner.","categories":["block"],"docs":"Import: `import { Toaster } from '@/components/ui/sonner'`","dependencies":["sonner"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/sonner.tsx","type":"registry:ui","target":"@ui/sonner.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/sonner"},{"name":"dock","type":"registry:ui","title":"Dock","description":"A macOS-style dock component.","categories":["navigation"],"docs":"Import: `import { Dock, DockIcon } from '@/components/ui/dock'`","dependencies":["class-variance-authority","motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/dock.tsx","type":"registry:ui","target":"@ui/dock.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/dock"},{"name":"page-header","type":"registry:ui","title":"Page Header","description":"A simple page header component.","categories":["navigation"],"docs":"Import: `import { PageHeader } from '@/components/ui/page-header'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/page-header.tsx","type":"registry:ui","target":"@ui/page-header.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/page-header"},{"name":"flickering-grid","type":"registry:ui","title":"Flickering Grid","description":"An animated grid background effect.","categories":["effect"],"docs":"Import: `import { FlickeringGrid } from '@/components/ui/flickering-grid'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flickering-grid.tsx","type":"registry:ui","target":"@ui/flickering-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/flickering-grid"},{"name":"flow-zoom-panel","type":"registry:ui","title":"Flow Zoom Panel","description":"Zoom in/out and fit-view controls for React Flow canvases.","categories":["layout"],"docs":"Import: `import { FlowZoomPanel } from '@/components/ui/flow-zoom-panel'`","dependencies":["@xyflow/react","@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/flow-zoom-panel.tsx","type":"registry:ui","target":"@ui/flow-zoom-panel.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/flow-zoom-panel"},{"name":"motion-grid","type":"registry:ui","title":"Motion Grid","description":"An animated grid with frame-based transitions.","categories":["effect"],"docs":"Import: `import { MotionGrid } from '@/components/ui/motion-grid'`","dependencies":["motion"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/motion-config","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/motion-grid.tsx","type":"registry:ui","target":"@ui/motion-grid.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/motion-grid"},{"name":"progressive-blur","type":"registry:ui","title":"Progressive Blur","description":"A gradient blur overlay effect.","categories":["effect"],"docs":"Import: `import { ProgressiveBlur } from '@/components/ui/progressive-blur'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur.tsx","type":"registry:ui","target":"@ui/progressive-blur.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/progressive-blur"},{"name":"progressive-blur-scroll-container","type":"registry:ui","title":"Progressive Blur Scroll Container","description":"A scroll container with blur effects at edges.","categories":["effect"],"docs":"Import: `import { ProgressiveBlurScrollContainer } from '@/components/ui/progressive-blur-scroll-container'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/progressive-blur","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/progressive-blur-scroll-container.tsx","type":"registry:ui","target":"@ui/progressive-blur-scroll-container.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/progressive-blur-scroll-container"},{"name":"responsive-diagram","type":"registry:ui","title":"Responsive Diagram","description":"A responsive diagram container with auto-scaling.","categories":["effect"],"docs":"Import: `import { ResponsiveDiagram } from '@/components/ui/responsive-diagram'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/responsive-diagram.tsx","type":"registry:ui","target":"@ui/responsive-diagram.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/responsive-diagram"},{"name":"unlink-button","type":"registry:ui","title":"Unlink Button","description":"A button for unlinking/removing records.","categories":["action"],"docs":"Import: `import { UnlinkButton } from '@/components/ui/unlink-button'`","dependencies":["@remixicon/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/unlink-button.tsx","type":"registry:ui","target":"@ui/unlink-button.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/unlink-button"},{"name":"org-chart","type":"registry:block","title":"Org Chart","description":"An interactive organizational chart with automatic hierarchy layout, zoom controls, node actions, and drag-to-reparent behavior.","categories":["block","application"],"docs":"Import: `import { OrgChart } from '@/components/ui/org-chart'`","dependencies":["@xyflow/react","@remixicon/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/tooltip","@constructive/avatar","@constructive/badge","@constructive/dropdown-menu","@constructive/flow-zoom-panel","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/org-chart/index.ts","type":"registry:component","target":"@ui/org-chart/index.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.tsx","type":"registry:component","target":"@ui/org-chart/org-chart.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-context.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-context.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-node.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-node.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-edge.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-edge.tsx"},{"path":"registry/constructive/blocks/org-chart/org-chart-empty.tsx","type":"registry:component","target":"@ui/org-chart/org-chart-empty.tsx"},{"path":"registry/constructive/blocks/org-chart/layout.ts","type":"registry:lib","target":"@ui/org-chart/layout.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart-utils.ts","type":"registry:lib","target":"@ui/org-chart/org-chart-utils.ts"},{"path":"registry/constructive/blocks/org-chart/org-chart.types.ts","type":"registry:lib","target":"@ui/org-chart/org-chart.types.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/org-chart"},{"name":"storage","type":"registry:block","title":"Storage Foundation","description":"Shared storage types, formatters, file icons, status badges, breadcrumbs, and object-toolbar primitives.","categories":["block","application"],"docs":"Install this transitively through `storage-browser`, or import its files directly from `@/components/ui/storage/*`.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/badge","@constructive/breadcrumb","@constructive/button","@constructive/dropdown-menu","@constructive/input-group","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/types.ts","type":"registry:lib","target":"@ui/storage/types.ts"},{"path":"registry/constructive/blocks/storage/utils.ts","type":"registry:lib","target":"@ui/storage/utils.ts"},{"path":"registry/constructive/blocks/storage/file-type-icon.tsx","type":"registry:component","target":"@ui/storage/file-type-icon.tsx"},{"path":"registry/constructive/blocks/storage/visibility-badge.tsx","type":"registry:component","target":"@ui/storage/visibility-badge.tsx"},{"path":"registry/constructive/blocks/storage/storage-breadcrumb.tsx","type":"registry:component","target":"@ui/storage/storage-breadcrumb.tsx"},{"path":"registry/constructive/blocks/storage/object-toolbar.tsx","type":"registry:component","target":"@ui/storage/object-toolbar.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/storage"},{"name":"storage-bucket-rail","type":"registry:block","title":"Storage Bucket Rail","description":"A controlled, scrollable bucket list with visibility, object-count, selection, and create-bucket affordances.","categories":["block","application"],"docs":"Import: `import { BucketRail } from '@/components/ui/storage/bucket-rail'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/scroll-area","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-rail.tsx","type":"registry:component","target":"@ui/storage/bucket-rail.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/storage-bucket-rail"},{"name":"storage-object-table","type":"registry:block","title":"Storage Object Table","description":"A controlled object table with sorting, selection, row actions, skeleton loading, and empty results.","categories":["block","application"],"docs":"Import: `import { ObjectTable } from '@/components/ui/storage/object-table'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/button","@constructive/checkbox","@constructive/dropdown-menu","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-table.tsx","type":"registry:component","target":"@ui/storage/object-table.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/storage-object-table"},{"name":"storage-upload-dropzone","type":"registry:block","title":"Storage Upload Dropzone","description":"A drag-and-drop upload target with a browse action and an in-flight upload progress list.","categories":["block","application"],"docs":"Import: `import { UploadDropzone } from '@/components/ui/storage/upload-dropzone'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/button","@constructive/progress","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/upload-dropzone.tsx","type":"registry:component","target":"@ui/storage/upload-dropzone.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/storage-upload-dropzone"},{"name":"storage-object-detail-sheet","type":"registry:block","title":"Storage Object Detail Sheet","description":"A controlled object-detail sheet with preview, metadata, rename, download, link, and confirmed delete actions.","categories":["block","application"],"docs":"Import: `import { ObjectDetailSheet } from '@/components/ui/storage/object-detail-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/alert-dialog","@constructive/button","@constructive/input","@constructive/separator","@constructive/skeleton","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/object-detail-sheet.tsx","type":"registry:component","target":"@ui/storage/object-detail-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/storage-object-detail-sheet"},{"name":"storage-bucket-config-sheet","type":"registry:block","title":"Storage Bucket Config Sheet","description":"A create-or-edit bucket form with visibility and optional controls gated by the host schema.","categories":["block","application"],"docs":"Import: `import { BucketConfigSheet } from '@/components/ui/storage/bucket-config-sheet'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/cn","@constructive/badge","@constructive/button","@constructive/input","@constructive/label","@constructive/radio-group","@constructive/switch","@constructive/textarea","@constructive/sheet","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/bucket-config-sheet.tsx","type":"registry:component","target":"@ui/storage/bucket-config-sheet.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/storage-bucket-config-sheet"},{"name":"storage-empty-state","type":"registry:block","title":"Storage Empty State","description":"Accessible empty and unavailable states for missing buckets, unprovisioned storage, empty buckets, and denied access.","categories":["block","application"],"docs":"Import: `import { StorageEmptyState } from '@/components/ui/storage/storage-empty-state'`","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/storage-empty-state.tsx","type":"registry:component","target":"@ui/storage/storage-empty-state.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/storage-empty-state"},{"name":"storage-browser","type":"registry:block","title":"Storage Browser","description":"A complete controlled storage workspace with bucket navigation, object discovery, upload, configuration, detail, and empty states.","categories":["block","application"],"docs":"Import: `import { StorageBrowser } from '@/components/ui/storage'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/storage","@constructive/storage-bucket-rail","@constructive/storage-object-table","@constructive/storage-upload-dropzone","@constructive/storage-object-detail-sheet","@constructive/storage-bucket-config-sheet","@constructive/storage-empty-state","@constructive/cn","@constructive/separator","@constructive/button","@constructive/select","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/storage/index.ts","type":"registry:component","target":"@ui/storage/index.ts"},{"path":"registry/constructive/blocks/storage/storage-browser.tsx","type":"registry:component","target":"@ui/storage/storage-browser.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/storage-browser"},{"name":"stack","type":"registry:block","title":"Stack Navigation","description":"iOS-style navigation stack with gestures and animations.","categories":["block"],"docs":"Import: `import { Stack, StackCard } from '@/components/ui/stack'`","dependencies":["motion","@use-gesture/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/portal","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/stack/index.ts","type":"registry:component","target":"@ui/stack/index.ts"},{"path":"registry/constructive/blocks/stack/stack-context.tsx","type":"registry:component","target":"@ui/stack/stack-context.tsx"},{"path":"registry/constructive/blocks/stack/stack-card.tsx","type":"registry:component","target":"@ui/stack/stack-card.tsx"},{"path":"registry/constructive/blocks/stack/stack-header.tsx","type":"registry:component","target":"@ui/stack/stack-header.tsx"},{"path":"registry/constructive/blocks/stack/stack-backdrop.tsx","type":"registry:component","target":"@ui/stack/stack-backdrop.tsx"},{"path":"registry/constructive/blocks/stack/stack-viewport.tsx","type":"registry:component","target":"@ui/stack/stack-viewport.tsx"},{"path":"registry/constructive/blocks/stack/deferred-card-content.tsx","type":"registry:component","target":"@ui/stack/deferred-card-content.tsx"},{"path":"registry/constructive/blocks/stack/stack-animations.ts","type":"registry:lib","target":"@ui/stack/stack-animations.ts"},{"path":"registry/constructive/blocks/stack/stack-utils.ts","type":"registry:lib","target":"@ui/stack/stack-utils.ts"},{"path":"registry/constructive/blocks/stack/stack.types.ts","type":"registry:lib","target":"@ui/stack/stack.types.ts"},{"path":"registry/constructive/blocks/stack/use-stack-gestures.ts","type":"registry:hook","target":"@ui/stack/use-stack-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-peek-gestures.ts","type":"registry:hook","target":"@ui/stack/use-peek-gestures.ts"},{"path":"registry/constructive/blocks/stack/use-stack-responsive.ts","type":"registry:hook","target":"@ui/stack/use-stack-responsive.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/stack"},{"name":"toast","type":"registry:block","title":"Toast Notifications","description":"Styled toast notification functions using Sonner.","categories":["block"],"docs":"Import: `import { toastSuccess, toastError, toastWarning, toastInfo } from '@/components/ui/toast'`","dependencies":["sonner","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/button","@constructive/dialog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/toast/index.ts","type":"registry:component","target":"@ui/toast/index.ts"},{"path":"registry/constructive/blocks/toast/toast-error.tsx","type":"registry:component","target":"@ui/toast/toast-error.tsx"},{"path":"registry/constructive/blocks/toast/toast-success.tsx","type":"registry:component","target":"@ui/toast/toast-success.tsx"},{"path":"registry/constructive/blocks/toast/toast-warning.tsx","type":"registry:component","target":"@ui/toast/toast-warning.tsx"},{"path":"registry/constructive/blocks/toast/toast-info.tsx","type":"registry:component","target":"@ui/toast/toast-info.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/toast"},{"name":"app-bar","type":"registry:block","title":"App Bar","description":"A sticky application header with a sidebar trigger, responsive breadcrumbs, and framework-neutral search and action slots.","categories":["block","navigation"],"docs":"Import: `import { AppBar } from '@/components/ui/app-bar'`","dependencies":["@base-ui/react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/breadcrumb","@constructive/separator","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-bar.tsx","type":"registry:component","target":"@ui/app-bar.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/app-bar"},{"name":"app-shell","type":"registry:block","title":"App Shell","description":"A provider-neutral application shell with typed navigation, brand, account, breadcrumb, and link-render contracts.","categories":["block","navigation"],"docs":"Import: `import { AppShell } from '@/components/ui/app-shell'`","dependencies":["@base-ui/react","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/app-bar","@constructive/avatar","@constructive/collapsible","@constructive/dropdown-menu","@constructive/sidebar","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-shell.tsx","type":"registry:component","target":"@ui/app-shell.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/app-shell"},{"name":"field","type":"registry:ui","title":"Field","description":"Composable form layout with groups, fieldsets, legends, labels, descriptions, separators, and accessible errors.","categories":["form"],"docs":"Import: `import { Field, FieldGroup, FieldLabel, FieldDescription, FieldError } from '@/components/ui/field'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/label","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/field.tsx","type":"registry:ui","target":"@ui/field.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/field"},{"name":"empty","type":"registry:ui","title":"Empty","description":"A composable empty-state layout with media, title, description, and action content.","categories":["layout"],"docs":"Import: `import { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent } from '@/components/ui/empty'`","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/ui/empty.tsx","type":"registry:ui","target":"@ui/empty.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/empty"},{"name":"ai","type":"registry:block","title":"AI Kit","description":"Presentational primitives for AI and agentic chat UIs: composer, messages, reasoning, tools, HITL approval, plan tracking, and streaming surfaces.","categories":["block","ai"],"docs":"Import PromptInput, Message, Tool, Reasoning, and PlanTracker from the installed ai directory under your configured shadcn ui alias.","dependencies":["lucide-react","sugar-high"],"devDependencies":[],"registryDependencies":["@constructive/cn","@constructive/button","@constructive/avatar","@constructive/tooltip","@constructive/alert","@constructive/collapsible","@constructive/badge","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/ai/agent-loader.tsx","type":"registry:component","target":"@ui/ai/agent-loader.tsx"},{"path":"registry/constructive/blocks/ai/approval-card.tsx","type":"registry:component","target":"@ui/ai/approval-card.tsx"},{"path":"registry/constructive/blocks/ai/chat-container.tsx","type":"registry:component","target":"@ui/ai/chat-container.tsx"},{"path":"registry/constructive/blocks/ai/code-block.tsx","type":"registry:component","target":"@ui/ai/code-block.tsx"},{"path":"registry/constructive/blocks/ai/context-card.tsx","type":"registry:component","target":"@ui/ai/context-card.tsx"},{"path":"registry/constructive/blocks/ai/context-ring.tsx","type":"registry:component","target":"@ui/ai/context-ring.tsx"},{"path":"registry/constructive/blocks/ai/diff-table.tsx","type":"registry:component","target":"@ui/ai/diff-table.tsx"},{"path":"registry/constructive/blocks/ai/feedback-bar.tsx","type":"registry:component","target":"@ui/ai/feedback-bar.tsx"},{"path":"registry/constructive/blocks/ai/file-upload.tsx","type":"registry:component","target":"@ui/ai/file-upload.tsx"},{"path":"registry/constructive/blocks/ai/format-duration.ts","type":"registry:component","target":"@ui/ai/format-duration.ts"},{"path":"registry/constructive/blocks/ai/image.tsx","type":"registry:component","target":"@ui/ai/image.tsx"},{"path":"registry/constructive/blocks/ai/index.ts","type":"registry:component","target":"@ui/ai/index.ts"},{"path":"registry/constructive/blocks/ai/inline-diff.tsx","type":"registry:component","target":"@ui/ai/inline-diff.tsx"},{"path":"registry/constructive/blocks/ai/markdown.tsx","type":"registry:component","target":"@ui/ai/markdown.tsx"},{"path":"registry/constructive/blocks/ai/message.tsx","type":"registry:component","target":"@ui/ai/message.tsx"},{"path":"registry/constructive/blocks/ai/plan-tracker.tsx","type":"registry:component","target":"@ui/ai/plan-tracker.tsx"},{"path":"registry/constructive/blocks/ai/prompt-input.tsx","type":"registry:component","target":"@ui/ai/prompt-input.tsx"},{"path":"registry/constructive/blocks/ai/prompt-suggestion.tsx","type":"registry:component","target":"@ui/ai/prompt-suggestion.tsx"},{"path":"registry/constructive/blocks/ai/reasoning.tsx","type":"registry:component","target":"@ui/ai/reasoning.tsx"},{"path":"registry/constructive/blocks/ai/recommendation-card.tsx","type":"registry:component","target":"@ui/ai/recommendation-card.tsx"},{"path":"registry/constructive/blocks/ai/response-stream.tsx","type":"registry:component","target":"@ui/ai/response-stream.tsx"},{"path":"registry/constructive/blocks/ai/scroll-button.tsx","type":"registry:component","target":"@ui/ai/scroll-button.tsx"},{"path":"registry/constructive/blocks/ai/source.tsx","type":"registry:component","target":"@ui/ai/source.tsx"},{"path":"registry/constructive/blocks/ai/steps.tsx","type":"registry:component","target":"@ui/ai/steps.tsx"},{"path":"registry/constructive/blocks/ai/streaming-text.tsx","type":"registry:component","target":"@ui/ai/streaming-text.tsx"},{"path":"registry/constructive/blocks/ai/system-message.tsx","type":"registry:component","target":"@ui/ai/system-message.tsx"},{"path":"registry/constructive/blocks/ai/task-row.tsx","type":"registry:component","target":"@ui/ai/task-row.tsx"},{"path":"registry/constructive/blocks/ai/text-shimmer.tsx","type":"registry:component","target":"@ui/ai/text-shimmer.tsx"},{"path":"registry/constructive/blocks/ai/thinking-trace.tsx","type":"registry:component","target":"@ui/ai/thinking-trace.tsx"},{"path":"registry/constructive/blocks/ai/tool.tsx","type":"registry:component","target":"@ui/ai/tool.tsx"},{"path":"registry/constructive/blocks/ai/types.ts","type":"registry:component","target":"@ui/ai/types.ts"},{"path":"registry/constructive/blocks/ai/use-throttled-text.ts","type":"registry:component","target":"@ui/ai/use-throttled-text.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/ai"},{"name":"form-kit","type":"registry:ui","title":"Form Kit","description":"All form-related components: input, textarea, checkbox, radio, select, switch, progress, form controls.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/input","@constructive/textarea","@constructive/checkbox","@constructive/checkbox-group","@constructive/radio-group","@constructive/switch","@constructive/select","@constructive/progress","@constructive/form","@constructive/form-control","@constructive/input-group","@constructive/field","@constructive/label","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/form-kit"},{"name":"overlay-kit","type":"registry:ui","title":"Overlay Kit","description":"All overlay components: dialog, sheet, drawer, popover, tooltip, dropdown menu, alert dialog.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/dialog","@constructive/sheet","@constructive/drawer","@constructive/popover","@constructive/tooltip","@constructive/dropdown-menu","@constructive/alert-dialog","@constructive/command","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/overlay-kit"},{"name":"layout-kit","type":"registry:ui","title":"Layout Kit","description":"Layout and navigation components: tabs, sidebar, collapsible, resizable panels, scroll area, breadcrumb, pagination.","categories":["bundle"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/tabs","@constructive/sidebar","@constructive/collapsible","@constructive/resizable","@constructive/scroll-area","@constructive/breadcrumb","@constructive/pagination","@constructive/separator","@constructive/empty","@constructive/constructive-theme"],"files":[],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/layout-kit"},{"name":"sheets","type":"registry:block","title":"Sheets","description":"A metadata-driven, spreadsheet-grade CRUD grid with accessible DOM cells and adapter-owned data access.","categories":["blocks","data"],"docs":"Install the complete source-owned grid with `pnpm dlx shadcn@latest add @constructive/sheets`, then import `Sheets`, `SheetsProvider`, and the adapter contracts from `@/components/ui/sheets`. The copied source depends on `@constructive-io/data` for the current `_meta` contract and runtime GraphQL operations; your host remains responsible for its endpoint, session, and RLS-aware execution boundary.","dependencies":["@constructive-io/data@^0.5.0","@internationalized/date","@remixicon/react","@tanstack/react-form","@tanstack/react-query","@tanstack/react-table@9.0.0-beta.58","@tanstack/react-virtual","@types/leaflet","clsx","graphql","inflekt","leaflet","lucide-react","motion","react-aria-components","react-leaflet","tailwind-merge","zod","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/calendar-rac","@constructive/card","@constructive/checkbox","@constructive/collapsible","@constructive/dropdown-menu","@constructive/form-control","@constructive/input","@constructive/input-group","@constructive/label","@constructive/pagination","@constructive/popover","@constructive/progressive-blur","@constructive/scroll-area","@constructive/select","@constructive/skeleton","@constructive/tabs","@constructive/textarea","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/sheets/adapter/postgraphile-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/postgraphile-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/adapter/use-sheets-adapter.ts","type":"registry:lib","target":"@ui/sheets/adapter/use-sheets-adapter.ts"},{"path":"registry/constructive/blocks/sheets/advanced.ts","type":"registry:lib","target":"@ui/sheets/advanced.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-execute.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-execute.ts"},{"path":"registry/constructive/blocks/sheets/auth/auth-gate.tsx","type":"registry:component","target":"@ui/sheets/auth/auth-gate.tsx"},{"path":"registry/constructive/blocks/sheets/auth/auth-types.ts","type":"registry:lib","target":"@ui/sheets/auth/auth-types.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/index.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-forgot-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-forgot-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-login.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-login.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-register.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-register.ts"},{"path":"registry/constructive/blocks/sheets/auth/hooks/use-reset-password.ts","type":"registry:lib","target":"@ui/sheets/auth/hooks/use-reset-password.ts"},{"path":"registry/constructive/blocks/sheets/auth/index.ts","type":"registry:lib","target":"@ui/sheets/auth/index.ts"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-error-alert.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-error-alert.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-loading-button.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-loading-button.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-header.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-header.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/auth-screen-layout.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/auth-screen-layout.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/forgot-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/forgot-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/form-field.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/form-field.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/login-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/login-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/password-strength.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/password-strength.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/register-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/register-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/ui/reset-password-form.tsx","type":"registry:component","target":"@ui/sheets/auth/ui/reset-password-form.tsx"},{"path":"registry/constructive/blocks/sheets/auth/utils/auth-errors.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/auth-errors.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/schemas.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/schemas.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/token-store.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/token-store.ts"},{"path":"registry/constructive/blocks/sheets/auth/utils/validators.ts","type":"registry:lib","target":"@ui/sheets/auth/utils/validators.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/badge-tones.ts","type":"registry:lib","target":"@ui/sheets/cell-model/badge-tones.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-props.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-props.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/cell-slots.ts","type":"registry:lib","target":"@ui/sheets/cell-model/cell-slots.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/create-sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/create-sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/badges.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/badges.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/boolean.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/boolean.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/datetime.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/datetime.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/geometry.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/geometry.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/image.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/image.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/interval.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/interval.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/number.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/number.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/relation.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/relation.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/text.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/text.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/types.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/types.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/factories/uri.ts","type":"registry:lib","target":"@ui/sheets/cell-model/factories/uri.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/image-cache.ts","type":"registry:lib","target":"@ui/sheets/cell-model/image-cache.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/sheets-cell.ts","type":"registry:lib","target":"@ui/sheets/cell-model/sheets-cell.ts"},{"path":"registry/constructive/blocks/sheets/cell-model/views/badges-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/badges-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/boolean-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/boolean-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/datetime-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/datetime-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/draft-action-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/draft-action-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/geometry-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/geometry-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/image-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/image-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/interval-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/interval-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/loading-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/loading-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/number-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/number-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/relation-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/relation-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/text-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/text-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-model/views/uri-view.tsx","type":"registry:component","target":"@ui/sheets/cell-model/views/uri-view.tsx"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry-defaults.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry-defaults.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-groups.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-groups.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-registry.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-registry.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/cell-type-resolver.ts","type":"registry:lib","target":"@ui/sheets/cell-types/cell-type-resolver.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/define-cell-type.ts","type":"registry:lib","target":"@ui/sheets/cell-types/define-cell-type.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/type-mapping.ts","type":"registry:lib","target":"@ui/sheets/cell-types/type-mapping.ts"},{"path":"registry/constructive/blocks/sheets/cell-types/types.ts","type":"registry:lib","target":"@ui/sheets/cell-types/types.ts"},{"path":"registry/constructive/blocks/sheets/commands/context.ts","type":"registry:lib","target":"@ui/sheets/commands/context.ts"},{"path":"registry/constructive/blocks/sheets/commands/dispatch.ts","type":"registry:lib","target":"@ui/sheets/commands/dispatch.ts"},{"path":"registry/constructive/blocks/sheets/commands/index.ts","type":"registry:lib","target":"@ui/sheets/commands/index.ts"},{"path":"registry/constructive/blocks/sheets/commands/keybinding.ts","type":"registry:lib","target":"@ui/sheets/commands/keybinding.ts"},{"path":"registry/constructive/blocks/sheets/commands/keymap.ts","type":"registry:lib","target":"@ui/sheets/commands/keymap.ts"},{"path":"registry/constructive/blocks/sheets/commands/registry.ts","type":"registry:lib","target":"@ui/sheets/commands/registry.ts"},{"path":"registry/constructive/blocks/sheets/commands/types.ts","type":"registry:lib","target":"@ui/sheets/commands/types.ts"},{"path":"registry/constructive/blocks/sheets/config/sheets-concurrency.ts","type":"registry:lib","target":"@ui/sheets/config/sheets-concurrency.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-context.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-context.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-execute.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-execute.ts"},{"path":"registry/constructive/blocks/sheets/context/sheets-provider.tsx","type":"registry:component","target":"@ui/sheets/context/sheets-provider.tsx"},{"path":"registry/constructive/blocks/sheets/context/sheets-upload-presigned.ts","type":"registry:lib","target":"@ui/sheets/context/sheets-upload-presigned.ts"},{"path":"registry/constructive/blocks/sheets/forms/form-spec-builder.ts","type":"registry:lib","target":"@ui/sheets/forms/form-spec-builder.ts"},{"path":"registry/constructive/blocks/sheets/forms/index.ts","type":"registry:lib","target":"@ui/sheets/forms/index.ts"},{"path":"registry/constructive/blocks/sheets/forms/metadata-hash.ts","type":"registry:lib","target":"@ui/sheets/forms/metadata-hash.ts"},{"path":"registry/constructive/blocks/sheets/forms/mutations.ts","type":"registry:lib","target":"@ui/sheets/forms/mutations.ts"},{"path":"registry/constructive/blocks/sheets/forms/types.ts","type":"registry:lib","target":"@ui/sheets/forms/types.ts"},{"path":"registry/constructive/blocks/sheets/forms/zod-schema.ts","type":"registry:lib","target":"@ui/sheets/forms/zod-schema.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/edit-intent.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/edit-intent.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-props.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-props.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/editor-registry-dom.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/editors/editor-registry-dom.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/number-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/number-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/text-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/text-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/inline-cell-editor.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/inline-cell-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/overlay-manager.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/overlay/overlay-manager.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/overlay/use-overlay-controller.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/overlay/use-overlay-controller.ts"},{"path":"registry/constructive/blocks/sheets/grid-dom/sheets-cell-host.tsx","type":"registry:component","target":"@ui/sheets/grid-dom/sheets-cell-host.tsx"},{"path":"registry/constructive/blocks/sheets/grid-dom/use-sheets-content.ts","type":"registry:lib","target":"@ui/sheets/grid-dom/use-sheets-content.ts"},{"path":"registry/constructive/blocks/sheets/grid/cell-routing.ts","type":"registry:lib","target":"@ui/sheets/grid/cell-routing.ts"},{"path":"registry/constructive/blocks/sheets/grid/draft-types.ts","type":"registry:lib","target":"@ui/sheets/grid/draft-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/array-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/array-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/date-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/date-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/editor-focus-trap.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/editor-focus-trap.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/geometry-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/geometry-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/image-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/image-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/inet-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/inet-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/interval-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/interval-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/json-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/json-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-presets.ts","type":"registry:lib","target":"@ui/sheets/grid/editors/overlay-presets.ts"},{"path":"registry/constructive/blocks/sheets/grid/editors/overlay-viewport-guard.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/overlay-viewport-guard.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/relation-record-tooltip.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/relation-record-tooltip.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/tsvector-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/tsvector-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/upload-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/upload-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/editors/url-editor.tsx","type":"registry:component","target":"@ui/sheets/grid/editors/url-editor.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/dock-status-bar.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/dock-status-bar.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/editor-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/editor-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-context.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/feedback-context.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/feedback-reducer.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/feedback-reducer.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/floating-status.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/floating-status.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/index.ts","type":"registry:lib","target":"@ui/sheets/grid/feedback/index.ts"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-boundary.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-boundary.tsx"},{"path":"registry/constructive/blocks/sheets/grid/feedback/sheets-error-state.tsx","type":"registry:component","target":"@ui/sheets/grid/feedback/sheets-error-state.tsx"},{"path":"registry/constructive/blocks/sheets/grid/filter-operators.ts","type":"registry:lib","target":"@ui/sheets/grid/filter-operators.ts"},{"path":"registry/constructive/blocks/sheets/grid/grid-cell-types.ts","type":"registry:lib","target":"@ui/sheets/grid/grid-cell-types.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-batch-commit.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-batch-commit.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-cell-editing.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-cell-editing.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-rows.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-rows.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-draft-submission.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-draft-submission.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-filter-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-filter-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-operations.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-operations.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-selection.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-selection.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-grid-state.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-grid-state.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-infinite-grid-data.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-infinite-grid-data.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-load-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-load-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-paginate-grid.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-paginate-grid.ts"},{"path":"registry/constructive/blocks/sheets/grid/hooks/use-undo-redo.ts","type":"registry:lib","target":"@ui/sheets/grid/hooks/use-undo-redo.ts"},{"path":"registry/constructive/blocks/sheets/grid/row-model.ts","type":"registry:lib","target":"@ui/sheets/grid/row-model.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.constants.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.constants.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.context-menu.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.context-menu.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.controls.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.controls.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.formatters.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.formatters.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.pagination.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.pagination.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.table-selector.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.table-selector.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.theme.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.theme.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.tsx","type":"registry:component","target":"@ui/sheets/grid/sheets.tsx"},{"path":"registry/constructive/blocks/sheets/grid/sheets.types.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.types.ts"},{"path":"registry/constructive/blocks/sheets/grid/sheets.utils.ts","type":"registry:lib","target":"@ui/sheets/grid/sheets.utils.ts"},{"path":"registry/constructive/blocks/sheets/grid/use-sheets.ts","type":"registry:lib","target":"@ui/sheets/grid/use-sheets.ts"},{"path":"registry/constructive/blocks/sheets/hooks/orderby-enum-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/orderby-enum-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/query-keys.ts","type":"registry:lib","target":"@ui/sheets/hooks/query-keys.ts"},{"path":"registry/constructive/blocks/sheets/hooks/relation-field-resolution.ts","type":"registry:lib","target":"@ui/sheets/hooks/relation-field-resolution.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-columns.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-columns.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-relation-metadata-cache.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-relation-metadata-cache.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-infinite-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-infinite-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-meta.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-meta.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table-cursor.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table-cursor.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-table.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-table.ts"},{"path":"registry/constructive/blocks/sheets/hooks/use-sheets-upload.ts","type":"registry:lib","target":"@ui/sheets/hooks/use-sheets-upload.ts"},{"path":"registry/constructive/blocks/sheets/index.ts","type":"registry:lib","target":"@ui/sheets/index.ts"},{"path":"registry/constructive/blocks/sheets/row-identity.ts","type":"registry:lib","target":"@ui/sheets/row-identity.ts"},{"path":"registry/constructive/blocks/sheets/selection/cell-extract.ts","type":"registry:lib","target":"@ui/sheets/selection/cell-extract.ts"},{"path":"registry/constructive/blocks/sheets/selection/fill.ts","type":"registry:lib","target":"@ui/sheets/selection/fill.ts"},{"path":"registry/constructive/blocks/sheets/selection/range-set.ts","type":"registry:lib","target":"@ui/sheets/selection/range-set.ts"},{"path":"registry/constructive/blocks/sheets/selection/selection-model.ts","type":"registry:lib","target":"@ui/sheets/selection/selection-model.ts"},{"path":"registry/constructive/blocks/sheets/selection/tsv.ts","type":"registry:lib","target":"@ui/sheets/selection/tsv.ts"},{"path":"registry/constructive/blocks/sheets/store/draft-rows-slice.ts","type":"registry:lib","target":"@ui/sheets/store/draft-rows-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/relation-info-slice.ts","type":"registry:lib","target":"@ui/sheets/store/relation-info-slice.ts"},{"path":"registry/constructive/blocks/sheets/store/sheets-store.ts","type":"registry:lib","target":"@ui/sheets/store/sheets-store.ts"},{"path":"registry/constructive/blocks/sheets/table/features.ts","type":"registry:lib","target":"@ui/sheets/table/features.ts"},{"path":"registry/constructive/blocks/sheets/table/grid-viewport.tsx","type":"registry:component","target":"@ui/sheets/table/grid-viewport.tsx"},{"path":"registry/constructive/blocks/sheets/table/use-sheets-table-instance.ts","type":"registry:lib","target":"@ui/sheets/table/use-sheets-table-instance.ts"},{"path":"registry/constructive/blocks/sheets/utils/cn.ts","type":"registry:lib","target":"@ui/sheets/utils/cn.ts"},{"path":"registry/constructive/blocks/sheets/utils/file.utils.ts","type":"registry:lib","target":"@ui/sheets/utils/file.utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/image-with-fallback.tsx","type":"registry:component","target":"@ui/sheets/utils/image-with-fallback.tsx"},{"path":"registry/constructive/blocks/sheets/utils/map-picker.tsx","type":"registry:component","target":"@ui/sheets/utils/map-picker.tsx"},{"path":"registry/constructive/blocks/sheets/utils/motion-config.ts","type":"registry:lib","target":"@ui/sheets/utils/motion-config.ts"},{"path":"registry/constructive/blocks/sheets/utils/relation-utils.ts","type":"registry:lib","target":"@ui/sheets/utils/relation-utils.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-i18n.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-i18n.ts"},{"path":"registry/constructive/blocks/sheets/utils/sheets-logger.ts","type":"registry:lib","target":"@ui/sheets/utils/sheets-logger.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-color-scheme.ts","type":"registry:lib","target":"@ui/sheets/utils/use-color-scheme.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-image-status.ts","type":"registry:lib","target":"@ui/sheets/utils/use-image-status.ts"},{"path":"registry/constructive/blocks/sheets/utils/use-resize-observer.ts","type":"registry:lib","target":"@ui/sheets/utils/use-resize-observer.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/sheets"},{"name":"schema-builder","type":"registry:block","title":"Schema Builder","description":"An adapter-driven PostgreSQL schema editor for tables, fields, relationships, indexes, and RLS policies.","categories":["blocks","schema"],"docs":"Install the complete source-owned editor with `pnpm dlx shadcn@latest add @constructive/schema-builder`, then import `SchemaBuilder` and `defineSchemaBuilderAdapter` from `@/components/schema-builder`. The host supplies its generated-SDK adapter, control-plane scope, navigation, preferences, and invalidation behavior; the block never owns backend endpoints or credentials.","dependencies":["@constructive-io/data@^0.5.0","@dnd-kit/core","@dnd-kit/utilities","@fluentui/react-context-selector","@pgsql/types@17.6.2","@remixicon/react","@tanstack/react-query","clsx","lucide-react","motion","node-type-registry@^1.11.0","pg-ast@2.11.3","tailwind-merge","zustand"],"devDependencies":[],"registryDependencies":["@constructive/alert-dialog","@constructive/button","@constructive/checkbox","@constructive/collapsible","@constructive/combobox","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/input-group","@constructive/label","@constructive/multi-select","@constructive/progressive-blur","@constructive/responsive-diagram","@constructive/scroll-area","@constructive/select","@constructive/stack","@constructive/stepper","@constructive/switch","@constructive/tabs","@constructive/toast","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/schema-builder/compat/admin-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/admin-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/auth-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/auth-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/block-config.tsx","type":"registry:component","target":"@components/schema-builder/compat/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/compat/generated-types.ts","type":"registry:lib","target":"@components/schema-builder/compat/generated-types.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/modules-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/modules-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/relation-provisions.ts","type":"registry:lib","target":"@components/schema-builder/compat/relation-provisions.ts"},{"path":"registry/constructive/blocks/schema-builder/compat/schema-builder-sdk.ts","type":"registry:lib","target":"@components/schema-builder/compat/schema-builder-sdk.ts"},{"path":"registry/constructive/blocks/schema-builder/components/schema-builder.tsx","type":"registry:component","target":"@components/schema-builder/components/schema-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/context.tsx","type":"registry:component","target":"@components/schema-builder/core/context.tsx"},{"path":"registry/constructive/blocks/schema-builder/core/index.ts","type":"registry:lib","target":"@components/schema-builder/core/index.ts"},{"path":"registry/constructive/blocks/schema-builder/core/mutation.ts","type":"registry:lib","target":"@components/schema-builder/core/mutation.ts"},{"path":"registry/constructive/blocks/schema-builder/core/query.ts","type":"registry:lib","target":"@components/schema-builder/core/query.ts"},{"path":"registry/constructive/blocks/schema-builder/core/store.ts","type":"registry:lib","target":"@components/schema-builder/core/store.ts"},{"path":"registry/constructive/blocks/schema-builder/fields/index.ts","type":"registry:lib","target":"@components/schema-builder/fields/index.ts"},{"path":"registry/constructive/blocks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/lib/utils.ts","type":"registry:lib","target":"@components/schema-builder/lib/utils.ts"},{"path":"registry/constructive/blocks/schema-builder/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/app-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/app-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/databases/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/databases/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/composite-policy-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/condition-builder/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-icons.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-diagram/svg-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/components/policies/policy-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/schemas/schema-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/base-state-display.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/shared/empty-state-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/skeletons/index.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/components/table-editor/delete-confirm-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/context/block-config.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/context/block-config.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/constants/membership-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/mutation-input.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/data/policy-provisioning.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/auth-error-handler.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/dashboard/dashboard-query-keys.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/database-shared-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/modules/invalidate-database-entities.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/parse-list-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/policies/use-database-policies.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/decimal-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-constraints-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/field-type-mapper.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/transformers/transformers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-accessible-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-constraints.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-database-tables.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-schema-builder-selectors.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/hooks/schema-builder/use-user-databases.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/gql/type-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/keyboard-activation.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/motion/motion-config.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/add-policies-to-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/ast-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/policy-type-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/provision-helpers.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/policies/rls-parser.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/common-constraint-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/constraint-mapping.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/field-type-registry.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/schema-conversion.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/schema/types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/schema/types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/stack/card-widths.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/lib/types/cell-types.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/app-store.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/app-store.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/preferences-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/preferences-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-core/store/schema-slice.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-core/store/schema-slice.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/add-field-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/constraint-controls.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type-icon.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/draggable-field-type.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-list-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/fields-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/table-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library-rail.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/types-library.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/use-field-dnd.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-fields/components/table-editor/validation-rules-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-fields/lib/gql/hooks/schema-builder/use-field-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/index-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-indexes/components/table-editor/indexes/indexes-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-indexes/lib/gql/hooks/schema-builder/use-index-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-condition-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/composite-policy-builder.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/flat-condition-list.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/composite-policy-builder/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/multi-value-field-editor.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/access-control-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/advanced-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/auto-generated-fields-info.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/dynamic-form-field.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-config-form/policy-config-form.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-content.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-adapters.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagram-primitives.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-allow-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-app-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-composite-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-deny-all-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-any-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-direct-owner-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-org-hierarchy-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-publishable-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-entity-membership-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-related-member-list-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-dark.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/authz-temporal-light.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/generated/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-diagram/policy-diagram.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-hooks.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/policy-know-more-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/policies/use-crud-policy-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policies-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-edit-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-operation-group.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/policy-pill.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/components/table-editor/policies/use-policy-edit-state.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-policies/components/tables/create-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-create-policy-field.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/policies/use-permissions.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-create-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-policies/lib/gql/hooks/schema-builder/use-table-grants.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-connectors.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagram-themes.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-diagrams.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-empty-state.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-type-selector.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationship-utils.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-relationships/components/table-editor/relationships/relationships-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relation-provision.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-relationships/lib/gql/hooks/schema-builder/use-relationship-mutations.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/schemas/schema-builder-sidebar.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/no-table-selected-view.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/table-editor/table-metadata-section.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/delete-table-dialog.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder-tables/components/tables/rename-table-card.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-delete-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts","type":"registry:lib","target":"@components/schema-builder/schema/schema-builder-tables/lib/gql/hooks/schema-builder/use-update-table.ts"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/client-only.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/client-only.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schema-builder-header.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schema-builder-header.tsx"},{"path":"registry/constructive/blocks/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx","type":"registry:component","target":"@components/schema-builder/schema/schema-builder/components/schemas/schemas-route.tsx"},{"path":"registry/constructive/blocks/schema-builder/tables/index.ts","type":"registry:lib","target":"@components/schema-builder/tables/index.ts"},{"path":"registry/constructive/blocks/schema-builder/types.ts","type":"registry:lib","target":"@components/schema-builder/types.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/schema-builder"},{"name":"billing-contracts","type":"registry:lib","title":"Billing Contracts","description":"Provider-neutral billing DTOs, arbitrary-precision formatters, open-status presentation maps, and explicit resource states shared by every customer billing block.","categories":["blocks","billing"],"docs":"## Usage\n\nInstall this item when building a custom billing composition. It defines the shared resource states, account references, money values, allowances, plans, subscriptions, usage, credits, activity, messages, and formatting options used by the billing blocks.\n\n```ts\nimport type { BillingPlan, BillingResource } from '@/blocks/billing/billing-contracts/billing-contracts';\n\nconst plans: BillingResource = {\n status: 'ready',\n quality: 'authoritative',\n asOf: '2026-07-20T12:00:00.000Z',\n data: [{\n id: 'growth',\n name: 'Growth',\n prices: [{\n kind: 'fixed',\n id: 'growth-monthly',\n interval: 'month',\n money: { amountMinor: '4900', currency: 'USD' }\n }]\n }]\n};\n```\n\nKeep quantities, limits, deltas, and minor-unit money as decimal strings so large values retain their precision. Supply an explicit locale and time zone to the formatters, keep each record's currency, and use the explicit contact-sales, unlimited, uninitialized, and unknown variants when they apply.","dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/billing/billing-contracts/billing-contracts.ts","type":"registry:lib","target":"src/blocks/billing/billing-contracts/billing-contracts.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-contracts"},{"name":"billing-ui","type":"registry:lib","title":"Billing UI Helpers","description":"Shared formatting and presentation helpers used by the customer billing blocks.","categories":["blocks","billing"],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/billing-contracts","@constructive/cn"],"files":[{"path":"registry/constructive/blocks/billing/billing-ui/billing-ui.tsx","type":"registry:lib","target":"src/blocks/billing/billing-ui/billing-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-ui"},{"name":"billing-pricing-table","type":"registry:block","title":"Billing Pricing Table","description":"Responsive plan comparison with controlled interval selection, fixed and contact-sales pricing, current and featured states, and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a plan resource, account context, formatting options, a controlled billing interval, and the actions you want to show.\n\n```tsx\nimport { BillingPricingTable } from '@/blocks/billing/billing-pricing-table/billing-pricing-table';\n\n openPlanSelection({ planId, priceId, account })}\n onContactSales={({ planId, account }) => openSalesRequest({ planId, account })}\n/>\n```\n\nFixed prices use minor-unit decimal strings and the currency on each record. Use `BillingPrice.kind = 'contact_sales'` for custom pricing. Missing callbacks remove their actions, rejected promises appear next to the action, and resolved promises leave the selected plan state under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-pricing-table/billing-pricing-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/billing-pricing-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-pricing-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-pricing-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-pricing-table"},{"name":"billing-subscription-card","type":"registry:block","title":"Billing Subscription Card","description":"Current-plan summary with independent subscription, provider, and payment status plus exact lifecycle dates and optional actions.","categories":["blocks","billing"],"docs":"## Usage\n\nPass the current plan together with any payment and provider states you want to show. Add only the actions that make sense in your billing flow.\n\n```tsx\nimport { BillingSubscriptionCard } from '@/blocks/billing/billing-subscription-card/billing-subscription-card';\n\n openSubscriptionSettings(subscriptionId, account)}\n/>\n```\n\nOnly `renewsAt` is labelled “Renews”; `endsAt` is always labelled “Ends.” Status strings are open, unknown values render neutrally, and missing callbacks hide their controls.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-subscription-card/billing-subscription-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/billing-subscription-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-subscription-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-subscription-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-subscription-card"},{"name":"billing-entitlements-list","type":"registry:block","title":"Billing Entitlements List","description":"Structured display of plan feature flags, caps, discrete quotas, meter allowances, and neutral unknown values.","categories":["blocks","billing"],"docs":"## Usage\n\nPass each entitlement with a semantic kind so features, caps, quotas, and metered allowances keep their distinct meaning.\n\n```tsx\nimport { BillingEntitlementsList } from '@/blocks/billing/billing-entitlements-list/billing-entitlements-list';\n\n\n```\n\nUse explicit `unlimited`, `uninitialized`, and `unknown` variants. Unknown values stay visible with a neutral presentation, and message overrides let you adapt the labels without changing the data model.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/billing-entitlements-list.tsx"},{"path":"registry/constructive/blocks/billing/billing-entitlements-list/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-entitlements-list/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-entitlements-list"},{"name":"billing-usage-overview","type":"registry:block","title":"Billing Usage Overview","description":"Current-period usage with quota, boolean, unlimited, uninitialized, exhausted, overage, category-pool, and universal-pool states.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a current-period usage snapshot and nest child meters beneath category or universal pools when credits are shared.\n\n```tsx\nimport { BillingUsageOverview } from '@/blocks/billing/billing-usage-overview/billing-usage-overview';\n\n openUsageHistory(meterSlug)}\n onBuyCredits={(meterSlug) => openCreditPurchase(meterSlug)}\n/>\n```\n\nCategory and universal pools stay nested so their application order remains clear. Progress caps visually at 100 percent while text and accessible values preserve the actual used, allowance, and overage values. Actions disappear when their callbacks are absent.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-overview/billing-usage-overview.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/billing-usage-overview.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-overview/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-overview/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-usage-overview"},{"name":"billing-credits-card","type":"registry:block","title":"Billing Credits Card","description":"Available credits grouped by compatible meter and unit with permanent, period, rollover, expiring, and unknown lot semantics.","categories":["blocks","billing"],"docs":"## Usage\n\nPass available balances and their credit lots while keeping each meter and unit independent.\n\n```tsx\nimport { BillingCreditsCard } from '@/blocks/billing/billing-credits-card/billing-credits-card';\n\n\n```\n\nKeep incompatible meters and units in separate balance groups. Credit lots show the current grant makeup, while `billing-activity-table` provides a chronological view of grants, usage, adjustments, rollover, and expiration.","dependencies":["lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/collapsible","@constructive/progress","@constructive/skeleton","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-credits-card/billing-credits-card.tsx","type":"registry:component","target":"src/blocks/billing/billing-credits-card/billing-credits-card.tsx"},{"path":"registry/constructive/blocks/billing/billing-credits-card/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-credits-card/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-credits-card"},{"name":"billing-usage-history","type":"registry:block","title":"Billing Usage History","description":"Accessible, table-first period history with controlled meter, period, and pagination filters plus explicit quality labels.","categories":["blocks","billing"],"docs":"## Usage\n\nPass a page of usage periods and control the meter, period, and pagination values when you provide their callbacks.\n\n```tsx\nimport { BillingUsageHistory } from '@/blocks/billing/billing-usage-history/billing-usage-history';\n\n\n```\n\nCredits and overage columns appear only when their values are marked as confirmed. Quality labels remain visible on each period, and the table keeps pagination and filter changes under your control.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-usage-history/billing-usage-history.tsx","type":"registry:component","target":"src/blocks/billing/billing-usage-history/billing-usage-history.tsx"},{"path":"registry/constructive/blocks/billing/billing-usage-history/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-usage-history/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-usage-history"},{"name":"billing-activity-table","type":"registry:block","title":"Billing Activity Table","description":"Paginated ledger activity with controlled filters, semantic class/type presentation, and a titled metadata detail sheet.","categories":["blocks","billing"],"docs":"## Usage\n\nPass ledger class and entry type with each activity entry so labels and badge tones describe the event itself.\n\n```tsx\nimport { BillingActivityTable } from '@/blocks/billing/billing-activity-table/billing-activity-table';\n\n\n```\n\nA positive delta can represent consumption and a negative delta can represent release or reset, so presentation derives from `ledgerClass` and `entryType` rather than the sign. Unknown values remain neutral, and JSON-safe metadata opens in a titled detail sheet.","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-contracts","@constructive/billing-ui","@constructive/button","@constructive/card","@constructive/cn","@constructive/field","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/sheet","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-activity-table/billing-activity-table.tsx","type":"registry:component","target":"src/blocks/billing/billing-activity-table/billing-activity-table.tsx"},{"path":"registry/constructive/blocks/billing/billing-activity-table/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-activity-table/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-activity-table"},{"name":"billing-settings-page","type":"registry:block","title":"Billing Settings Page","description":"Router-neutral Overview, Usage, and Plans composition that keeps subscription, usage, credits, entitlements, history, activity, and pricing failures isolated.","categories":["blocks","billing"],"docs":"## Usage\n\nPass one account together with independent resources and actions. Use `section` and `onSectionChange` to synchronize navigation, or `defaultSection` for local state. The page renders its own heading by default; set `showHeader={false}` when the surrounding document already provides it.\n\n```tsx\nimport { BillingSettingsPage } from '@/blocks/billing/billing-settings-page/billing-settings-page';\n\n\n```\n\nEach resource renders its own loading, empty, error, ready, and quality state, so one unavailable section never replaces the whole page. Controlled filters and actions are forwarded to their matching leaf blocks.","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/billing-activity-table","@constructive/billing-contracts","@constructive/billing-credits-card","@constructive/billing-entitlements-list","@constructive/billing-pricing-table","@constructive/billing-subscription-card","@constructive/billing-usage-history","@constructive/billing-usage-overview","@constructive/cn","@constructive/separator","@constructive/tabs","@constructive/tooltip","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/billing/billing-settings-page/billing-settings-page.tsx","type":"registry:component","target":"src/blocks/billing/billing-settings-page/billing-settings-page.tsx"},{"path":"registry/constructive/blocks/billing/billing-settings-page/messages.ts","type":"registry:component","target":"src/blocks/billing/billing-settings-page/messages.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/billing-settings-page"},{"name":"command-palette","type":"registry:block","title":"Command Palette","description":"Framework-neutral command discovery with page-scoped registration, structured shortcuts, multi-step flows, and cancellable background tasks.","categories":["blocks","application-shell"],"docs":"## Usage\n\nCreate one registry for the application, adapt navigation at the host boundary, and render the palette near the root layout. Pages can register commands while mounted with `usePageCommands`.\n\n```tsx\nimport { createCommandRegistry, kbd } from '@constructive-io/command-palette';\nimport { CommandPalette } from '@/blocks/command-palette/command-palette';\n\nconst registry = createCommandRegistry({\n groups: [{ id: 'navigation', label: 'Navigation', priority: 1 }],\n commands: [{\n id: 'settings',\n label: 'Open settings',\n type: 'navigation',\n group: 'navigation',\n href: '/settings',\n shortcut: kbd(',', 'mod')\n }]\n});\n\n router.push(href)} />;\n```\n\nThe installed block owns presentation and keyboard interaction. The headless package owns command registration, execution, multi-step state, and background-task lifecycle. Route authorization, action permissions, errors, and business workflows remain the host application's responsibility.","dependencies":["@constructive-io/command-palette@^0.4.0","lucide-react","motion"],"devDependencies":[],"registryDependencies":["@constructive/badge","@constructive/button","@constructive/cn","@constructive/command","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/command-palette/command-palette.tsx","type":"registry:component","target":"src/blocks/command-palette/command-palette.tsx"},{"path":"registry/constructive/blocks/command-palette/kbd-shortcut.tsx","type":"registry:component","target":"src/blocks/command-palette/kbd-shortcut.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/multi-step-view.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/multi-step-view.tsx"},{"path":"registry/constructive/blocks/command-palette/multi-step/step-indicator.tsx","type":"registry:component","target":"src/blocks/command-palette/multi-step/step-indicator.tsx"},{"path":"registry/constructive/blocks/command-palette/background/background-task-stack.tsx","type":"registry:component","target":"src/blocks/command-palette/background/background-task-stack.tsx"},{"path":"registry/constructive/blocks/command-palette/background/inline-task-bar.tsx","type":"registry:component","target":"src/blocks/command-palette/background/inline-task-bar.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-card.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-card.tsx"},{"path":"registry/constructive/blocks/command-palette/background/task-icons.tsx","type":"registry:component","target":"src/blocks/command-palette/background/task-icons.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/command-palette"},{"name":"pack-foundation","type":"registry:lib","title":"Feature Pack Foundation","description":"Provider-neutral resource, action-policy, error, loading, empty, and status contracts shared by Constructive feature packs.","categories":[],"docs":null,"dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/empty","@constructive/skeleton"],"files":[{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/shared/feature-pack-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/shared/feature-pack-ui.tsx","type":"registry:component","target":"src/blocks/feature-packs/shared/feature-pack-ui.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/pack-foundation"},{"name":"console-runtime","type":"registry:lib","title":"Console Runtime","description":"Endpoint, session, transport, cache partitioning, and adapter contracts for identity-scoped Constructive consoles.","categories":[],"docs":null,"dependencies":[],"devDependencies":[],"registryDependencies":[],"files":[{"path":"registry/constructive/blocks/console-runtime/capabilities.ts","type":"registry:lib","target":"src/blocks/console-runtime/capabilities.ts"},{"path":"registry/constructive/blocks/console-runtime/endpoints.ts","type":"registry:lib","target":"src/blocks/console-runtime/endpoints.ts"},{"path":"registry/constructive/blocks/console-runtime/feature-adapter.ts","type":"registry:lib","target":"src/blocks/console-runtime/feature-adapter.ts"},{"path":"registry/constructive/blocks/console-runtime/index.ts","type":"registry:lib","target":"src/blocks/console-runtime/index.ts"},{"path":"registry/constructive/blocks/console-runtime/session.ts","type":"registry:lib","target":"src/blocks/console-runtime/session.ts"},{"path":"registry/constructive/blocks/console-runtime/standalone-session.ts","type":"registry:lib","target":"src/blocks/console-runtime/standalone-session.ts"},{"path":"registry/constructive/blocks/console-runtime/transport.ts","type":"registry:lib","target":"src/blocks/console-runtime/transport.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-runtime"},{"name":"console-feature-catalog","type":"registry:lib","title":"Console Feature Catalog","description":"Validated feature-pack capability manifests and stable backend preset profiles.","categories":[],"docs":null,"dependencies":["zod"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime"],"files":[{"path":"registry/constructive/feature-packs/capabilities.ts","type":"registry:lib","target":"src/feature-packs/capabilities.ts"},{"path":"registry/constructive/feature-packs/catalog.ts","type":"registry:lib","target":"src/feature-packs/catalog.ts"},{"path":"registry/constructive/feature-packs/catalog-validation.ts","type":"registry:lib","target":"src/feature-packs/catalog-validation.ts"},{"path":"registry/constructive/feature-packs/index.ts","type":"registry:lib","target":"src/feature-packs/index.ts"},{"path":"registry/constructive/feature-packs/manifest.ts","type":"registry:lib","target":"src/feature-packs/manifest.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-feature-catalog"},{"name":"console-kit-core","type":"registry:block","title":"Constructive Console Kit Core","description":"The leaf-independent Console Kit shell, runtime, discovery, and single modular Zustand store.","categories":[],"docs":"`console-kit-core` installed the shell, runtime, semantic routing, callback boundary, and one per-instance modular Zustand store. Core intentionally includes no feature view, so add selected `console-module-*` items.\n\nDegraded states: explicit endpoint, current `_meta`, introspection, capability, and adapter evidence fail closed independently; installation never grants authority.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":["@constructive-io/data@^0.5.0","@tanstack/react-query","graphql","lucide-react","zustand"],"devDependencies":[],"registryDependencies":["@constructive/console-runtime","@constructive/console-feature-catalog","@constructive/alert","@constructive/app-bar","@constructive/app-shell","@constructive/badge","@constructive/button","@constructive/cn","@constructive/pack-foundation","@constructive/popover","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/feature-module.ts","type":"registry:lib","target":"src/blocks/console-kit/feature-module.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-routes.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-routes.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-contracts.ts","type":"registry:lib","target":"src/blocks/console-kit/console-kit-contracts.ts"},{"path":"registry/constructive/blocks/console-kit/console-connection-menu.tsx","type":"registry:component","target":"src/blocks/console-kit/console-connection-menu.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit-runtime.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-runtime.tsx"},{"path":"registry/constructive/blocks/console-kit/use-latest-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/use-latest-callback.ts"},{"path":"registry/constructive/blocks/console-kit/console-kit-core.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit-core.tsx"},{"path":"registry/constructive/blocks/console-kit/console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-adapter-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-adapter-utils.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-capabilities.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-capabilities.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-callback.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-callback.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-console-kit.tsx","type":"registry:component","target":"src/blocks/console-kit/constructive/constructive-console-kit.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-graphql.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-graphql.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/constructive-meta-utils.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/constructive-meta-utils.ts"},{"path":"registry/constructive/blocks/console-kit/store/adapter-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/adapter-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/context-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/context-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/endpoint-capability-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/endpoint-capability-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/navigation-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/navigation-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/runtime-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/runtime-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/session-slice.ts","type":"registry:lib","target":"src/blocks/console-kit/store/session-slice.ts"},{"path":"registry/constructive/blocks/console-kit/store/console-kit-store.tsx","type":"registry:component","target":"src/blocks/console-kit/store/console-kit-store.tsx"},{"path":"registry/constructive/blocks/console-kit/store/index.ts","type":"registry:lib","target":"src/blocks/console-kit/store/index.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-kit-core"},{"name":"feature-pack-data","type":"registry:block","title":"Data Feature Pack","description":"A current-_meta-only application data explorer with application-table filtering and spreadsheet CRUD.","categories":[],"docs":"`feature-pack-data` installed a provider-neutral view and `.constructive/feature-packs/data.json`. Import from `@/blocks/feature-packs/data/data-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-data` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host owns Sheets state and endpoint binding; incompatible metadata stays explicit, and PostgreSQL privileges and RLS decide every query and mutation.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":["@constructive-io/data@^0.5.0","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/sheets","@constructive/alert","@constructive/button","@constructive/card","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/data/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/data.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-data"},{"name":"console-module-data","type":"registry:block","title":"Data Console Module","description":"Console Kit navigation, capability discovery, and tenant runtime binding for the Data feature pack.","categories":[],"docs":"`console-module-data` installed Console Kit core, the provider-neutral data view, and its Constructive integration. Import from `@/blocks/feature-packs/data/data-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A missing or incompatible data endpoint, current _meta contract, introspection result, or application table scope keeps Data unavailable; RLS remains authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/data/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-data","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/sheets","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/data/data-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/data/data-console-module.tsx"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-data"},{"name":"feature-pack-auth","type":"registry:block","title":"Authentication Feature Pack","description":"Provider-neutral public authentication flows and personal account/session management.","categories":[],"docs":"`feature-pack-auth` installed a provider-neutral view and `.constructive/feature-packs/auth.json`. Import from `@/blocks/feature-packs/auth/auth-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-auth` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Unsupported policy grants or callbacks stay absent, provider failures remain explicit, and callback credentials never enter the view.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/field","@constructive/input","@constructive/input-group","@constructive/separator","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-entry-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-entry-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-challenge-panel.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-challenge-panel.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-account-view.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-account-view.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-password-policy.ts","type":"registry:lib","target":"src/blocks/feature-packs/auth/auth-password-policy.ts"},{"path":"registry/constructive/blocks/feature-packs/auth/auth-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/auth/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/auth.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-auth"},{"name":"console-module-auth","type":"registry:block","title":"Authentication Console Module","description":"Console Kit session flow, capability discovery, and Constructive adapter for the Authentication feature pack.","categories":[],"docs":"`console-module-auth` installed Console Kit core, the provider-neutral auth view, and its Constructive integration. Import from `@/blocks/feature-packs/auth/auth-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Auth requires complete public session, credential, and password flows; pass csrfTokenProvider when required, and keep callback credentials outside Zustand.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/auth/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-auth","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/auth/auth-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/auth/auth-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/auth-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/auth-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-auth"},{"name":"feature-pack-users","type":"registry:block","title":"App access Feature Pack","description":"App access governance with member lifecycle controls, invitations, access profiles, direct and effective permissions, and new-member defaults.","categories":[],"docs":"`feature-pack-users` installed a provider-neutral view and `.constructive/feature-packs/users.json`. Import from `@/blocks/feature-packs/users/users-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-users` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources or callbacks stay unavailable, while row policy, PostgreSQL privileges, RLS, and final-owner constraints decide mutations.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/input-group","@constructive/select","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/users/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/users.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-users"},{"name":"console-module-users","type":"registry:block","title":"App access Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the App access feature pack.","categories":[],"docs":"`console-module-users` installed Console Kit core, the provider-neutral users view, and its Constructive integration. Import from `@/blocks/feature-packs/users/users-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: App access requires a compatible admin contract, and every control still depends on pack policy, adapter support, row policy, PostgreSQL privileges, and RLS.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/users/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-users","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/users/users-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/users/users-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/users-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/users-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-users"},{"name":"feature-pack-organizations","type":"registry:block","title":"Organizations Feature Pack","description":"Complete tenant administration for selection, member governance, invitations, profiles, permissions, defaults, hierarchy, settings, principals, and API keys.","categories":[],"docs":"`feature-pack-organizations` installed a provider-neutral view and `.constructive/feature-packs/organizations.json`. Import from `@/blocks/feature-packs/organizations/organizations-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-organizations` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: When the active organization is missing or does not match the host-provided list, the view selects the first available organization. It never infers a principal, policy grant, or mutation authority; missing resources and callbacks stay unavailable, while PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert-dialog","@constructive/avatar","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/empty","@constructive/field","@constructive/input","@constructive/select","@constructive/switch","@constructive/table","@constructive/tabs","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-contracts.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-contracts.ts"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-access-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-access-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-operation-panels.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-operation-panels.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/organizations.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-organizations"},{"name":"console-module-organizations","type":"registry:block","title":"Organizations Console Module","description":"Console Kit discovery, metadata resolution, and Constructive adapter for the Organizations feature pack.","categories":[],"docs":"`console-module-organizations` installed Console Kit core, the provider-neutral organizations view, and its Constructive integration. Import from `@/blocks/feature-packs/organizations/organizations-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Incomplete metadata or ambiguous organization and principal scope fails closed; every mutation remains policy and RLS constrained.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/organizations/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-organizations","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/pack-foundation","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/organizations/organizations-console-module.tsx"},{"path":"registry/constructive/blocks/feature-packs/organizations/organizations-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/organizations/organizations-meta-contract.ts"},{"path":"registry/constructive/blocks/console-kit/constructive/organizations-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/organizations-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-organizations"},{"name":"feature-pack-storage","type":"registry:block","title":"Storage Feature Pack","description":"Bucket, folder, object, upload, download, and deletion surfaces backed by injected storage actions.","categories":[],"docs":"`feature-pack-storage` installed a provider-neutral view and `.constructive/feature-packs/storage.json`. Import from `@/blocks/feature-packs/storage/storage-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-storage` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: An object endpoint alone does not prove bucket or file operations; incomplete and read-only contracts keep write controls hidden.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/cn","@constructive/dialog","@constructive/dropdown-menu","@constructive/field","@constructive/input","@constructive/radio-group","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/storage/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/storage.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-storage"},{"name":"console-module-storage","type":"registry:block","title":"Storage Console Module","description":"Console Kit discovery, metadata resolution, adapter, and modular state slice for the Storage feature pack.","categories":[],"docs":"`console-module-storage` installed Console Kit core, the provider-neutral storage view, and its Constructive integration. Import from `@/blocks/feature-packs/storage/storage-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: The objects endpoint alone is insufficient; incomplete contracts stay unavailable and read-only contracts hide write controls.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/storage/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-storage","@constructive/console-feature-catalog","@constructive/console-runtime","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/storage/storage-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/storage-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/storage-adapter.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-console-slice.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-console-slice.ts"},{"path":"registry/constructive/blocks/feature-packs/storage/storage-meta-contract.ts","type":"registry:lib","target":"src/blocks/feature-packs/storage/storage-meta-contract.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-storage"},{"name":"feature-pack-billing","type":"registry:block","title":"Billing Feature Pack","description":"The feature-pack root for Constructive billing plans, subscriptions, usage, entitlements, credits, and activity.","categories":[],"docs":"`feature-pack-billing` installed a provider-neutral view and `.constructive/feature-packs/billing.json`. Import from `@/blocks/feature-packs/billing/billing-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-billing` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: Missing resources remain independent degraded states, and unavailable provider callbacks stay absent.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/billing-settings-page","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/billing/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/billing.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-billing"},{"name":"console-module-billing","type":"registry:block","title":"Billing Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Billing feature pack.","categories":[],"docs":"`console-module-billing` installed Console Kit core, the provider-neutral billing view, and its Constructive integration. Import from `@/blocks/feature-packs/billing/billing-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: Missing plans or subscriptions keeps Billing unavailable, missing optional meters produces a partial view, and provider writes require an explicit adapter action.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/billing/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-billing","@constructive/billing-contracts","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/billing/billing-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/billing/billing-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/billing-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/billing-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-billing"},{"name":"feature-pack-notifications","type":"registry:block","title":"Notifications Feature Pack","description":"An application notification inbox with read, open, and deletion actions.","categories":[],"docs":"`feature-pack-notifications` installed a provider-neutral view and `.constructive/feature-packs/notifications.json`. Import from `@/blocks/feature-packs/notifications/notifications-feature-pack`. The host must supply the view resource, policy, and actions; add `console-module-notifications` when Console Kit should own discovery and Constructive integration.\n\nDegraded states: The host must provide an authoritative inbox, policy, and callbacks; absent operations stay unavailable and mutations require a refreshed resource.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/pack-foundation","@constructive/alert","@constructive/alert-dialog","@constructive/badge","@constructive/button","@constructive/card","@constructive/separator","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-feature-pack.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-feature-pack.tsx"},{"path":"registry/constructive/blocks/feature-packs/notifications/feature-pack.json","type":"registry:file","target":"~/.constructive/feature-packs/notifications.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/feature-pack-notifications"},{"name":"console-module-notifications","type":"registry:block","title":"Notifications Console Module","description":"Console Kit navigation, capability discovery, and Constructive adapter for the Notifications feature pack.","categories":[],"docs":"`console-module-notifications` installed Console Kit core, the provider-neutral notifications view, and its Constructive integration. Import from `@/blocks/feature-packs/notifications/notifications-console-module` and compose the exported module with `ConstructiveConsoleKitCore`; the install inspector reports the exact import targets and transitive closure.\n\nDegraded states: A backend module record without a reachable public inbox is not capability evidence, and realtime remains unavailable until the complete flow is proven.\n\nGuide: https://constructive-io.github.io/blocks/blocks/features/notifications/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/feature-pack-notifications","@constructive/console-feature-catalog","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/feature-packs/notifications/notifications-console-module.tsx","type":"registry:component","target":"src/blocks/feature-packs/notifications/notifications-console-module.tsx"},{"path":"registry/constructive/blocks/console-kit/constructive/notifications-adapter.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/notifications-adapter.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-module-notifications"},{"name":"preset-auth-hardened","type":"registry:block","title":"Hardened Authentication Preset","description":"Stable Constructive auth-hardened backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-auth-hardened` installed the stable `auth:hardened` composition: Data, Authentication, and App access. Render `AuthHardenedConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: each public endpoint and module fails closed independently, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/auth-hardened-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/auth-hardened-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/auth-hardened.json","type":"registry:file","target":"~/.constructive/feature-packs/auth-hardened.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/preset-auth-hardened"},{"name":"preset-b2b-storage","type":"registry:block","title":"B2B with Storage Preset","description":"Stable Constructive b2b-storage backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-b2b-storage` installed the stable `b2b:storage` composition: Data, Authentication, App access, Organizations, and Storage. Render `B2BStorageConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: stock Storage can remain unavailable when no supported public bucket and file contract is routed; other proven modules continue independently.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/b2b-storage-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/b2b-storage-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/b2b-storage.json","type":"registry:file","target":"~/.constructive/feature-packs/b2b-storage.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/preset-b2b-storage"},{"name":"preset-full","type":"registry:block","title":"Full Preset","description":"Stable Constructive full backend preset mapped to its supported Console Kit modules.","categories":[],"docs":"`preset-full` installed all seven Console modules and the stable Full preset component. Render `FullConsoleKit` with a secret-free tenant descriptor.\n\nDegraded states: installed backend modules do not imply public routes or user authority; Storage, Billing, or Notifications can remain partial or unavailable while other modules continue.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/console-kit-core","@constructive/console-module-data","@constructive/console-module-auth","@constructive/console-module-users","@constructive/console-module-organizations","@constructive/console-module-storage","@constructive/console-module-billing","@constructive/console-module-notifications","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/presets/full-console-kit.tsx","type":"registry:component","target":"src/blocks/presets/full-console-kit.tsx"},{"path":"registry/constructive/blocks/presets/full.json","type":"registry:file","target":"~/.constructive/feature-packs/full.json"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/preset-full"},{"name":"console-kit-nextjs","type":"registry:block","title":"Constructive Console Kit for Next.js","description":"A full-page Next.js tenant console with semantic routing, auth, dynamic endpoint discovery, first-party adapters, and every feature pack.","categories":[],"docs":"`console-kit-nextjs` installed the full Next.js tenant console. Render `ConstructiveConsoleKit` with a secret-free database ID and explicit semantic endpoint map; use presets or selected Console modules for smaller compositions.\n\nDegraded states: every endpoint and module fails closed independently, diagnostics are development-only, credentials never enter Zustand, and PostgreSQL privileges and RLS remain authoritative.\n\nGuide: https://constructive-io.github.io/blocks/blocks/console-kit/","dependencies":[],"devDependencies":[],"registryDependencies":["@constructive/preset-full","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/console-kit/constructive/index.ts","type":"registry:lib","target":"src/blocks/console-kit/constructive/index.ts"}],"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/console-kit-nextjs"},{"name":"app-kit-core","type":"registry:block","title":"Constructive App Kit Core","description":"Typed, server-safe application resources, queries, actions, scope partitioning, schema validation, and opt-in client runtime.","categories":[],"docs":"Install this root to define Constructive-native application contracts without choosing a view family. Import the client runtime explicitly when a connected view needs TanStack Query. Credentials never belong in definitions or AppScope.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query"],"devDependencies":[],"registryDependencies":["@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/core/contracts.ts","type":"registry:lib","target":"src/blocks/app-kit/core/contracts.ts"},{"path":"registry/constructive/blocks/app-kit/core/navigation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/navigation.ts"},{"path":"registry/constructive/blocks/app-kit/core/schema-validation.ts","type":"registry:lib","target":"src/blocks/app-kit/core/schema-validation.ts"},{"path":"registry/constructive/blocks/app-kit/core/scope.ts","type":"registry:lib","target":"src/blocks/app-kit/core/scope.ts"},{"path":"registry/constructive/blocks/app-kit/core/runtime.tsx","type":"registry:component","target":"src/blocks/app-kit/core/runtime.tsx"},{"path":"registry/constructive/blocks/app-kit/core/index.ts","type":"registry:lib","target":"src/blocks/app-kit/core/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"runtime","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal"],"intents":["define-resources","load-data","execute-actions","validate-schema"],"capabilities":["resource-contracts","query-contracts","action-contracts","scoped-cache","schema-validation","navigation-adapters"],"slots":["record-opener","url-state-adapter"],"events":["query-settled","action-settled","scope-changed"],"compatibleWith":["app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/app-kit-core"},{"name":"app-kit-data","type":"registry:block","title":"Constructive App Kit Data Views","description":"Controlled and connected tables, lists, cards, record details, forms, relations, collection controls, and action bars.","categories":[],"docs":"Use this root for record and collection applications. Loaders stay server-driven, relation pickers search remotely, ambiguous identities fail read-only, and every view distinguishes loading, empty, denied, and error states.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/react-query","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/checkbox","@constructive/combobox","@constructive/empty","@constructive/field","@constructive/input","@constructive/pagination","@constructive/select","@constructive/separator","@constructive/skeleton","@constructive/switch","@constructive/table","@constructive/textarea","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/data/types.ts","type":"registry:lib","target":"src/blocks/app-kit/data/types.ts"},{"path":"registry/constructive/blocks/app-kit/data/states.tsx","type":"registry:component","target":"src/blocks/app-kit/data/states.tsx"},{"path":"registry/constructive/blocks/app-kit/data/controls.tsx","type":"registry:component","target":"src/blocks/app-kit/data/controls.tsx"},{"path":"registry/constructive/blocks/app-kit/data/collections.tsx","type":"registry:component","target":"src/blocks/app-kit/data/collections.tsx"},{"path":"registry/constructive/blocks/app-kit/data/detail-form.tsx","type":"registry:component","target":"src/blocks/app-kit/data/detail-form.tsx"},{"path":"registry/constructive/blocks/app-kit/data/relations.tsx","type":"registry:component","target":"src/blocks/app-kit/data/relations.tsx"},{"path":"registry/constructive/blocks/app-kit/data/action-bars.tsx","type":"registry:component","target":"src/blocks/app-kit/data/action-bars.tsx"},{"path":"registry/constructive/blocks/app-kit/data/index.ts","type":"registry:lib","target":"src/blocks/app-kit/data/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["record","collection"],"intents":["browse","search","filter","sort","edit","relate","bulk-act"],"capabilities":["table","list","cards","record-detail","generated-form","relation-picker","relation-panel","pagination","bulk-actions"],"slots":["cell-renderer","record-renderer","form-field","toolbar","footer"],"events":["state-change","open-record","submit","link-record","unlink-record","bulk-action"],"compatibleWith":["app-kit-core","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/app-kit-data"},{"name":"app-kit-board","type":"registry:block","title":"Constructive App Kit Board","description":"A typed controlled board and connected resource wrapper with semantic moves, keyboard alternatives, and mutation rollback.","categories":[],"docs":"Board movement is disabled until the host supplies an explicit semantic action. Pointer and keyboard moves use the same action contract, restore focus, and roll back optimistic state on denial or failure.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/card","@constructive/dropdown-menu","@constructive/skeleton","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/board/board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/connected-board.tsx","type":"registry:component","target":"src/blocks/app-kit/board/connected-board.tsx"},{"path":"registry/constructive/blocks/app-kit/board/index.ts","type":"registry:lib","target":"src/blocks/app-kit/board/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["collection","board"],"intents":["plan","prioritize","move-records","inspect"],"capabilities":["board","typed-columns","semantic-move","keyboard-move","optimistic-rollback"],"slots":["card"],"events":["open-record","move-record","move-denied"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-dashboard","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/app-kit-board"},{"name":"app-kit-dashboard","type":"registry:block","title":"Constructive App Kit Dashboard","description":"Explicit analytical widgets and a versioned, replaceable layout store on the accessible SVG and SSR foundation from TanStack Charts.","categories":[],"docs":"Dashboard widgets always use explicit analytical loaders; they never derive totals from a paginated collection page. Runtime customization is limited to an approved typed catalog, while layout persistence is replaceable.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["@tanstack/charts@0.6.4","@tanstack/charts-scales@0.6.4","@tanstack/react-charts@0.6.4","d3-scale@4.0.2","lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/badge","@constructive/button","@constructive/card","@constructive/chart","@constructive/cn","@constructive/dropdown-menu","@constructive/empty","@constructive/skeleton","@constructive/table","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/dashboard/widgets.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/widgets.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/layout-store.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/layout-store.ts"},{"path":"registry/constructive/blocks/app-kit/dashboard/dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/connected-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/connected-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/persisted-dashboard.tsx","type":"registry:component","target":"src/blocks/app-kit/dashboard/persisted-dashboard.tsx"},{"path":"registry/constructive/blocks/app-kit/dashboard/index.ts","type":"registry:lib","target":"src/blocks/app-kit/dashboard/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["aggregate","series","breakdown"],"intents":["monitor","analyze","compare","configure-layout"],"capabilities":["kpi","bar-chart","line-chart","breakdown-table","widget-catalog","layout-store","layout-persistence"],"slots":["widget"],"events":["layout-change"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-calendar","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/app-kit-dashboard"},{"name":"app-kit-calendar","type":"registry:block","title":"Constructive App Kit Calendar","description":"Localized controlled month and agenda views with explicit timezones and connected range-query loading.","categories":[],"docs":"The host owns record opening and editing, while the connected wrapper loads only the visible range. Recurrence, resource scheduling, and drag rescheduling are intentionally outside V1.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-core","@constructive/button","@constructive/cn","@constructive/empty","@constructive/skeleton","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/calendar/calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/connected-calendar.tsx","type":"registry:component","target":"src/blocks/app-kit/calendar/connected-calendar.tsx"},{"path":"registry/constructive/blocks/app-kit/calendar/index.ts","type":"registry:lib","target":"src/blocks/app-kit/calendar/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"view","boundary":"client","provider":"app-kit","dataShapes":["temporal","collection"],"intents":["schedule","browse-by-date","inspect"],"capabilities":["temporal","month","agenda","range-query","localization","timezone"],"events":["range-change","view-change","open-record"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-workflow","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/app-kit-calendar"},{"name":"app-kit-workflow","type":"registry:block","title":"Constructive App Kit Workflow UI","description":"Controlled and connected action surfaces, confirmation and input dialogs, bulk execution, and a multi-step stepper.","categories":[],"docs":"This root composes application and server actions into accessible interaction surfaces; it is not a durable workflow engine. Validation, permission failures, cancellation, and partial errors remain explicit.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/alert-dialog","@constructive/app-kit-core","@constructive/button","@constructive/dialog","@constructive/dropdown-menu","@constructive/separator","@constructive/stepper","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/workflow/actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/connected-actions.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/connected-actions.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/stepper.tsx","type":"registry:component","target":"src/blocks/app-kit/workflow/stepper.tsx"},{"path":"registry/constructive/blocks/app-kit/workflow/index.ts","type":"registry:lib","target":"src/blocks/app-kit/workflow/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"composition","boundary":"client","provider":"app-kit","dataShapes":["record","collection","action-input"],"intents":["execute-action","confirm","collect-input","bulk-execute","guide-steps"],"capabilities":["action-button","action-menu","input-dialog","confirmation-dialog","bulk-execution","stepper"],"slots":["action-input","confirmation-body","step-content"],"events":["action-start","action-settled","step-change","cancel"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-event-studio"]}},"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/app-kit-workflow"},{"name":"app-kit-event-studio","type":"registry:block","title":"Constructive App Kit Event Studio","description":"An opt-in page-scale proof starter combining analytical, collection, board, calendar, relation, form, and action views.","categories":[],"docs":"Event Studio pairs with the supported b2b:storage blueprint recipe and demonstrates explicit analytical loaders, semantic board movement, localized range queries, searchable relations, permission-aware actions, and host-controlled URL state. Supply adapters generated from the final executable GraphQL schema.\n\nGuide: https://constructive-io.github.io/blocks/blocks/app-kit/","dependencies":["lucide-react","zod"],"devDependencies":[],"registryDependencies":["@constructive/alert","@constructive/app-kit-board","@constructive/app-kit-calendar","@constructive/app-kit-core","@constructive/app-kit-dashboard","@constructive/app-kit-data","@constructive/app-kit-workflow","@constructive/badge","@constructive/button","@constructive/dialog","@constructive/tabs","@constructive/constructive-theme"],"files":[{"path":"registry/constructive/blocks/app-kit/event-studio/definitions.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/definitions.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/state.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/state.ts"},{"path":"registry/constructive/blocks/app-kit/event-studio/event-studio.tsx","type":"registry:component","target":"src/blocks/app-kit/event-studio/event-studio.tsx"},{"path":"registry/constructive/blocks/app-kit/event-studio/index.ts","type":"registry:lib","target":"src/blocks/app-kit/event-studio/index.ts"}],"meta":{"constructive":{"version":1,"family":"app-kit","kind":"starter","boundary":"mixed","provider":"app-kit","dataShapes":["record","collection","aggregate","temporal","board"],"intents":["manage-events","analyze","schedule","publish","relate-people","configure-views"],"capabilities":["event-studio","dashboard","collections","record-detail","generated-form","relations","board","calendar","actions","url-state"],"slots":["record-opener","dashboard-layout-store","url-state-adapter"],"events":["view-change","open-record","move-session","publish-session","schedule-session","link-person"],"compatibleWith":["app-kit-core","app-kit-data","app-kit-board","app-kit-dashboard","app-kit-calendar","app-kit-workflow"]}},"installCommand":"pnpm dlx shadcn@4.16.1 add @constructive/app-kit-event-studio"}]}
diff --git a/.agents/skills/constructive-blocks/references/registry-content.v1.json b/.agents/skills/constructive-blocks/references/registry-content.v1.json
index ff1ea31..d1959a5 100644
--- a/.agents/skills/constructive-blocks/references/registry-content.v1.json
+++ b/.agents/skills/constructive-blocks/references/registry-content.v1.json
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"kind": "constructive.blocks-registry-content",
- "sourceCommit": "c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b",
+ "sourceCommit": "1a72e5d95f7ce4a243cd4536ed78c638708d538c",
"recordCount": 371,
"records": [
{
@@ -62,7 +62,7 @@
"registryItem": "app-kit-core",
"path": "registry/constructive/blocks/app-kit/core/contracts.ts",
"type": "registry:lib",
- "contentSha256": "cb61146fb27a67b782a9393f5a00c704a539d0bba10af6cb1266a877633ea5ec"
+ "contentSha256": "5960074760c17abf06d837346e1204cbd98e24134bf6c444711a2456523ab89b"
},
{
"registryItem": "app-kit-core",
@@ -86,7 +86,7 @@
"registryItem": "app-kit-core",
"path": "registry/constructive/blocks/app-kit/core/schema-validation.ts",
"type": "registry:lib",
- "contentSha256": "1dffb89f0a4be4b4ebbf784c5da68194f9e196ebf9caa4f42f624385b619d793"
+ "contentSha256": "cd3363daad4d4ddd38ac00dc4c0aad950b3fb3b60812a1bfeca3bd2bce3eeef6"
},
{
"registryItem": "app-kit-core",
@@ -140,7 +140,7 @@
"registryItem": "app-kit-data",
"path": "registry/constructive/blocks/app-kit/data/collections.tsx",
"type": "registry:component",
- "contentSha256": "b706dcc5ef879df1a3d3da058aae79d32193f59eb6028ccbfc4d1c2a60bb02a2"
+ "contentSha256": "7f3297f770a62de0e28563854bd4545783f917a27d658ae91dcc850eb9fa9785"
},
{
"registryItem": "app-kit-data",
@@ -152,7 +152,7 @@
"registryItem": "app-kit-data",
"path": "registry/constructive/blocks/app-kit/data/detail-form.tsx",
"type": "registry:component",
- "contentSha256": "427073f1bba16b4ee1dc0e5314d3f8fd139abd2c770ffba9dfd189b11fc95c55"
+ "contentSha256": "938a82c12151d23180d5e496dc93831dfd9b33f3edbec7f54a880666fd7c7554"
},
{
"registryItem": "app-kit-data",
@@ -182,7 +182,7 @@
"registryItem": "app-kit-event-studio",
"path": "registry/constructive/blocks/app-kit/event-studio/definitions.ts",
"type": "registry:lib",
- "contentSha256": "fe97707725c449a70c048ecb24951fc50ae32636ed6c4a9ef8cbffe837a546ef"
+ "contentSha256": "fc8f04b58055b763e8342a68058290ee193f352e7bc827cded2cc8772304e360"
},
{
"registryItem": "app-kit-event-studio",
diff --git a/.agents/skills/constructive-blocks/references/runtime-contract.md b/.agents/skills/constructive-blocks/references/runtime-contract.md
index 63f2058..b6ccc24 100644
--- a/.agents/skills/constructive-blocks/references/runtime-contract.md
+++ b/.agents/skills/constructive-blocks/references/runtime-contract.md
@@ -8,6 +8,15 @@ Console runtime, and source limitations. The complete catalog in
is retained only as drift evidence; validated queries apply
`registry.queryOverrides` before returning it.
+## Branch-aware App Kit documentation
+
+Every validated query returns `installability.appKitDocumentation`. Read its
+`authority` before using an exact App Kit API. While
+`publicRegistryReady: false`, authority is `kind: pinned-source`; join its path
+to the exact Blocks checkout only after source preflight verifies the commit and
+SHA-256. The public URL is withheld from query output until authority becomes
+`kind: public-url` after Pages and registry publication are verified.
+
## Surface ownership
| Surface | Installs | Runtime owner |
@@ -510,7 +519,8 @@ generated artifacts.
Every validated query marks `installability.publicInstall` as `blocked` and
`future-only` in this snapshot. Item and plan query surfaces also wrap the
-canonical public command in a status-bearing `publicInstall` object; they never
+canonical `shadcn@latest` public command in a status-bearing `publicInstall`
+object; they never
expose a bare `installCommand`. Do not execute that wrapped command until its
status is `available`. Use only the pinned local workflow below before release.
diff --git a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
index 8a50335..0358734 100644
--- a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
+++ b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.mjs
@@ -25,16 +25,20 @@ const eventStudioBlueprintPath = path.join(
'event-studio-blueprint.json'
);
-const PINNED = Object.freeze({
+export const PINNED = Object.freeze({
repository: 'https://github.com/constructive-io/blocks',
branch: 'feat/app-kit',
- commit: 'c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b',
+ commit: '1a72e5d95f7ce4a243cd4536ed78c638708d538c',
publicationStatus: 'branch-only',
registryNamespace: '@constructive',
registryUrl: 'https://constructive-io.github.io/blocks/r/{name}.json',
registryHomepage: 'https://constructive-io.github.io/blocks',
+ appKitDocsUrl: 'https://constructive-io.github.io/blocks/blocks/app-kit/',
+ appKitDocsPath: 'apps/blocks/src/app/blocks/app-kit/page.tsx',
registrySchema: 'https://ui.shadcn.com/schema/registry.json',
- shadcnVersion: '4.13.1',
+ publicShadcnTag: 'latest',
+ testedShadcnVersion: '4.16.1',
+ workspaceShadcnVersion: '4.13.1',
packageManager: 'pnpm@10.28.0',
nodeEngine: '>=24.0.0',
metaContractVersion: '2026-07',
@@ -103,7 +107,7 @@ export function pinInspectorInstallCommand(command, itemName) {
command === liveCommand,
`${itemName} inspector install command changed from the reviewed latest-version template.`
);
- return `pnpm dlx shadcn@${PINNED.shadcnVersion} add ${PINNED.registryNamespace}/${itemName}`;
+ return `pnpm dlx shadcn@${PINNED.testedShadcnVersion} add ${PINNED.registryNamespace}/${itemName}`;
}
const META_CONTRACT_REQUIREMENTS = {
@@ -345,6 +349,7 @@ const CANONICAL_SOURCE_PATHS = [
'apps/registry/scripts/build.ts',
'packages/ui/registry.json',
'apps/blocks/registry.json',
+ 'apps/blocks/src/app/blocks/app-kit/page.tsx',
'scripts/inspect-console-kit.ts',
'apps/blocks/src/feature-packs/catalog.ts',
'apps/blocks/src/feature-packs/capabilities.ts',
@@ -2029,6 +2034,10 @@ export function assertBriefRoutes(fixture, catalogItems) {
'forbiddenAssumptions'
]) {
assertStringArray(route[field], `${route.id}.${field}`);
+ assert(
+ route[field].length > 0,
+ `${route.id}.${field} must not be empty.`
+ );
}
assert(
typeof route.starterRequested === 'boolean',
@@ -2053,6 +2062,7 @@ export function assertBriefRoutes(fixture, catalogItems) {
route.expectedRoots.every((root) => APP_KIT_ROOT_NAMES.includes(root)),
`${route.id} references an unknown App Kit root.`
);
+ const selectedMetadata = [];
for (const root of route.expectedRoots) {
const catalogItem = catalogByName.get(root);
assert(catalogItem, `${route.id} references App Kit root ${root} absent from the registry catalog.`);
@@ -2061,10 +2071,37 @@ export function assertBriefRoutes(fixture, catalogItems) {
metadata?.family === 'app-kit',
`${route.id} root ${root} is not catalogued in the app-kit family.`
);
+ assertConstructiveRegistryMetadata(
+ metadata,
+ `${route.id} root ${root}.meta.constructive`,
+ root
+ );
assert(
selectsStarter ? metadata.kind === 'starter' : metadata.kind !== 'starter',
`${route.id} root ${root} has incompatible starter metadata.`
);
+ selectedMetadata.push({ root, metadata });
+ }
+ for (const [briefField, metadataField] of [
+ ['dataShapes', 'dataShapes'],
+ ['userIntents', 'intents'],
+ ['capabilities', 'capabilities']
+ ]) {
+ const selectedVocabulary = new Set(
+ selectedMetadata.flatMap(({ metadata }) => metadata[metadataField])
+ );
+ for (const value of route[briefField]) {
+ assert(
+ selectedVocabulary.has(value),
+ `${route.id}.${briefField} value ${value} is not declared by a selected root's meta.constructive.${metadataField}.`
+ );
+ }
+ for (const { root, metadata } of selectedMetadata) {
+ assert(
+ metadata[metadataField].some((value) => route[briefField].includes(value)),
+ `${route.id} root ${root} has no ${briefField} evidence grounded in meta.constructive.${metadataField}.`
+ );
+ }
}
assert(
route.forbiddenRoots.includes('feature-pack-data') &&
@@ -2083,8 +2120,8 @@ export function assertBriefRoutes(fixture, catalogItems) {
}
}
assert(
- cases.get('event-studio-opt-in')?.backendPreset === 'b2b',
- 'Event Studio must pair with the supported b2b preset.'
+ cases.get('event-studio-opt-in')?.backendPreset === 'b2b:storage',
+ 'Event Studio must pair with the supported b2b:storage preset.'
);
return cases;
}
@@ -2732,7 +2769,10 @@ function assertRelease(snapshot, sources) {
assert(snapshot.release.publicRegistryReady === false, 'Public registry must remain branch-only.');
assert(snapshot.release.packageManager === PINNED.packageManager, 'release.packageManager drifted.');
assert(snapshot.release.nodeEngine === PINNED.nodeEngine, 'release.nodeEngine drifted.');
- assert(snapshot.release.shadcnVersion === PINNED.shadcnVersion, 'release.shadcnVersion drifted.');
+ assert(
+ snapshot.release.testedShadcnVersion === PINNED.testedShadcnVersion,
+ 'release.testedShadcnVersion drifted.'
+ );
assert(Array.isArray(snapshot.release.packages), 'release.packages must be an array.');
assert(snapshot.release.packages.length === PACKAGE_RELEASES.length, 'release.packages count drifted.');
for (let index = 0; index < PACKAGE_RELEASES.length; index += 1) {
@@ -2793,7 +2833,7 @@ function assertRelease(snapshot, sources) {
'pnpm --dir pack:local',
'pnpm --dir local:registry',
'python3 -m http.server',
- 'shadcn@4.13.1'
+ 'shadcn@4.16.1'
]) {
assert(commands.includes(required), `Local consumption is missing ${required}.`);
}
@@ -2817,6 +2857,33 @@ function assertRelease(snapshot, sources) {
'pnpm --dir /apps/registry exec shadcn add @constructive/{name} --cwd --yes',
'Local install command template drifted.'
);
+ assert(
+ snapshot.release.localConsumption.testedInstallCommandTemplate ===
+ `pnpm dlx shadcn@${PINNED.testedShadcnVersion} add ${PINNED.registryNamespace}/{name}`,
+ 'Exact tested install command template drifted.'
+ );
+}
+
+function assertAppKitDocumentation(snapshot, sources) {
+ assertObject(snapshot.documentation, 'documentation');
+ assertObject(snapshot.documentation.appKit, 'documentation.appKit');
+ const documentation = snapshot.documentation.appKit;
+ assertObject(documentation.public, 'documentation.appKit.public');
+ assert(
+ documentation.public.url === PINNED.appKitDocsUrl,
+ 'App Kit public documentation URL drifted.'
+ );
+ assert(
+ documentation.public.status ===
+ (snapshot.release.publicRegistryReady ? 'available' : 'future-only'),
+ 'App Kit public documentation status must follow publicRegistryReady.'
+ );
+ assertSourceLink(
+ documentation.pinnedSource,
+ PINNED.appKitDocsPath,
+ sources,
+ 'App Kit pinned documentation source'
+ );
}
function assertMetaAndStandaloneContracts(snapshot, sources) {
@@ -3492,10 +3559,22 @@ export function assertSnapshot(snapshot) {
assertObject(snapshot.registry, 'registry');
assert(snapshot.registry.namespace === PINNED.registryNamespace, 'registry.namespace drifted.');
assert(snapshot.registry.urlTemplate === PINNED.registryUrl, 'registry.urlTemplate drifted.');
- assert(snapshot.registry.shadcnVersion === PINNED.shadcnVersion, 'registry.shadcnVersion drifted.');
assert(
- snapshot.registry.shadcnVersionPolicy === 'exact',
- 'registry.shadcnVersionPolicy must be exact.'
+ snapshot.registry.publicShadcnTag === PINNED.publicShadcnTag,
+ 'registry.publicShadcnTag drifted.'
+ );
+ assert(
+ snapshot.registry.publicInstallCommandTemplate ===
+ `pnpm dlx shadcn@${PINNED.publicShadcnTag} add ${PINNED.registryNamespace}/{name}`,
+ 'registry.publicInstallCommandTemplate drifted.'
+ );
+ assert(
+ snapshot.registry.testedShadcnVersion === PINNED.testedShadcnVersion,
+ 'registry.testedShadcnVersion drifted.'
+ );
+ assert(
+ snapshot.registry.testedShadcnVersionPolicy === 'exact',
+ 'registry.testedShadcnVersionPolicy must be exact.'
);
assert(
!Object.hasOwn(snapshot.registry, 'minimumShadcnVersion'),
@@ -3559,7 +3638,7 @@ export function assertSnapshot(snapshot) {
assertStringArray(item.featurePacks, `${item.name}.featurePacks`);
assertStringArray(item.presetProfiles, `${item.name}.presetProfiles`);
const command =
- `pnpm dlx shadcn@${PINNED.shadcnVersion} add ${PINNED.registryNamespace}/${item.name}`;
+ `pnpm dlx shadcn@${PINNED.testedShadcnVersion} add ${PINNED.registryNamespace}/${item.name}`;
assert(item.installCommand === command, `${item.name} install command drifted.`);
}
for (const packId of PACK_IDS) {
@@ -3626,6 +3705,7 @@ export function assertSnapshot(snapshot) {
);
assertRelease(snapshot, sources);
+ assertAppKitDocumentation(snapshot, sources);
assertExact(
snapshot.adapterContractProfiles,
ADAPTER_CONTRACT_PROFILES,
@@ -3736,7 +3816,7 @@ export function projectRegistryCatalog(registry) {
? {}
: { meta: { constructive } }),
installCommand:
- `pnpm dlx shadcn@${PINNED.shadcnVersion} add ${PINNED.registryNamespace}/${item.name}`
+ `pnpm dlx shadcn@${PINNED.testedShadcnVersion} add ${PINNED.registryNamespace}/${item.name}`
};
});
return {
@@ -3800,7 +3880,7 @@ export function assertRegistryCatalog(catalog, snapshot) {
assertNullableString(file.target, `${item.name} file.target`);
}
const command =
- `pnpm dlx shadcn@${PINNED.shadcnVersion} add ${PINNED.registryNamespace}/${item.name}`;
+ `pnpm dlx shadcn@${PINNED.testedShadcnVersion} add ${PINNED.registryNamespace}/${item.name}`;
assert(item.installCommand === command, `${item.name} catalog install command drifted.`);
for (const dependency of item.registryDependencies) {
if (!dependency.startsWith(`${PINNED.registryNamespace}/`)) continue;
@@ -4318,29 +4398,69 @@ function runtimeStatusForRoot(item, snapshot) {
function publicInstallForCommand(snapshot, command) {
const available = snapshot.release.publicRegistryReady === true;
+ const testedPrefix = `pnpm dlx shadcn@${PINNED.testedShadcnVersion} add `;
+ assert(
+ command.startsWith(testedPrefix),
+ 'Public install projection requires an exact tested shadcn command.'
+ );
+ const publicCommand =
+ `pnpm dlx shadcn@${PINNED.publicShadcnTag} add ${command.slice(testedPrefix.length)}`;
return {
status: available ? 'available' : 'blocked',
availability: available ? 'released' : 'future-only',
- command,
+ command: publicCommand,
reason: available
? null
: 'The pinned Blocks source is branch-only and its public registry artifacts are not released.'
};
}
+function appKitDocumentationForQuery(snapshot) {
+ const documentation = snapshot.documentation.appKit;
+ const available = snapshot.release.publicRegistryReady === true;
+ return {
+ authority: available
+ ? {
+ kind: 'public-url',
+ url: documentation.public.url
+ }
+ : {
+ kind: 'pinned-source',
+ sourceCommit: snapshot.source.commit,
+ path: documentation.pinnedSource.path,
+ sha256: documentation.pinnedSource.sha256
+ },
+ public: {
+ status: available ? 'available' : 'future-only',
+ url: available ? documentation.public.url : null
+ },
+ pinnedSource: {
+ sourceCommit: snapshot.source.commit,
+ path: documentation.pinnedSource.path,
+ sha256: documentation.pinnedSource.sha256
+ }
+ };
+}
+
function installabilityEnvelope(snapshot) {
const local = snapshot.release.localConsumption;
+ const publicAvailable = snapshot.release.publicRegistryReady === true;
return {
releaseStatus: snapshot.release.status,
publicRegistryReady: snapshot.release.publicRegistryReady,
+ appKitDocumentation: appKitDocumentationForQuery(snapshot),
publicInstall: {
- status: 'blocked',
- availability: 'future-only',
- commandTemplate: local.installCommandTemplate,
- reason: 'The pinned Blocks source is branch-only and its public registry artifacts are not released.'
+ status: publicAvailable ? 'available' : 'blocked',
+ availability: publicAvailable ? 'released' : 'future-only',
+ commandTemplate: snapshot.registry.publicInstallCommandTemplate,
+ reason: publicAvailable
+ ? null
+ : 'The pinned Blocks source is branch-only and its public registry artifacts are not released.'
},
pinnedLocalConsumption: {
sourceCommit: snapshot.source.commit,
+ testedShadcnVersion: snapshot.registry.testedShadcnVersion,
+ testedInstallCommandTemplate: local.testedInstallCommandTemplate,
acceptedCheckoutStates: snapshot.source.acceptedCheckoutStates,
workflow: local.bootstrapSequence,
installCommandTemplate: local.localInstallCommandTemplate,
@@ -4391,6 +4511,20 @@ function metaContractForItem(snapshot, itemName) {
return snapshot.metaContract;
}
+function registryDocsForQuery(item, snapshot, docs) {
+ if (
+ snapshot.release.publicRegistryReady === true ||
+ constructiveMetadataForItem(item)?.family !== 'app-kit' ||
+ typeof docs !== 'string'
+ ) {
+ return docs;
+ }
+ return docs.replace(
+ `Guide: ${PINNED.appKitDocsUrl}`,
+ 'Guide: resolve installability.appKitDocumentation.authority from this validated query.'
+ );
+}
+
function registryItemForQuery(item, snapshot) {
const override = registryQueryOverride(snapshot, item.name);
const installRoot = snapshot.items.find(
@@ -4403,13 +4537,14 @@ function registryItemForQuery(item, snapshot) {
reason: override.reason
}]
: [];
+ const docs = override ? override.portableValue : item.docs;
return {
name: item.name,
type: item.type,
title: item.title,
description: item.description,
categories: item.categories,
- docs: override ? override.portableValue : item.docs,
+ docs: registryDocsForQuery(item, snapshot, docs),
dependencies: item.dependencies,
devDependencies: item.devDependencies,
registryDependencies: item.registryDependencies,
@@ -4727,7 +4862,7 @@ function assertLiveRelease(blocksRepo) {
'Blocks registry package.json'
);
assert(
- registryPackage.devDependencies?.shadcn === PINNED.shadcnVersion,
+ registryPackage.devDependencies?.shadcn === PINNED.workspaceShadcnVersion,
'Live shadcn registry dependency drifted.'
);
for (const expected of PACKAGE_RELEASES) {
diff --git a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
index 267e26f..164177c 100644
--- a/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
+++ b/.agents/skills/constructive-blocks/scripts/check-blocks-contract.test.mjs
@@ -26,7 +26,8 @@ import {
} from './check-blocks-contract.mjs';
import {
changedReplacementPaths,
- parseArguments as parseSyncArguments
+ parseArguments as parseSyncArguments,
+ repinContract
} from './sync-blocks-contract.mjs';
const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
@@ -39,6 +40,10 @@ const briefRoutesReference = path.join(
scriptDirectory,
'../references/brief-to-roots.v1.json'
);
+const registryCatalogReference = path.join(
+ scriptDirectory,
+ '../references/registry-catalog.v1.json'
+);
test('transactional Blocks contract synchronizer requires an explicit checkout', () => {
assert.deepEqual(
@@ -46,6 +51,7 @@ test('transactional Blocks contract synchronizer requires an explicit checkout',
{
blocksRepo: '/tmp/blocks',
check: true,
+ repin: false,
refreshPackageResolutions: false,
help: false
}
@@ -58,6 +64,10 @@ test('transactional Blocks contract synchronizer requires an explicit checkout',
]).refreshPackageResolutions,
true
);
+ assert.equal(
+ parseSyncArguments(['--blocks-repo', '/tmp/blocks', '--repin']).repin,
+ true
+ );
assert.throws(
() => parseSyncArguments([]),
/--blocks-repo is required/
@@ -72,6 +82,32 @@ test('transactional Blocks contract synchronizer requires an explicit checkout',
);
});
+test('transactional Blocks contract synchronizer repins only release coordinates', () => {
+ const current = {
+ source: { commit: 'old' },
+ release: {
+ testedShadcnVersion: '0.0.0',
+ localConsumption: { testedInstallCommandTemplate: 'old command' }
+ },
+ registry: { testedShadcnVersion: '0.0.0' },
+ preserved: { value: true }
+ };
+
+ assert.deepEqual(repinContract(current), {
+ source: { commit: '1a72e5d95f7ce4a243cd4536ed78c638708d538c' },
+ release: {
+ testedShadcnVersion: '4.16.1',
+ localConsumption: {
+ testedInstallCommandTemplate:
+ 'pnpm dlx shadcn@4.16.1 add @constructive/{name}'
+ }
+ },
+ registry: { testedShadcnVersion: '4.16.1' },
+ preserved: { value: true }
+ });
+ assert.equal(current.source.commit, 'old');
+});
+
test('synchronizer check mode detects generated artifact drift', () => {
const stageRoot = mkdtempSync(path.join(tmpdir(), 'blocks-contract-stage-'));
const currentRoot = mkdtempSync(path.join(tmpdir(), 'blocks-contract-current-'));
@@ -125,7 +161,7 @@ test('npm dependency requirements preserve exact versions while canonicalizing n
'pnpm dlx shadcn@latest add @constructive/app-kit-data',
'app-kit-data'
),
- 'pnpm dlx shadcn@4.13.1 add @constructive/app-kit-data'
+ 'pnpm dlx shadcn@4.16.1 add @constructive/app-kit-data'
);
assert.throws(
() => pinInspectorInstallCommand(
@@ -137,23 +173,9 @@ test('npm dependency requirements preserve exact versions while canonicalizing n
});
function appKitCatalogFixture() {
- return [
- 'app-kit-core',
- 'app-kit-data',
- 'app-kit-board',
- 'app-kit-dashboard',
- 'app-kit-calendar',
- 'app-kit-workflow',
- 'app-kit-event-studio'
- ].map((name) => ({
- name,
- meta: {
- constructive: {
- family: 'app-kit',
- kind: name === 'app-kit-event-studio' ? 'starter' : 'view'
- }
- }
- }));
+ return JSON.parse(readFileSync(registryCatalogReference, 'utf8')).items.filter(
+ (item) => item.meta?.constructive?.family === 'app-kit'
+ );
}
function runQuery(arguments_) {
@@ -366,6 +388,13 @@ test('loaded catalog backs validated App Kit family and capability queries', ()
'app-kit-event-studio'
]
);
+ for (const item of family.items) {
+ assert.doesNotMatch(
+ item.docs,
+ /constructive-io\.github\.io\/blocks\/blocks\/app-kit/
+ );
+ assert.match(item.docs, /appKitDocumentation\.authority/);
+ }
const temporal = runQuery([
'--list-registry',
'--family',
@@ -439,7 +468,7 @@ test('brief routes select App Kit by shape instead of Sheets, Console, or review
);
assert.equal(
briefRouteById.get('event-studio-opt-in').backendPreset,
- 'b2b'
+ 'b2b:storage'
);
const missingOptIn = structuredClone(briefRoutes);
@@ -449,6 +478,30 @@ test('brief routes select App Kit by shape instead of Sheets, Console, or review
() => assertBriefRoutes(missingOptIn, catalogItems),
/only with explicit starterRequested opt-in/
);
+
+ const unknownCapability = structuredClone(briefRoutes);
+ unknownCapability.cases.find((route) => route.id === 'service-desk')
+ .capabilities.push('spatial');
+ assert.throws(
+ () => assertBriefRoutes(unknownCapability, catalogItems),
+ /capabilities value spatial is not declared by a selected root/
+ );
+
+ const emptyDataShapes = structuredClone(briefRoutes);
+ emptyDataShapes.cases.find((route) => route.id === 'service-desk')
+ .dataShapes = [];
+ assert.throws(
+ () => assertBriefRoutes(emptyDataShapes, catalogItems),
+ /service-desk\.dataShapes must not be empty/
+ );
+
+ const unsupportedDashboard = structuredClone(briefRoutes);
+ unsupportedDashboard.cases.find((route) => route.id === 'service-desk')
+ .expectedRoots.splice(2, 0, 'app-kit-dashboard');
+ assert.throws(
+ () => assertBriefRoutes(unsupportedDashboard, catalogItems),
+ /app-kit-dashboard has no dataShapes evidence grounded in meta\.constructive\.dataShapes/
+ );
});
test('Event Studio remains a public org-scoped blueprint without realtime or raw SQL', () => {
@@ -568,13 +621,20 @@ test('standalone Data conditional configuration remains complete and exact', ()
);
});
-test('the shadcn CLI policy remains an exact pin', () => {
+test('public shadcn latest stays separate from the exact tested CLI version', () => {
const loaded = loadPortableContract();
const mutation = structuredClone(loaded.snapshot);
- mutation.registry.shadcnVersionPolicy = 'minimum';
+ mutation.registry.testedShadcnVersionPolicy = 'minimum';
assert.throws(
() => assertSnapshot(mutation),
- /shadcnVersionPolicy must be exact/
+ /testedShadcnVersionPolicy must be exact/
+ );
+
+ const publicMutation = structuredClone(loaded.snapshot);
+ publicMutation.registry.publicShadcnTag = '4.13.1';
+ assert.throws(
+ () => assertSnapshot(publicMutation),
+ /publicShadcnTag drifted/
);
const legacyMutation = structuredClone(loaded.snapshot);
@@ -585,6 +645,29 @@ test('the shadcn CLI policy remains an exact pin', () => {
);
});
+test('App Kit documentation follows the release gate and pins local source', () => {
+ const loaded = loadPortableContract();
+ assert.equal(loaded.snapshot.documentation.appKit.public.status, 'future-only');
+ assert.equal(
+ loaded.snapshot.documentation.appKit.pinnedSource.path,
+ 'apps/blocks/src/app/blocks/app-kit/page.tsx'
+ );
+
+ const statusMutation = structuredClone(loaded.snapshot);
+ statusMutation.documentation.appKit.public.status = 'available';
+ assert.throws(
+ () => assertSnapshot(statusMutation),
+ /public documentation status must follow publicRegistryReady/
+ );
+
+ const sourceMutation = structuredClone(loaded.snapshot);
+ sourceMutation.documentation.appKit.pinnedSource.path = 'README.md';
+ assert.throws(
+ () => assertSnapshot(sourceMutation),
+ /pinned documentation source\.path drifted/
+ );
+});
+
test('fresh-checkout bootstrap preflights tracked source before generation', () => {
const loaded = loadPortableContract();
const sequence = loaded.snapshot.release.localConsumption.bootstrapSequence;
@@ -736,7 +819,7 @@ test('query mode validates first and is independent of the current directory', (
assert.equal(item.name, 'app-shell');
assert.equal(
item.publicInstall.command,
- 'pnpm dlx shadcn@4.13.1 add @constructive/app-shell'
+ 'pnpm dlx shadcn@latest add @constructive/app-shell'
);
assert.equal(item.publicInstall.status, 'blocked');
assert.equal(item.publicInstall.availability, 'future-only');
@@ -806,11 +889,23 @@ test('every query mode exposes the same branch-only installability gate', () =>
assert.equal(gate.publicInstall.availability, 'future-only');
assert.match(
gate.publicInstall.commandTemplate,
- /shadcn@4\.13\.1 add @constructive\/\{name\}/
+ /shadcn@latest add @constructive\/\{name\}/
+ );
+ assert.equal(gate.appKitDocumentation.authority.kind, 'pinned-source');
+ assert.equal(
+ gate.appKitDocumentation.authority.path,
+ 'apps/blocks/src/app/blocks/app-kit/page.tsx'
);
+ assert.equal(gate.appKitDocumentation.public.status, 'future-only');
+ assert.equal(gate.appKitDocumentation.public.url, null);
assert.equal(
gate.pinnedLocalConsumption.sourceCommit,
- 'c7ad28b5c48bd1f5925f9fc1cd625399038c1f9b'
+ '1a72e5d95f7ce4a243cd4536ed78c638708d538c'
+ );
+ assert.equal(gate.pinnedLocalConsumption.testedShadcnVersion, '4.16.1');
+ assert.match(
+ gate.pinnedLocalConsumption.testedInstallCommandTemplate,
+ /shadcn@4\.16\.1 add @constructive\/\{name\}/
);
assert.equal(
gate.pinnedLocalConsumption.consumerIsolation.required,
@@ -844,7 +939,7 @@ test('query surfaces expose only status-bearing publicInstall commands', () => {
for (const publicInstall of publicInstalls) {
assert.equal(publicInstall.status, 'blocked');
assert.equal(publicInstall.availability, 'future-only');
- assert.match(publicInstall.command, /^pnpm dlx shadcn@4\.13\.1 add @constructive\//);
+ assert.match(publicInstall.command, /^pnpm dlx shadcn@latest add @constructive\//);
assert.match(publicInstall.reason, /branch-only/);
}
for (const item of rootList.items) {
diff --git a/.agents/skills/constructive-blocks/scripts/sync-blocks-contract.mjs b/.agents/skills/constructive-blocks/scripts/sync-blocks-contract.mjs
index fcc1a99..1aa8d85 100644
--- a/.agents/skills/constructive-blocks/scripts/sync-blocks-contract.mjs
+++ b/.agents/skills/constructive-blocks/scripts/sync-blocks-contract.mjs
@@ -12,6 +12,7 @@ import {
assertSnapshot,
collectAttestedExternalPackages,
collectAttestedRegistrySources,
+ PINNED,
pinInspectorInstallCommand,
projectRegistryCatalog,
validateSkillArtifacts
@@ -112,6 +113,7 @@ function assertCleanPinnedCheckout(contract, blocksRepo) {
export function parseArguments(arguments_) {
let blocksRepo = null;
let check = false;
+ let repin = false;
let refreshPackageResolutions = false;
let help = false;
@@ -126,6 +128,9 @@ export function parseArguments(arguments_) {
} else if (argument === '--check') {
if (check) fail('--check may be provided only once.');
check = true;
+ } else if (argument === '--repin') {
+ if (repin) fail('--repin may be provided only once.');
+ repin = true;
} else if (argument === '--refresh-package-resolutions') {
if (refreshPackageResolutions) {
fail('--refresh-package-resolutions may be provided only once.');
@@ -138,7 +143,7 @@ export function parseArguments(arguments_) {
}
}
if (!help && blocksRepo === null) fail('--blocks-repo is required.');
- return { blocksRepo, check, refreshPackageResolutions, help };
+ return { blocksRepo, check, repin, refreshPackageResolutions, help };
}
function usage() {
@@ -148,9 +153,12 @@ function usage() {
'Usage:',
' node sync-blocks-contract.mjs --blocks-repo /absolute/path/to/blocks',
' node sync-blocks-contract.mjs --blocks-repo /absolute/path/to/blocks --check',
+ ' node sync-blocks-contract.mjs --blocks-repo /absolute/path/to/blocks --repin',
' node sync-blocks-contract.mjs --blocks-repo /absolute/path/to/blocks --refresh-package-resolutions',
'',
'The Blocks checkout must be clean and exactly match the already-pinned commit.',
+ '--repin deliberately advances generated artifacts to the checker\'s reviewed',
+ 'commit and exact tested shadcn version before final staged validation.',
'Without --check, generated catalog, plans, content, package snapshot, and',
'attestations replace their checked-in counterparts only after staged validation.',
'--refresh-package-resolutions explicitly queries npm latest releases; without it,',
@@ -158,6 +166,16 @@ function usage() {
].join('\n');
}
+export function repinContract(contract) {
+ const result = structuredClone(contract);
+ result.source.commit = PINNED.commit;
+ result.release.testedShadcnVersion = PINNED.testedShadcnVersion;
+ result.release.localConsumption.testedInstallCommandTemplate =
+ `pnpm dlx shadcn@${PINNED.testedShadcnVersion} add ${PINNED.registryNamespace}/{name}`;
+ result.registry.testedShadcnVersion = PINNED.testedShadcnVersion;
+ return result;
+}
+
function inspectorArguments(blocksRepo, arguments_) {
return ['--dir', blocksRepo, '--silent', 'console-kit:inspect', '--no-build'].concat(arguments_);
}
@@ -382,8 +400,9 @@ async function main() {
return;
}
- const contract = readJson(contractPath, 'install-roots contract');
- assertSnapshot(contract);
+ const currentContract = readJson(contractPath, 'install-roots contract');
+ const contract = options.repin ? repinContract(currentContract) : currentContract;
+ if (!options.repin) assertSnapshot(contract);
assertCleanPinnedCheckout(contract, options.blocksRepo);
run('pnpm', ['--dir', options.blocksRepo, 'build:registry'], 'Building Blocks registry', {
inherit: true
diff --git a/.agents/skills/constructive-features/SKILL.md b/.agents/skills/constructive-features/SKILL.md
index f78bf48..2e1b2d1 100644
--- a/.agents/skills/constructive-features/SKILL.md
+++ b/.agents/skills/constructive-features/SKILL.md
@@ -27,9 +27,10 @@ owns exact roots, dependency closure, runtime contracts, and verification.
4. Activate [`constructive-frontend`](../constructive-frontend/SKILL.md) after
selection when the application needs custom visual composition.
-Use the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-for exact contracts. Do not default to Sheets, Console Kit, a dashboard,
-board, or review queue merely because the domain contains records or statuses.
+Use the branch-aware App Kit documentation authority returned by the validated
+Blocks catalog for exact contracts. Do not default to Sheets, Console Kit, a
+dashboard, board, or review queue merely because the domain contains records or
+statuses.
## Route optional platform capabilities
diff --git a/.agents/skills/constructive-frontend/SKILL.md b/.agents/skills/constructive-frontend/SKILL.md
index bb0868a..62b9eaa 100644
--- a/.agents/skills/constructive-frontend/SKILL.md
+++ b/.agents/skills/constructive-frontend/SKILL.md
@@ -46,7 +46,7 @@ node /absolute/path/to/constructive-skills/.agents/skills/constructive-blocks/sc
Then follow the pinned local-consumption workflow in
[`constructive-blocks/references/runtime-contract.md`](../constructive-blocks/references/runtime-contract.md#pinned-local-consumption-before-release).
It verifies the exact Blocks commit, builds local registries and packages, and
-installs through shadcn `4.13.1` without treating localhost resolutions as
+installs through shadcn `4.16.1` without treating localhost resolutions as
release artifacts. Public registry and package installation becomes valid
only after the Blocks snapshot says `publicRegistryReady: true` and its checker
passes against that released source.
@@ -62,7 +62,7 @@ install contract.
## UI Composition
-Target Next.js 16 App Router with React Server Components, shadcn `4.13.1`,
+Target Next.js 16 App Router with React Server Components, shadcn `4.16.1`,
the `base-nova` style, Base UI primitives, Tailwind CSS v4, and Lucide icons.
Interactive registry components carry `'use client'`; pages and layouts remain
server components until they need browser state. Compose polymorphic Base UI
@@ -86,8 +86,8 @@ relations, actions, aggregates, boards, or time ranges. Read its
[composition](../constructive-blocks/references/app-composition.md),
[resource contract](../constructive-blocks/references/app-resource-contract.md),
and [view patterns](../constructive-blocks/references/app-view-patterns.md), then
-use the [canonical Blocks App Kit docs](https://constructive-io.github.io/blocks/blocks/app-kit/)
-for exact APIs before styling the result.
+use the branch-aware App Kit documentation authority returned by the validated
+Blocks catalog for exact APIs before styling the result.
Use the Data feature pack when the goal is generic application-table
exploration or spreadsheet-style inline CRUD. It owns its separate Sheets
diff --git a/.agents/skills/constructive-frontend/references/ui-foundations.md b/.agents/skills/constructive-frontend/references/ui-foundations.md
index e1625a5..c217fe7 100644
--- a/.agents/skills/constructive-frontend/references/ui-foundations.md
+++ b/.agents/skills/constructive-frontend/references/ui-foundations.md
@@ -1,7 +1,7 @@
# Constructive UI foundations
Build custom UI on the same foundation as the pinned Blocks source: Next.js 16
-App Router, React Server Components, shadcn `4.13.1` with `base-nova`, Base UI,
+App Router, React Server Components, shadcn `4.16.1` with `base-nova`, Base UI,
Tailwind CSS v4, OKLCH semantic tokens, and Lucide icons.
The current UI package and registry are branch-only. Complete the
diff --git a/.agents/skills/constructive-frontend/references/ui-registry.md b/.agents/skills/constructive-frontend/references/ui-registry.md
index fac4d35..0474a3b 100644
--- a/.agents/skills/constructive-frontend/references/ui-registry.md
+++ b/.agents/skills/constructive-frontend/references/ui-registry.md
@@ -24,7 +24,7 @@ node /absolute/path/to/constructive-skills/.agents/skills/constructive-blocks/sc
Run the source preflight, local builds, package registry, block registry, and
consumer verification exactly as documented in
[`runtime-contract.md`](../../constructive-blocks/references/runtime-contract.md#pinned-local-consumption-before-release).
-That workflow uses shadcn `4.13.1`, preserves the consumer's aliases, and keeps
+That workflow uses shadcn `4.16.1`, preserves the consumer's aliases, and keeps
temporary localhost package resolutions out of committed lockfiles.
## Source or package ownership
@@ -44,6 +44,6 @@ also declare current Constructive packages.
Public installation is allowed only when a deliberately updated Blocks
snapshot points to a released commit, sets `publicRegistryReady: true`, and
passes the full checker. At that point, use the exact namespace and
-`installCommand` returned by the validated catalog. Remove local registry
-settings, regenerate the lockfile from public registries, and reject every
-localhost resolution before committing.
+status-bearing `shadcn@latest` `publicInstall.command` returned by the validated
+catalog. Remove local registry settings, regenerate the lockfile from public
+registries, and reject every localhost resolution before committing.