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.