{ "schemaVersion": 1, "name": "geist-nuxt", "repository": "https://github.com/abel-2333-org/geist-nuxt.git", "compatibility": { "nuxt": ">=4.4.0 <5", "nuxtUi": ">=4.9.0 <5", "tailwindcss": ">=4.3.0 <5" }, "externalRequirements": { "packages": { "@iconify-json/lucide": "^1.2.116", "@nuxt/ui": ">=4.9.0 <5", "@vueuse/core": "^14.3.0", "nuxt": ">=4.4.0 <5", "tailwindcss": ">=4.3.0 <5", "vue": "^3.5.39", "vue-router": "^5.1.0" }, "consumerSetup": [ "Wrap the application in UApp.", "Merge the default export from app/config/foundation/app.ts into the consumer app/app.config.ts.", "Merge the default export from app/config/foundation/nuxt.ts into the consumer nuxt.config.ts.", "Use the copied app/assets/css/main.css as the Tailwind, Nuxt UI, and design foundation entry.", "Keep consumer-specific CSS overrides after the foundation declarations in app/assets/css/main.css.", "Keep Nuxt color mode enabled through @nuxt/ui." ] }, "sourceRoots": [ "foundation/assets/css", "foundation/components", "foundation/composables", "foundation/compositions", "foundation/config", "foundation/utils", "kits/api-docs/components", "kits/api-docs/composables", "kits/api-docs/internal", "kits/api-docs/utils" ], "items": [ { "name": "geist-foundation", "type": "registry:style", "title": "Geist foundation runtime", "description": "Geist tokens and non-overwriting Nuxt/App config fragments.", "verification": ["visual", "foundation", "config"], "files": [ { "path": "foundation/assets/css/main.css", "target": "app/assets/css/main.css" }, { "path": "foundation/config/nuxt.ts", "target": "app/config/foundation/nuxt.ts" }, { "path": "foundation/config/app.ts", "target": "app/config/foundation/app.ts" } ] }, { "name": "foundation-use-copy", "type": "registry:hook", "title": "useCopy", "description": "Clipboard state and accessible feedback.", "verification": ["interaction"], "files": [ { "path": "foundation/composables/useCopy.ts", "target": "app/composables/useCopy.ts" } ] }, { "name": "foundation-copy-button", "type": "registry:component", "title": "CopyButton", "description": "Accessible copy-to-clipboard button.", "verification": ["visual", "interaction"], "registryDependencies": ["geist-foundation", "foundation-use-copy"], "files": [ { "path": "foundation/components/CopyButton.vue", "target": "app/components/CopyButton.vue" } ] }, { "name": "foundation-inline-code", "type": "registry:component", "title": "InlineCode", "description": "Geist inline code atom.", "verification": ["visual"], "registryDependencies": ["geist-foundation"], "files": [ { "path": "foundation/components/InlineCode.vue", "target": "app/components/InlineCode.vue" } ] }, { "name": "foundation-inline-markdown", "type": "registry:component", "title": "InlineMarkdown", "description": "Safe inline markdown subset.", "verification": ["visual", "dependency"], "packageDependencies": { "marked": "^17.0.6" }, "registryDependencies": ["geist-foundation", "foundation-inline-code"], "files": [ { "path": "foundation/components/InlineMarkdown.vue", "target": "app/components/InlineMarkdown.vue" }, { "path": "foundation/components/inline-markdown/parse.ts", "target": "app/components/inline-markdown/parse.ts" } ] }, { "name": "foundation-badge-utils", "type": "registry:lib", "title": "Badge utilities", "description": "Semantic badge tone mapping.", "verification": ["visual"], "files": [ { "path": "foundation/utils/badge.ts", "target": "app/utils/badge.ts" } ] }, { "name": "foundation-semantic-badge", "type": "registry:component", "title": "SemanticBadge", "description": "Content-agnostic semantic status badge.", "verification": ["visual"], "registryDependencies": ["geist-foundation", "foundation-badge-utils"], "files": [ { "path": "foundation/components/SemanticBadge.vue", "target": "app/components/SemanticBadge.vue" } ] }, { "name": "foundation-theme-toggle", "type": "registry:component", "title": "ThemeToggle", "description": "Light/dark theme toggle.", "verification": ["visual", "interaction"], "registryDependencies": ["geist-foundation"], "files": [ { "path": "foundation/components/ThemeToggle.vue", "target": "app/components/ThemeToggle.vue" } ] }, { "name": "foundation-annotation-popover", "type": "registry:component", "title": "AnnotationPopover", "description": "Inline annotation trigger anchored to a non-modal popover with hover enhancement and loading/error chrome. Shared label model lives in the auto-imported utils/annotation so every annotation form extends it bare.", "verification": ["visual", "interaction"], "registryDependencies": ["geist-foundation"], "files": [ { "path": "foundation/components/AnnotationPopover.vue", "target": "app/components/AnnotationPopover.vue" }, { "path": "foundation/utils/annotation.ts", "target": "app/utils/annotation.ts" } ] }, { "name": "foundation-use-glossary", "type": "registry:hook", "title": "useGlossary", "description": "Page-scoped glossary provide/inject for TermAnnotation.", "verification": ["interaction"], "files": [ { "path": "foundation/composables/useGlossary.ts", "target": "app/composables/useGlossary.ts" } ] }, { "name": "foundation-term-annotation", "type": "registry:component", "title": "TermAnnotation", "description": "Concept form of the Annotation family: resolves a glossary term id to an inline definition popover, degrading to plain text when unresolved.", "verification": ["visual", "interaction"], "registryDependencies": ["foundation-annotation-popover", "foundation-inline-markdown", "foundation-use-glossary"], "files": [ { "path": "foundation/components/TermAnnotation.vue", "target": "app/components/TermAnnotation.vue" } ] }, { "name": "foundation-doc-annotation", "type": "registry:component", "title": "DocAnnotation", "description": "Doc-preview form of the Annotation family: an internal link whose popover lazily loads a title + summary via a consumer-provided async loader, with error fallback that still navigates.", "verification": ["visual", "interaction"], "registryDependencies": ["foundation-annotation-popover", "foundation-inline-markdown"], "files": [ { "path": "foundation/components/DocAnnotation.vue", "target": "app/components/DocAnnotation.vue" } ] }, { "name": "foundation-breakpoints", "type": "registry:lib", "title": "Geist breakpoints", "description": "Shared responsive breakpoint helpers.", "verification": ["responsive"], "files": [ { "path": "foundation/utils/breakpoints.ts", "target": "app/utils/breakpoints.ts" } ] }, { "name": "foundation-use-split-pane", "type": "registry:hook", "title": "useSplitPane", "description": "Split-pane state, persistence, and input handling.", "verification": ["interaction"], "files": [ { "path": "foundation/composables/useSplitPane.ts", "target": "app/composables/useSplitPane.ts" } ] }, { "name": "foundation-use-breakpoint-gate", "type": "registry:hook", "title": "useBreakpointGate", "description": "SSR-safe breakpoint gate shared by SplitPane and CodeRail.", "verification": ["responsive"], "registryDependencies": ["foundation-breakpoints"], "files": [ { "path": "foundation/composables/useBreakpointGate.ts", "target": "app/composables/useBreakpointGate.ts" } ] }, { "name": "foundation-use-raf-task", "type": "registry:hook", "title": "useRafTask", "description": "Frame-coalesced task scheduling shared by measurement-driven components.", "verification": ["responsive"], "files": [ { "path": "foundation/composables/useRafTask.ts", "target": "app/composables/useRafTask.ts" } ] }, { "name": "foundation-split-pane-handle", "type": "registry:component", "title": "SplitPaneHandle", "description": "Accessible split-pane separator.", "verification": ["visual", "interaction"], "registryDependencies": ["geist-foundation"], "files": [ { "path": "foundation/components/SplitPaneHandle.vue", "target": "app/components/SplitPaneHandle.vue" } ] }, { "name": "foundation-split-pane", "type": "registry:component", "title": "SplitPane", "description": "Responsive draggable two-pane layout primitive.", "verification": ["visual", "interaction", "responsive"], "registryDependencies": ["geist-foundation", "foundation-breakpoints", "foundation-use-breakpoint-gate", "foundation-use-split-pane", "foundation-use-raf-task", "foundation-split-pane-handle"], "files": [ { "path": "foundation/components/SplitPane.vue", "target": "app/components/SplitPane.vue" } ] }, { "name": "foundation-composition-app-header", "type": "registry:block", "title": "AppHeader", "description": "Responsive application header composition.", "verification": ["visual", "responsive"], "registryDependencies": ["geist-foundation", "foundation-theme-toggle"], "files": [ { "path": "foundation/compositions/AppHeader.vue", "target": "app/components/AppHeader.vue" } ] }, { "name": "api-docs-use-code-wrap", "type": "registry:hook", "title": "useCodeWrap", "description": "Persisted code wrapping preference.", "verification": ["interaction"], "files": [ { "path": "kits/api-docs/composables/useCodeWrap.ts", "target": "app/composables/useCodeWrap.ts" } ] }, { "name": "api-docs-use-example-scenario-selection", "type": "registry:hook", "title": "useExampleScenarioSelection", "description": "Controlled and uncontrolled scenario identity selection for API examples.", "verification": ["interaction"], "files": [ { "path": "kits/api-docs/composables/useExampleScenarioSelection.ts", "target": "app/composables/useExampleScenarioSelection.ts" } ] }, { "name": "api-docs-code-block", "type": "registry:component", "title": "CodeBlock", "description": "Structured API code sample with language, wrap, and copy controls.", "verification": ["visual", "interaction", "responsive"], "registryDependencies": ["geist-foundation", "foundation-copy-button", "api-docs-use-code-wrap"], "files": [ { "path": "kits/api-docs/components/CodeBlock.vue", "target": "app/components/CodeBlock.vue" }, { "path": "kits/api-docs/utils/lang-preset.ts", "target": "app/utils/lang-preset.ts" } ] }, { "name": "api-docs-request-example", "type": "registry:component", "title": "RequestExample", "description": "Scenario-aware request example.", "verification": ["visual", "interaction"], "registryDependencies": ["api-docs-code-block", "api-docs-use-example-scenario-selection"], "files": [ { "path": "kits/api-docs/components/RequestExample.vue", "target": "app/components/RequestExample.vue" } ] }, { "name": "api-docs-response-example", "type": "registry:component", "title": "ResponseExample", "description": "Scenario and status-aware response example with explicit body semantics (code, empty, unavailable, file).", "verification": ["visual", "interaction", "responsive"], "registryDependencies": ["api-docs-code-block", "api-docs-use-example-scenario-selection"], "files": [ { "path": "kits/api-docs/components/ResponseExample.vue", "target": "app/components/ResponseExample.vue" } ] }, { "name": "api-docs-lifecycle-badge", "type": "registry:component", "title": "LifecycleBadge", "description": "API lifecycle preset over SemanticBadge.", "verification": ["visual"], "registryDependencies": ["foundation-semantic-badge"], "files": [ { "path": "kits/api-docs/components/LifecycleBadge.vue", "target": "app/components/LifecycleBadge.vue" }, { "path": "kits/api-docs/utils/lifecycle-preset.ts", "target": "app/utils/lifecycle-preset.ts" } ] }, { "name": "api-docs-method-badge", "type": "registry:component", "title": "HttpMethodBadge", "description": "HTTP method preset over SemanticBadge.", "verification": ["visual"], "registryDependencies": ["foundation-semantic-badge"], "files": [ { "path": "kits/api-docs/components/HttpMethodBadge.vue", "target": "app/components/HttpMethodBadge.vue" }, { "path": "kits/api-docs/utils/method-preset.ts", "target": "app/utils/method-preset.ts" } ] }, { "name": "api-docs-enum-table", "type": "registry:component", "title": "EnumTable", "description": "Filterable allowed-values table.", "verification": ["visual", "interaction"], "registryDependencies": ["foundation-inline-code", "foundation-inline-markdown", "foundation-use-raf-task"], "files": [ { "path": "kits/api-docs/components/EnumTable.vue", "target": "app/components/EnumTable.vue" }, { "path": "kits/api-docs/internal/EnumTablePanel.vue", "target": "app/internal/EnumTablePanel.vue" }, { "path": "kits/api-docs/utils/enum.ts", "target": "app/utils/enum.ts" } ] }, { "name": "api-docs-field-group", "type": "registry:component", "title": "FieldGroup", "description": "Semantic field group heading.", "verification": ["visual"], "registryDependencies": ["geist-foundation"], "files": [ { "path": "kits/api-docs/components/FieldGroup.vue", "target": "app/components/FieldGroup.vue" } ] }, { "name": "api-docs-field-item", "type": "registry:component", "title": "FieldItem", "description": "Recursive API schema field row with deep-link handling. An output field may carry `presence` (may be omitted / null / empty, each optionally conditional), rendered as type notation (`name?`, `string | null | \"\"`) plus a presence rule. A field may carry a `value` node (array element / record member / encoded content) rendered by the bundled internal FieldValueStructure; a value node carries its own `presence` (never `optional`). Field-level schema composition (the optional `composition` field) renders when api-docs-schema-composition is also installed.", "verification": ["visual", "interaction", "responsive"], "registryDependencies": ["foundation-inline-code", "foundation-inline-markdown", "foundation-use-copy", "api-docs-enum-table", "api-docs-lifecycle-badge"], "files": [ { "path": "kits/api-docs/components/FieldItem.vue", "target": "app/components/FieldItem.vue" }, { "path": "kits/api-docs/internal/FieldValueRequirements.vue", "target": "app/internal/FieldValueRequirements.vue" }, { "path": "kits/api-docs/internal/FieldValueStructure.vue", "target": "app/internal/FieldValueStructure.vue" }, { "path": "kits/api-docs/composables/useFieldAnchor.ts", "target": "app/composables/useFieldAnchor.ts" }, { "path": "kits/api-docs/utils/field.ts", "target": "app/utils/field.ts" } ] }, { "name": "api-docs-schema-composition", "type": "registry:component", "title": "SchemaComposition", "description": "Faithful oneOf/anyOf/allOf schema composition with discriminator field rows and deep-link reveal.", "verification": ["visual", "interaction"], "registryDependencies": ["api-docs-field-item"], "files": [ { "path": "kits/api-docs/components/SchemaComposition.vue", "target": "app/components/SchemaComposition.vue" } ] }, { "name": "api-docs-field-annotation", "type": "registry:component", "title": "FieldAnnotation", "description": "Field form of the Annotation family: previews a FieldNode summary inline and deep-links into its reference row (same-page via useFieldAnchor, or cross-page via {page}#{path}). Bundles useFieldSource; the FieldNode model and useFieldAnchor arrive through api-docs-field-item.", "verification": ["visual", "interaction"], "registryDependencies": ["api-docs-field-item", "foundation-annotation-popover", "foundation-inline-code", "foundation-inline-markdown"], "files": [ { "path": "kits/api-docs/components/FieldAnnotation.vue", "target": "app/components/FieldAnnotation.vue" }, { "path": "kits/api-docs/composables/useFieldSource.ts", "target": "app/composables/useFieldSource.ts" } ] }, { "name": "api-docs-relation-source-path", "type": "registry:component", "title": "RelationSourcePath", "description": "Resolved request/response field hierarchy for callbacks and next-operation mappings, with same-page reveal/focus navigation, cross-page links, and honest plain-text fallback.", "verification": ["visual", "interaction", "responsive"], "registryDependencies": ["api-docs-field-item"], "files": [ { "path": "kits/api-docs/components/RelationSourcePath.vue", "target": "app/components/RelationSourcePath.vue" } ] }, { "name": "api-docs-event-badge", "type": "registry:component", "title": "WebhookBadge", "description": "Webhook EVENT identity badge, the out-of-band counterpart of HttpMethodBadge.", "verification": ["visual"], "registryDependencies": ["foundation-semantic-badge"], "files": [ { "path": "kits/api-docs/components/WebhookBadge.vue", "target": "app/components/WebhookBadge.vue" } ] }, { "name": "api-docs-lifecycle-notice", "type": "registry:component", "title": "LifecycleNotice", "description": "Operation lifecycle banner sharing the LifecycleBadge preset vocabulary.", "verification": ["visual"], "registryDependencies": ["geist-foundation", "foundation-badge-utils", "api-docs-lifecycle-badge"], "files": [ { "path": "kits/api-docs/components/LifecycleNotice.vue", "target": "app/components/LifecycleNotice.vue" } ] }, { "name": "api-docs-operation-target", "type": "registry:component", "title": "OperationTarget", "description": "Environment host picker with a segmented request address: host and path copy separately, plus a whole-address copy.", "verification": ["visual", "interaction", "responsive"], "registryDependencies": ["geist-foundation", "foundation-copy-button"], "files": [ { "path": "kits/api-docs/components/OperationTarget.vue", "target": "app/components/OperationTarget.vue" } ] }, { "name": "api-docs-operation-header", "type": "registry:component", "title": "OperationHeader", "description": "Identity header for endpoint and webhook operations (badge, identifier, summary, lifecycle, actions).", "verification": ["visual"], "registryDependencies": ["api-docs-method-badge", "api-docs-event-badge", "api-docs-lifecycle-badge"], "files": [ { "path": "kits/api-docs/components/OperationHeader.vue", "target": "app/components/OperationHeader.vue" } ] }, { "name": "api-docs-code-rail", "type": "registry:component", "title": "CodeRail", "description": "Vertical dual-example code rail with content-priority reallocation.", "verification": ["visual", "interaction", "responsive"], "registryDependencies": ["geist-foundation", "foundation-breakpoints", "foundation-use-breakpoint-gate", "foundation-use-split-pane", "foundation-use-raf-task", "foundation-split-pane-handle"], "files": [ { "path": "kits/api-docs/components/CodeRail.vue", "target": "app/components/CodeRail.vue" } ] }, { "name": "api-docs-site-search", "type": "registry:component", "title": "SiteSearch", "description": "Data-agnostic site-wide documentation search command palette.", "packageDependencies": { "fuse.js": "^7.4.2" }, "verification": ["visual", "interaction", "responsive", "dependency"], "registryDependencies": ["api-docs-method-badge"], "files": [ { "path": "kits/api-docs/components/SiteSearch.vue", "target": "app/components/SiteSearch.vue" } ] }, { "name": "api-docs-webhook-protocol", "type": "registry:component", "title": "WebhookProtocol", "description": "Webhook verification, acknowledgement, and delivery protocol facts.", "verification": ["visual", "interaction"], "registryDependencies": ["geist-foundation", "foundation-inline-code", "foundation-inline-markdown", "api-docs-field-group", "api-docs-code-block"], "files": [ { "path": "kits/api-docs/components/WebhookProtocol.vue", "target": "app/components/WebhookProtocol.vue" }, { "path": "kits/api-docs/internal/FactList.vue", "target": "app/internal/FactList.vue" }, { "path": "kits/api-docs/internal/FactRow.vue", "target": "app/internal/FactRow.vue" }, { "path": "kits/api-docs/utils/webhook-protocol.ts", "target": "app/utils/webhook-protocol.ts" } ] }, { "name": "api-docs-sidebar-nav", "type": "registry:component", "title": "SidebarNav", "description": "Searchable, resizable API documentation sidebar with width-aware scenario tags.", "verification": ["visual", "interaction", "responsive"], "registryDependencies": ["geist-foundation", "api-docs-method-badge", "foundation-use-split-pane", "foundation-use-raf-task", "foundation-split-pane-handle"], "files": [ { "path": "kits/api-docs/components/SidebarNav.vue", "target": "app/components/SidebarNav.vue" }, { "path": "kits/api-docs/internal/SidebarScenarioTags.vue", "target": "app/internal/SidebarScenarioTags.vue" } ] } ] }